2021-03-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a test to exercise the crash in webkit.org/b/223417
        https://bugs.webkit.org/show_bug.cgi?id=223485

        Reviewed by Tim Horton.

        Add an API test that performs a hit-test just outside of the bounds of the WKWebView that contains a full-page
        clickable element. This finds the element as the click target, but the hit-tested node is null.

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

2021-03-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Avoid copying item data when iterating in-process display lists
        https://bugs.webkit.org/show_bug.cgi?id=223471

        Reviewed by Simon Fraser.

        Adjust an existing API test that exercises inline display list item validation by assigning a reading client to
        the display list.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):

        Move the `ReadingClient` and `WritingClient` out of the scope of `OutOfLineItemDecodingFailure`, so that the
        other API test (`InlineItemValidationFailure`) can also use it.

2021-03-18  Cameron McCormack  <heycam@apple.com>

        Add another email for myself in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=222700

        Reviewed by Alexey Proskuryakov.

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

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

        [WPE] Bump API version when building with libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=223437

        Reviewed by Adrian Perez de Castro.

        Use WPE_API_DOC_VERSION instead of WPE_API_VERSION.

        * wpe/manifest.txt.in:

2021-03-18  Youenn Fablet  <youenn@apple.com>

        Geolocation API does not work in WKWebView with custom URL scheme handler
        https://bugs.webkit.org/show_bug.cgi?id=222861
        <rdar://problem/75394695>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[GeolocationDelegate setValidationHandler:]):
        (-[GeolocationDelegate _webView:requestGeolocationPermissionForFrame:decisionHandler:]):
        (TEST):

2021-03-18  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL conformance test update script does not use min_version and max_version in all cases
        https://bugs.webkit.org/show_bug.cgi?id=223376

        Reviewed by Kenneth Russell.

        Make the update script respect min_version and max_version when the version is specified
        per test.

        * Scripts/webkitpy/update_webgl_conformance_tests_lib/main.py:
        (_parse_webgl_tests):

2021-03-17  Alex Christensen  <achristensen@webkit.org>

        Make fast/images/missing-content-image-crash.html results consistent with internal build
        https://bugs.webkit.org/show_bug.cgi?id=223399
        <rdar://75443811>

        Reviewed by Darin Adler.

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

2021-03-17  Darin Adler  <darin@apple.com>

        "multile" typo in website and one other place
        https://bugs.webkit.org/show_bug.cgi?id=223213

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm: Fix spelling.

2021-03-17  Matt Lewis  <jlewis3@apple.com>

        Add AppleSilicon and Debug WK2 Support to EWS
        https://bugs.webkit.org/show_bug.cgi?id=223393

        Reviewed by Aakash Jain.

        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * CISupport/ews-build/config.json:

2021-03-17  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Support git-svn in remote mocks
        https://bugs.webkit.org/show_bug.cgi?id=223397
        <rdar://problem/75541426>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.request): Add git-svn tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub._commit_response): Add git-svn tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/svn-repo.json: Add hashes to mock svn repo.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGitHub.test_commit_hash):
        (TestGitHub.test_commit_revision):
        (TestBitBucket.test_commit_hash):
        (TestBitBucket.test_commit_revision):

2021-03-17  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Refactor WKFileUploadPanel to use UniformTypeIdentifiers
        https://bugs.webkit.org/show_bug.cgi?id=223000
        <rdar://problem/75237774>

        Reviewed by Tim Horton.

        Added UIScriptController hooks to retrieve the type identifiers for
        a presented file upload panel.

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

2021-03-17  Amir Mark Jr  <amir_mark@apple.com>

        REGRESSION (r274460): [macOS] TestWebKitAPI.Fullscreen.WKViewDelegate is timing out
        https://bugs.webkit.org/show_bug.cgi?id=223282

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST): Disabling the test until it is resolved

2021-03-17  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Remove code specific to old Buildbot - part 2
        https://bugs.webkit.org/show_bug.cgi?id=222928

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ConfigureBuild.start):

2021-03-17  Alex Christensen  <achristensen@webkit.org>

        Allow UniqueRef to be the value of a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=223240

        Reviewed by Youenn Fablet.

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

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

        Maybe-regression(STP121): window.open flakily returning null
        https://bugs.webkit.org/show_bug.cgi?id=222590
        <rdar://problem/75211786>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::checkFrameLoadStateAndCreateNewPage):

2021-03-17  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Move loadSimulatedRequest API from Private to Public WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=223279
        <rdar://problem/75494316>

        Reviewed by Darin Adler.

        Remove private header now that the declarations are in the standard header.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewLoadAPIs.mm:

2021-03-17  Youenn Fablet  <youenn@apple.com>

        Align device orientation delegate to getUserMedia/geolocation delegates
        https://bugs.webkit.org/show_bug.cgi?id=223247

        Reviewed by Eric Carlson.

        Update code to print frame info origin and update according additional frame info parameter given to shouldAllowDeviceOrientationAndMotionAccess.
        Clear permissions in case test controller changes the device motion permission value.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (-[DeviceOrientationPermissionUIDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        (-[DeviceOrientationPermissionValidationDelegate setValidationHandler:]):
        (-[DeviceOrientationPermissionValidationDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::shouldAllowDeviceOrientationAndMotionAccess):
        (WTR::TestController::handleDeviceOrientationAndMotionAccessRequest):
        (WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/TestController.h:

2021-03-17  Philippe Normand  <pnormand@igalia.com>

        [WPE] Include cog build artefacts in built product archive
        https://bugs.webkit.org/show_bug.cgi?id=217477

        Reviewed by Adrian Perez de Castro.

        Include Cog files in the zip file if they're present, so the nightly runner would be able to
        start Cog instead of the WPE MiniBrowser.

        * CISupport/built-product-archive:
        (createZipFromList):
        (archiveBuiltProduct):

2021-03-16  John Wilander  <wilander@apple.com>

        PCM: Use adoptWK in TestInvocation::didReceiveSynchronousMessageFromInjectedBundle()'s handling of "SetPrivateClickMeasurementAttributionReportURLsForTesting"
        https://bugs.webkit.org/show_bug.cgi?id=223286
        <rdar://problem/75498336>

        Reviewed by Darin Adler.

        See Darin's initial comment here: https://bugs.webkit.org/show_bug.cgi?id=223238#c9

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-03-16  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Save identifiers in commit table
        https://bugs.webkit.org/show_bug.cgi?id=223101
        <rdar://problem/75338338>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (CommitController.register): Accept uploaded new commit objects, continue to return old-style commits.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/upload_controller.py:
        (UploadController.upload): Register commits using the fast path when uploading results.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/upload_controller_unittest.py:
        (UploadControllerTest.test_process): Mock safari and WebKit when processing results.
        (UploadControllerTest.test_process_commit): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context.py:
        (CommitContext.CommitModelMk2): Add new style commit model base.
        (CommitContext.CommitByRef): Sort commits by hash, revision and identifier references.
        (CommitContext.CommitByUuidAscendingMk2): New commit style UUID table.
        (CommitContext.CommitByUuidDescendingMk2): Ditto.
        (CommitContext.__init__): Create new tables.
        (CommitContext.find_commits_by_ref): Search for commits in the new ref table.
        (CommitContext.register): Post-process commits to populate identifier field.
        (CommitContext.register_commit): Only register new-style commits.
        (CommitContext.register_partial_commit): Register new-style commits, allow caller to opt-out of expensive
        Identifier computation.
        (CommitContext.url): Accept old and new style commits.
        (CommitContext.register_commit_with_repo_and_id): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context_unittest.py:
        (CommitContextTest.add_all_commits_to_database): Update commit registration call.
        (CommitContextTest.test_commit_from_stash_repo): Ditto.
        (CommitContextTest.test_commit_from_svn_repo): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory.create): Update commit registration call.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__): commit_context may now post-process uploads.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository.py:
        (Repository.commit): Add call to return new-style commits.
        (StashRepository.commit): Ditto.
        (WebKitRepository.commit): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository_unittest.py:
        (RepositoryTest.test_svn):
        (RepositoryTest.test_ref_svn):
        (RepositoryTest.test_stash):
        (RepositoryTest.test_ref_stash):
        (RepositoryTest.test_colliding_timestamps_stash):
        (RepositoryTest.test_branch_stash):
        (RepositoryTest.test_branch_svn): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/upload_context_unittest.py:
        (UploadContextTest.test_callback):
        (UploadContextTest.test_async_callback):
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit): Handle single email passed to contributor.

2021-03-16  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Allow user to change commit representation
        https://bugs.webkit.org/show_bug.cgi?id=223215
        <rdar://problem/75446602>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.__init__): Add commit representations endpoint.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (CommitController.representations): Add commit representations endpoint.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository.py:
        (Repository.representations): Return prioritized commit representation.
        (StashRepository.representations): Ditto.
        (WebKitRepository.representations): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (Commit.prototype.label): Change the commit representation based on global settings.
        (_CommitBank):
        (_CommitBank.prototype.commitRepresentations): Check the commit representation cookie, then
        the representation endpoint.
        (_CommitBank.prototype.setCommitRepresentation): Set the commit representation cookie.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (CommitRepresentation): Drawer control allowing user to change commit representation for repositories.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/commits.html: Add new control.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/documentation.html: Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/search.html: Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

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

        [macOS] change for the language/subtitle tracks button to use an `NSMenu` instead of web content
        https://bugs.webkit.org/show_bug.cgi?id=223239
        <rdar://problem/75462340>

        Reviewed by Eric Carlson.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didShowContextMenu]):
        (-[TestRunnerWKWebView _didDismissContextMenu]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setDidShowContextMenuCallback): Added.
        (WTR::UIScriptControllerCocoa::setDidDismissContextMenuCallback): Added.
        (WTR::UIScriptControllerCocoa::isShowingContextMenu const): Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::setDidShowContextMenuCallback): Deleted.
        (WTR::UIScriptControllerIOS::setDidDismissContextMenuCallback): Deleted.
        (WTR::UIScriptControllerIOS::isShowingContextMenu const): Deleted.
        Move these methods so they can be used on macOS too.

2021-03-16  Kimmo Kinnunen  <kkinnunen@apple.com>

        Make WebGL conformance test update script more usable and consistent
        https://bugs.webkit.org/show_bug.cgi?id=223112

        Reviewed by Kenneth Russell.

        Moves the script LayoutTests/webgl/generate-webgl-tests over
        unused and stale Tools/Scripts/update-webgl-conformance-tests

        Fixes the script to:
          - to support generation of the test driver .html files with webglVersion=2
          - copy the webgl conformance test files once to webgl/resources/webgl_test_files.
            Previously they were copied twice, 1.0.3/resources/.. and 2.0.0/resources
          - to support copying all the tests at the same time. Previously each
            individual suites (1.0.3, 2.0.0) would be copied
            in different invocations, leading to errors and omissions to run when
            something changes, such as the templates.
          - supports generation of the directories from scratch, so that no stale files
            such as expectations, driver .html files or test suite content is left.
          - automatically filter files that do not need to be copied (deqp/compiler.jar, ...)
          - try to adopt a style somewhat consistent with other WebKit python scripts
          - copy to upcoming 1.0.4 and 2.0.1 instead of old 1.0.3/2.0.0.

        * Scripts/update-webgl-conformance-tests:
        * Scripts/webkitpy/to_be_moved/__init__.py: Removed.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py: Removed.
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py: Removed.
        * Scripts/webkitpy/update_webgl_conformance_tests_lib/main.py: Added.
        (_make_ignore_fnmatch_rule_matcher):
        (_make_ignore_fnmatch_rule_matcher.match_rules):
        (_copy_tree):
        (_WebGLTest):
        (_parse_webgl_tests):
        (_filter_webgl_test_paths_for_suite_version):
        (_generate_webkit_webgl_tests):
        (_find_expectations_for_removed_tests):
        (main):
        * Scripts/webkitpy/update_webgl_conformance_tests_lib/webgl-expectation-template.txt: Renamed from LayoutTests/webgl/resources/webgl-expectation-template.txt.
        * Scripts/webkitpy/update_webgl_conformance_tests_lib/webgl-test-driver-template.html: Renamed from LayoutTests/webgl/resources/webgl-wrapper-template.html.
        * Scripts/webkitpy/update_webgl_conformance_tests_lib/webkit-webgl-test-harness-template.js: Added.
        (window.layoutTestController.window.console.log):
        (window.layoutTestController.window.console.error):
        (list):
        (log):
        (window.webglTestHarness.reportResults):
        (window.webglTestHarness.notifyFinished):

2021-03-16  John Wilander  <wilander@apple.com>

        PCM: Test infrastructure for sending attribution reports to attribution website too
        https://bugs.webkit.org/show_bug.cgi?id=223238
        <rdar://problem/75462031>

        Reviewed by Brent Fulgham.

        setPrivateClickMeasurementAttributionReportURLForTesting() now is named
        setPrivateClickMeasurementAttributionReportURLsForTesting() in the layers that
        eventually reach WebKit::PrivateClickMeasurementManager. It takes two URLs
        attributionReportSourceURL and attributionReportAttributeOnURL and sets them
        in a new struct AttributionReportTestConfig.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateClickMeasurementAttributionReportURLsForTesting):
        (WTR::TestRunner::setPrivateClickMeasurementAttributionReportURLForTesting): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setPrivateClickMeasurementAttributionReportURLsForTesting):
        (WTR::TestController::setPrivateClickMeasurementAttributionReportURLForTesting): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-03-16  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Showing help instead of raising an exception with no command
        https://bugs.webkit.org/show_bug.cgi?id=223235
        <rdar://problem/75480951>

        Reviewed by Ryosuke Niwa.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main):

2021-03-16  Aakash Jain  <aakash_jain@apple.com>

        EWS is not showing filtered errors view
        https://bugs.webkit.org/show_bug.cgi?id=223251

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (BuildLogLineObserver.outLineReceived): Use for loop instead of map.

2021-03-16  Aakash Jain  <aakash_jain@apple.com>

        [ews] Remove old Python 2 related code - part 2
        https://bugs.webkit.org/show_bug.cgi?id=222975

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps_unittest.py:

2021-03-16  Per Arne  <pvollan@apple.com>

        Add signpost for injected bundle creation
        https://bugs.webkit.org/show_bug.cgi?id=223068

        Reviewed by Alex Christensen.

        Add injected bundle signposts to .plist file.

        * Tracing/SystemTracePoints.plist:

2021-03-16  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Decode multiple commit representations
        https://bugs.webkit.org/show_bug.cgi?id=223224
        <rdar://problem/75455129>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit.from_json): Decode old results database style commit representations.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:

2021-03-16  Dean Johnson  <dean_johnson@apple.com>

        [prepare-ChangeLog] Assigning a multiline comment to a variable breaks change detection
        https://bugs.webkit.org/show_bug.cgi?id=223225

        Reviewed by Jonathan Bedard.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python): Remove '^' prefix from regex so we match multiline
        strings assigned to variables.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests.py: Add multiline string
        variable definition, which previously would cause prepare-ChangeLog to parse the remainder of the file
        as a multiline comment. Also add a new test to ensure it's not skipped by multiline logic.
        (Class8.__init__):
        (Class9):

2021-03-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EWS] run-layout-tests-without-patch step should only retry the tests that failed on the previous steps.
        https://bugs.webkit.org/show_bug.cgi?id=219500

        Reviewed by Aakash Jain.

        On the step to retry running the layout tests without patch only
        run the subset of tests that failed on the previous steps.
        But only do that if the previous steps didn't exceed the test
        failure limit and the patch doesn't modify the TestExpectations files.

        This helps to speed up the test times on the EWS when the patch
        doesn't pass on the first try.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests.start):

2021-03-16  Lauro Moura  <lmoura@igalia.com>

        [GTK] Add GTK4 tests expectations
        https://bugs.webkit.org/show_bug.cgi?id=222907

        Reviewed by Carlos Garcia Campos.

        Check whether we are using a GTK4 build to automatically enable the
        platform/gtk4 expectations. This is done checking the
        presence of either libwebkit2gtk-4.0.so or libwebkit2gtk-5.0.so, so it
        works on binary-only deployments like the testing bots.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._search_paths):
        (GtkPort._is_gtk4_build):
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_gtk4_expectations_binary_only):
        (GtkPortTest.test_gtk3_expectations_binary_only):
        (GtkPortTest.test_gtk_expectations_both_binaries):

2021-03-16  Youenn Fablet  <youenn@apple.com>

        Add a new delegate for geolocation permission
        https://bugs.webkit.org/show_bug.cgi?id=223183

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[GeolocationDelegateNew _webView:requestGeolocationPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        (testDidResignInputElementStrongPasswordAppearanceAfterEvaluatingJavaScript): Deleted.
        (tabEvent): Deleted.
        (synthesizeTab): Deleted.
        (synthesizeWheelEvents): Deleted.

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

        REGRESSION: (r255611) [ Mac ] 3 lldb tests failing related to HashMap
        https://bugs.webkit.org/show_bug.cgi?id=207204

        Reviewed by Simon Fraser.

        In r255780 I removed WebKit LLDB support for HashTables because the LLDB python API doesn't have a way to
        do the equivalent of reinterpret_cast.  With clever use of a union, I can get a pointer to the table and
        tell LLDB it is actually a pointer to an unsigned integer array.  Then, using pointer->unsigned->pointer
        transformations I can dereference a negative index.  It's gross, but it works and makes the tests pass again.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (__lldb_init_module.lldb_webkit):
        (WTFHashTable_SummaryProvider):
        (WTFHashMap_SummaryProvider):
        (WTFHashSet_SummaryProvider):
        (WTFHashMapProvider):
        (WTFHashMapProvider.__init__):
        (WTFHashMapProvider.tableSize):
        (WTFHashMapProvider.keyCount):
        (WTFHashSetProvider):
        (WTFHashSetProvider.__init__):
        (WTFHashSetProvider.tableSize):
        (WTFHashSetProvider.keyCount):
        (WTFHashTableProvider):
        (WTFHashTableProvider.__init__):
        (WTFHashTableProvider.metadataWithIndex):
        (WTFHashTableProvider.tableSize):
        (WTFHashTableProvider.keyCount):
        (WTFHashTableProvider.num_children):
        (WTFHashTableProvider.get_child_index):
        (WTFHashTableProvider.get_child_at_index):
        (WTFHashTableProvider.update):
        (WTFHashTableProvider.has_children):
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFHashMap_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFHashMap_of_vectors_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFHashSet_tablesize_and_size):

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

        [WK2] Can get stuck in fullscreen mode if node is removed prior to receiving willEnterFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=223218
        <rdar://75009548>

        Reviewed by Eric Carlson.

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

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

        REGRESSION(r271642) Another app was relying on DOMWindow reuse
        https://bugs.webkit.org/show_bug.cgi?id=223217
        <rdar://75186172>

        Reviewed by Geoff Garen.

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

2021-03-15  John Wilander  <wilander@apple.com>

        PCM: Split attributionReportURL() into attributionReportSourceURL() and attributionReportAttributeOnURL()
        https://bugs.webkit.org/show_bug.cgi?id=223210
        <rdar://problem/75442246>

        Reviewed by Brent Fulgham.

        This patch splits WebCore::PrivateClickMeasurement::attributionReportURL() into
        WebCore::PrivateClickMeasurement::attributionReportSourceURL() and
        WebCore::PrivateClickMeasurement::attributionReportAttributeOnURL() to
        facilitate sending attribution reports to both the click source and destination.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
            Updated to use the new functions and also not repeat tests of static
            data.

2021-03-15  Aakash Jain  <aakash_jain@apple.com>

        Delete unused build-launcher-dmg script
        https://bugs.webkit.org/show_bug.cgi?id=222923

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-launcher-dmg: Removed.

2021-03-15  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL IPC should use shared memory for synchronous messages
        https://bugs.webkit.org/show_bug.cgi?id=220974
        <rdar://problem/73876947>

        Reviewed by Geoffrey Garen.

        Mark PrepareForDisplay() as "not replyable through the stream"
        since it replies with MachSendRight.

        * Scripts/generate-gpup-webgl:

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

        Update getUserMedia delegate to expose frame info
        https://bugs.webkit.org/show_bug.cgi?id=223178

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (-[UserMediaCaptureUIDelegateForParameters _webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:]):
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionUIDelegate _webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:]):
        (-[SpeechRecognitionUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate _webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:]):
        (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]): Deleted.
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h:
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm:
        (-[UserMediaCaptureUIDelegate _webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:audio:video:decisionHandler:]):
        (-[UserMediaCaptureUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]): Deleted.

2021-03-15  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Filter cppfilt output when generating crash logs
        https://bugs.webkit.org/show_bug.cgi?id=223171

        Reviewed by Carlos Garcia Campos.

        Like the output from other external commands, the output of cppfilt
        must also be decoded.

        This should fix the early exits due to unicode exceptions when
        running the GTK4 bot layout tests.

        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator.generate_crash_log): Decode cppfilt output.

2021-03-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WK1] Add a new API IWebPreferences::startBatchingUpdates to defer WebPreferencesChangedNotification
        https://bugs.webkit.org/show_bug.cgi?id=223109

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):

2021-03-13  Sam Sneddon  <gsnedders@apple.com>

        Move LayoutTestFinder.split_into_chunks to Manager._split_into_chunks
        https://bugs.webkit.org/show_bug.cgi?id=223137

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.split_into_chunks):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._split_into_chunks):
        (Manager._prepare_lists):

2021-03-13  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] run buildbot checkconfig in services ews
        https://bugs.webkit.org/show_bug.cgi?id=222687

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunBuildbotCheckConfigForEWS): Renamed from RunEWSBuildbotCheckConfig.
        (RunBuildbotCheckConfigForBuildWebKit): Build step to run buildbot checkconfig for build.webkit.org
        * CISupport/ews-build/factories.py:
        (ServicesFactory.__init__): Added build step to run buildbot checkconfig for build.webkit.org
        * CISupport/ews-build/steps_unittest.py: Added and updated unit-tests.
        * CISupport/ews-build/factories_unittest.py: Updated unit-tests.

2021-03-12  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r274270): [WPE][GTK] Broke Epiphany test /embed/ephy-web-view/error-pages-not-stored-in-history
        https://bugs.webkit.org/show_bug.cgi?id=223140

        Reviewed by Alex Christensen.

        Improve WebKitSecurityOrigin tests a bit.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp:
        (testCustomProtocolOrigin): Drive-by improvement: check webkit_security_origin_to_string().
        (testBogusURI): Added, tests for this bug.
        (beforeAll):

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

        [macOS] MobileAsset fonts are broken in Reader mode in Safari
        https://bugs.webkit.org/show_bug.cgi?id=223062

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm: Copied from Source/WebKit/WebProcess/playstation/WebProcessPlayStation.cpp.
        (TEST):

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

        Enable video capture in GPUProcess by default on iOS
        https://bugs.webkit.org/show_bug.cgi?id=223061

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptTestView haveStream:]):
        Upgrade timeout period as GPU process capture might take longer.

2021-03-12  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: two webkitscmpy.test.svn_unittest.TestRemoteSvn tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=223006

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.request): Hard-code timezone delta for Subversion server.

2021-03-12  Alicia Boya García  <aboya@igalia.com>

        Unreviewed: Update Alicia's status to reviewer
        https://bugs.webkit.org/show_bug.cgi?id=223114

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

2021-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump API version when building with libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=223067

        Reviewed by Adrian Perez de Castro.

        Use WEBKITGTK_API_DOC_VERSION instead of WEBKITGTK_API_VERSION.

        * gtk/manifest.txt.in:

2021-03-11  Sihui Liu  <sihui_liu@appe.com>

        Add some logging to help debug flaky quota tests
        https://bugs.webkit.org/show_bug.cgi?id=222995

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setQuotaLoggingEnabled):
        (WTR::TestRunner::setIsSpeechRecognitionPermissionGranted):
        (WTR::TestRunner::setIsMediaKeySystemPermissionGranted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setQuotaLoggingEnabled):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-03-11  Amir Mark Jr  <amir_mark@apple.com>

        Adding myself as a committer in the contributors file 
        N/A

        N/A

        * Scripts/webkitpy/common/config/contributors.json: Added myself as a committer

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

        Introduce WorkQueue::main() to get the main thread's work queue
        https://bugs.webkit.org/show_bug.cgi?id=223087

        Reviewed by Geoffrey Garen.

        Introduce WorkQueue::main() to get the main thread's work queue. This allows us to port some more code from
        dispatch_queue to WorkQueue. It also simplifies some code that has to deal that sometimes needs to run on
        the main thread and other times on a background queue. Having a single WorkQueue type to represent both the
        main thread and a background queue makes writing such code more convenient.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::doAsyncTask):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DumpRenderTree _webThreadInvoked]):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::doAsyncTask):
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        (WTR::UIScriptControllerMac::removeViewFromWindow):
        (WTR::UIScriptControllerMac::addViewToWindow):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        (WTR::UIScriptControllerMac::chooseMenuAction):
        (WTR::UIScriptControllerMac::activateAtPoint):

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

        Revert r260302
        https://bugs.webkit.org/show_bug.cgi?id=223048

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::clientCertServer): Deleted.
        (TestWebKitAPI::BlockPtr<void): Deleted.
        (TestWebKitAPI::countClientCertChallenges): Deleted.

2021-03-11  Mark Lam  <mark.lam@apple.com>

        Use tagged pointers in more places in the MetaAllocator code.
        https://bugs.webkit.org/show_bug.cgi?id=223055
        rdar://69971224

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:

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

        Introduce WorkQueue::dispatchSync()
        https://bugs.webkit.org/show_bug.cgi?id=223049

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::run):

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

        REGRESSION(r272293) WebArchives originally loaded over HTTP fail to load subresources that would be upgraded to HTTPS
        https://bugs.webkit.org/show_bug.cgi?id=223044
        <rdar://75228599>

        Reviewed by Chris Dumez.

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

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

        Text manipulation: ignore leading and trailing spaces when comparing content for all tokens
        https://bugs.webkit.org/show_bug.cgi?id=223057
        <rdar://73706436>

        Reviewed by Ryosuke Niwa.

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

2021-03-11  Imanol Fernandez  <ifernandez@igalia.com>

        Fix contributors file canonical format issue.

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json: Fix canonical format issue.

2021-03-11  Imanol Fernandez  <ifernandez@igalia.com>

        Add myself as committer in the contributors file.

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json: Added myself as committer.

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

        REGRESSION(r272469): [WPE][GTK] Epiphany UI process crashes when downloading PDFs, WebKitSecurityOrigin should use SecurityOriginData
        https://bugs.webkit.org/show_bug.cgi?id=222943

        Reviewed by Alex Christensen.

        Add a test to ensure security origins can be successfully created for custom protocols.
        Also, update the tests to accomodate the deprecation of webkit_security_origin_is_opaque().
        Notably, origins for data:// URIs are no longer special.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp:
        (testSecurityOriginBasicConstructor):
        (testSecurityOriginURIConstructor):
        (testSecurityOriginDefaultPort):
        (testSecurityOriginFileURI):
        (testSecurityOriginDataURI):
        (testCustomProtocolOrigin):
        (beforeAll):
        (testOpaqueSecurityOrigin): Deleted.

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

        Use RetainPtr<> / OSObjectPtr<> more in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=223030

        Reviewed by Darin Adler.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (createBitmapContext):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (WebThreadLockAfterDelegateCallbacksHaveCompleted):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * ImageDiff/cg/PlatformImageCG.cpp:
        (ImageDiff::PlatformImage::pixels const):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromCGImage):
        (WTR::createCGContextFromImage):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2021-03-10  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Make identifier last string in 'find'
        https://bugs.webkit.org/show_bug.cgi?id=223031
        <rdar://problem/75272100>

        Reviewed by Ryosuke Niwa.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:
        (Info.main):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:

2021-03-10  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Make client aware of hashes and revisions
        https://bugs.webkit.org/show_bug.cgi?id=223001
        <rdar://problem/75237812>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (Commit): Support both "id" and "identifier" in constructor.
        (Commit.prototype.repr): Centralize string representation of commit.
        (_CommitBank.prototype._loadSiblings):
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/investigate.js:
        (commitsForUuid): Use repr().
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Use repr().
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/commits.html: Convert JSON to Commit object.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/investigate.html: Use repr().
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

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

        Improve AppleLanguagesTest.UpdateAppleLanguages API test
        https://bugs.webkit.org/show_bug.cgi?id=223037

        Reviewed by Per Arne Vollan.

        Made the following improvements to the test:
        1. Use 'en-GB' initially instead of 'en-US'. Our bots use 'en-US' by default so this makes
           sure we are indeed able to change the system language.
        2. Make it so that the test no longer times out if the languageevent fires but navigator.language
           returns an unexpected language. This was done by using [TestWKWebView performAfterReceivingAnyMessage:]
           instead of [TestWKWebView performAfterMessage:action:].
        3. Add an internal timeout handling in the test instead of relying on the test suite's timeout.
           Without this, we would fail to reset the system's language at the end of the test in case
           of a timeout.

        * TestWebKitAPI/Tests/WebKit/OverrideAppleLanguagesPreference.mm:
        (TEST_F):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestMessageHandler setWildcardMessageHandler:]):
        (-[TestMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[TestWKWebView performAfterReceivingAnyMessage:]):

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

        [WPE][GTK] Running Tools/gtk/install-dependencies installs too many packages on Debian/Ubuntu
        https://bugs.webkit.org/show_bug.cgi?id=223036

        Reviewed by Don Olmstead.

        Avoid installing unneeded packages by passing --no-install-recommends to apt-get
        invocations. While at it, also make sure to always pass -y to make the installation
        non-interactive.

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

2021-03-10  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Add additional bundle ID property to WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=222919
        <rdar://problem/75013854>

        Reviewed by Alex Christensen.

        Update existing SettingNonPersistentDataStorePathsThrowsException test with new property.

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

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

        Adding Python type annotations to test_expectations.py
        https://bugs.webkit.org/show_bug.cgi?id=222770

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (ParseError.__init__):
        (ParseError.__str__):
        (ParseError.__repr__):
        (TestExpectationWarning.__init__):
        (TestExpectationParser):
        (TestExpectationParser.__init__):
        (TestExpectationParser.parse):
        (TestExpectationParser.expectation_for_skipped_test):
        (TestExpectationParser._parse_line):
        (TestExpectationParser._parse_modifiers):
        (TestExpectationParser._parse_expectations):
        (TestExpectationParser._check_test_exists):
        (TestExpectationParser._collect_matching_tests):
        (TestExpectationParser._tokenize_line):
        (TestExpectationLine):
        (TestExpectationLine.__init__):
        (TestExpectationLine.__str__):
        (TestExpectationLine.is_invalid):
        (TestExpectationLine.is_flaky):
        (TestExpectationLine.expected_behavior):
        (TestExpectationLine.create_passing_expectation):
        (TestExpectationLine.to_string):
        (TestExpectationLine._serialize_parsed_expectations):
        (TestExpectationLine._serialize_parsed_modifiers):
        (TestExpectationLine._format_line):
        (TestExpectationsModel):
        (TestExpectationsModel.__init__):
        (TestExpectationsModel._dict_of_sets):
        (TestExpectationsModel.get_test_set):
        (TestExpectationsModel.get_test_set_for_keyword):
        (TestExpectationsModel.get_tests_with_result_type):
        (TestExpectationsModel.get_tests_with_timeline):
        (TestExpectationsModel.get_modifiers):
        (TestExpectationsModel.has_modifier):
        (TestExpectationsModel.has_keyword):
        (TestExpectationsModel.has_test):
        (TestExpectationsModel.get_expectation_line):
        (TestExpectationsModel.get_expectations):
        (TestExpectationsModel.get_expectations_or_pass):
        (TestExpectationsModel.expectations_to_string):
        (TestExpectationsModel.get_expectations_string):
        (TestExpectationsModel.expectation_to_string):
        (TestExpectationsModel.add_expectation_line):
        (TestExpectationsModel._add_test):
        (TestExpectationsModel._clear_expectations_for_test):
        (TestExpectationsModel._remove_from_sets):
        (TestExpectationsModel._already_seen_better_match):
        (TestExpectations):
        (TestExpectations.expectation_from_string):
        (TestExpectations.result_was_expected):
        (TestExpectations.remove_pixel_failures):
        (TestExpectations.remove_leak_failures):
        (TestExpectations.has_pixel_failures):
        (TestExpectations.suffixes_for_expectations):
        (TestExpectations.__init__):
        (TestExpectations.readable_filename_and_line_number):
        (TestExpectations.parse_generic_expectations):
        (TestExpectations.parse_default_port_expectations):
        (TestExpectations.parse_override_expectations):
        (TestExpectations.parse_all_expectations):
        (TestExpectations.model):
        (TestExpectations.get_rebaselining_failures):
        (TestExpectations.filtered_expectations_for_test):
        (TestExpectations.matches_an_expected_result):
        (TestExpectations.is_rebaselining):
        (TestExpectations._shorten_filename):
        (TestExpectations._report_warnings):
        (TestExpectations._process_tests_without_expectations):
        (TestExpectations.has_warnings):
        (TestExpectations.remove_configuration_from_test):
        (TestExpectations.remove_rebaselined_tests):
        (TestExpectations.remove_rebaselined_tests.without_rebaseline_modifier):
        (TestExpectations._add_expectations):
        (TestExpectations.add_skipped_tests):
        (TestExpectations.list_to_string):
        (TestExpectations.serialize):
        (TestExpectations.nones_out):

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

        Mark myself as a committer.

        Unreviewed.

        Also claim I know about webkitpy.

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

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

        [GTK] Reenable -fvisibility=hidden
        https://bugs.webkit.org/show_bug.cgi?id=181916

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/glib/TestExpectations.json:

2021-03-10  Jonathan Bedard  <jbedard@apple.com>

        git-webkit should have an "info" command
        https://bugs.webkit.org/show_bug.cgi?id=222846
        <rdar://problem/75171053>

        Reviewed by Ryosuke Niwa.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add Info command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:
        (Info):
        (Info.parser): Moved from Find.parser, exclude argument.
        (Info.main): Moved from Find.main, add a default reference.
        (Find):
        (Find.parser): Invoke Info.parser.
        (Find.main): Invoke Info.main with user's specified reference.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:

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

        [WPE][GTK] Introduce NeedsUnbrandedUserAgent quirk and use it for accounts.google.com, docs.google.com, and drive.google.com
        https://bugs.webkit.org/show_bug.cgi?id=222978

        Reviewed by Carlos Garcia Campos.

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

2021-03-10  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update RunJavaScriptCoreTests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=223011

        Reviewed by Dewei Zhu.

        * CISupport/build-webkit-org/steps.py:
        (RunJavaScriptCoreTests.start): Used logobserver.
        (RunJavaScriptCoreTests.countFailures):
        * CISupport/build-webkit-org/steps_unittest.py:
        (TestRunJavaScriptCoreTests.test_success): Added unit-test.
        (TestRunJavaScriptCoreTests.test_failure): Ditto.

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

        Unreviewed, reverting r274166.
        https://bugs.webkit.org/show_bug.cgi?id=223024

        Broke GTK Debug builds

        Reverted changeset:

        "[GTK] Reenable -fvisibility=hidden"
        https://bugs.webkit.org/show_bug.cgi?id=181916
        https://trac.webkit.org/changeset/274166

2021-03-09  Don Olmstead  <don.olmstead@sony.com>

        GLib JSC API headers should only include other GLib JSC API headers
        https://bugs.webkit.org/show_bug.cgi?id=222803

        Reviewed by Michael Catanzaro.

        Update the includes and include directories.

        * MiniBrowser/wpe/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        * TestWebKitAPI/glib/PlatformGTK.cmake:
        * TestWebKitAPI/glib/PlatformWPE.cmake:

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

        HTTPS upgrade should allow same-site redirects from HTTPS to HTTP
        https://bugs.webkit.org/show_bug.cgi?id=222994
        <rdar://75159643>

        Reviewed by Geoff Garen.

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

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

        [ BigSur wk2 arm64 ] quite a few fast/forms (Layout-Tests) are text failing on Apple Silicon
        https://bugs.webkit.org/show_bug.cgi?id=222988
        <rdar://problem/75230416>

        Unreviewed, disable AppleLanguagesTest.UpdateAppleLanguages API test on Apple Silicon since
        it is timing out there and not properly resetting the system language. This is causing
        trouble on the bots.

        * TestWebKitAPI/Tests/WebKit/OverrideAppleLanguagesPreference.mm:

2021-03-09  Myles C. Maxfield  <mmaxfield@apple.com>

        MotionMark scores are super sensitive to a single long frame
        https://bugs.webkit.org/show_bug.cgi?id=220847
        <rdar://problem/74152743>

        Unreviewed.

        Update the plan.

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

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

        Stop using callOnMainThread() / isMainThread() in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=222986

        Reviewed by Alex Christensen.

        Add corresponding style checker rules.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_no_callonmainthread):
        (check_no_ismainthread):
        (check_style):
        (CppChecker):

2021-03-09  Aakash Jain  <aakash_jain@apple.com>

        buildbot checkconfig is failing in ews after buildbot upgrade
        https://bugs.webkit.org/show_bug.cgi?id=222974

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunEWSBuildbotCheckConfig.start): Set LC_ALL environment variable on bots.
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2021-03-09  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Reenable -fvisibility=hidden
        https://bugs.webkit.org/show_bug.cgi?id=181916

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/glib/TestExpectations.json:

2021-03-09  Mark Lam  <mark.lam@apple.com>

        Use --verifyGC=true on some JSC stress test configurations.
        https://bugs.webkit.org/show_bug.cgi?id=222289

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2021-03-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebRTC] VideoEncoder still doesn't comply with WebKit style
        https://bugs.webkit.org/show_bug.cgi?id=222901

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py: Move the GStreamer VideoEncoder to the list of custom
        GStreamer elements complying with WebKit's coding style.

2021-03-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Add a way to trigger webpage translation via the context menu
        https://bugs.webkit.org/show_bug.cgi?id=222953
        <rdar://problem/73901967>

        Reviewed by Devin Rousso.

        Adjust an API test. This new enum value is now the new last valid item value.

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

2021-03-08  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Various small fixes for TestWTF/TestWebKit tests on PlayStation
        https://bugs.webkit.org/show_bug.cgi?id=222931

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformPlayStation.cmake: Link to API for process termination
        * TestWebKitAPI/Tests/WTF/DataMutex.cpp: Turn off test using ASSERT_DEATH
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp: Use PlayStation api to kill webprocess for this test
        * TestWebKitAPI/playstation/PlatformWebViewPlayStation.cpp: Set size in resizeTo

2021-03-08  Stephan Szabo  <stephan.szabo@sony.com>

        TestWebKitAPI WebKit.HitTestResultNodeHandle does not complete with ENABLE_CONTEXT_MENUS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=222938

        Reviewed by Ross Kirsling.

        Make the test only build with context menus are supported.

        * TestWebKitAPI/Tests/WebKit/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit/HitTestResultNodeHandle_Bundle.cpp:

2021-03-08  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Isolate dateutil imports
        https://bugs.webkit.org/show_bug.cgi?id=222946
        <rdar://problem/75191226>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.request): Isolate dateutil imports.

2021-03-08  Andres Gonzalez  <andresg_22@apple.com>

        Enable accessibility/aria-invalid.html test on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=222942
        <rdar://problem/75188832>

        Reviewed by Chris Fleizach.

        Modified AccessibilityUIElement::stringAttributeValue to handle invalid
        status, so that test JS can query for it.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):

2021-03-08  Mark Lam  <mark.lam@apple.com>

        JSC stress tests' $testSpecificRequiredOptions should be appended last.
        https://bugs.webkit.org/show_bug.cgi?id=222936

        Reviewed by Keith Miller.

        This allows each test to get the last say on what options it needs.

        * Scripts/run-jsc-stress-tests:

2021-03-08  Sam Weinig  <weinig@apple.com>

        Add preference reseting to WebKitLegacy Windows to simplify testing reset
        https://bugs.webkit.org/show_bug.cgi?id=222865

        Reviewed by Brent Fulgham.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        Call the new resetForTesting() method to ensure all values are reset back
        to defaults for each test without have to explicitly list them.

2021-03-08  Aakash Jain  <aakash_jain@apple.com>

        [ews] Remove old Python 2 related code
        https://bugs.webkit.org/show_bug.cgi?id=222933

        Reviewed by Dewei Zhu.

        * CISupport/ews-build/steps.py:
        * CISupport/build-webkit-org/steps.py:

2021-03-08  Ryan Haddad  <ryanhaddad@apple.com>

        Move WebGL test bot to Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=222501

        Unreviewed infrastructure fix.

        * CISupport/build-webkit-org/config.json: Add missing architecture.

2021-03-08  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Delete old results server code (Follow-up)
        https://bugs.webkit.org/show_bug.cgi?id=222393
        <rdar://problem/74722220>

        Unreviewed follow-up fix.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Re-add allowed-host.

2021-03-08  John Wilander  <wilander@apple.com>

        PCM: Align fraud prevention token naming with issue 73 in the Privacy CG repo
        https://bugs.webkit.org/show_bug.cgi?id=222838
        <rdar://75115427>

        Reviewed by Brent Fulgham.

        This patch doesn't change functionality and only aligns naming to this W3C Privacy CG issue:
        https://github.com/privacycg/private-click-measurement/issues/73

        Naming for PCM fraud prevention is updated like this:

        /.well-known/private-click-measurement/sign-secret-token/ changed to
        /.well-known/private-click-measurement/sign-unlinkable-token/

        /.well-known/private-click-measurement/get-unlinkable-token-public-key/ changed to
        /.well-known/private-click-measurement/get-token-public-key/

        source_secret_token in requests for token signature changed to source_unlinkable_token

        source_unlinkable_token in attribution reports changed to source_secret_token

        Variable, member, and function names are being renamed similarly.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateClickMeasurementFraudPreventionValuesForTesting):
        (WTR::TestRunner::setFraudPreventionValuesForTesting): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setPCMFraudPreventionValuesForTesting):
        (WTR::TestController::setFraudPreventionValuesForTesting): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-03-08  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Adopt webkitscmpy
        https://bugs.webkit.org/show_bug.cgi?id=222754
        <rdar://problem/75049209>

        Reviewed by Dewei Zhu.

        Adopting webkitscmpy's remote repositories requires using the unit testing paradigms from
        those objects, which requires considerable adjustment of testing code.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version, include webkitscmpy.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/archive_controller_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/ci_controller_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (CommitController.register): Use webkitscmpy's exceptions.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller_unittest.py:
        (CommitControllerTest.test_register_via_post): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/failure_controller_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/suite_controller_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/test_controller_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/upload_controller_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/archive_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/ci_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context.py:
        (CommitContext.branch_keys_for_commits):
        (CommitContext.find_commits_by_id): default_branch is now an instance variable.
        (CommitContext.find_commits_by_uuid): Ditto.
        (CommitContext.find_commits_by_timestamp): Ditto.
        (CommitContext.find_commits_in_range): Ditto.
        (CommitContext.sibling_commits): Ditto.
        (CommitContext.register_commit_with_repo_and_id): webkitscmpy repositories compute branch.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/failure_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory):
        (MockModelFactory.safari): Use shared webkitscmpy mocks.
        (MockModelFactory.webkit): Ditto.
        (MockModelFactory.create): Timestamps in webkitscmpy are just integers.
        (MockModelFactory.iterate_all_commits): webkitscmpy and resultsdbpy have slightly different
        commit representations, so the mechanics of registering commits are different.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/mock_repository.py: Removed.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/model_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository.py:
        (Repository):
        (Repository.__init__): default_branch is now an instance variable.
        (Repository.commit_for_id): webkitscmpy does not require the branch, given a hash or revision.
        (StashRepository): Retrieve commit from webkitscmpy's remote BitBucket object.
        (WebKitRepository): Hard-code WebKit's Subversion URL. This is temporary, since WebKit will shortly
        become a GitHub repository.
        (SCMException): Deleted.
        (HTTPRepository): Deleted.
        (SVNRepository): Deleted.
        (WebKitRepository.commit_for_id.diff_changelogs): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/suite_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/test_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/upload_context_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/archive_view_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/commit_view_unittest.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-03-08  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add repository_id
        https://bugs.webkit.org/show_bug.cgi?id=222827
        <rdar://problem/75111000>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit.Encoder.default): Add repository_id.
        (Commit.__init__): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.__init__): Allow caller to specify repository id.
        (Git.commit): Pass repository id to commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.__init__): Allow caller to specify repository id.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.__init__): Allow caller to specify repository id.
        (Svn.commit): Pass repository id to commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.__init__): Allow caller to specify repository id, infer from url.
        (BitBucket.commit): Pass repository id to commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.__init__): Allow caller to specify repository id, infer from url.
        (GitHub.commit): Pass repository id to commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.__init__): Allow caller to specify repository id.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn.__init__): Allow caller to specify repository id, infer from url.
        (Svn.commit): Pass repository id to commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.__init__): Allow caller to specify repository id.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGitHub.test_id):
        (TestBitBucket.test_id):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestRemoteSvn.test_id):

2021-03-08  Michael Catanzaro  <mcatanzaro@gnome.org>

        webkitbot should stop saying "<revision> broke the build" when we revert commits
        https://bugs.webkit.org/show_bug.cgi?id=222906

        Reviewed by Jonathan Bedard.

        Instead of saying the patch "broke the build," let's say it "introduced a regression." This
        is more generic, since we revert patches for lots of reasons that are not build failures.
        Build failures count as regressions.

        * Scripts/webkitpy/tool/commands/download.py:
        (CreateRevert._prepare_state):
        * Scripts/webkitpy/tool/commands/download_unittest.py:

2021-03-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r273084.
        https://bugs.webkit.org/show_bug.cgi?id=222905

        User agent quirks still needed after all

        Reverted changeset:

        "[GTK] Remove all Google user agent quirks except for Google
        Docs"
        https://bugs.webkit.org/show_bug.cgi?id=222039
        https://trac.webkit.org/changeset/273084

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

        [iOS] maild hits a simulated crash when ENABLE(APP_HIGHLIGHTS) is defined
        https://bugs.webkit.org/show_bug.cgi?id=222893
        <rdar://problem/74230060>

        Reviewed by Tim Horton.

        Add an API test to verify that we don't attempt to initialize the platform callout bar.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAppHighlights.mm:

2021-03-07  Sam Weinig  <weinig@apple.com>

        Transition Cocoa DumpRenderTree to allow any preference keys, not just hard coded supported ones
        https://bugs.webkit.org/show_bug.cgi?id=222868

        Reviewed by Simon Fraser.

        This allows any preference key in a WebPreference*.yaml to be used for Cocoa WebKitLegacy
        tests in the comment header command, just like WebKitTestRunner.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Update defaults to only the default values that don't match
        defaults in WebPreference*.yaml files and experimental features
        that are not supported in but still declare support in the file.

        * DumpRenderTree/TestRunner.h:
        Remove unimplemented function declaration.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        (setDefaultsToConsistentValuesForTesting):
        (prepareConsistentTestingEnvironment):
        (resetWebPreferencesToConsistentValues): Deleted.
        (webPreferenceFeatureValue): Deleted.
        Replace most explicit reseting with the combination of _resetForTesting, automatic
        enabling experimental features, and use of _set<type>PreferenceForTestingWithValue
        from TestOptions.

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

        webkit-patch won't parse rdar://nnnnnnnn URLs in ChangeLogs
        <https://webkit.org/b/222863>

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry):
        - Update regex.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_fuzzy_radar_match__none):
        - Move test cases that used to fail into another test.
        (test_fuzzy_radar_match_format_without_context): Add.
        - Rename from test_fuzzy_radar_match_format_1().
        (test_fuzzy_radar_match_format_1):
        - Rename to test_fuzzy_radar_match_format_without_context().
        (test_fuzzy_radar_match_format_2):
        - Combine with test_fuzzy_radar_match_format_without_context().
        (test_fuzzy_radar_match_format_with_context): Add.
        - Rename from test_fuzzy_radar_match_format_3().
        (test_fuzzy_radar_match_format_3):
        - Rename to test_fuzzy_radar_match_format_with_context().

2021-03-06  Sam Weinig  <weinig@apple.com>

        Simplify DumpRenderTree WebPreferences reset
        https://bugs.webkit.org/show_bug.cgi?id=218024
        <rdar://problem/70764568>

        Reviewed by Simon Fraser.

        Use new _batchUpdatePreferencesInBlock and _resetForTesting to simplify and
        improve the performance of resetting preferences.
   
        _batchUpdatePreferencesInBlock makes it so we only trigger the recalculation
        of WebCore::Settings once per test, rather than linearly with the number of
        settings that we reset.

        _resetForTesting will allow us to remove explicit resetting of preferences 
        that use the existing default value (though this change does not utilize
        that yet, to limit the number of changes in this commit).
 
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):
        (resetWebViewToConsistentState):

2021-03-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Clean up GTK-specific text checker stuff
        https://bugs.webkit.org/show_bug.cgi?id=222818

        Reviewed by Don Olmstead.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        (WTR::UIScriptControllerGtk::setContinuousSpellCheckingEnabled):

2021-03-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Remove ADD_WHOLE_ARCHIVE_TO_LIBRARIES
        https://bugs.webkit.org/show_bug.cgi?id=222826

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformGTK.cmake:

2021-03-05  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Standardize timezone of mock svn server (Follow-up)
        https://bugs.webkit.org/show_bug.cgi?id=222762
        <rdar://problem/75058478>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.request): Only import dateutils when using it.

2021-03-05  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Delete old results server code
        https://bugs.webkit.org/show_bug.cgi?id=222393
        <rdar://problem/74722220>

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._end_test_run): Remove upload code.
        (Manager._save_json_files): Renamed from _upload_json_files.
        (Manager._upload_json_files): Renamed to _save_json_files.
        (Manager.upload_results): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Remove buildbot arguments.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator):
        (JSONResultsGenerator.__init__): Remove buildbot arguments.
        (JSONResultsGenerator.get_json): Remove concept of builder.
        (JSONResultsGenerator.upload_json_files): Deleted.
        (JSONResultsGenerator._get_svn_revision): Deleted.
        (JSONResultsGenerator._get_archived_json_results): Deleted.
        (JSONResultsGenerator._insert_generic_metadata): Deleted.
        (JSONResultsGenerator._convert_json_to_current_version): Deleted.
        (JSONResultsGenerator._convert_tests_to_trie): Deleted.
        (JSONResultsGenerator._remove_items_over_max_number_of_builds): Deleted.
        (JSONResultsGenerator._normalize_results_json): Deleted.
        (JSONResultsGenerator._is_results_all_of_type): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.setUp):
        (JSONGeneratorTest._test_json_generation):
        (JSONGeneratorTest._verify_json_results):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Remove arguments used to upload to old results database.

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

        Regression(r268097): WKWebView.URL is nil in the processDidTerminate delegate
        https://bugs.webkit.org/show_bug.cgi?id=222809

        Reviewed by Michael Catanzaro.

        Add API test coverage.

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

2021-03-05  Cameron McCormack  <heycam@apple.com>

        Don't open a new window in MiniBrowser if already opening a file from the command line
        https://bugs.webkit.org/show_bug.cgi?id=222776

        Reviewed by Dean Jackson.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        (-[BrowserAppDelegate application:openFile:]):

2021-03-05  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add python 3 support in send_email
        https://bugs.webkit.org/show_bug.cgi?id=222806

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/send_email.py:
        (send_email):

2021-03-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed Dashboard Fix.

        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2021-03-05  Aakash Jain  <aakash_jain@apple.com>

        [ews] Run ews unit-tests with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=222800

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunEWSUnitTests):
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.

2021-03-05  Razvan Caliman  <rcaliman@apple.com>

        Mark myself as committer in contributors.json.

        Unreviewed.

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

2021-03-05  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Correct BitBucket timestamp conversion
        https://bugs.webkit.org/show_bug.cgi?id=222766
        <rdar://problem/75063548>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.request): Bitbucket timestamps are in milliseconds.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.commit): Bitbucket timestamps are in milliseconds.

2021-03-05  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Standardize timezone of mock svn server
        https://bugs.webkit.org/show_bug.cgi?id=222762
        <rdar://problem/75058478>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, add dateutils.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.request): Lock timezone of SVN server.
        * Scripts/webkitpy/__init__.py: Move dateutils to webkitcorepy.

2021-03-05  ChangSeok Oh  <changseok@webkit.org>

        AVIF decoding support
        https://bugs.webkit.org/show_bug.cgi?id=207750

        Reviewed by Philippe Normand.

        This patch brings an initial support of AVIF image format to the gtk port.
        AVIF is a new royalty-free image format derived from the keyframes of AV1 video.
        FireFox and Chromium-variant browsers already support it. Its specification can be found
        at https://rawcdn.githack.com/AOMediaCodec/av1-avif/67a92add6cd642a8863e386fa4db87954a6735d1/index.html
        This patch aims to land a build option for AVIF and a basic decoding ability
        for still images by using libavif. Animated AVIF images will be covered later.

        * gtk/install-dependencies: Add dependencies of libavif for jhbuild
        * gtk/jhbuild.modules: Add libavif for jhbuild

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

        Reduce use of CFRetain() / CFRelease() / CFAutoRelease() in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=222760

        Reviewed by Darin Adler.

        Reduce use of CFRetain() / CFRelease() / CFAutoRelease() in WebKit by using RetainPtr<>.

        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        (createCoreAnimationLayer):
        * DumpRenderTree/mac/AccessibilityCommonMac.mm:
        (+[NSString stringWithJSStringRef:]):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFontIOS):
        (dumpRenderTree):
        (invalidateAnyPreviousWaitToDumpWatchdog):
        (setWaitToDumpWatchdog):
        (dump):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (takeWindowSnapshot):
        (createBitmapContextFromWebView):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addDisallowedURL):
        (TestRunner::setWaitToDump):
        * FontWithFeatures/FontWithFeatures/main.cpp:
        (constructFontWithTrueTypeFeature):
        (constructFontWithOpenTypeFeature):
        (drawText):
        (main):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (+[NSString stringWithJSStringRef:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (+[NSString stringWithJSStringRef:]):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventWithInfo:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::cfString):
        (WTR::UIScriptControllerMac::replaceTextAtRange):

2021-03-05  Philippe Normand  <pnormand@igalia.com>

        [GTK] Clang warnings in MiniBrowser build
        https://bugs.webkit.org/show_bug.cgi?id=222797

        Reviewed by Carlos Garcia Campos.

        Fix unused-value warnings.

        * MiniBrowser/gtk/BrowserCellRendererVariant.c:
        (browser_cell_renderer_variant_init):
        * MiniBrowser/gtk/BrowserTab.c:
        (runColorChooserCallback):

2021-03-04  Sam Sneddon  <gsnedders@apple.com>

        Undeprecate many more webkit-patch commands
        https://bugs.webkit.org/show_bug.cgi?id=222745

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/commands/download.py:
        (ChangeStyleLocal):
        * Scripts/webkitpy/tool/commands/queries.py:
        (SuggestReviewers):
        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone):
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations):
        * Scripts/webkitpy/tool/commands/upload.py:
        (Post):
        (Prepare):
        (MarkBugFixed):

2021-03-04  Aakash Jain  <aakash_jain@apple.com>

        Reduce unnecessary logging in ews-app
        https://bugs.webkit.org/show_bug.cgi?id=222764

        Reviewed by Jonathan Bedard.

        * CISupport/ews-app/ews/views/retrypatch.py:
        (RetryPatch.post):

2021-03-04  Matt Lewis  <jlewis3@apple.com>

        Add Apple Silicon Devices to Big Sur builders and testers.
        https://bugs.webkit.org/show_bug.cgi?id=222616

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2021-03-04  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add python 3 support - part 5
        https://bugs.webkit.org/show_bug.cgi?id=222744

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CheckPatchRelevance._patch_is_relevant): Ensure that in python 3, path and changes are bytes. This is because buildbot
        stores patch as bytes, as mentioned in https://github.com/buildbot/buildbot/issues/5812#issuecomment-790175979
        * CISupport/ews-build/steps_unittest.py: Updated one unit-test to test binary patch.

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

        [macOS][WK2] Changing the system language does not update navigator.language
        https://bugs.webkit.org/show_bug.cgi?id=222619

        Reviewed by Per Arne Vollan.

        Add API test coverage.

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

2021-03-04  Alex Christensen  <achristensen@webkit.org>

        Introduce "websocket", "fetch", and "other" resource types to WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=222709
        <rdar://problem/71552078>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):
        (webSocketAcceptValue):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::statusText):

2021-03-04  Youenn Fablet  <youenn@apple.com>

        Update camera and microphone capture state control WKWebView API
        https://bugs.webkit.org/show_bug.cgi?id=222166

        Reviewed by Eric Carlson.

        Updaed according renaming of _WKMediaCaptureState in _WKMediaCaptureStateDeprecated.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::wkMediaCaptureStateString):
        (TestWebKitAPI::waitUntilCaptureState):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[GetUserMediaUIDelegate _webView:mediaCaptureStateDidChange:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionUIDelegate _webView:mediaCaptureStateDidChange:]):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::isDoingMediaCapture const):

2021-03-04  Angelos Oikonomopoulos  <angelos@igalia.com>

        Detect unrecognized options in run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=221186

        Reviewed by Keith Miller.

        run-javascriptcore-tests saves unrecognized arguments to pass
        through to build-jsc even when --no-build is used. However, when
        we're not building, nothing will ever use or look at the extra
        arguments. This means that those arguments are silently eaten
        up and, consequently, typos in option names can go undetected.

        Change the script to fail when --no-build has been passed and
        there are unrecognized options.

        * Scripts/run-javascriptcore-tests:

2021-03-04  Kimmo Kinnunen  <kkinnunen@apple.com>

        Adding new test conditions for WebGL should be simpler
        https://bugs.webkit.org/show_bug.cgi?id=222593

        Reviewed by Kenneth Russell.

        Add SimulateEventForTesting(String eventName) to manually
        implemented RemoteGraphicsContextGL functions.
        Use manually generated function because next commit for
        timeout implementation will add some logic to RemoteGraphicsContextGL
        while forwarding rest of the events to the underlying GraphicsContextGL.

        * Scripts/generate-gpup-webgl:

2021-03-03  Alex Christensen  <achristensen@webkit.org>

        WKRemoteObjectCoder should be able to handle NSErrors from TLS failures
        https://bugs.webkit.org/show_bug.cgi?id=222401

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn sendError:completionHandler:]):

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

        Unreviewed, reverting r273851.

        Caused some tests failures on macOS Big Sur

        Reverted changeset:

        "[macOS][WK2] Changing the system language does not update
        navigator.language"
        https://bugs.webkit.org/show_bug.cgi?id=222619
        https://commits.webkit.org/r273851

2021-03-03  Sam Sneddon  <gsnedders@apple.com>

        Make LayoutTestFinder.find_tests/find_tests_by_path return List[Test]
        https://bugs.webkit.org/show_bug.cgi?id=222662

        Reviewed by Jonathan Bedard.

        This introduces a Test class, to later be able to migrate finding
        expectations to LayoutTestFinder.

        * Scripts/open-layout-test:
        (main):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_tests):
        (LayoutTestFinder.find_tests_by_path):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        (LayoutTestFinderTests.test_find_with_skipped_directories):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        (Manager.print_expectations):
        * Scripts/webkitpy/layout_tests/models/test.py: Added.
        (Test):
        (Test.__init__):
        (Test.__repr__):
        (Test.__eq__):
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.execute):

2021-03-03  Cameron McCormack  <heycam@apple.com>

        Send console.log() etc. to stdout in MiniBrowser on macOS
        https://bugs.webkit.org/show_bug.cgi?id=222629

        Reviewed by Tim Horton.

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

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

        [macOS][WK2] Changing the system language does not update navigator.language
        https://bugs.webkit.org/show_bug.cgi?id=222619

        Reviewed by Per Arne Vollan.

        Add API test coverage.

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

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

        Use adoptNS() right away after calling [obj copy] / [obj mutableCopy]
        https://bugs.webkit.org/show_bug.cgi?id=222634

        Reviewed by Darin Adler.

        Use adoptNS() right away after calling [obj copy] / [obj mutableCopy] to minimize the chance of leaks.

        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuMouseEvents.mm:
        (TestWebKitAPI::runTest):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):

2021-03-03  Sam Sneddon  <gsnedders@apple.com>

        Move LayoutTestFinder.skip_tests to Manager._skip_tests
        https://bugs.webkit.org/show_bug.cgi?id=222661

        Reviewed by Jonathan Bedard.

        This has nothing to do with finding tests, and everything to do about
        test selection depending on the CLI.

        Additionally, this removes the unused LayoutTestFinder.skip_tests
        all_tests_list argument.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder._skip_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._skip_tests):
        (Manager._prepare_lists):


2021-03-03  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add python 3 support - part 4
        https://bugs.webkit.org/show_bug.cgi?id=222672

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/events.py:
        (JSONProducer): Use implementer (python 3 compatible) instead of implements.
        (JSONProducer.__init__): Encode data as utf-8 explicitly.
        (Events):
        (Events.sendData):

2021-03-03  Robert Jenner  <jenner@apple.com>

        Adding myself as a committer in the contributors file. 
        N/A

        N/A

        * Scripts/webkitpy/common/config/contributors.json: Added myself as a committer.

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

        Unreviewed, reverting r273814.
        https://bugs.webkit.org/show_bug.cgi?id=222676

        Unresolved types in JavaScriptCore-4.0.gir

        Reverted changeset:

        "[CMake] JavaScriptCore GLib headers should be copies"
        https://bugs.webkit.org/show_bug.cgi?id=222625
        https://trac.webkit.org/changeset/273814

2021-03-03  Sam Sneddon  <gsnedders@apple.com>

        Remove LayoutTestFinder.touched_tests, which is now dead code
        https://bugs.webkit.org/show_bug.cgi?id=222660

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_touched_tests): Removed.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        Remove related tests.

2021-03-03  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Make testing compatible with Python 3.8
        https://bugs.webkit.org/show_bug.cgi?id=222678
        <rdar://problem/74997936>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/flask_support/flask_test_context.py:
        (FlaskTestContext):
        (FlaskTestContext.start_webserver): Make function pickle able.
        (FlaskTestContext.__init__): Pass class to owning webserver setup.
        (FlaskTestContext.__enter__):
        * Scripts/libraries/resultsdbpy/resultsdbpy/flask_support/flask_testcase.py:
        (FlaskTestCase.run_with_real_webserver.decorator.real_method):
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/cassandra_context.py:
        (filter_for_argument): Style fix.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-03-03  Kate Cheney  <katherine_cheney@apple.com>

        Report the correct document uri in the case of a ContentSecurityPolicyClient
        https://bugs.webkit.org/show_bug.cgi?id=222489
        <rdar://problem/73774118>

        Reviewed by Brent Fulgham.

        Rename OverrideContentSecurityPolicy.mm to ContentSecurityPolicy.mm
        so we can use it for more general purpose CSP testing.

        Add a test for document-uri reporting for file:, data: and about: protocols.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ContentSecurityPolicy.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/OverrideContentSecurityPolicy.mm.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/csp-document-uri-report.html: Added.

2021-03-03  Youenn Fablet  <youenn@apple.com>

        WebKitLegacy needs to keep JSDOMWindow even though it is used while its origin is not set
        https://bugs.webkit.org/show_bug.cgi?id=222589
        <rdar://problem/74258258>

        Reviewed by Geoffrey Garen.

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

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

        [CMake] JavaScriptCore GLib headers should be copies
        https://bugs.webkit.org/show_bug.cgi?id=222625

        Reviewed by Michael Catanzaro.

        Update the includes for the GLib ports.

        * MiniBrowser/wpe/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/PlatformGTK.cmake:

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

        REGRESSION(r270691): It's impossible to use MobileAsset fonts on macOS
        https://bugs.webkit.org/show_bug.cgi?id=222582
        <rdar://problem/74877450>

        Reviewed by Per Arne Vollan.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/MobileAssetSandboxCheck.mm: Copied from Source/WebKit/WebProcess/win/WebProcessWin.cpp.
        (TEST):

2021-03-02  Sam Weinig  <weinig@apple.com>

        Reduce the size of extended colors by storing the color space in free bits of the owning Color
        https://bugs.webkit.org/show_bug.cgi?id=222584

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::makeColor):
        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp: Removed.
        Update tests to account for removal of the ExtendedColor class.
        Merge ExtendedColorTests.cpp that still make sense into ColorTests.cpp

2021-03-02  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Better logging when attempting to convert tag to identifier
        https://bugs.webkit.org/show_bug.cgi?id=222482
        <rdar://problem/74797495>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bug version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn._commit_count):

2021-03-02  Simon Fraser  <simon.fraser@apple.com>

        Rename ForcePageRenderingUpdatesAt60FPSEnabled preference to PreferPageRenderingUpdatesNear60FPSEnabled
        https://bugs.webkit.org/show_bug.cgi?id=222580.

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/AnimationFrameRate.cpp:
        (TestWebKitAPI::TEST): Function rename.

2021-03-02  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add UUID
        https://bugs.webkit.org/show_bug.cgi?id=222602
        <rdar://problem/74931488>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit):
        (Commit.Encoder.default): Add order member.
        (Commit.__init__): Ditto.
        (Commit.uuid): Compute UUID from timestamp and order.
        (Commit.__cmp__): Use UUID instead of timestamp for comparison.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Compute commit order.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/git-repo.json: Add "order" to colliding commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Correct case where comparison fails.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.commit): Compute commit order.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.commit): Compute commit order.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_order): Added.
        (TestGitHub.test_order): Added.
        (TestBitBucket.test_order): Added.

2021-03-02  Sam Sneddon  <gsnedders@apple.com>

        Remove the ability to run tests via webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=222617

        Reviewed by Jonathan Bedard.

        Also removes the build-and-test and build-and-test-attachment commands, as these are now
        equivalent to build and build-attachment with --test support gone.

        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py: Unused import
        * Scripts/webkitpy/tool/commands/download.py:
        (BuildAndTest):
        (Land):
        (LandCowhand):
        (BuildAndTestAttachment):
        (AbstractPatchLandingCommand):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_build_and_test):
        (test_land):
        (test_land_red_builders):
        (test_land_no_close):
        (test_land_no_comment):
        (test_land_no_comment_no_close):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/runtests.py: Removed.
        * Scripts/webkitpy/tool/steps/runtests_unittest.py: Removed.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):
        (StepsTest.test_runtests_debug_args):
        (StepsTest.test_runtests_jsc):
        (StepsTest.test_runtests_jsc_debug):


2021-03-02  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Use webkitscmpy when reporting results
        https://bugs.webkit.org/show_bug.cgi?id=222432
        <rdar://problem/74755765>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): The root directory should be treated as if it does not exist.
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (SummarizedResultsTest.test_svn_revision): Use webkitscmpy's mock repository.
        (SummarizedResultsTest.test_svn_revision_git): Added.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Use webkitscmpy instead of webkitpy for repository manipulation.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_commits_for_upload): Use webkitscmpy's mock repository.
        (PortTest.test_commits_for_upload_git_svn): Added.

2021-03-02  Lauro Moura  <lmoura@igalia.com>

        [WPE] Support sending key modifiers after r272572
        https://bugs.webkit.org/show_bug.cgi?id=222615

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wpeKeySymForKeyRef):

2021-03-02  Ricky Mondello  <rmondello@apple.com>

        Unconditionally return information in _autofillContext SPI when a field is focused
        https://bugs.webkit.org/show_bug.cgi?id=221828
        rdar://74211237

        Reviewed by Darin Adler.

        Tests updated by Wenson Hsieh.

        Rebaseline tests.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (-[AutoFillTestView acceptsAutoFillLoginCredentials]): Renamed in line with the Password AutoFill-related
            contract these tests are about.

2021-03-02  Aakash Jain  <aakash_jain@apple.com>

        Make build.webkit.org loadconfig similar to EWS
        https://bugs.webkit.org/show_bug.cgi?id=222597

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/loadConfig.py:
        (loadBuilderConfig):
        (checkValidWorker): Method to validate worker.
        (checkValidBuilder): Method to validate builder.
        (checkValidSchedulers): Method to validate schedulers.
        (doesTriggerExist):
        (isTriggerUsedByAnyBuilder):
        (checkWorkersAndBuildersForConsistency):
        * CISupport/build-webkit-org/loadConfig_unittest.py: Added unit-tests.
        (ConfigDotJSONTest.test_configuration):
        (TestcheckValidWorker):
        (TestcheckValidWorker.test_invalid_worker):
        (TestcheckValidWorker.test_worker_with_missing_name):
        (TestcheckValidWorker.test_worker_with_missing_platName):
        (TestcheckValidWorker.test_valid_worker):
        (TestcheckValidBuilder):
        (TestcheckValidBuilder.test_invalid_builder):
        (TestcheckValidBuilder.test_builder_with_missing_name):
        (TestcheckValidBuilder.test_builder_with_invalid_identifier):
        (TestcheckValidBuilder.test_builder_with_extra_long_name):
        (TestcheckValidBuilder.test_builder_with_invalid_configuration):
        (TestcheckValidBuilder.test_builder_with_missing_factory):
        (TestcheckValidBuilder.test_builder_with_missing_scheduler):
        (TestcheckValidBuilder.test_builder_with_missing_platform):
        (TestcheckValidBuilder.test_valid_builder):
        (TestcheckWorkersAndBuildersForConsistency):
        (TestcheckWorkersAndBuildersForConsistency.test_checkWorkersAndBuildersForConsistency):
        (TestcheckWorkersAndBuildersForConsistency.test_checkWorkersAndBuildersForConsistency1):
        (TestcheckWorkersAndBuildersForConsistency.test_duplicate_worker):
        (TestcheckWorkersAndBuildersForConsistency.test_success):
        * CISupport/ews-build/loadConfig.py:
        (checkWorkersAndBuildersForConsistency): Added double-quotes in error message for better readability.
        * CISupport/ews-build/loadConfig_unittest.py:
        (TestcheckWorkersAndBuildersForConsistency.test_checkWorkersAndBuildersForConsistency1):

2021-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r263094): [GTK][WPE] API test /webkit/WebKitWebContext/languages is failing
        https://bugs.webkit.org/show_bug.cgi?id=188111

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextLanguages): Invalid locale is ignored now instead of throwing a exception.
        * TestWebKitAPI/glib/TestExpectations.json: Remove test expectation now that it passes again.

2021-03-02  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Enable grid view
        https://bugs.webkit.org/show_bug.cgi?id=222369

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

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

        Use capture settings after recovering capture from GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=221126
        <rdar://problem/73744819>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

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

        Enable MEDIA_SOURCE in IOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=222041
        <rdar://problem/74433510>

        Reviewed by Eric Carlson.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        Disable MediaSource runtime flag on simulator since it lacks implementation of AVStreamDataParser.

2021-03-02  Aakash Jain  <aakash_jain@apple.com>

        Move WebGL test bot to Big Sur (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=222501
        rdar://73900538

        Unreviewed infrastructure fix.

        * CISupport/build-webkit-org/config.json: Fixed a typo.

2021-03-01  Jonathan Bedard  <jbedard@apple.com>

        [wbkitscmpy] Add commits with colliding timestamps
        https://bugs.webkit.org/show_bug.cgi?id=222572
        <rdar://problem/74887215>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/git-repo.json: Add commit with colliding timestamp.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/checkout_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:

2021-03-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support rotated image overlay text for non-rectilinear text quads
        https://bugs.webkit.org/show_bug.cgi?id=222535
        <rdar://problem/74886200>

        Reviewed by Tim Horton.

        Add a new API test file to exercise the new `rotatedBoundingRect` function, with tests to cover a few degenerate
        cases such as a single point, line segments, and triangles.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FloatQuadTests.cpp: Added.
        (TestWebKitAPI::areApproximatelyEqual):
        (TestWebKitAPI::expectRotatedRect):
        (TestWebKitAPI::TEST):

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

        Crash under WebProcessPool::pageBeginUsingWebsiteDataStore()
        https://bugs.webkit.org/show_bug.cgi?id=222574
        <rdar://68340471>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-03-01  Sam Weinig  <weinig@apple.com>

        Add experimental support for CSS Color 5 color-contrast()
        https://bugs.webkit.org/show_bug.cgi?id=222530

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update luminance values to account for more accurate conversion to
        XYZ now that we are usuing the actual matrix values from SRGBADescriptor
        and not a truncated copy.

2021-03-01  Megan Gardner  <megan_gardner@apple.com>

        Restoring App Highlight crashes if no range is found.
        https://bugs.webkit.org/show_bug.cgi?id=222524

        Reviewed by Tim Horton.

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

2021-03-01  Aakash Jain  <aakash_jain@apple.com>

        [Python-3] Change shebang in runUnittests.py
        https://bugs.webkit.org/show_bug.cgi?id=222554

        Reviewed by Jonathan Bedard.

        * CISupport/runUnittests.py:

2021-03-01  Aakash Jain  <aakash_jain@apple.com>

        [ews] Use logname instead of deprecated logfile in PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=222378

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (PrintConfiguration.run):

2021-03-01  Adam Roben  <aroben@apple.com>

        Teach prepare-ChangeLog to recognize Swift structs/enums/protocols/extensions
        https://bugs.webkit.org/show_bug.cgi?id=222551

        It formerly only knew how to recognize classes.

        Reviewed by Jonathan Bedard.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_swift): Replaced "class" with "type" in
        variable names to make them more general. Generalized the pattern used
        to find class declarations to find struct/enum/protocol/extension
        declarations as well.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/swift_unittests-expected.txt:
        Added new ranges to the results.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/swift_unittests.swift:
        (MyStruct.structFunction(argument:)):
        (MyEnum.enumFunction(argument:)):
        (MyProtocol.protocolFunction(argument:)):
        (ExtendedType.extensionFunction(argument:)):
        Added these new types/functions (and look, they got parsed!).

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

        API test for AppHighlights
        https://bugs.webkit.org/show_bug.cgi?id=222408

        Reviewed by Tim Horton.

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAppHighlights.mm: Added.
        (-[AppHighlightDelegate _webView:storeAppHighlight:inNewGroup:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
        (TEST):
        (waitForConditionWithLogging): Deleted.
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        (TestWebKitAPI::Util::waitForConditionWithLogging):

2021-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add a script to show a list of bugs closed since a given revision
        https://bugs.webkit.org/show_bug.cgi?id=222470

        Reviewed by Adrian Perez de Castro.

        It's useful to get a list of specific changes when making releases.

        * Scripts/webkit-filter-log: Added.

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

        Reduce explicit usage of [objC retain] in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=222439

        Reviewed by Darin Adler.

        Reduce explicit usage of [objC retain] in WebKit by using RetainPtr<>.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        (-[DRTMockScroller drawKnob]):
        (-[DRTMockScroller drawRect:]):
        (prepareConsistentTestingEnvironment):
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView selectionRectsAfterPresentationUpdate]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformLibraryPathForTesting):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):
        (WTR::systemHiddenFontFamilySet):
        (WTR::TestController::platformLibraryPathForTesting):
        * WebKitTestRunner/mac/main.mm:
        (disableAppNapInUIProcess):

2021-02-26  Ryan Haddad  <ryanhaddad@apple.com>

        macOS bots should build with ONLY_ACTIVE_ARCH=NO
        https://bugs.webkit.org/show_bug.cgi?id=222502

        Reviewed by Aakash Jain.

        We need this to correctly build for both arm64e and x86_64 and support M1 hardware in our infrastructure.

        * CISupport/build-webkit-org/steps.py:
        (CompileWebKit.start):

2021-02-26  Ryan Haddad  <ryanhaddad@apple.com>

        Move WebGL test bot to Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=222501

        Reviewed by Aakash Jain.

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

2021-02-26  Jean-Yves Avenard  <jya@apple.com>

        [MSE] Ensure MediaSample is properly trimmed.
        https://bugs.webkit.org/show_bug.cgi?id=222462

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/SampleMap.cpp:
        Update per new MediaSample::divide prototype.

2021-02-26  John Wilander  <wilander@apple.com>

        Non-cookie website data not deleted after 7 days of browser use without user interaction
        https://bugs.webkit.org/show_bug.cgi?id=222248
        <rdar://problem/74612589>

        Reviewed by Brent Fulgham and informally by Kate Cheney.

        A new numberOfOperatingDaysPassed parameter was added to
        testRunner.setStatisticsExpiredStatistic() to control the exact
        number of operating days passed since user interaction.

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

2021-02-26  Devin Rousso  <drousso@apple.com>

        Unreviewed, add myself to the `ConsoleUsage` watchlist

        * Scripts/webkitpy/common/config/watchlist:

2021-02-26  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Move credential access from webkitscmpy
        https://bugs.webkit.org/show_bug.cgi?id=222487
        <rdar://problem/74801487>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, move keyring libraries.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py: Add.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version, move keyring libraries.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.credentials): Use webkitcorepy credentials.

2021-02-26  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Use webkitcorepy requests mocking
        https://bugs.webkit.org/show_bug.cgi?id=222443
        <rdar://problem/74764567>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/casserole_unittest.py:
        (CasseroleTest.test_synchronous): Use webkitcorepy's requests mocking.
        (CasseroleTest.test_asynchronous): Ditto.
        (CasseroleTest.test_list_like): Ditto.
        (MockRequest): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/ci_context_unittest.py:
        (URLFactoryTest.mock): Use webkitcorepy's requests mocking.
        (URLFactoryTest.MockRequest): Deleted.
        (URLFactoryTest.get): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
        (WebSiteTestCase.decorator): Referenced static files have already been moved.
        (WebSiteTestCase.decorator.MockRequest): Deleted.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/setup.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests_.py:
        (Requests.__init__): Allow caller to specify certain responses.
        (Requests.request):

2021-02-26  Andres Gonzalez  <andresg_22@apple.com>

        Add AXTextMarkerRangeForNSRange attribute so that Mac clients can access this functionality.
        https://bugs.webkit.org/show_bug.cgi?id=222477

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeForRange):

2021-02-26  Aakash Jain  <aakash_jain@apple.com>

        [ews] Commit queue should show commit identifier every time it updates local checkout
        https://bugs.webkit.org/show_bug.cgi?id=222287

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/factories.py:
        (CommitQueueFactory.__init__): Added ShowIdentifier step.
        * CISupport/ews-build/factories_unittest.py: Updated unit-test.

2021-02-26  Aakash Jain  <aakash_jain@apple.com>

        Remove old buildbot version from webkitpy autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=222272

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/autoinstalled/buildbot.py:

2021-02-26  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Stop using deprecated buildbot.status.builder
        https://bugs.webkit.org/show_bug.cgi?id=222373

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:

2021-02-26  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after SDK r273544 deployment

        * TestWebKitAPI/PlatformWPE.cmake: GLib include path was missing in the TestJavaScriptCore
        build.

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

        Unreviewed, reverting r273122 and r273123.
        https://bugs.webkit.org/show_bug.cgi?id=222449

        Didn't fix the extreme test variance, and caused some internal
        performance bots to hang during testing

        Reverted changesets:

        "MotionMark scores are super sensitive to a single long frame"
        https://bugs.webkit.org/show_bug.cgi?id=220847
        https://trac.webkit.org/changeset/273122

        "MotionMark scores are super sensitive to a single long frame"
        https://bugs.webkit.org/show_bug.cgi?id=220847
        https://trac.webkit.org/changeset/273123

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

        Unreviewed, reverting r273503.
        https://bugs.webkit.org/show_bug.cgi?id=222442

        Caused a blob loading failure

        Reverted changeset:

        "Serialize NSURLRequest (rather than CFURLRequest) in IPC"
        https://bugs.webkit.org/show_bug.cgi?id=222145
        https://trac.webkit.org/changeset/273503

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

        Make internal ContentFiltering tests not time out after r272293
        https://bugs.webkit.org/show_bug.cgi?id=222437

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[ServerRedirectNavigationDelegate webView:didStartProvisionalNavigation:]):
        (-[ServerRedirectNavigationDelegate webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (TEST):
        (downloadTest):
        (loadAlternateTest):

2021-02-25  Brent Fulgham  <bfulgham@apple.com>

        Serialize NSURLRequest (rather than CFURLRequest) in IPC
        https://bugs.webkit.org/show_bug.cgi?id=222145
        <rdar://problem/74500963>

        Reviewed by Darin Adler and Alex Christensen.

        Add a new test to ensure we can successfully load URLs with accented characters,
        and to test the updated IPC serialization for NSURLRequest.

        * TestWebKitAPI/Tests/WebKit/A/303/247/303/243o.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewLoadAPIs.mm:
        (TEST):

2021-02-25  Jonathan Bedard  <jbedard@apple.com>

       [build.webkit.org] Stop passing --master-name to run-webkit-tests
       https://bugs.webkit.org/show_bug.cgi?id=222427
       <rdar://problem/74750838>

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/steps.py:
        (RunWebKitTests):
        * CISupport/build-webkit-org/steps_unittest.py:
        (TestRunWebKitTests.test_success):
        (TestRunWebKitTests.test_warnings):
        (TestRunWebKitTests.test_failure):
        (TestRunWebKitTests.test_unexpected_error):
        (TestRunWebKitTests.test_exception):

2021-02-25  Jonathan Bedard  <jbedard@apple.com>

        [ews-build.webkit.org] Compute identifiers locally
        https://bugs.webkit.org/show_bug.cgi?id=222370
        <rdar://problem/74704298>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/factories.py:
        (Factory.__init__): Add FetchBranches.
        (StyleFactory.__init__): Ditto.
        (WatchListFactory.__init__): Ditto.
        * CISupport/ews-build/factories_unittest.py: Add FetchBranches.
        * CISupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Remove GitHub credentials.
        * CISupport/ews-build/steps.py:
        (FetchBranches): Added.
        (ShowIdentifier.start): Construct identifier locally.
        * CISupport/ews-build/steps_unittest.py:

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

        Unreviewed, reverting r273488.
        https://bugs.webkit.org/show_bug.cgi?id=222426

        Landed before necessary buildbot change.

        Reverted changeset:

        "[run-webkit-tests] Delete old results server code"
        https://bugs.webkit.org/show_bug.cgi?id=222393
        https://trac.webkit.org/changeset/273488

2021-02-25  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Delete old results server code
        https://bugs.webkit.org/show_bug.cgi?id=222393
        <rdar://problem/74722220>

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._end_test_run): Remove upload code.
        (Manager._save_json_files): Renamed from _upload_json_files.
        (Manager._upload_json_files): Renamed to _save_json_files.
        (Manager.upload_results): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Remove buildbot arguments.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator):
        (JSONResultsGenerator.__init__): Remove buildbot arguments.
        (JSONResultsGenerator.get_json): Remove concept of builder.
        (JSONResultsGenerator.upload_json_files): Deleted.
        (JSONResultsGenerator._get_svn_revision): Deleted.
        (JSONResultsGenerator._get_archived_json_results): Deleted.
        (JSONResultsGenerator._insert_generic_metadata): Deleted.
        (JSONResultsGenerator._convert_json_to_current_version): Deleted.
        (JSONResultsGenerator._convert_tests_to_trie): Deleted.
        (JSONResultsGenerator._remove_items_over_max_number_of_builds): Deleted.
        (JSONResultsGenerator._normalize_results_json): Deleted.
        (JSONResultsGenerator._is_results_all_of_type): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.setUp):
        (JSONGeneratorTest._test_json_generation):
        (JSONGeneratorTest._verify_json_results):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Remove arguments used to upload to old results database.

2021-02-25  Chris Gambrell  <cgambrell@apple.com>

        [contributors.json] Adding Chris Gambrell as a contributor
        https://bugs.webkit.org/show_bug.cgi?id=222415
        <rdar://problem/74741371>

        Reviewed by Alexey Proskuryakov.

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

2021-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r273465.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-02-24  Kate Cheney  <katherine_cheney@apple.com>

        App-bound request parameter should be passed to main resource requests not the main frame
        https://bugs.webkit.org/show_bug.cgi?id=222241
        <rdar://problem/74560966> 

        Reviewed by Chris Dumez.

        Adds more robust testing to report when appBound/nonAppBound requests
        load in the network process. This tests not only that the main frame’s
        document loader is properly set, but also that all loads initiated from
        app-bound requests are also app-bound to avoid regressions like this in the future.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        Utilize some CSP test resources that have the exact setup needed to
        test this fix.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView appBoundNavigationData:]):
        (-[WKWebView clearAppBoundNavigationReports:]):

2021-02-24  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add flag for caller to opt out of identifier computation
        https://bugs.webkit.org/show_bug.cgi?id=222337
        <rdar://problem/74667858>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Allow caller to opt-out of retrieving the identifier.
        (Git.find): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.commit): Allow caller to opt-out of retrieving the identifier.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.commit): Allow caller to opt-out of retrieving the identifier.
        (BitBucket.find): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.commit): Allow caller to opt-out of retrieving the identifier.
        (GitHub.find): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn.commit): Allow caller to opt-out of retrieving the identifier.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.commit): Allow caller to opt-out of retrieving the identifier.
        (ScmBase.find): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_no_identifier):
        (TestGitHub.test_no_identifier):
        (TestBitBucket.test_no_identifier):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_no_identifier):
        (TestRemoteSvn.test_no_identifier):

2021-02-24  Russell Epstein  <repstein@apple.com>

        Revert r272735. rdar://problem/74674837

2021-02-24  Aakash Jain  <aakash_jain@apple.com>

        Add unit-tests for various step in build.webkit.org (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=222075
        <rdar://problem/74691345>

        Unreviewed follow-up fix for unit-tests.

        * CISupport/build-webkit-org/steps_unittest.py:
        (TestRunWebKitPyTests.test_failure):
        (TestRunWebKitPyTests.test_errors):
        (TestRunWebKitPyTests.test_lot_of_failures):
        (TestRunLLDBWebKitTests.test_failure):
        (TestRunLLDBWebKitTests.test_errors):
        (TestRunLLDBWebKitTests.test_lot_of_failures):

2021-02-24  Keith Miller  <keith_miller@apple.com>

        Cloop JSC test driver command shouldn't pass build flags
        https://bugs.webkit.org/show_bug.cgi?id=222325

        Reviewed by Darin Adler.

        * CISupport/build-webkit-org/steps.py:
        (RunLLINTCLoopTests):

2021-02-24  Aakash Jain  <aakash_jain@apple.com>

        Disable Buildbot old-style step deprecation warning
        https://bugs.webkit.org/show_bug.cgi?id=222363

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:
        * CISupport/ews-build/master.cfg:
        * CISupport/runUnittests.py:

2021-02-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add python 3 support - part 3
        https://bugs.webkit.org/show_bug.cgi?id=222355

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer.load_contributors_from_disk): Ensure that the file is closed.
        * CISupport/ews-build/steps_unittest.py:

2021-02-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] Make unit-test compatible with latest buildbot
        https://bugs.webkit.org/show_bug.cgi?id=222359

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps_unittest.py:
        (BuildStepMixinAdditions):
        (BuildStepMixinAdditions.setUpBuildStep): Invoke setUpTestReactor.

2021-02-24  Don Olmstead  <don.olmstead@sony.com>

        Only import Python flatpak module on Linux
        https://bugs.webkit.org/show_bug.cgi?id=222327

        Reviewed by Philippe Normand.

        Importing flatpak is only relavent for GTK/WPE ports. Also Windows can fail when importing
        it due to platform differences.

        * Scripts/run-bindings-tests:
        * Scripts/run-builtins-generator-tests:
        * Scripts/run-minibrowser:
        * Scripts/run-perf-tests:
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-tests:
        * Scripts/test-webkitpy:

2021-02-24  Aakash Jain  <aakash_jain@apple.com>

        Add unit-tests for various step in build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=222075

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps_unittest.py:
        (TestRunWebKitPerlTests):
        (TestRunWebKitPerlTests.test_success):
        (TestRunWebKitPerlTests.test_failure):
        (TestRunWebKitPyTests):
        (TestRunWebKitPyTests.test_success):
        (TestRunWebKitPyTests.test_unexpected_failure):
        (TestRunWebKitPyTests.test_failure):
        (TestRunWebKitPyTests.test_errors):
        (TestRunWebKitPyTests.test_lot_of_failures):
        (TestRunLLDBWebKitTests):
        (TestRunLLDBWebKitTests.test_success):
        (TestRunLLDBWebKitTests.test_unexpected_failure):
        (TestRunLLDBWebKitTests.test_failure):
        (TestRunLLDBWebKitTests.test_errors):
        (TestRunLLDBWebKitTests.test_lot_of_failures):
        (TestRunWebKitTests):
        (TestRunWebKitTests.configureStep):
        (TestRunWebKitTests.test_success):
        (TestRunWebKitTests.test_warnings):
        (TestRunWebKitTests.test_failure):
        (TestRunWebKitTests.test_unexpected_error):
        (TestRunWebKitTests.test_exception):

2021-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP3] Use soup_auth_get_authority() to set the ProtectionSpace host and port
        https://bugs.webkit.org/show_bug.cgi?id=222309

        Reviewed by Adrian Perez de Castro.

        It fixes two tests when using libsoup3.

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

2021-02-24  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] PATH for rustc no longer set correctly
        https://bugs.webkit.org/show_bug.cgi?id=222311

        Reviewed by Žan Doberšek.

        Pass PATH as flatpak --env option, setting is through bwrap no longer works.
        
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/webkit-bwrap:

2021-02-23  Jonathan Bedard  <jbedard@apple.com>

        [check-webkit-style] Fix Contributor sorting in Python 3
        https://bugs.webkit.org/show_bug.cgi?id=222329
        <rdar://problem/74656667>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__cmp__): Return an integer to indicate ordering.
        (Contributor.__eq__): Add rich comparison operators for sorting.
        (Contributor.__ne__): Ditto.
        (Contributor.__lt__): Ditto.
        (Contributor.__le__): Ditto.
        (Contributor.__gt__): Ditto.
        (Contributor.__ge__): Ditto.
        * Scripts/webkitpy/common/config/contributors.json:

2021-02-23  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add remote BitBucket
        https://bugs.webkit.org/show_bug.cgi?id=222213
        <rdar://problem/74542626>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Increment version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/__init__.py: Export mock BitBucket.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py: Added.
        (BitBucket): Mock limited set of BitBucket REST APIs.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/__init__.py: Export BitBucket class.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py: Added.
        (BitBucket): Repository object interacting with BitBucket via REST API.
        (BitBucket.is_webserver): Check if the provided URL is a bitbucket URL.
        (BitBucket.__init__):
        (BitBucket.is_git):
        (BitBucket.request): Combine paginated requests into a single API call.
        (BitBucket._distance): Preform binary search 
        (BitBucket._branches_for): Return branches for reference.
        (BitBucket.default_branch): Return the default branch.
        (BitBucket.branches): Return all branches for repository.
        (BitBucket.tags): Return all tags for repository.
        (BitBucket.commit): Convert hash, identifier or git ref to Commit object.
        (BitBucket.find): Use git to match branches and tags to a hash instead of trying to do it ourselves.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.from_url): Add BitBucket.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGitHub.test_detection): Add bitbucket url.
        (TestBitBucket): Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestRemoteSvn.test_detection): Add bitbucket url.

2021-02-23  Don Olmstead  <don.olmstead@sony.com>

        Pass full environment when auto installing a Python module on Windows
        https://bugs.webkit.org/show_bug.cgi?id=221109
        <rdar://problem/74002781>

        Reviewed by Jonathan Bedard.

        On Python 3 when the AutoInstall routine attempted to setup markupsafe-2.0.0 it would fail
        when compiling native code. When compiling outside of Visual Studio there is a batch file
        that sets up the environment. This adds a large number of environment variables which could
        potentially change over time so to be safe the complete environment is passed to the
        setup.py installation routine for Windows only.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install):

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

        Unreviewed, reverting r273307.
        https://bugs.webkit.org/show_bug.cgi?id=222320

        Need to update CI code for CLoop bot before landing this

        Reverted changeset:

        "Detect unrecognized options in run-javascriptcore-tests"
        https://bugs.webkit.org/show_bug.cgi?id=221186
        https://trac.webkit.org/changeset/273307

2021-02-23  Jonathan Bedard  <jbedard@apple.com>

        show-identifier fails with error: ascii codec can't decode byte 0xc3 in position
        https://bugs.webkit.org/show_bug.cgi?id=222313
        <rdar://problem/74645910>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.__repr__): Always return unicode for Python 2.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor.test_unicode):

2021-02-23  Rob Buis  <rbuis@igalia.com>

        aspect-ratio shows in computed style when disabled
        https://bugs.webkit.org/show_bug.cgi?id=222286

        Reviewed by Simon Fraser.

        Add support for disabling aspect-ratio in wk1.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

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

        Use adoptNS() as soon as we [[ObjcClass alloc] init] to avoid leaks in Tools/
        https://bugs.webkit.org/show_bug.cgi?id=222288

        Reviewed by Darin Adler.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::zoomScale const):
        (WTR::UIScriptControllerIOS::scrollToOffset):
        (WTR::UIScriptControllerIOS::immediateScrollToOffset):
        (WTR::UIScriptControllerIOS::minimumZoomScale const):
        (WTR::UIScriptControllerIOS::maximumZoomScale const):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (fontAllowList):
        (adjustWebDocumentForFlexibleViewport):
        (createWebViewAndOffscreenWindow):
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        (resetWebViewToConsistentState):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (+[DumpRenderTreePasteboard releaseLocalPasteboards]):
        * DumpRenderTree/mac/EventSendingController.mm:
        (drt_WebHTMLView_beginDraggingSessionWithItemsEventSource):
        (+[EventSendingController initialize]):
        (-[EventSendingController beginDragWithFiles:]):
        (-[EventSendingController beginDragWithFilePromises:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setCustomPolicyDelegate):
        (TestRunner::waitForPolicyDelegate):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:dragImage:at:offset:event:pasteboard:source:slideBack:forView:]):
        (-[UIDelegate dealloc]):
        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (ensureGlobalLayoutTestSpellChecker):
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleParameter.mm:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTestWKView::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ReparentWebViewTimeout.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeRegistry.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserInitiatedActionInNavigationAction.mm:
        (UserInitiatedActionTest::URLWithFragment):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (-[UIDelegate _webView:configurationForLocalInspector:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCandidateTests.mm:
        (+[CandidateTestWebView setUpWithFrame:testPage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDoesNotLogDuringInitialization.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitLegacy/mac/ClosingWebView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsInvalidScheme.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitObjC/PreventImageLoadWithAutoResizing.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitObjC/UserContentTest.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (+[InputAssistantItemTestingWebView leadingItemsForWebView:]):
        (+[InputAssistantItemTestingWebView trailingItemsForWebView:]):
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/CandidateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        * TestWebKitAPI/mac/TestFontOptions.mm:
        (+[TestFontOptions sharedInstance]):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::addNotificationListener):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::globalWebViewConfiguration):
        (WTR::globalWebsiteDataStoreDelegateClient):
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformContext):
        (WTR::TestController::platformPreferences):
        (WTR::TestController::platformInitializeDataStore):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::TestController::platformAdjustContext):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::removeAllSessionCredentials):
        (WTR::TestController::getAllStorageAccessEntries):
        (WTR::TestController::loadedSubresourceDomains):
        (WTR::TestController::clearLoadedSubresourceDomains):
        (WTR::TestController::injectUserScript):
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::setAllowsAnySSLCertificate):
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        (+[GeneratedTouchesDebugWindow sharedGeneratedTouchesDebugWindow]):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (+[HIDEventGenerator sharedHIDEventGenerator]):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (+[WebKitTestRunnerPasteboard _pasteboardWithName:]):
        (+[WebKitTestRunnerPasteboard releaseLocalPasteboards]):

2021-02-23  Angelos Oikonomopoulos  <angelos@igalia.com>

        Detect unrecognized options in run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=221186

        Reviewed by Keith Miller.

        run-javascriptcore-tests saves unrecognized arguments to pass
        through to build-jsc even when --no-build is used. However, when
        we're not building, nothing will ever use or look at the extra
        arguments. This means that those arguments are silently eaten
        up and, consequently, typos in option names can go undetected.

        Change the script to fail when --no-build has been passed and
        there are unrecognized options.

        * Scripts/run-javascriptcore-tests:

2021-02-23  Frederic Wang  <fwang@igalia.com>

        [GTK] Use std::bitset to specify WebKitTestServer's options
        https://bugs.webkit.org/show_bug.cgi?id=222273

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:

2021-02-22  Alex Christensen  <achristensen@webkit.org>

        Re-enable RangeResponseGenerator.
        https://bugs.webkit.org/show_bug.cgi?id=221072
        <rdar://problem/74551753>

        r273263 was a false alarm.  Reverting that revision.

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

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

        [Cocoa] Add WKWebView session restoration API
        https://bugs.webkit.org/show_bug.cgi?id=220958
        <rdar://70956146>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

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

        Use adoptNS() as soon as we [[ObjcClass alloc] init] to avoid leaks
        https://bugs.webkit.org/show_bug.cgi?id=222237

        Reviewed by Darin Adler.

        * TestRunnerShared/mac/NSPasteboardAdditions.mm:
        (+[NSPasteboard _modernPasteboardType:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/DeallocWebViewInEventListener.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/CancelLoadFromResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/CloseNewWindowInNavigationPolicyDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidReceiveResponse.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WindowlessWebViewWithMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):

2021-02-22  Sam Sneddon  <gsnedders@apple.com>

        Run Python tests for Source/WebKit/Scripts changes in EWS
        https://bugs.webkit.org/show_bug.cgi?id=222276

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:

2021-02-22  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Failure to retrieve commit in EWS
        https://bugs.webkit.org/show_bug.cgi?id=222050
        <rdar://problem/74439957>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Load GitHub credentials.
        * CISupport/ews-build/steps.py:
        (ShowIdentifier.start): Pass GitHub credentials to worker.
        * CISupport/ews-build/steps_unittest.py:

2021-02-22  Alex Christensen  <achristensen@webkit.org>

        Disable RangeResponseGenerator.
        https://bugs.webkit.org/show_bug.cgi?id=221072
        <rdar://problem/74551753>

        It might be causing issues.  Disabling to speculatively fix the radar.

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

2021-02-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] gdb unusable in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=222247

        Reviewed by Žan Doberšek.

        This patch adds support for unix signals disabling in developer builds, for the Flatpak SDK
        runtime. Currently SIGINT, SIGHUP and SIGTERM will be ignored by the flatpak and bwrap
        processes when they're running gdb in the sandbox runtime. This allows for nicer interactive
        debugging sessions where Ctrl-C is actually handled by gdb.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * flatpak/CMakeLists.txt: Added.
        * flatpak/flatpakutils.py:
        (nullcontext):
        (disable_signals):
        (WebkitFlatpak.execute_command):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/sigaction-disabler.c: Added.
        (real_sigaction):
        (sigaction):
        * flatpak/webkit-bwrap:

2021-02-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Add Monado for XR runtime support
        https://bugs.webkit.org/show_bug.cgi?id=220738

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Allow runtime XR environment setup in the sandbox through
        the XR_RUNTIME_JSON variable.

2021-02-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] X11 SSH forwarding fails
        https://bugs.webkit.org/show_bug.cgi?id=222246

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Forward the DISPLAY env var to the sandbox.
        * flatpak/webkit-bwrap: Set the DISPLAY env var if it was set in the parent process.

2021-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add support for libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=222093

        Reviewed by Adrian Perez de Castro.

        * MiniBrowser/gtk/BrowserTab.c:
        (tlsErrorsDialogResponse):
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (Tunnel::Tunnel):
        (Tunnel::connect):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerAddCookie):
        (testCookieManagerGetCookies):
        (testCookieManagerDeleteCookie):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (addContentDispositionHTTPHeaderToResponse):
        (writeNextChunk):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testLoadingError):
        (testWebViewIsLoading):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (addCacheHTTPHeadersToResponse):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (WebSocketTest::serverWebSocketCallback):
        (httpsServerCallback):
        (httpServerCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (serverCallback):
        (ProxyTest::webSocketProxyServerCallback):
        (webSocketServerCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (writeNextChunk):
        (serverCallback):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::run):
        (WebKitTestServer::addWebSocketHandler):

2021-02-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Cog build fails when gst-build is enabled
        https://bugs.webkit.org/show_bug.cgi?id=222102

        Reviewed by Žan Doberšek.

        Merge gst-build env vars in the sandbox environment, without overriding previously set PATH
        values such as PKG_CONFIG_PATH.

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

2021-02-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Bootstrap the run-httpd script in the SDK runtime
        https://bugs.webkit.org/show_bug.cgi?id=221464

        Reviewed by Žan Doberšek.

        * Scripts/run-webkit-httpd: On Linux platforms, run the script within the SDK runtime, if it
        is available on the host system.

2021-02-21  Andres Gonzalez  <andresg_22@apple.com>

        Add [WebAccessibilityObjectWrapper textMarkerRangeForNSRange] to allow clients to efficiently get a TextMarkerRange from an NSRange.
        https://bugs.webkit.org/show_bug.cgi?id=222154

        Reviewed by Chris Fleizach and Darin Adler.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::textMarkerRangeForRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeForRange):

2021-02-20  Chris Fleizach  <cfleizach@apple.com>

        AX: Image should report the embedded accessibility description if available
        https://bugs.webkit.org/show_bug.cgi?id=221875
        <rdar://problem/74320584>

        Reviewed by Jer Noble.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getEmbeddedImageDescription):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::embeddedImageDescription const):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::embeddedImageDescription const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::embeddedImageDescription const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::embeddedImageDescription const):

2021-02-20  Peng Liu  <peng.liu6@apple.com>

        Video elements do not work as sources for TexImage2D calls in GPU Process
        https://bugs.webkit.org/show_bug.cgi?id=218184

        Reviewed by Jer Noble.

        * Scripts/generate-gpup-webgl:

2021-02-20  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Store and report source unlinkable tokens
        https://bugs.webkit.org/show_bug.cgi?id=222208
        <rdar://problem/73582032>

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setFraudPreventionValuesForTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setFraudPreventionValuesForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Rebases some test cases.

2021-02-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL GPU process IPC should use shared memory for asynchronous messages
        https://bugs.webkit.org/show_bug.cgi?id=219641
        <rdar://problem/72340651>

        Reviewed by Geoff Garen.

        Mark RemoteGraphicsContextGL message receiver as "Stream",
        a new variant of receiver.

        * Scripts/generate-gpup-webgl:

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

        Unreviewed, reverting r273115.

        Breaks autocorrect without the accompanying change in
        rdar://problem/74211293

        Reverted changeset:

        "Unconditionally return information in _autofillContext SPI
        when a field is focused"
        https://bugs.webkit.org/show_bug.cgi?id=221828
        https://commits.webkit.org/r273115

2021-02-20  Aakash Jain  <aakash_jain@apple.com>

        Revert r272384 [Python-3] Change shebang in git-webkit
        https://bugs.webkit.org/show_bug.cgi?id=221412
 
        Unreviewed infrastructure fix.

        Revert to Python 2 for git-webkit command because of auto-install issues.
        * CISupport/ews-build/steps.py:
        * CISupport/ews-build/steps_unittest.py:

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

        Review remaining usage of autorelease to make sure it is necessary
        https://bugs.webkit.org/show_bug.cgi?id=222177

        Reviewed by Geoffrey Garen.

        * TestRunnerShared/mac/NSPasteboardAdditions.mm:
        (+[NSPasteboard _modernPasteboardType:]):
        * TestWebKitAPI/Tests/JavaScriptCore/JSRunLoopTimer.mm:
        (TestWebKitAPI::triggerGC):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuImgWithVideo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (-[ContentRuleListNotificationDelegate webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceManagementRestrictions.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        (runDragStartDataTestCase):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/JITEnabled.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ReparentWebViewTimeout.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        (-[ResourceLoadStatisticsSchemeHandler webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (-[UITestDelegate webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (webViewForScriptMessageHandlerMultipleHandlerRemovalTest):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[SyncErrorScheme webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (TestWebKitAPI::TEST):

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

        [iOS] Specify a _UIDataOwner when reading or writing from the system pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=222072
        <rdar://problem/74208576>

        Reviewed by Devin Rousso.

        Add a couple of new API tests to verify that `+[UIPasteboard _performAsDataOwner:block:]` is invoked with the
        expected data owner type when copying and pasting.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (+[TestUIPasteboard _performAsDataOwner:block:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView contentsAsString]):

        Additionally add a helper method to grab a `WKWebView`'s contents as an `NSString`, just for convenience.

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

        NSError returned by WebKit API should actually conform to NSSecureCoding
        https://bugs.webkit.org/show_bug.cgi?id=222204
        <rdar://problem/63893583>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate waitForDidFailProvisionalNavigation]):

2021-02-16  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Generate secret token and corresponding unlinkable token
        https://bugs.webkit.org/show_bug.cgi?id=222019
        <rdar://problem/73581412>

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        Add tests.

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

        [iOS][FCR] Enable the new appearance by default
        https://bugs.webkit.org/show_bug.cgi?id=222015
        <rdar://problem/74415537>

        Reviewed by Wenson Hsieh.

        Rebaselined tests to account for changes to <input> and
        <textarea> elements.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (DocumentEditingContext.SpatialRequestInTextField):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (DragAndDropTests.BackgroundImageLinkToInput):
        (DragAndDropTests.ContentEditableToTextarea):
        (DragAndDropTests.ImageInLinkToInput):
        (DragAndDropTests.LinkToInput):
        (DragAndDropTests.TextAreaToInput):
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (KeyboardInputTests.SelectionClipRectsWhenPresentingInputView):

2021-02-19  Aakash Jain  <aakash_jain@apple.com>

        [ews] Ensure that the test failures are listed in sorted order
        https://bugs.webkit.org/show_bug.cgi?id=222176

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ReRunJavaScriptCoreTests.evaluateCommand):
        (AnalyzeJSCTestsResults.start):
        (RunWebKitTests.commandComplete):
        (ReRunWebKitTests.evaluateCommand):
        (ReRunWebKitTests.commandComplete):
        * CISupport/ews-build/steps_unittest.py:
        (TestAnalyzeJSCTestsResults.test_multiple_new_stress_failure):
        (TestAnalyzeJSCTestsResults.test_multiple_new_binary_failure):

2021-02-19  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add clean command
        https://bugs.webkit.org/show_bug.cgi?id=222135
        <rdar://problem/74496504>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git):
        (Git.clean): Throw away all local changes.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn):
        (Svn.clean): Throw away all local changes, delete untracked files.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add Clean command
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/clean.py: Added.
        (Clean): Command to remove all local changes from the current checkout.

2021-02-19  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Request server public key to generate secret token
        https://bugs.webkit.org/show_bug.cgi?id=222141
        <rdar://problem/74462955>

        Reviewed by John Wilander.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateClickMeasurementTokenPublicKeyURLForTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setPrivateClickMeasurementTokenPublicKeyURLForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Paperwork to add a way to set test URL.

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

        Update WKWebView getUserMedia delegate to latest proposal
        https://bugs.webkit.org/show_bug.cgi?id=222103

        Reviewed by Eric Carlson.

        Introduce UserMediaCaptureUIDelegate to share more code between tests.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]):
        (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]):
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h: Added.
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm: Added.
        (-[UserMediaCaptureUIDelegate init]):
        (-[UserMediaCaptureUIDelegate wasPrompted]):
        (-[UserMediaCaptureUIDelegate resetWasPrompted]):
        (-[UserMediaCaptureUIDelegate waitUntilPrompted]):
        (-[UserMediaCaptureUIDelegate setAudioDecision:]):
        (-[UserMediaCaptureUIDelegate setVideoDecision:]):
        (-[UserMediaCaptureUIDelegate _webView:requestMediaCapturePermission:video:decisionHandler:]):
        (-[UserMediaCaptureUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):

2021-02-18  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Gardening debug OffscreenCanvas crashes

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json: Update bug number after
        last gardening.

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

        MotionMark scores are super sensitive to a single long frame
        https://bugs.webkit.org/show_bug.cgi?id=220847
        <rdar://problem/74152743>

        Unreviewed.

        Upgrade motionmark1.1.plan to r273122.

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

2021-02-18  Ricky Mondello  <rmondello@apple.com>

        Unconditionally return information in _autofillContext SPI when a field is focused
        https://bugs.webkit.org/show_bug.cgi?id=221828
        rdar://74211237

        Reviewed by Darin Adler.

        Tests updated by Wenson Hsieh.

        Rebaseline tests.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (-[AutoFillTestView acceptsAutoFillLoginCredentials]): Renamed in line with the Password AutoFill-related
            contract these tests are about.

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

        Add null check in _getMainResourceDataWithCompletionHandler
        https://bugs.webkit.org/show_bug.cgi?id=222139
        <rdar://problem/74449438>

        Reviewed by Tim Horton.

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

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

        Fix null dereferencing in RangeResponseGenerator::giveResponseToTasksWithFinishedRanges
        https://bugs.webkit.org/show_bug.cgi?id=222126

        Reviewed by Darin Adler.

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

2021-02-18  Kate Cheney  <katherine_cheney@apple.com>

        Add support for non app-bound requests
        https://bugs.webkit.org/show_bug.cgi?id=221909
        <rdar://problem/73512988>

        API test coverage.

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView lastNavigationWasAppBound:]):

2021-02-18  Sam Sneddon  <gsnedders@apple.com>

        Undeprecate some webkit-patch commands
        https://bugs.webkit.org/show_bug.cgi?id=222106

        Reviewed by Jonathan Bedard.

        This removes the deprecated decorator from the webkit-patch commands we quickly heard are
        actually used: apply-watchlist-local, check-style, clean, create-revert, prepare-revert,
        and validate-changelog.

        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py:
        * Scripts/webkitpy/tool/commands/download.py:

2021-02-18  Don Olmstead  <don.olmstead@sony.com>

        Skip platform specific Python tests
        https://bugs.webkit.org/show_bug.cgi?id=222066

        Reviewed by Jonathan Bedard.

        Catalog platform specific tests based on operating system. Skip those tests that don't
        apply to the platform. Mac should continue to run all tests since it runs the webkitpy
        tests in EWS.

        * Scripts/webkitpy/test/main.py:

2021-02-18  Aakash Jain  <aakash_jain@apple.com>

        [ews] Ensure that uat instance doesn't comment on bugs
        https://bugs.webkit.org/show_bug.cgi?id=222035

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (SetCommitQueueMinusFlagOnPatch.getResultSummary):
        (SetCommitQueueMinusFlagOnPatch.doStepIf):
        (CommentOnBug.getResultSummary):
        (CommentOnBug.doStepIf):
        (PushCommitToWebKitRepo.doStepIf):
        * CISupport/ews-build/steps_unittest.py: Updated unit-test accordingly.

2021-02-18  John Wilander  <wilander@apple.com>

        PCM: Request signature for unlinkable token using attributionSourceNonce
        https://bugs.webkit.org/show_bug.cgi?id=222076
        <rdar://73581651>

        Reviewed by Chris Dumez.

        The changes to the TestRunner are:
        - Rename setPrivateClickMeasurementConversionURLForTesting() to
        setPrivateClickMeasurementAttributionReportURLForTesting() to align with other
        naming and make it clear that it does.
        - Add the new setPrivateClickMeasurementTokenSignatureURLForTesting() used for
        testing the token signing request.

        The changes to API tests are to adopt renamed functions in
        WebCore::PrivateClickMeasurement:
        - reportURL() renamed attributionReportURL().
        - json() renamed attributionReportJSON().

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateClickMeasurementTokenSignatureURLForTesting):
        (WTR::TestRunner::setPrivateClickMeasurementAttributionReportURLForTesting):
        (WTR::TestRunner::setPrivateClickMeasurementConversionURLForTesting): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setPrivateClickMeasurementTokenSignatureURLForTesting):
        (WTR::TestController::setPrivateClickMeasurementAttributionReportURLForTesting):
        (WTR::TestController::setPrivateClickMeasurementConversionURLForTesting): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        Set ENABLE_VP9 to 1 on IOS
        https://bugs.webkit.org/show_bug.cgi?id=222042
        <rdar://problem/74433523>

        Reviewed by Eric Carlson.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        Disable VP9Decoder in ios simulator since there is no support for it through VTB.

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

        [GTK] Remove all Google user agent quirks except for Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=222039

        Reviewed by Carlos Garcia Campos.

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

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

        Disable RangeResponseGenerator again.
        https://bugs.webkit.org/show_bug.cgi?id=221072

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

2021-02-18  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL contexts do not work as source for Context2D drawImage calls in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=221811

        Reviewed by Darin Adler.

        Update two signatures for manually implemented messages.

        * Scripts/generate-gpup-webgl:

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

        Add SPI for getting size of PDF document during printing
        https://bugs.webkit.org/show_bug.cgi?id=222064
        <rdar://problem/74370891>

        Reviewed by Geoff Garen and Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/test_print.pdf: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        (-[PrintUIDelegate _webView:printFrame:pdfFirstPageSize:completionHandler:]):
        (-[PrintUIDelegate waitForPageSize]):
        (-[PrintUIDelegate lastPrintedFrame]):
        (TEST):

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

        Page updates and rAF callbacks should run at a frequency close to 60Hz on high refresh-rate displays
        https://bugs.webkit.org/show_bug.cgi?id=221673
        <rdar://problem/72398605>

        Reviewed by Simon Fraser.

        Add API tests for the methods in AnimationFrameRate.h.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AnimationFrameRate.cpp: Added.

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

        Reduce explicit usage of [objC autorelease] in WebKit even further
        https://bugs.webkit.org/show_bug.cgi?id=222060

        Reviewed by Darin Adler.

        Reduce explicit usage of [objC autorelease] in WebKit further by using RetainPtr.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        (-[DumpRenderTreeWebScrollView initWithFrame:]):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (createJSStringRef):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (dumpFramesAsText):
        (dump):
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[SyntheticTouch touchWithLocation:phase:identifier:]):
        (-[EventSendingController beginDragWithFiles:]):
        (+[EventSendingController replaySavedEvents]):
        * DumpRenderTree/mac/PolicyDelegate.mm:
        (dispositionTypeFromContentDispositionHeader):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):
        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm:
        (+[EventSerializer dictionaryForEvent:relativeToTime:]):
        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (-[LayoutTestSpellChecker setResultsFromJSValue:inContext:]):
        * TestWebKitAPI/Tests/JavaScriptCore/JSRunLoopTimer.mm:
        (TestWebKitAPI::triggerGC):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuImgWithVideo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegatePlugIn.mm:
        (-[BundleFormDelegatePlugIn _webProcessPlugInBrowserContextController:willBeginInputSessionForElement:inFrame:userIsInteracting:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TEST):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:
        (readMarkupFromPasteboard):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (-[ContentRuleListNotificationDelegate webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        (readHTMLStringFromPasteboard):
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceManagementRestrictions.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DisplayName.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):
        (TestWebKitAPI::mutateFile):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (getNextMessage):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:
        (getNextMessage):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/JITEnabled.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NavigationAction.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Preferences.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ReparentWebViewTimeout.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        (-[ResourceLoadStatisticsSchemeHandler webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:]):
        (+[TestLookupResult resultWithResults:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::makeWebViewWith):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (-[UITestDelegate webView:startURLSchemeTask:]):
        (-[ModalDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (webViewForScriptMessageHandlerMultipleHandlerRemovalTest):
        (TEST):
        (-[AsyncScriptMessageHandler userContentController:didReceiveScriptMessage:replyHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentWorld.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyRichTextWithImage):
        (platformImageWithData):
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (-[UIDelegate _webView:configurationForLocalInspector:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[TaskSchemeHandler webView:startURLSchemeTask:]):
        (-[SyncErrorScheme webView:startURLSchemeTask:]):
        (-[FrameSchemeHandler webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebGLPolicy.mm:
        (-[WebGLTestDelegate webView:startURLSchemeTask:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm:
        (getNextMessage):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (getNextMessage):
        (runWebsiteDataStoreCustomPaths):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[ContentBlockingWebsitePoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[AutoplayPoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[AsyncAutoplayPoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (TEST):
        (-[TestSchemeHandler webView:startURLSchemeTask:]):
        (respond):
        (-[CustomHeaderFieldsDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomNavigatorPlatformDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[PopUpPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/DateTimeInputsAccessoryViewTests.mm:
        (cellForRowAtIndexPath):
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::swizzledResizableSnapshotViewFromRect):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (-[InspectorBarController convertAttributes:]):
        * TestWebKitAPI/Tests/mac/JavascriptURLNavigation.mm:
        (-[JavascriptURLNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        (+[FrameLoadCompletionListener listenerWithCompletionBlock:]):
        (TestWebKitAPI::getTestImage):
        * TestWebKitAPI/Tests/mac/MemoryPressureHandler.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WKWebViewMacEditingTests.mm:
        (TEST):
        * TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:
        (imageFromData):
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (additionalResponseHeaders):
        (+[TestProtocol additionalResponseHeaders]):
        (+[TestProtocol setAdditionalResponseHeaders:]):
        (-[TestProtocol startLoading]):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):
        (-[TestWKWebView initWithFrame:]):
        (-[TestWKWebView initWithFrame:configuration:processPoolConfiguration:]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[MockDropSession initWithProviders:location:window:allowMove:]):
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator _webView:willUpdateDropProposalToProposal:forSession:]):
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (defaultExternalDragImage):
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator runFrom:to:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::createJSStringRef):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformInitializeDataStore):
        (WTR::TestController::platformCreateOtherPage):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator sendEventStream:completionBlock:]):

2021-02-17  Alex Christensen  <achristensen@webkit.org>

        Fix a few issues with RangeResponseGenerator
        https://bugs.webkit.org/show_bug.cgi?id=222087

        Reviewed by Jer Noble.

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

2021-02-17  Lauro Moura  <lmoura@igalia.com>

        [GTK] Gardening most common EWS flakiness

        Unreviewed test gardening.

        Flakiness happening mostly on a single bot. Marking them temporarily
        as flaky until investigation is performed.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-02-17  Don Olmstead  <don.olmstead@sony.com>

        [Python-3] Child process environment on Windows can only contain strings
        https://bugs.webkit.org/show_bug.cgi?id=222012
        <rdar://problem/74437205>

        Unreviewed test runner fix.

        Use old Python 2 behavior of encoding when running with that version.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.popen):

2021-02-17  Don Olmstead  <don.olmstead@sony.com>

        _W3CTestConverter tests don't run on Windows
        https://bugs.webkit.org/show_bug.cgi?id=221855

        Reviewed by Jonathan Bedard.

        In _W3CTestConverter it retrieves a relative path and then uses that to populate a
        regular expression. On Windows the path separator is `\` which causes a re.error due to
        a bad escape. Normalize the path to use `/` in this code.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.__init__):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (W3CTestConverterTest.verify_test_harness_paths):

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

        [iOS][FCR] Add new datalist dropdown for text inputs
        https://bugs.webkit.org/show_bug.cgi?id=222008
        <rdar://problem/74410513>

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):

        Implemented this method to enable testing selection of datalist options
        on iOS.

        (WTR::UIScriptControllerIOS::isShowingDataListSuggestions const):

        The new appearance does not use a UIPickerView, check for the presence
        of the new view controller instead.

2021-02-17  Brent Fulgham  <bfulgham@apple.com>

        Follow-up fix after r273023.
        https://bugs.webkit.org/show_bug.cgi?id=221641
        <rdar://problem/74166568>

        Reviewed by Chris Dumez.

        Correct the string comparison for the back/forward list test.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewLoadAPIs.mm:

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

        DumpRenderTree's createWebViewAndOffscreenWindow() should return a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=222068

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (createGlobalWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):

2021-02-17  Alex Christensen  <achristensen@webkit.org>

        Effectively revert r272908
        https://bugs.webkit.org/show_bug.cgi?id=221072

        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm:
        (TestWebKitAPI::runVideoTest):
        (TestWebKitAPI::TEST):

2021-02-17  Sam Sneddon  <gsnedders@apple.com>

        Add deprecation notices to believed-unused commands in webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=222058

        Reviewed by Jonathan Bedard.

        This only adds notices, asking any users of the commands to comment on
        https://bugs.webkit.org/show_bug.cgi?id=221991; it doesn't in any way break the commands,
        and the deprecation is easily undone.

        * Scripts/webkitpy/tool/commands/adduserstogroups.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py:
        * Scripts/webkitpy/tool/commands/bugfortest.py:
        * Scripts/webkitpy/tool/commands/bugsearch.py:
        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs): Strip the warnings from unittest output to avoid changing every test
        (CommandsTest._remove_deprecated_warning):
        * Scripts/webkitpy/tool/commands/deprecatedcommand.py: Added. Class decorator for Commands output notice.
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/findusers.py:
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        * Scripts/webkitpy/tool/commands/openbugs.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Deprecate running tests through webkit-patch, even indirectly.
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):

2021-02-17  Brent Fulgham  <bfulgham@apple.com>

        Expand stubs to thread actual NSURLRequest/NSURLResponse for the new simulated-request API
        https://bugs.webkit.org/show_bug.cgi?id=221641
        <rdar://problem/74166568>

        Reviewed by Chris Dumez.

        Add a new test to confirm that simulated loads work and are properly added to the
        back-forward list.

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

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

        Use smart pointer for WebView ownership in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=222009

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (globalWebView):
        (createWebViewAndOffscreenWindow):
        (destroyGlobalWebViewAndOffscreenWindow):
        (createGlobalWebViewAndOffscreenWindow):
        (dumpRenderTree):
        (runTest):
        (destroyWebViewAndOffscreenWindow): Deleted.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):

2021-02-17  Don Olmstead  <don.olmstead@sony.com>

        [Python-3] UnicodeDecodeError when checking for an interpreter on Windows
        https://bugs.webkit.org/show_bug.cgi?id=222059

        Reviewed by Jonathan Bedard.

        When calling open to determine which interpreter should be used Python 3 was throwing a
        UnicodeDecodeError. On Python 3 an encoding of cp437 is specified since all characters are
        defined in it. Python 2 does not have this problem and throws with a TypeError if an
        encoding argument is passed.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.popen):

2021-02-17  Don Olmstead  <don.olmstead@sony.com>

        [Python-3] Catch winerror.ERROR_INVALID_FUNCTION in ServerProcess
        https://bugs.webkit.org/show_bug.cgi?id=222047

        Reviewed by Jonathan Bedard.

        The catch statement in _non_blocking_read_win32 throws a TypeError because the 'error'
        object is not subscriptable. The block assumed a pywintypes.error so it was modified
        to catch that exception. Using the proper type stopped that occurance but surfaced
        additional issues.

        When shutting down the server process the call to win32pipe.PeekNamedPipe can throw a
        winerror.ERROR_INVALID_FUNCTION. There isn't really any documentation on MSDN pointing to
        why this error would be thrown. ERROR_INVALID_FUNCTION seems to be around device driver
        issues so the best guess is that the handle is no longer valid at this point of execution.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._non_blocking_read_win32):

2021-02-17  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Failure to retrieve commit in EWS (Investigation)
        https://bugs.webkit.org/show_bug.cgi?id=222050
        <rdar://problem/74439957>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.request): Increase logging.

2021-02-17  Don Olmstead  <don.olmstead@sony.com>

        [Python-3] Child process environment on Windows can only contain strings
        https://bugs.webkit.org/show_bug.cgi?id=222012

        Reviewed by Jonathan Bedard.

        When running Python 3 on Windows a 'TypeError: environment can only contain strings' is
        thrown during execution of run-webkit-tests. If the Executive is running on native Windows
        it converts the keys and values of the environment dictionary into strings and passes them
        into the popen call.

        In ServerProcess it was modifying the environment as well. This code was removed so
        Executive is the only place that handles this issue.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.popen):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__):

2021-02-17  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Support unicode when printing changelogs
        https://bugs.webkit.org/show_bug.cgi?id=222044
        <rdar://problem/74435276>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:
        (Find.main): Explicitly print unicode.

2021-02-17  Aakash Jain  <aakash_jain@apple.com>

        commit-queue should retry when it fails to commit
        https://bugs.webkit.org/show_bug.cgi?id=222038

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (PushCommitToWebKitRepo):
        (PushCommitToWebKitRepo.evaluateCommand):
        * CISupport/ews-build/steps_unittest.py:

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

        [macOS] Introduce a new context menu item to preview images
        https://bugs.webkit.org/show_bug.cgi?id=221917
        <rdar://problem/74363578>

        Reviewed by Darin Adler and Tim Horton.

        Rebaseline an existing API test, since `ContextMenuItemTagRevealImage` is now the last valid enum.

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

2021-02-17  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak SDK] Script 'webkit-flatpak-run-nightly' expects different format for a built product name
        https://bugs.webkit.org/show_bug.cgi?id=221950

        Reviewed by Philippe Normand.

        The name format for uploaded built products for WPE and GTK has
        changed. Now the format is: '[release|debug]_rXXXXXX.zip'. The script
        is still expecting the former name format, so it needs to be updated.

        * Scripts/webkit-flatpak-run-nightly:

2021-02-17  Andres Gonzalez  <andresg_22@apple.com>

        Support aria-errormessage on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=221975
        <rdar://problem/74397704>

        Reviewed by Chris Fleizach.

        - Added AccessibilityUIElement::errorMessageElements on iOS and MacOS,
        which is used in the new test.
        - For completion, added implementation for ariaErrorMessageElementAtIndex
        on iOS, which is not in use at the moment.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::errorMessageElements const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::errorMessageElements const): Added.
        (WTR::AccessibilityUIElement::ariaDetailsElementAtIndex): Added.
        (WTR::AccessibilityUIElement::ariaErrorMessageElementAtIndex): Added.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::errorMessageElements const): Added.

2021-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r272636) [GTK] Crash and failures in API test /WebKit2Gtk/TestResources
        https://bugs.webkit.org/show_bug.cgi?id=221672

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Reduce the use of SoupURI in unit tests in preparation for libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=221963

        Reviewed by Adrian Perez de Castro.

        Now that URL is in WTF we can just use it instead.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationRequest):
        (ProxyAuthenticationTest::ProxyAuthenticationTest):
        (ProxyAuthenticationTest::proxyServerPortAsString):
        (testWebViewAuthenticationProxy):
        (testWebViewAuthenticationProxyHTTPS):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testLoadFailedWithTLSErrors):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionPageID):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (ProxyTest::ProxyTest):
        (ProxyTest::proxyServerPortAsString):
        (testWebContextProxySettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (setInitialNotificationPermissionsAllowedCallback):
        (setInitialNotificationPermissionsDisallowedCallback):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::run):
        (WebKitTestServer::addWebSocketHandler):
        (WebKitTestServer::removeWebSocketHandler):
        (WebKitTestServer::getWebSocketURIForPath const):
        (WebKitTestServer::getURIForPath const):
        (WebKitTestServer::port const):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:
        (WebKitTestServer::baseURL const):
        (WebKitTestServer::baseWebSocketURL const):

2021-02-16  Andres Gonzalez  <andresg_22@apple.com>

        Use makeJSArray in both AccessibilityUIElementMac/IOS.mm.
        https://bugs.webkit.org/show_bug.cgi?id=221999
        <rdar://problem/74407113>

        Reviewed by Chris Fleizach.

        We had functions makeJSArray and convertElementsToObjectArray doing
        exactly the same thing, one for Mac and One for iOS.
        - Moved makeJSArray to the platform independent header so it can be used
        in both platforms.
        - Moved the retrieval of the JS context inside makeJSArray, so that the
        caller doesn't have to do that.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::makeJSArray): Added to platform independent header.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::elementsForRange):
        (WTR::convertElementsToObjectArray): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::searchTextWithCriteria):
        (WTR::makeJSArray): Deleted.

2021-02-16  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Document package usage
        https://bugs.webkit.org/show_bug.cgi?id=221986
        <rdar://problem/74401363>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/README.md: Add library.
        * Scripts/libraries/webkitscmpy/README.md:
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.from_path): Remove unneeded space.

2021-02-16  Kate Cheney  <katherine_cheney@apple.com>

        Clean up WKWebView media API
        https://bugs.webkit.org/show_bug.cgi?id=221929
        <rdar://problem/73460121>

        Reviewed by Youenn Fablet.

        Update naming.

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

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

        [GTK] Need new user agent quirk for Google Docs and Google Drive
        https://bugs.webkit.org/show_bug.cgi?id=221845

        Reviewed by Adrian Perez de Castro.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasFirefoxBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasLinuxPlatformQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::assertUserAgentForURLHasInternetExplorerBrowserQuirk): Deleted.
        (TestWebKitAPI::assertUserAgentForURLHasWindowsPlatformQuirk): Deleted.

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

        Add API to disable HTTPS upgrade
        https://bugs.webkit.org/show_bug.cgi?id=221591
        <rdar://problem/56254945>

        Reviewed by Geoff Garen.

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

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

        Reduce explicit usage of [objC release] in WebKit even more
        https://bugs.webkit.org/show_bug.cgi?id=221914

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (destroyWebViewAndOffscreenWindow):
        (releaseAndZero):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (+[DumpRenderTreePasteboard releaseLocalPasteboards]):
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController clearSavedEvents]):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        (TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (setUpCookieTestWithWebsiteDataStore):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (runTestWithWebsiteDataStore):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        * TestWebKitAPI/Tests/WebKitObjC/UserContentTest.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/WebKitObjC/WKBrowsingContextGroupTest.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitObjC/WKBrowsingContextLoadDelegateTest.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/CandidateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DOMNodeFromJSObject.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SubresourceErrorCrash.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/TypingStyleCrash.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WebScriptObjectDescription.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WebViewCanPasteURL.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WebViewCanPasteZeroPng.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WebViewDidCreateJavaScriptContext.mm:
        (-[DidCreateJavaScriptContextFrameLoadDelegate webView:didCreateJavaScriptContext:forFrame:]):
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (+[TestProtocol registerWithScheme:]):
        (+[TestProtocol unregister]):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::addChromeInputField):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (+[WebKitTestRunnerPasteboard releaseLocalPasteboards]):

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

        Set a default path for device ID hash salts
        https://bugs.webkit.org/show_bug.cgi?id=221955

        Reviewed by Eric Carlson.

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

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

        Synthesize range responses if needed in WebCoreNSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=221072

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebCore/ParsedContentRange.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::clientCertServer):
        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm:
        (TestWebKitAPI::testVideoBytes):
        (TestWebKitAPI::runVideoTest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::HTTPResponse::HTTPResponse):
        (TestWebKitAPI::HTTPServer::HTTPResponse::HTTPResponse): Deleted.
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::RequestData::RequestData):
        (TestWebKitAPI::appendToVector):
        (TestWebKitAPI::HTTPServer::parsePath):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        (TestWebKitAPI::HTTPResponse::bodyFromString):
        (TestWebKitAPI::HTTPResponse::serialize):

2021-02-15  John Wilander  <wilander@apple.com>

        PCM: Add high entropy attributionSourceNonce attribute to anchor tags
        https://bugs.webkit.org/show_bug.cgi?id=221934
        <rdar://73581230>

        Reviewed by Jiewen Tan.

        In Private Click Measurement (PCM), the source site should have the option to
        provide a high entropy nonce with which PCM can asynchronously validate its
        subsequent, asynchronous request for a signature of its unlinkable token.

        The nonce attribute's name is attributionSourceNonce and it's a
        128-bit/16-byte Base64URL encoded string.

        The attribute is behind the experimental feature flag
        PrivateClickMeasurementFraudPrevention.

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

2021-02-15  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add python 3 support - part 2
        https://bugs.webkit.org/show_bug.cgi?id=221899

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py: Map unicode() to str() for python 3, in order to keep code compatible with 
        both Python 2 and 3.
        (ValidateCommiterAndReviewer.load_contributors): Used items instead of iteritems.
        (PrintConfiguration.convert_build_to_os_name): Ditto.
        * CISupport/ews-build/steps_unittest.py:
        (BuildStepMixinAdditions.executedSteps): Converted filter to list comprehension.
        * CISupport/ews-build/factories_unittest.py: Ditto.

2021-02-15  Jonathan Bedard  <jbedard@apple.com>

        [results.webkit.org] Distinguish hash and revision
        https://bugs.webkit.org/show_bug.cgi?id=221861
        <rdar://problem/74298457>

        Reviewed by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit.py:
        (Commit.from_json): Pass hash and revision via json.
        (Commit.__init__): Convert id to hash or revision.

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

        Prepare for adding relative color support
        https://bugs.webkit.org/show_bug.cgi?id=221881

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        Update HSLA tests to account for HSLA now using 0-360, 0-100, 0-100 bounds rather than 0-1, 0-1, 0-1.

2021-02-15  Adam Roben  <aroben@apple.com>

        Add `git commit -v` support to commit-log-editor
        https://bugs.webkit.org/show_bug.cgi?id=221903

        Reviewed by Darin Adler.

        From the git-commit documentation:
        
            -v, --verbose
                Show unified diff between the HEAD commit and what would be
                committed at the bottom of the commit message template to help
                the user describe the commit by reminding what changes the
                commit has. Note that this diff output doesn't have its lines
                prefixed with #. This diff will not be a part of the commit
                message. See the commit.verbose configuration variable in
                git-config(1).
        
        commit-log-editor was getting confused about the diff not being prefixed
        with #. Now it looks for the "cut line" that Git puts in the log just
        before the diff. It looks like this:
        
            # ------------------------ >8 ------------------------
        
        See https://github.com/git/git/blob/e6362826a0409539642a5738db61827e5978e2e4/wt-status.c#L24-L25
        
        * Scripts/commit-log-editor: Keep track of whether the "cut line" has
          been found. If it has, consider it and everything after it to be part
          of the log contents but not the existing log message.

2021-02-14  Peng Liu  <peng.liu6@apple.com>

        [GPUP] Move UseGPUProcessForMediaEnabled from WebPreferencesInternal to WebPreferencesExperimental
        https://bugs.webkit.org/show_bug.cgi?id=221310

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        Use `WKPreferencesSetBoolValueForKeyForTesting()` to set the preference for testing.
        It works no matter the preference is internal or experimental.

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

        Reduce explicit usage of [objC release] in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=221780
        <rdar://problem/74282389>

        Reviewed by Darin Adler.

        Apply review feedback from Darin Adler and Sam Weinig after r272789.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addChromeInputField):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::addChromeInputField):

2021-02-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Provide SPI to query local credentials
        https://bugs.webkit.org/show_bug.cgi?id=221743
        <rdar://problem/65849832>

        Reviewed by Brent Fulgham.

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

2021-02-12  Michael Saboff  <msaboff@apple.com>

        [ARM64e] Harden Mach exception handling
        https://bugs.webkit.org/show_bug.cgi?id=221841

        Reviewed by Geoffrey Garen.

        Updated test to check that the exception type matches the one we registered for.

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

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

        [Python-3] Use pathlib to generate file:// urls
        https://bugs.webkit.org/show_bug.cgi?id=221850

        Reviewed by Jonathan Bedard.

        Use pathlib which can generate file:// urls for *nix and Windows. The previous logic
        only worked on *nix.

        Add the pathlib backport for 2.7.

        * Scripts/webkitpy/__init__.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SVNTestRepository.setup):
        (SVNTestRepository._setup_mock_repo):

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

        [Python-3] base64.encodestring is deprecated
        https://bugs.webkit.org/show_bug.cgi?id=221842

        Reviewed by Jonathan Bedard.

        In Python 3.9 base64.encodestring was completely removed. Replacing with base64.b64encode
        which works in Python 2/3 and is used by the code being tested.

        * Scripts/webkitpy/w3c/wpt_github_unittest.py:
        (WPTGitHubTest.test_auth_token):

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

        Run additional webkitpy tests on Windows by default
        https://bugs.webkit.org/show_bug.cgi?id=221851

        Reviewed by Jonathan Bedard.

        The tests in WebKit/Scripts and webkitpy.common.config pass on Windows.

        The WebKit/Scripts tests are not run when using Cygwin. Without any port option its
        the only way to differentiate WinCairo, which doesn't use Cygwin, and AppleWin, which
        does.

        * Scripts/webkitpy/test/main.py:

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

        REGRESSION (r268421): TestWebKitAPI.WebKit.PreferenceChanges* tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=221848

        Unreviewed test gardening.

        TestWebKitAPI.WebKit.GlobalPreferenceChangesUsingDefaultsWrite is also flaky, so disable it for Big Sur.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:

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

        webkitpy.xcode only relevant for darwin platforms
        https://bugs.webkit.org/show_bug.cgi?id=221837

        Reviewed by Jonathan Bedard.

        The tests in webkitpy.xcode are Darwin specific and should only run on that platform.

        This issue was discovered when running the tests with Python 3 on Windows which failed
        a number of tests in the suite. These tests may run successfully on *nix platforms but
        aren't actually relevant.

        * Scripts/webkitpy/test/main.py:

2021-02-12  Jonathan Bedard  <jbedard@apple.com>

        [webkit-patch] Post both revision and identifier to bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=221829
        <rdar://problem/74282619>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/comments.py:
        (bug_comment_from_svn_revision): Include subversion revision.
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest.test_empty_state):

2021-02-12  Jonathan Bedard  <jbedard@apple.com>

        [webkit-patch] Use identifiers when posting to bugzilla (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=221724
        <rdar://problem/74209525>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn): Keep track of the set of mock remotes.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn._cache_path): Change the cache path if we detect the current host is being mocked.

2021-02-12  Aakash Jain  <aakash_jain@apple.com>

        Delete old build.webkit.org templates
        https://bugs.webkit.org/show_bug.cgi?id=221692

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/templates: Removed.

2021-02-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Avoid hosting results on S3
        https://bugs.webkit.org/show_bug.cgi?id=221822

        Reviewed by Jonathan Bedard.

        Reverts r271801, r272220 and r272399.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.__init__):
        (ExtractTestResults.resultDirectoryURL):

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

        Reduce explicit usage of [objC release] in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=221780

        Reviewed by Alex Christensen.

        Reduce explicit usage of [objC release] in WebKit by using smart pointers.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::addNotificationListener):
        (AccessibilityUIElement::removeNotificationListener):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::addNotificationListener):
        (AccessibilityUIElement::removeNotificationListener):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (destroyWebViewAndOffscreenWindow):
        (dumpFrameAsPDF):
        (dumpBackForwardListForWebView):
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        (-[EventSendingController sentTouchEventOfType:]):
        (-[EventSendingController touchEnd]):
        (-[EventSendingController touchCancel]):
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::clearBackForwardList):
        (TestRunner::keepWebHistory):
        (TestRunner::setDatabaseQuota):
        (TestRunner::setMockDeviceOrientation):
        (TestRunner::setMockGeolocationPosition):
        (-[APITestDelegateIPhone initWithTestRunner:utf8Data:baseURL:]):
        (-[APITestDelegateIPhone dealloc]):
        (-[APITestDelegateIPhone run]):
        (-[APITestDelegateIPhone _cleanUp]):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (-[SynchronousLoader dealloc]):
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):
        (+[SynchronousLoader makeRequest:withUsername:password:]):
        (TestRunner::addChromeInputField):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:]):
        (-[UIDelegate timerFired]):
        (-[UIDelegate dealloc]):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator interpolatedEvents:]):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::addChromeInputField):
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.h:
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.mm:
        (-[WebKitTestRunnerDraggingInfo dealloc]):
        (-[WebKitTestRunnerDraggingInfo draggedImage]):
        (-[WebKitTestRunnerDraggingInfo draggingPasteboard]):
        (-[WebKitTestRunnerDraggingInfo draggingSource]):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (+[WebKitTestRunnerPasteboard _pasteboardWithName:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):

2021-02-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Delete unused Makefile
        https://bugs.webkit.org/show_bug.cgi?id=221721

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/Makefile: Removed.

2021-02-12  Kimmo Kinnunen  <kkinnunen@apple.com>

        GPU process WebGL context toDataURL does not work for non-premultiplied contexts
        https://bugs.webkit.org/show_bug.cgi?id=221748

        Reviewed by Myles C. Maxfield.

        Add support for generating IPC implementation for functions with RefPtr<>.

        * Scripts/generate-gpup-webgl:

2021-02-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] commit identifier should show main instead of trunk
        https://bugs.webkit.org/show_bug.cgi?id=221798

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ShowIdentifier.__init__): Increased timeout to 10 minutes (since first run might take a while).
        (ShowIdentifier.evaluateCommand):
        * CISupport/build-webkit-org/steps_unittest.py: Updated unit-tests.

2021-02-12  Jonathan Bedard  <jbedard@apple.com>

        [webkit-patch] Use identifiers when posting to bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=221724
        <rdar://problem/74209525>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/config/urls.py:
        (view_identifier_url): Return commits.webkit.org identifier link.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.mock_svn_remote): Return a mock context for a remote Svn instance.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/comments.py:
        (bug_comment_from_svn_revision): Query remote Subversion server to construct identifier link.
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest.test_empty_state): Mock context for a remote Svn instance.
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:

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

        Make WebKitLegacy.CrossPartitionFileSchemeAccess stop timing out on EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=206956

        * TestWebKitAPI/Tests/mac/CrossPartitionFileSchemeAccess.mm:
        This test times out sometimes, but only on bots. Let's kick the can down the road.

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

        Unreviewed, reverting r272603.

        Broke test, has room for improvement

        Reverted changeset:

        "Synthesize range responses if needed in WebCoreNSURLSession"
        https://bugs.webkit.org/show_bug.cgi?id=221072
        https://trac.webkit.org/changeset/272603

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

        [Python-3] Update pylint version
        https://bugs.webkit.org/show_bug.cgi?id=221785

        Reviewed by Jonathan Bedard.

        Update pylint on Python 3 to version 2.6.0 which supports >=3.5.
        
        Update pylint on Python 2.7 to the last 0.x version, 0.28.0. The logilab packages are
        specific to this version only so they are moved into the block. 

        * Scripts/webkitpy/__init__.py:

2021-02-11  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Update PHP module configuration
        https://bugs.webkit.org/show_bug.cgi?id=221776
        <rdar://problem/74248860>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Optionally exclude PHP init directory.
        * Scripts/webkitpy/port/base.py:
        (Port._darwin_php_version): Add -x version.

2021-02-11  Lauro Moura  <lmoura@igalia.com>

        [WPE] Fix WPEQt tests after r272707
        https://bugs.webkit.org/show_bug.cgi?id=220681

        Reviewed by Carlos Garcia Campos.

        Setting the title became async, so we must wait for it to be
        processed.

        Same patch as r271578, reapplying after original change was reapplied
        in r272707.

        * TestWebKitAPI/Tests/WPEQt/TestLoad.cpp:
        (TestLoad::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadHtml.cpp:
        (TestLoadHtml::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadRequest.cpp:
        (TestLoadRequest::main):
        * TestWebKitAPI/Tests/WPEQt/TestRunJavaScript.cpp:
        (TestRunJavaScript::main):

2021-02-11  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Use commits.webkit.org instead of trac
        https://bugs.webkit.org/show_bug.cgi?id=221764
        <rdar://problem/74242815>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/urls.py:
        (view_revision_url): 
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest.test_empty_state):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest._test_check_test_expectations):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (UpdateChangeLogsForRevertTest):

2021-02-11  Aakash Jain  <aakash_jain@apple.com>

        build.webkit.org should display commit identifier in builds
        https://bugs.webkit.org/show_bug.cgi?id=221730

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.finished):
        (ShowIdentifier): build-step to show commit identifier.
        (ShowIdentifier.__init__):
        (ShowIdentifier.start):
        (ShowIdentifier.evaluateCommand):
        (ShowIdentifier.getLastBuildStepByName):
        (ShowIdentifier.url_for_identifier):
        (ShowIdentifier.getResultSummary): Display custom failure message.
        (ShowIdentifier.hideStepIf): Hide this step if successful.
        * CISupport/build-webkit-org/steps_unittest.py:
        (BuildStepMixinAdditions.executedSteps): filter wasn't working as expected with python 3, replaced 
        with list comprehension.
        (TestShowIdentifier): Added unit-tests.
        (TestShowIdentifier.test_success):
        (TestShowIdentifier.test_failure):
        * CISupport/build-webkit-org/factories.py: Added ShowIdentifier build step.

2021-02-11  Aakash Jain  <aakash_jain@apple.com>

        JSC EWSes should be triggered by change in any jsc file
        https://bugs.webkit.org/show_bug.cgi?id=221756

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CheckPatchRelevance): Used generic jsc regex.
        * CISupport/ews-build/steps_unittest.py: Made the unit-tests more generic by using for loop to check multiple filenames.

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

        [MacOS] Enable Audio Capture in GPUProcess by default
        https://bugs.webkit.org/show_bug.cgi?id=221400

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptTestView haveStream:]):
        Increase timeout since capture might require spinning GPUProcess.

2021-02-11  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Fix env forwarding for older flatpak versions
        https://bugs.webkit.org/show_bug.cgi?id=221757

        Rubber-stamped by Philippe Normand.

        Older flatpak versions (pre 1.10) might not have been patched for the
        envvar CVE that triggered the new behavior and would still be
        receiving the environment through envvars instead of the --args file
        descriptor.

        * flatpak/webkit-bwrap:

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

        [CMake] WEBKIT_EXECUTABLE can incorrectly link framework
        https://bugs.webkit.org/show_bug.cgi?id=221703

        Reviewed by Michael Catanzaro.

        GTK compiles JavaScriptCore as a SHARED library but the symbols from WTF are not being
        properly exposed from it. Workaround this by linking WTF directly until GTK turns on
        hidden visibility and properly exports symbols.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:

2021-02-11  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Support multiple builds running at the same time
        https://bugs.webkit.org/show_bug.cgi?id=221711

        Reviewed by Philippe Normand.

        Instead of writing the environment to a file, read the --setenv
        arguments from the --args file descriptor passed to webkit-bwrap like
        bwrap itself would do.

        * flatpak/flatpakutils.py: Do not write the env file anymore
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/webkit-bwrap: Read the environment from the args file
        descriptor.

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

        [Webpage translation] Add support for the -_translate: action on WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=221713
        <rdar://problem/73902020>

        Reviewed by Tim Horton.

        Add an API test to exercise `-canPerformAction:withSender:` with the new action.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:

2021-02-10  Rob Buis  <rbuis@igalia.com>

        Use event loop to set title
        https://bugs.webkit.org/show_bug.cgi?id=218496

        Reviewed by Darin Adler.

        Adapt unit tests to wait for title change tasks
        to be processed.

        * TestWebKitAPI/Tests/WebKit/PageLoadState.cpp:
        (TestWebKitAPI::didChangeTitle):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationFailure):
        (testWebViewAuthenticationNoCredential):
        (testWebViewAuthenticationSuccess):
        (testWebViewAuthenticationEmptyRealm):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (testBackForwardListNavigation):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testWebViewTitle):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testLoadFailedWithTLSErrors):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettingsJavaScriptMarkup):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewTitleChange):

2021-02-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Produce ClientDataJSON in the SPI
        https://bugs.webkit.org/show_bug.cgi?id=221623
        <rdar://problem/71509394>

        Reviewed by Brent Fulgham.

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

2021-02-10  Ruben Turcios  <rubent_22@apple.com>

        Adding self to contributor.json file. 

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

2021-02-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r272507.

        Caused TestWebKitAPI.WebKit.OnDeviceChangeCrash to become a
        flaky timeout

        Reverted changeset:

        "[MacOS] Enable Audio Capture in GPUProcess by default"
        https://bugs.webkit.org/show_bug.cgi?id=221400
        https://trac.webkit.org/changeset/272507

2021-02-10  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Remove code specific to old Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=221558

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/buildbot.tac:
        * CISupport/build-webkit-org/loadConfig.py:
        * CISupport/build-webkit-org/loadConfig_unittest.py:
        * CISupport/build-webkit-org/master.cfg: Removed.
        * CISupport/build-webkit-org/steps.py:
        (TestWithFailureCount.getText): Deleted.
        (TestWithFailureCount.getText2): Deleted.
        (CompileWebKit.createSummary): Deleted.
        (RunWebKitTests._parseRunWebKitTestsOutput): Deleted.
        (RunWebKitTests.commandComplete): Deleted.
        (RunWebKitTests.getText): Deleted.
        (RunWebKitTests.getText2): Deleted.
        (ExtractTestResults.start): Deleted.
        * CISupport/ews-build/steps.py:
        * CISupport/ews-build/steps_unittest.py:

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

        Use HAVE(PEPPER_UI_CORE) instead of PLATFORM(WATCHOS) to guard code that uses PepperUICore
        https://bugs.webkit.org/show_bug.cgi?id=221679

        Reviewed by Tim Horton.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (isQuickboardViewController):

2021-02-10  Aakash Jain  <aakash_jain@apple.com>

        [ews] Remove old build.webkit.org unit-tests
        https://bugs.webkit.org/show_bug.cgi?id=221678

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/factories.py:
        (ServicesFactory.__init__):
        * CISupport/ews-build/factories_unittest.py:
        (TestTestsFactory.test_services_factory):
        * CISupport/ews-build/steps.py:
        (ReRunWebKitPerlTests.evaluateCommand):
        (RunBuildWebKitOrgOldUnitTests): Deleted.
        (RunBuildWebKitOrgOldUnitTests.__init__): Deleted.
        (RunBuildWebKitOrgOldUnitTests.getResultSummary): Deleted.
        * CISupport/ews-build/steps_unittest.py:
        (TestRunBuildWebKitOrgUnitTests.test_failure):
        (TestRunBuildWebKitOrgOldUnitTests): Deleted.
        (TestRunBuildWebKitOrgOldUnitTests.setUp): Deleted.
        (TestRunBuildWebKitOrgOldUnitTests.tearDown): Deleted.
        (TestRunBuildWebKitOrgOldUnitTests.test_success): Deleted.
        (TestRunBuildWebKitOrgOldUnitTests.test_failure): Deleted.

2021-02-10  Patrick Griffis  <pgriffis@igalia.com>

        Update status in contributors.json

        Unreviewed.

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

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

        [watchOS] Adopt PUICQuickboardController for text input
        https://bugs.webkit.org/show_bug.cgi?id=221649

        Reviewed by Tim Horton.

        Make some small tweaks to WebKitTestRunner in support of using `PUICQuickboardController` for text input.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

        Adjust the test harness on watchOS to link against PepperUICore, so that we can reference the
        `PUICQuickboardViewController` and `PUICQuickboardRemoteViewController` classes below.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (isQuickboardViewController):
        (-[TestRunnerWKWebView _didPresentViewController:]):

        Override `-presentViewController:animated:completion:` on the view controller below, and call this new method
        on the `TestRunnerWKWebView` when a view controller is finished presenting. We need to do this to ensure that
        the input view presentation callbacks continue to work after adopting `PUICQuickboardController`; see WebKit
        ChangeLog for more details.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[PlatformWebViewController presentViewController:animated:completion:]):

2021-02-10  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build-step to run build.webkit.org new unit-tests
        https://bugs.webkit.org/show_bug.cgi?id=219454

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunBuildWebKitOrgOldUnitTests): Renamed.
        (RunBuildWebKitOrgUnitTests): Build step to run build.webkit.org new unit-tests.
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.
        * CISupport/ews-build/factories.py:
        (ServicesFactory.__init__): Added the new build-step, also change the step order slightly.
        * CISupport/ews-build/factories_unittest.py:

2021-02-10  Brent Fulgham  <bfulgham@apple.com>

        Create stub methods to support finer-grained control over loading
        https://bugs.webkit.org/show_bug.cgi?id=221430
        <rdar://problem/73999547>

        Reviewed by Geoffrey Garen.

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

2021-02-10  Lauro Moura  <lmoura@igalia.com>

        [GTK] Gardening TestResources failures after r272636

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-02-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        RemoteGraphicsContextGLProxy should support losing the context and should lose the context on timeouts
        https://bugs.webkit.org/show_bug.cgi?id=221396

        Reviewed by Simon Fraser.

        Generate calls to lose the context on timeouts.

        Generate the send calls as calls to the helper functions to send the
        messages. The helper functions will provide the non-changing arguments.

        Move few messages to be implemented by hand.

        * Scripts/generate-gpup-webgl:

2021-02-06  Philippe Normand  <pnormand@igalia.com>

        [WPE] Optionally build Cog as external project and replacement for MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=221518

        Reviewed by Adrian Perez de Castro.

        By passing `-DENABLE_COG=ON` during the WPE build, the Cog browser is now built as an
        external project. The repository is cloned in Tools/wpe/cog and the code can be edited
        there.

        The run-minibrowser --wpe script will now first try to execute cog and fallback to
        MiniBrowser if it wasn't found. Cog is also a MiniBrowser, but with some additional
        features, see https://github.com/Igalia/cog for more informations.

        * PlatformWPE.cmake: Configure Cog as an external project in developer builds.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.run_minibrowser): First check for cog, fallback to MiniBrowser if not found.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Set pkg-config path to lookup libraries in the WebKit's
        build directory as well.

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

        [iOS] Add support for the language/subtitle tracks button using `UIMenu`
        https://bugs.webkit.org/show_bug.cgi?id=221594
        <rdar://problem/74129129>

        Reviewed by Eric Carlson and Wenson Hsieh.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::rectForMenuAction const):
        In addition to looking at the active `UICalloutBar` (if it exists), walk the view hierarchy
        looking for any `UILabel` that contains the given text and use that as the rect to tap.
        While this isn't the most confident/consistent approach, UIKit doesn't have anything like
        `UICalloutBar` for contextmenu interactions, and this is only used inside WKTR (which has no
        other UI outside than the page), so it's expected that callers know what they're doing.

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

        Rename SecurityOrigin's canAccess() to isSameOriginDomain() to match HTML specification naming
        https://bugs.webkit.org/show_bug.cgi?id=221630

        Reviewed by Geoffrey Garen.

        Rename SecurityOrigin's canAccess() to isSameOriginDomain() to match HTML specification naming:
        - https://html.spec.whatwg.org/#same-origin-domain

        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        (TestWebKitAPI::TEST_F):

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

        Fix Catalina build.
        https://bugs.webkit.org/show_bug.cgi?id=221431

        * TestWebKitAPI/Tests/WebKitCocoa/MediaSession.mm:
        (TestWebKitAPI::TEST_F):

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

        Synthesize range responses if needed in WebCoreNSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=221072

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebCore/ParsedContentRange.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::clientCertServer):
        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm:
        (TestWebKitAPI::testVideoBytes):
        (TestWebKitAPI::runVideoTest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::HTTPResponse::HTTPResponse):
        (TestWebKitAPI::HTTPServer::HTTPResponse::HTTPResponse): Deleted.
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::RequestData::RequestData):
        (TestWebKitAPI::appendToVector):
        (TestWebKitAPI::HTTPServer::parsePath):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        (TestWebKitAPI::HTTPResponse::bodyFromString):
        (TestWebKitAPI::HTTPResponse::serialize):

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

        [iOS][FCR] Use UIColorPickerViewController for color inputs
        https://bugs.webkit.org/show_bug.cgi?id=221572
        <rdar://problem/72183130>

        Reviewed by Sam Weinig.

        Added UIScriptController hooks to simulate selecting a color on the
        new color picker.

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

2021-02-09  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Correctly parse branch commits
        https://bugs.webkit.org/show_bug.cgi?id=221609
        <rdar://problem/74142906>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Only respect the last revision in a commit message.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/git-repo.json: Make one commit similar
        to a cherry-pick.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.commit): Only respect the last revision in a commit message.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind.test_hash): Change commit being tested since original commit would
        resolve a revision.

2021-02-09  Daniel Kolesa  <dkolesa@igalia.com>

        Allow icecream toolchain override in flatpakutils
        https://bugs.webkit.org/show_bug.cgi?id=221605

        Reviewed by Philippe Normand.

        This allows the user to specify a custom icecream toolchain.
        Usually you will not want to do this, but it is useful e.g. when
        you have a machine in your cluster that does not have a compiler
        in the SDK. You can either force the whole version string by using
        ICECC_VERSION_OVERRIDE, or append to the original string with
        ICECC_VERSION_APPEND.

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

2021-02-09  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Geolocation API tests are flaky timeout instead of failure

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-02-09  Philippe Normand  <pnormand@igalia.com>

        [GLib] Permission request API for MediaKeySystem access support
        https://bugs.webkit.org/show_bug.cgi?id=221199

        Reviewed by Carlos Garcia Campos.

        Added basic support for MediaKeySystem permission request to the GTK MiniBrowser, and a GLib
        API unit-test as well.

        * MiniBrowser/gtk/BrowserTab.c:
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (browser_tab_class_init):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewMediaKeySystemPermissionRequests):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):

2021-02-09  Philippe Normand  <pnormand@igalia.com>

        Permission request API for MediaKeySystem access support
        https://bugs.webkit.org/show_bug.cgi?id=221187

        Reviewed by Jer Noble.

        Add support for setting the permission request response from the TestRunner, for usage within layout tests.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIsMediaKeySystemPermissionGranted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForMediaKeySystemPermissionRequest):
        (WTR::TestController::completeMediaKeySystemPermissionCheck):
        (WTR::TestController::setIsMediaKeySystemPermissionGranted):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-02-09  Manuel Rego Casasnovas  <rego@igalia.com>

        Allow sending modifier keys in test_driver.send_keys()
        https://bugs.webkit.org/show_bug.cgi?id=221466

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef): Add support for meta key.

2021-02-08  Sam Sneddon  <gsnedders@apple.com>

        Move layout_test_runner.Worker._update_test_input to LayoutTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=221577

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._update_test_input):
        (Worker.handle):
        (Worker._run_test):
        (Worker._update_test_input): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):

2021-02-08  Stephanie Lewis  <slewis@apple.com>

        <rdar://problem/70402593> Motionmark failed to start webserver

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder.__enter__):

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

        Unreviewed, reverting r272485.
        https://bugs.webkit.org/show_bug.cgi?id=221588

        Required revisions were reversed

        Reverted changeset:

        "[GLib] Permission request API for MediaKeySystem access
        support"
        https://bugs.webkit.org/show_bug.cgi?id=221199
        https://trac.webkit.org/changeset/272485

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

        [Mac] Connect MediaSession with MediaRemote and NowPlaying
        https://bugs.webkit.org/show_bug.cgi?id=221431
        <rdar://problem/74000363>

        Unreviewed build fix for macOS Catalina.

        * TestWebKitAPI/Tests/WebKitCocoa/MediaSession.mm:
        (TestWebKitAPI::TEST_F): Add compile guards for Catalina.

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

        Unreviewed, reverting r272480, r272481, and r272500.
        https://bugs.webkit.org/show_bug.cgi?id=221586

        Caused assertion failure seen with EME tests

        Reverted changesets:

        "Permission request API for MediaKeySystem access support"
        https://bugs.webkit.org/show_bug.cgi?id=221187
        https://trac.webkit.org/changeset/272480

        "Unreviewed, build fix after r272480"
        https://trac.webkit.org/changeset/272481

        "Permission request API for MediaKeySystem access support"
        https://bugs.webkit.org/show_bug.cgi?id=221187
        https://trac.webkit.org/changeset/272500

2021-02-08  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add HTML file that translates a builder name and number pair to a valid Buildbot URL
        https://bugs.webkit.org/show_bug.cgi?id=221579

        Reviewed by Ryosuke Niwa.

        * CISupport/build-webkit-org/public_html/builders: Added.
        * CISupport/build-webkit-org/public_html/builders/index.html: Added.

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

        [MacOS] Enable Audio Capture in GPUProcess by default
        https://bugs.webkit.org/show_bug.cgi?id=221400

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptTestView haveStream:]):
        Increase timeout since capture might require spinning GPUProcess.

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

        NetworkRTCSocketCocoa extractDataMessages should not read too much data
        https://bugs.webkit.org/show_bug.cgi?id=221544

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/STUNMessageParsingTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-02-08  Alicia Boya García  <aboya@igalia.com>

        Add ConsoleMessage::toString()
        https://bugs.webkit.org/show_bug.cgi?id=221539

        Reviewed by Eric Carlson.

        Added unit tests.

        * TestWebKitAPI/Tests/JavaScriptCore/InspectorConsoleMessage.cpp:
        (TestWebKitAPI::TEST):

2021-02-08  Sam Weinig  <weinig@apple.com>

        Update sRGB <-> XYZ conversion matrix values to match values in latest spec
        https://bugs.webkit.org/show_bug.cgi?id=221533

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update values to values in P3 <-> sRGB conversion test and update to
        use EXPECT_FLOAT_EQ so the values can be seen in the output when thigs
        fail.

2021-02-08  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Gardening geolocation API test flakiness

        Unreviewed test gardening.

        Failing regularly, likely due to the same geolocation API limitation.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-02-08  Andres Gonzalez  <andresg_22@apple.com>

        Add support for aria-sort change notifications.
        https://bugs.webkit.org/show_bug.cgi?id=221495

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::sortDirection const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::sortDirection const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::currentStateValue const):
        (WTR::AccessibilityUIElement::sortDirection const):

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

        [GLib] Permission request API for MediaKeySystem access support
        https://bugs.webkit.org/show_bug.cgi?id=221199

        Reviewed by Carlos Garcia Campos.

        Added basic support for MediaKeySystem permission request to the GTK MiniBrowser, and a GLib
        API unit-test as well.

        * MiniBrowser/gtk/BrowserTab.c:
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (browser_tab_class_init):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewMediaKeySystemPermissionRequests):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):

2021-02-08  Alicia Boya García  <aboya@igalia.com>

        ConsoleMessage: Don't encode string JSONLogValue's as JSON
        https://bugs.webkit.org/show_bug.cgi?id=221421

        Reviewed by Eric Carlson.

        Added API tests to check for the output of message() when constructing
        ConsoleMessage objects with JSONLogValue's.

        This includes changes contributed by Philippe Normand enabling
        JavaScriptCore tests which were previously disabled in WebKitGTK and
        making them compile again.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit/InspectorConsoleMessage.cpp: Added.
        (TestWebKitAPI::TEST):

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

        Permission request API for MediaKeySystem access support
        https://bugs.webkit.org/show_bug.cgi?id=221187

        Reviewed by Jer Noble.

        Add support for setting the permission request response from the TestRunner, for usage within layout tests.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIsMediaKeySystemPermissionGranted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForMediaKeySystemPermissionRequest):
        (WTR::TestController::completeMediaKeySystemPermissionCheck):
        (WTR::TestController::setIsMediaKeySystemPermissionGranted):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-02-07  Sam Weinig  <weinig@apple.com>

        Remove more special cases from color conversion
        https://bugs.webkit.org/show_bug.cgi?id=221519

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Replace convertTo<> component type conversion to general convertColor<>.

2021-02-06  Alex Christensen  <achristensen@webkit.org>

        Non-special URLs should have an opaque origin
        https://bugs.webkit.org/show_bug.cgi?id=162254

        Reviewed by Geoff Garen.

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

2021-02-06  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Switch bot watchers dashboard to use new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=221493

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2021-02-05  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Disable MediaSessionTest API tests
        https://bugs.webkit.org/show_bug.cgi?id=221514
        <rdar://74048912>

        Unreviewed, disable tests that don't play well with other media tests running
        at the same time.

        * TestWebKitAPI/Tests/WebKitCocoa/MediaSession.mm:
        (TestWebKitAPI::TEST_F):

2021-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews] Do not display identifier in status bubble tooltips
        https://bugs.webkit.org/show_bug.cgi?id=221513

        Unreviewed infrastucture fix.

        * CISupport/ews-app/ews/views/statusbubble.py:

2021-02-05  Sihui Liu  <sihui_liu@appe.com>

        REGRESSION(r272337): crash under WebCore::SpeechRecognizer::setInactive()
        https://bugs.webkit.org/show_bug.cgi?id=221451

        Reviewed by Youenn Fablet.

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

2021-02-05  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Connect MediaSession with MediaRemote and NowPlaying
        https://bugs.webkit.org/show_bug.cgi?id=221431
        <rdar://problem/74000363>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaSession.mm: Added.
        (TestWebKitAPI::MediaSessionTest::webView):
        (TestWebKitAPI::MediaSessionTest::webViewPid):
        (TestWebKitAPI::MediaSessionTest::getNowPlayingClient):
        (TestWebKitAPI::MediaSessionTest::getNowPlayingClientPid):
        (TestWebKitAPI::MediaSessionTest::loadPageAndBecomeNowPlaying):
        (TestWebKitAPI::MediaSessionTest::runScriptWithUserGesture):
        (TestWebKitAPI::MediaSessionTest::play):
        (TestWebKitAPI::MediaSessionTest::pause):
        (TestWebKitAPI::MediaSessionTest::sendMediaRemoteCommand):
        (TestWebKitAPI::MediaSessionTest::sendMediaRemoteSeekCommand):
        (TestWebKitAPI::MediaSessionTest::listenForEventMessages):
        (TestWebKitAPI::MediaSessionTest::eventListenerWasCalled):
        (TestWebKitAPI::MediaSessionTest::waitForEventListenerToBeCalled):
        (TestWebKitAPI::MediaSessionTest::listenForSessionHandlerMessages):
        (TestWebKitAPI::MediaSessionTest::sessionHandlerWasCalled):
        (TestWebKitAPI::MediaSessionTest::waitForSessionHandlerToBeCalled):
        (TestWebKitAPI::MediaSessionTest::getSupportedCommands):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/media-remote.html: Added.

2021-02-05  Sam Weinig  <weinig@apple.com>

        Generalize color conversion code to reduce number of overloads required
        https://bugs.webkit.org/show_bug.cgi?id=221443

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update tests to use convertColor<>.

2021-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should use commits.webkit.org url instead of trac url
        https://bugs.webkit.org/show_bug.cgi?id=221476

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (PushCommitToWebKitRepo.url_for_revision):
        * CISupport/ews-build/steps_unittest.py:

2021-02-05  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Print stderr when coredumpctl fails
        https://bugs.webkit.org/show_bug.cgi?id=221448

        Reviewed by Philippe Normand.

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

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

        [GPUProcess][iOS] Audio is lost after media playback recovers from the GPUProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=221305
        <rdar://problem/73904864>

        Reviewed by Eric Carlson.

        Unskip API test checks on iOS now that they are passing.

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

2021-02-05  Alicia Boya García  <aboya@igalia.com>

        [GTK] run-gtk-tests: Support running individual tests for GTest test suites
        https://bugs.webkit.org/show_bug.cgi?id=221050

        Reviewed by Adrian Perez de Castro.

        run-gtk-tests accepts any number of optional `-p` arguments to run
        only certain tests. Unfortunately, this feature is only currently
        implemented for glib tests suites.

        This patch adds support for this feature with gtest suites as well.

        * glib/api_test_runner.py:
        (TestRunner._run_google_test_suite):
        (TestRunner._run_test):

2021-02-04  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update dashboard links for layout test results
        https://bugs.webkit.org/show_bug.cgi?id=221280

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot): Set baseURLForResults.
        (Buildbot.prototype.layoutTestResultsDirectoryURLForIteration): Use baseURLForResults if available.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Pass baseURLForResults appropriately.

2021-02-04  Jonathan Bedard  <jbedard@apple.com>

        [Python-3] Change shebang in test-webkitpy (Part-2)
        https://bugs.webkit.org/show_bug.cgi?id=221415
        <rdar://problem/73986503>

        Reviewed by Michael Catanzaro.

        * CISupport/build-webkit-org/steps.py:
        (RunWebKitPyTests): Run test-webkitpy with Python 3.
        * Scripts/test-webkitpy: Change shebang.
        * Scripts/test-webkitpy-python3: Removed.

2021-02-04  Jonathan Bedard  <jbedard@apple.com>

        [Python-3] Change shebang in git-webkit (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=221412
        <rdar://problem/73983881>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py:
        (run): Python 3.6 does not support capture_output in subprocess.run()

2021-02-04  Jonathan Bedard  <jbedard@apple.com>

        [Python-3] Change shebang in test-webkitpy (Part-1)
        https://bugs.webkit.org/show_bug.cgi?id=221415
        <rdar://problem/73986503>

        Reviewed by Michael Catanzaro.

        * Scripts/test-webkitpy-python2: Added.

2021-02-04  Jonathan Bedard  <jbedard@apple.com>

        [Python-3] Change shebang in git-webkit (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=221412
        <rdar://problem/73983881>

        Reviewed by Michael Catanzaro.

        * CISupport/ews-build/steps.py:
        (ShowIdentifier.start): Invoke git-webkit with Python 3.
        * CISupport/ews-build/steps_unittest.py:

2021-02-04  Alex Christensen  <achristensen@webkit.org>

        Don't launch a network process when registering URL schemes
        https://bugs.webkit.org/show_bug.cgi?id=221427

        Reviewed by Chris Dumez.

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

2021-02-04  Jonathan Bedard  <jbedard@apple.com>

        [Python-3] Change shebang in check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=221420
        <rdar://problem/73990232>

        Reviewed by Michael Catanzaro.

        * CISupport/ews-build/steps.py:
        (CheckStyle): Invoke check-webkit-style with python3.
        * CISupport/ews-build/steps_unittest.py:
        (TestCheckStyle.test_success_internal): Invoke check-webkit-style with python3.
        (TestCheckStyle.test_failure_unknown_try_codebase): Ditto.
        (TestCheckStyle.test_failures_with_style_issues): Ditto.
        (test_failures_no_style_issues): Ditto.
        (test_failures_no_changes): Ditto.
        * Scripts/check-webkit-style: Change python shebang to Python 3.

2021-02-04  Jonathan Bedard  <jbedard@apple.com>

        [Python-3] Change shebang in git-webkit
        https://bugs.webkit.org/show_bug.cgi?id=221412
        <rdar://problem/73983881>

        Reviewed by Stephanie Lewis.

        * Scripts/git-webkit: Change python shebang to python3.
        * Scripts/libraries/webkitscmpy/git-webkit: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/committer.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/message.py: Ditto.

2021-02-04  Alex Christensen  <achristensen@apple.com>

        REGRESSION(r267763) Network process launches earlier than before
        https://bugs.webkit.org/show_bug.cgi?id=221384
        <rdar://problem/73507706>

        Reviewed by Chris Dumez.

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

2021-02-04  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Misc Thunder nitpicks
        https://bugs.webkit.org/show_bug.cgi?id=221398

        Reviewed by Xabier Rodriguez-Calvar.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): Add test for Netflix WPE/GTK UA quirk.

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

        [macOS] Selecting a date on datetime-local inputs unexpectedly adds second and millisecond fields
        https://bugs.webkit.org/show_bug.cgi?id=221350
        <rdar://problem/73943517>

        Reviewed by Devin Rousso.

        Added a method to UIScriptController to simulate selecting a date using
        the presented date picker.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::chooseDateTimePickerValue):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::chooseDateTimePickerValue):

2021-02-04  Eleni Maria Stea  <estea@igalia.com>

        Modifications to Tools/wpe/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=221254

        Reviewed by Adrian Perez de Castro.

        * wpe/install-dependencies: python-psutil is replaced with
        python3-psutil that is present in Debian/Ubuntu/Raspbian. libegl-mesa0
        is added in the dependencies list as it's required for libegl1-mesa-dev
        to be installed.


2021-02-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Allow one user gesture free prompt for each navigation
        https://bugs.webkit.org/show_bug.cgi?id=220897
        <rdar://problem/73541303>

        Reviewed by Brent Fulgham.

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

2021-02-03  Devin Rousso  <drousso@apple.com>

        [iOS] delay `+[BKSMousePointerService sharedInstance]` so that it doesn't impact launch perf
        https://bugs.webkit.org/show_bug.cgi?id=221298

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (iOSMouseSupport.MouseInitiallyDisconnected):
        (iOSMouseSupport.MouseInitiallyConnected):
        (iOSMouseSupport.MouseLaterDisconnected):
        (iOSMouseSupport.MouseLaterConnected):

2021-02-03  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Alexey Proskuryakov.

        createPartition is timing out on the bots but not locally.
        Don't hide the output of hdiutil so we can see what is happening on the bots.

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

2021-02-03  Ryan Haddad  <ryanhaddad@apple.com>

        Replace Apple-Catalina-Release-JSC-Tests bot due to hardware failure
        https://bugs.webkit.org/show_bug.cgi?id=221315

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/config.json: Replace bot157 with bot610.

2021-02-03  Antoine Quint  <graouts@webkit.org>

        Add a loader for <model> resources
        https://bugs.webkit.org/show_bug.cgi?id=221255

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):

2021-02-03  Ryan Haddad  <ryanhaddad@apple.com>

        Big Sur test262 queues failing download-built-product step
        https://bugs.webkit.org/show_bug.cgi?id=221314

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/config.json: Since we are building both x86
        and arm64 on Big Sur, we need to both architectures to be listed in the
        config so that the test262 bots can find the archives.

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

        Enable webrtc video capture in GPUProcess for iOS WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=220966

        Reviewed by Eric Carlson.

        * WebKitTestRunner/TestOptions.cpp:

2021-02-02  Ryan Haddad  <ryanhaddad@apple.com>

        Update Test262 bot to Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=218844

        Unreviewed infrastructure fix.

        * CISupport/build-webkit-org/config.json: Remove an old trigger.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Fix typo in queue name.

2021-02-02  Matt Lewis  <jlewis3@apple.com>

        Remove Apple macOS Mojave queues
        https://bugs.webkit.org/show_bug.cgi?id=221211

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/Dashboard.js:
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.macos-mojave img.logo): Deleted.
        
2021-02-02  Don Olmstead  <don.olmstead@sony.com>

        [webkitcorepy] Autoinstaller can fail on packages containing write protected files
        https://bugs.webkit.org/show_bug.cgi?id=221266

        Reviewed by Jonathan Bedard.

        The autoinstaller extracts an archive containing the package to a temporary directory and
        then installs it from there. If the autoinstaller attempts to extract the archive again into
        the same temporary directory it can fail if there was a write protected file. The extraction
        will fail and the installer cannot continue until the temporary directory is cleared.

        To prevent this the permissions for each file/directory in the tarball is manually set.

        This was originally observed with the logilab-common package which ships with a test containing
        a write protected file.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.Archive.unpack):

2021-02-02  Aakash Jain  <aakash_jain@apple.com>

        [ews] Commit queue failure message should indicate that cq+ flag can be set again
        https://bugs.webkit.org/show_bug.cgi?id=221269

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (PushCommitToWebKitRepo.comment_text_for_bug):
        * CISupport/ews-build/steps_unittest.py:

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

        [webkitpy] WinPort.delete_sem_locks is cygwin specific
        https://bugs.webkit.org/show_bug.cgi?id=221277

        Reviewed by Jonathan Bedard.

        WinPort.delete_sem_locks does `rm -rf /dev/shm/sem.*` which is only relavent when
        running cygwin. Just put a test for cygwin around the command invocation.

        * Scripts/webkitpy/port/win.py:
        (WinPort.delete_sem_locks):

2021-02-02  Alex Christensen  <achristensen@webkit.org>

        Adopt UIEventAttribution instead of _UIEventAttribution
        https://bugs.webkit.org/show_bug.cgi?id=220683

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (-[MockEventAttribution initWithReportEndpoint:destinationURL:]):
        (TestWebKitAPI::TEST):
        (-[MockEventAttribution initWithReportEndpoint:attributeOn:]): Deleted.

2021-02-02  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] unzip layout-test-results in background
        https://bugs.webkit.org/show_bug.cgi?id=221263

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.__init__):

2021-02-02  Aakash Jain  <aakash_jain@apple.com>

        ews isn't retrying builds when kill-old-processes fails
        https://bugs.webkit.org/show_bug.cgi?id=221235

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (KillOldProcesses.__init__): Increased timeout to 2 minutes.
        (KillOldProcesses.evaluateCommand): Used rc since self.results is None at this step.
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        Recover WebRTC codecs in case of GPUProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=221138

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

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

        [GTK][WPE] Migrate WebKitTestServer to libsoup 2.48 API
        https://bugs.webkit.org/show_bug.cgi?id=219160
        <rdar://problem/71620310>

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (serverCallback):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer):
        (WebKitTestServer::run):
        (WebKitTestServer::port const):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:

2021-02-01  Ryan Haddad  <ryanhaddad@apple.com>

        Update Test262 bot to Big Sur
        https://bugs.webkit.org/show_bug.cgi?id=218844

        Reviewed by Yusuke Suzuki.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * CISupport/build-webkit-org/steps_unittest_old.py:

2021-02-01  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Optimize _WKWebAuthenticationPanelDelegate for native API
        https://bugs.webkit.org/show_bug.cgi?id=221125
        <rdar://problem/71509141>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponse:source:completionHandler:]):
        (-[TestWebAuthenticationPanelDelegate panel:requestLAContextForUserVerificationWithCompletionHandler:]):
        (TestWebKitAPI::WebCore::reset):
        (TestWebKitAPI::TEST):

2021-02-01  Don Olmstead  <don.olmstead@sony.com>

        [webkitscmpy] Use shutil to find scm executable paths
        https://bugs.webkit.org/show_bug.cgi?id=221220

        Reviewed by Jonathan Bedard.

        Using /usr/bin/which is not a cross platform way to determine the path to an executable.
        In Python 3 shutil gailed a which function which provides the same functionality as the
        which executable and works on Windows.

        Added the whichcraft library which is a backport of shutil.which to Python 2.7. If
        Python 3 is available it just uses shutil directly. The library can be dropped once Python
        2.7 support is jettisoned.

        * Scripts/libraries/webkitscmpy/setup.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.executable):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:

2021-02-01  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Support machines without Unix signal handling
        https://bugs.webkit.org/show_bug.cgi?id=221150
        <rdar://problem/73769605>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/popen.py:
        (PopenBase):
        (PopenBase.send_signal): Handle undefined signal variables.
        (PopenBase.terminate):
        (PopenBase.kill):
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (Process.handler): Handle undefined signal variable.
        (Process.main): Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/timeout.py:
        (Timeout): Timeout class should own SIGALRM.
        (Timeout.DisableAlarm.__enter__): Do not disable alarm if alarm is not available.
        (Timeout.check): Pass SIGALRM owned by Timeout object.
        (Timeout.bind): Do not disable alarm if alarm is not available, use SIGALRM owned by the Timeout object.
        (Timeout.bind.handler): Ditto.
        (Timeout.sleep): Use SIGALRM owned by the Timeout object.

2021-02-01  Alicia Boya García  <aboya@igalia.com>

        autoinstall.py: Don't use an XML parser to parse HTML
        https://bugs.webkit.org/show_bug.cgi?id=221162

        Reviewed by Jonathan Bedard.

        Very recently autoinstall.py started failing becagse the page returned
        by https://pypi.org/simple/fasteners/ now contains a <meta> tag, which
        is not parseable as XML without the trailing slash.

        Despite what an initial fix in r272041 stated, this is not caused by
        invalid HTML: <meta> tags are not required to have an ending slash to
        be standards compliant in any version of HTML.

        This patch replaces that code to use an HTML parser instead of an XML
        parser, making it more robust.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (SimplyPypiIndexPageParser):
        (SimplyPypiIndexPageParser.__init__):
        (SimplyPypiIndexPageParser.handle_starttag):
        (SimplyPypiIndexPageParser.handle_data):
        (SimplyPypiIndexPageParser.handle_endtag):
        (SimplyPypiIndexPageParser.parse):
        (Package.archives):

2021-02-01  Sihui Liu  <sihui_liu@appe.com>

        Use user media permission prompt for speech recognition
        https://bugs.webkit.org/show_bug.cgi?id=221082
        rdar://problem/73372499

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):

2021-02-01  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] is_test_mode_enabled should default to True
        https://bugs.webkit.org/show_bug.cgi?id=221208

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2021-02-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add @ in Error.stack if URL exists
        https://bugs.webkit.org/show_bug.cgi?id=221184

        Reviewed by Keith Miller.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCExceptions):

2021-01-29  Don Olmstead  <don.olmstead@sony.com>

        [webkitpy] Thread.isAlive was renamed to Thread.is_alive
        https://bugs.webkit.org/show_bug.cgi?id=221160

        Reviewed by Jonathan Bedard.

        Python 2.6 added threading.Thread.is_alive which aliased isAlive. In Python 3.x only
        threading.Thread.is_alive is available so use that instead. 

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_test_in_another_thread):

2021-01-29  Myles C. Maxfield  <mmaxfield@apple.com>

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

        Reviewed by Said Abou-Hallawa.

        r272044 is attempting to address extreme variance in the test.

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

2021-01-29  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Enable reference types by default
        https://bugs.webkit.org/show_bug.cgi?id=220890

        Reviewed by Yusuke Suzuki.

        Enable wasm reference types by default.

        * Scripts/run-jsc-stress-tests:

2021-01-29  Andres Gonzalez  <andresg_22@apple.com>

        Support for aria-current state changed notifications.
        https://bugs.webkit.org/show_bug.cgi?id=221074

        Reviewed by Chris Fleizach.

        Added AccessibilityUIElement::domIdentifier and currentStateValue used
        in LayoutTests/accessibility/aria-current-state-changed-notification.html.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::domIdentifier const): Non-Cocoa implementation.
        (WTR::AccessibilityUIElement::currentStateValue const): Non-Cocoa implementation.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::domIdentifier const):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::currentStateValue const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::domIdentifier const):
        (WTR::AccessibilityUIElement::currentStateValue const):

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

        check-webkit-style: warn about WTF::BlockPtr use in JavaScriptCore until ARC is enabled
        <https://webkit.org/b/221108>
        <rdar://problem/73726640>

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_is_javascriptcore_file): Add.
        - Extract code to reuse from
          check_identifier_name_in_declaration().
        (check_include_line):
        (check_language):
        - Add check for use of WTF::BlockPtr.
        (check_identifier_name_in_declaration):
        - Use _is_javascriptcore_file().
        (CppChecker):
        - Add 'security/javascriptcore_wtf_blockptr' to list of
          checkers.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.perform_language_rules_check):
        - Add 'security/javascriptcore_wtf_blockptr' to list of
          checkers for testing header includes.
        (OrderOfIncludesTest.test_check_wtf_blockptr_usage_in_javascriptcore):
        - Add test to detect use of WTF::BlockPtr in JavaScriptCore.

2021-01-29  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Implement --artifact-exec-wrapper
        https://bugs.webkit.org/show_bug.cgi?id=220924

        Reviewed by Carlos Alberto Lopez Perez.

        Add an option to specify a wrapper for executing the built
        artifacts for JSC (i.e. jsc, testmasm, ...). This is useful when
        crossbuilding, to be able to specify the ELF interpreter and
        LD_LIBRARY_PATH for the built executables (and only those; the
        scripts may well execute native binaries that shouldn't be
        wrapped). It's not needed when running the tests on the remotes
        (as generate-bundle will take care of all that), but helps
        e.g. when running 32-bit ARM binaries on a 64-bit host and not
        using the system compiler/libraries.

        This patch also simplifies the bytecode cache helper by switching
        the argument order and changes a couple of uses of pathToVM to
        vmCommand for consistency. It should be noted that
        --artifact-exec-wrapper is not compatible with
        --force-architecture. That shouldn't be a problem as (a) the use
        cases of the two flags don't seem to overlap and (b) the exec
        wrapper can subsume the functionality of --force-architecture.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:
        * Scripts/run-javascriptcore-tests:
        (runTest):
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:

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

        [MacOS] Enable WebKitTestRunner audio and video capture in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=221035

        Reviewed by Eric Carlson.

        Remove the default TestOptions values and instead on MacOS rely on capture in GPUProcess.
        On iOS, capture ill still happen inprocess for the time being.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use a GInputStream to set the request body in preparation for libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=221034

        Reviewed by Adrian Perez de Castro.

        Add WebKitFormDataInputStream as an exception for some style checker rules.

        * Scripts/webkitpy/style/checker.py:

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

        [GLIB] Gardening API release passes and some debug crashes

        Unreviewed test gardening.

        Many debug crashes still to be listed.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-01-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Minor cleanup in CSSFontFaceSetClient
        https://bugs.webkit.org/show_bug.cgi?id=221019

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::MultipleInheritanceDerived::meowCalled const):
        (TestWebKitAPI::MultipleInheritanceDerived::woofCalled const):
        (TestWebKitAPI::TEST):

2021-01-28  Jonathan Bedard  <jbedard@apple.com>

        [webkitcrepy] Handle case where pypi serves invalid html
        https://bugs.webkit.org/show_bug.cgi?id=221111
        <rdar://problem/73728580>

        Reviewed by David Kilzer.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version number.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.archives): Remove possibly invalid <meta> tag from html.

2021-01-28  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Remove dead code for TestWebKit1LeaksFactory
        https://bugs.webkit.org/show_bug.cgi?id=221090

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/factories.py:
        (BuildAndJSCTestsFactory.__init__):
        (TestWebKit1LeaksFactory): Deleted.
        (TestWebKit1LeaksFactory.__init__): Deleted.
        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.finished):
        (ExtractTestResultsAndLeaks): Deleted.
        (ExtractTestResultsAndLeaks.addCustomURLs): Deleted.

2021-01-28  Matt Lewis  <jlewis3@apple.com>

        Move Mac EWS to macOS Catalina.
        https://bugs.webkit.org/show_bug.cgi?id=220818
        

        Reviewed by Aakash Jain.

        * CISupport/ews-build/config.json:
        * CISupport/ews-build/factories_unittest.py:
        (TestBuildFactory.test_generic_build_factory):
        (TestBuildFactory.test_macos_build_factory):
        (TestCommitQueueFactory.test_commit_queue_factory):
        (TestLayoutTestsFactory.test_macos_wk1_release_factory):
        (TestLayoutTestsFactory.test_macos_wk1_debug_factory):
        (TestLayoutTestsFactory.test_macos_wk2_factory):
        * CISupport/ews-build/steps_unittest.py:
        (TestAnalyzeCompileWebKitResults.test_filter_logs_containing_error_with_no_error):

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

        [Flatpak SDK] Flatpak environment JSON is prematurely deleted with flatpak-spawn calls
        https://bugs.webkit.org/show_bug.cgi?id=221070

        Reviewed by Philippe Normand.

        To avoid nested webkit-flatpak calls overwriting/deleting whe
        environment file, only create if there is no such file and only delete
        in the same process that created it.

        This approach has the drawback of limiting nested calls changing the
        variable values and a file undeleted after a crash might avoid the
        next normal invocation creating it.

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

2021-01-28  Alicia Boya García  <aboya@igalia.com>

        [GTK] run-gtk-tests: Ensure correct count when subtests are specified
        https://bugs.webkit.org/show_bug.cgi?id=221049

        Reviewed by Adrian Perez de Castro.

        Currently the code of run-gtk-tests adds the number of skipped tests
        to the count of total tests. That computation failed to take into
        account the case where specific subtests are run (by means of passing
        the -p argument), instead of the full test suite.

        This patch fixes that, only adding to "total tests" those skipped
        subtests that were also specified with the -p argument when using that
        mode.

        * glib/api_test_runner.py:
        (TestRunner.run_tests):

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

        [Flatpak SDK] Avoid "Invalid byte sequence in conversion input" errors and other encoding issues
        https://bugs.webkit.org/show_bug.cgi?id=221068

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.execute_command): Decode the arguments before printing.
        (WebkitFlatpak.run_in_sandbox): Avoid iterating mutating dict and
        export LANG.
        * flatpak/webkit-bwrap: Ignore LANG as it's exported by
        flatpakutils.py.

2021-01-27  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add basic authentication
        https://bugs.webkit.org/show_bug.cgi?id=221052

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2021-01-27  Kate Cheney  <katherine_cheney@apple.com>

        WKWebView closeAllMediaPresentations API does not have a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=220741
        <rdar://problem/73045904>

        Reviewed by Youenn Fablet.

        Update API tests to use the new completion handler. Move from using JS
        to a new SPI to check for inline video to avoid flakiness because the
        JS value is async and may not be completed by the time
        didExitFullscreen() is called.

        Add a new case for multiple sequential calls to
        closeAllMediaPresentations.

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

2021-01-27  Devin Rousso  <drousso@apple.com>

        [iOS] expose existing macOS-only `-[WKWebView _pageExtendedBackgroundColor]` SPI
        https://bugs.webkit.org/show_bug.cgi?id=221015
        <rdar://problem/73636453>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/PageExtendedBackgroundColor.mm: Added.
        (TEST.PageExtendedBackgroundColor.OnLoad):
        (TEST.PageExtendedBackgroundColor.MultipleTags):
        (-[WKWebViewPageExtendedBackgroundColorObserver initWithWebView:]):
        (-[WKWebViewPageExtendedBackgroundColorObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST.PageExtendedBackgroundColor.KVO):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-01-27  Alicia Boya García  <aboya@igalia.com>

        [GTK] run-gtk-tests: Crashing and non-existent tests should not count as a pass
        https://bugs.webkit.org/show_bug.cgi?id=220863

        Reviewed by Michael Catanzaro.

        The current implementation doesn't account for test binaries that have
        not emitted any subtests. This is the case when a test binary doesn't
        exist or it crashes.

        Also, in the latter case, the stderr of the crashed processes was not
        being outputted to the user, masking a crashing test binary as a
        passing test.

        This patch fixes both issues: It adds several warning prints when
        binaries can't be run or fail to add any subtest, emitting the stderr
        generated by the failing or crashing binary.

        * glib/api_test_runner.py:
        (TestRunner._run_test):
        (TestRunner.run_tests):
        * glib/glib_test_runner.py:
        (GLibTestRunner.run):

2021-01-27  Youenn Fablet  <youenn@apple.com>

        Enable GPU WebRTC codecs in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=220936

        Reviewed by Eric Carlson.

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

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

        REGRESSION(r271634): keyring still failing to retrieve secrets
        https://bugs.webkit.org/show_bug.cgi?id=221029

        Reviewed by Sergio Villar Senin.

        * Scripts/libraries/webkitscmpy/setup.py: Reduce version number duplication by reusing the
        Version object declared in the package.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version and downgrade to
        usable keyring version (in Linux at least).

2021-01-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r271940.
        https://bugs.webkit.org/show_bug.cgi?id=221040

        Some tests are failing on bots

        Reverted changeset:

        "[MacOS] Enable NSURLSession WebSocket code path in
        WebKitTestRunner"
        https://bugs.webkit.org/show_bug.cgi?id=220973
        https://trac.webkit.org/changeset/271940

2021-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit/WebKitSettings/webkit-settings is failing since r271354
        https://bugs.webkit.org/show_bug.cgi?id=221033

        Reviewed by Adrian Perez de Castro.

        Since r271354 the font values set in WebKitSettings are always the same you get no matter what the current DPI
        is. The scaling factor is applied to the font size without actually changing the setting.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Update the test to check the correct behavior.
        * TestWebKitAPI/glib/TestExpectations.json: Remove expectation for the test.

2021-01-27  Youenn Fablet  <youenn@apple.com>

        [MacOS] Enable NSURLSession WebSocket code path in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=220973

        Reviewed by Darin Adler.

        Enable NSURLSession WebSocket code path in MacOS.

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

2021-01-27  Philippe Normand  <pnormand@igalia.com> and Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Flatpak 1.10 environment variable issues
        https://bugs.webkit.org/show_bug.cgi?id=220781

        Reviewed by Adrian Perez de Castro.

        Flatpak no longer passes its env variables to bwrap, so the workaround is now to serialize
        it on-disk in a JSON file and load it from our webkit-bwrap script.

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

2021-01-26  Sihui Liu  <sihui_liu@appe.com>

        Mute audio capture for speech recognition based on shouldInterruptAudioOnPageVisibilityChange when page is invisible
        https://bugs.webkit.org/show_bug.cgi?id=220960

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/speechrecognition-basic.html:

2021-01-26  Devin Rousso  <drousso@apple.com>

        Expose the value of `<meta name="theme-color" content="...">` as SPI
        https://bugs.webkit.org/show_bug.cgi?id=220944
        <rdar://problem/72198083>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/HTMLMetaThemeColor.mm: Added.
        (TEST.HTMLMetaThemeColor.OnLoad):
        (TEST.HTMLMetaThemeColor.MultipleTags):
        (-[WKWebViewThemeColorObserver initWithWebView:]):
        (-[WKWebViewThemeColorObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST.HTMLMetaThemeColor.KVO):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        [GLIB] API tests fail to report harness failures
        https://bugs.webkit.org/show_bug.cgi?id=220938

        Reviewed by Carlos Garcia Campos.

        The GLibTestRunner class parses the stdout of the child test program to
        detect failures and crashes using GLib's g_test_* protocol, but the
        setup and teardown of each suite/program is done manually in the
        beforeAll/afterAll functions. Their output/status need to be checked
        separately by the runner scripts.

        This commit checks if a failure happens before any test is run (a
        beforeAll failure) and if there is still pending stderr output not
        processed by g_test_run (an afterAll failure).

        * glib/glib_test_runner.py:
        (GLibTestRunner.run):

2021-01-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r271578.
        https://bugs.webkit.org/show_bug.cgi?id=221003

        Title changes reverted made WPEQt tests fail

        Reverted changeset:

        "[WPE] Fix WPEQt tests after r271514"
        https://bugs.webkit.org/show_bug.cgi?id=220681
        https://trac.webkit.org/changeset/271578

2021-01-26  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Do not specify remote file location to the JSConly bots
        https://bugs.webkit.org/show_bug.cgi?id=220923

        Reviewed by Carlos Alberto Lopez Perez.

        There is no need to treat JSC buildbots that use remotes any
        different. The worker side needs to supply the remote
        configuration file in any case and it can also specify
        --remote-config-file in TEST_JSC_ARGS.

        What's more, letting the worker be in control makes it easier to
        implement changes without having to request upstream configuration
        changes (or, worse, temporarily overriding the configuration
        recorded in config.json).

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/factories.py:
        (BuildAndJSCTestsFactory):
        (BuildAndJSCTestsFactory.__init__):
        * CISupport/build-webkit-org/steps.py:
        (RunJavaScriptCoreTests.countFailures):

2021-01-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Stop using SoupRequest API to load files in preparation for libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=220509

        Reviewed by Adrian Perez de Castro.

        Add WebKitDirectoryInputStream.cpp as exception for style checker.

        * Scripts/webkitpy/style/checker.py:

2021-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, reverting r271514 and r271549

        Made TestWebKitAPI.WebKit.PrintFrame flaky

        Reverted changeset:

        "Use event loop to set title"
        https://bugs.webkit.org/show_bug.cgi?id=218496
        https://trac.webkit.org/changeset/271514

2021-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        ASSERT NOT REACHED in WebCore::DisplayList::isDrawingItem
        https://bugs.webkit.org/show_bug.cgi?id=220948
        <rdar://problem/73588734>

        Reviewed by Tim Horton.

        The API test `DisplayListTests.OutOfLineItemDecodingFailure` was intended to read from the display list copy
        rather than the original list, in order to exercise the (intentional) decoding failure.

        Instead, this test erroneously attempts to read from the original display list (which, importantly, doesn't have
        a reading client) and ends up exercising the decoding failure anyways, but additionally hits a debug assertion
        in the process. Simply fix this by reading out of the correct display list (and rename the original display list
        in the process to make the test more clear).

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST)

2021-01-25  Aakash Jain  <aakash_jain@apple.com>

        Changes to commit-log-editor should trigger webkitpy EWS tests
        https://bugs.webkit.org/show_bug.cgi?id=220953

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CheckPatchRelevance): Added commit-log-editor to list of relevant files for webkitpy ews.
        * CISupport/ews-build/steps_unittest.py: Improved unit-test to check for various file-names.

2021-01-25  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Support python layout tests
        https://bugs.webkit.org/show_bug.cgi?id=220749
        <rdar://problem/73375271>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder._real_tests): Exclude "tools" directories.
        (LayoutTestFinder._is_test_file): Special case for web socket's *_wsh.py files.
        (LayoutTestFinder._is_w3c_resource_file): Exclude w3c Python files.

2021-01-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r271805.

        Appears to have broken generation of changed files/functions
        in commit logs

        Reverted changeset:

        "The generated commit message have a directory label at the
        first line rather than the bug's title if ChangeLogs have
        different bug titles"
        https://bugs.webkit.org/show_bug.cgi?id=220822
        https://trac.webkit.org/changeset/271805

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

        ASSERTION FAILED: This HTTPServer does not know how to respond to a request for /Ahem.svg
        https://bugs.webkit.org/show_bug.cgi?id=220949

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (TEST):
        A path in the test I added in r271770 was missing a / at the beginning of a path.
        It passes before and after this change, but it doesn't assert after it.

2021-01-25  Aakash Jain  <aakash_jain@apple.com>

        [ews] Commit Queue should retry the build when update-working-directory step fails
        https://bugs.webkit.org/show_bug.cgi?id=220836

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (UpdateWorkingDirectory):
        (UpdateWorkingDirectory.getResultSummary): Provide better failure message.
        (UpdateWorkingDirectory.evaluateCommand): Retry the build when this step fails.
        * CISupport/ews-build/steps_unittest.py:

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

        The generated commit message have a directory label at the first line rather than the bug's title if ChangeLogs have different bug titles
        https://bugs.webkit.org/show_bug.cgi?id=220822

        Reviewed by Darin Adler.

        commit-log-editor generates the default commit message by
        collecting all ChangeLog entries and merging them with prepending
        directory lables. If it finds out a common prefix for all entries,
        it removes the prefix from entries and hoists the prefix as the
        beginning of the commit message. This step removes duplicated
        lines of the bug title, the bug URL, the reviewed-by line, and the
        descriptions.

        If such prefix is not found, i.e. ChangeLog entries has different
        bug titles, it simply merges all entries with directory labels. As
        the result, the generated commit message has the directory label
        at the first line. This is not desirable. The first line of the
        commit message should be the bug title.

        This patch yanks the first line of the first entry as the common
        prefix in the case.

        * Scripts/commit-log-editor:
        (createCommitMessage):
        (removeLongestCommonPrefixEndingInNewline):

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

        [GLIB] Gardening API failures after r271794

        Unreviewed test gardening.

        Looks like these failures flew under the radar by not actually being
        run by run-gtk/wpe-tests, and were uncovered by r271794.

        Marking them as failure to allow the EWS to run normally while they're
        fixed.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-01-25  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Download the build archive from master when download from S3 fails
        https://bugs.webkit.org/show_bug.cgi?id=220932

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (DownloadBuiltProduct):
        (DownloadBuiltProduct.evaluateCommand): If this fails, run DownloadBuiltProductFromMaster.
        (DownloadBuiltProductFromMaster): Build step to download archive from master using buildbot FileDownload class.
        (DownloadBuiltProductFromMaster.__init__):
        (DownloadBuiltProductFromMaster.getResultSummary): Custom failure message.

2021-01-25  Aakash Jain  <aakash_jain@apple.com>

        layout-test results shouldn't be hosted on build.webkit.org server
        https://bugs.webkit.org/show_bug.cgi?id=220864

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.resultDirectoryURL):

2021-01-25  John Wilander  <wilander@apple.com>

        PCM: Use different well-known locations for triggering and reporting attribution
        https://bugs.webkit.org/show_bug.cgi?id=220902
        <rdar://problem/73550632>

        Reviewed by Brent Fulgham.

        The discussion in W3C Privacy CG concluded that we should use distinct
        well-known URL paths for websites triggering attribution and for the
        browser reporting attribution
        (https://github.com/privacycg/private-click-measurement/issues/59).

        This patch changes the one location to these two:
        /.well-known/private-click-measurement/trigger-attribution
        /.well-known/private-click-measurement/report-attribution

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):

2021-01-25  Razvan Caliman  <rcaliman@apple.com>

        Add Razvan Caliman to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=220921

        Reviewed by Timothy Hatcher.

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

2021-01-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r270074 and r270170.
        https://bugs.webkit.org/show_bug.cgi?id=220922

        Broke all GLib unit tests using a SoupServer

        Reverted changesets:

        "[GTK] Migrate WebKitTestServer to libsoup 2.48 API"
        https://bugs.webkit.org/show_bug.cgi?id=219160
        https://trac.webkit.org/changeset/270074

        "[GTK] Allow WebKitTestServer to run non-loopback addresses
        for API tests"
        https://bugs.webkit.org/show_bug.cgi?id=219257
        https://trac.webkit.org/changeset/270170

2021-01-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        DumpRenderTree behaves differently to WebKitTestRunner wrt integrated/discrete GPU behavior
        https://bugs.webkit.org/show_bug.cgi?id=220852

        Reviewed by Alexey Proskuryakov.

        Mark DumpRenderTree as supporting graphics switching. This lets
        --prefer-integrated-gpu work as intended and compatible with WebKitTestRunner.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Info.plist: Added.

2021-01-25  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VO: Web: Column Names Not Announced
        https://bugs.webkit.org/show_bug.cgi?id=220829
        <rdar://problem/73469037>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isInTable const):
        (WTR::AccessibilityUIElement::isInLandmark const):
        (WTR::AccessibilityUIElement::isInList const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::isInTable const):
        (WTR::AccessibilityUIElement::isInLandmark const):
        (WTR::AccessibilityUIElement::isInList const):

2021-01-25  Alicia Boya García  <aboya@igalia.com>

        [GTK] run-gtk-tests: Use sys.exit(1) instead of return 1
        https://bugs.webkit.org/show_bug.cgi?id=220860

        Reviewed by Philippe Normand.

        Several parts of the code in api_test_runner.py returned 1 on failure.
        While common for main() functions, this is bad in functions that are
        expected to return something else than an exit code, and lets the
        program run after the error. sys.exit(1) should be used in those cases
        instead.

        * glib/api_test_runner.py:
        (TestRunner._get_tests_from_google_test_suite):
        (TestRunner.run_tests):

2021-01-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] theverge.com - rubber band scrolling at the top of the page causes an abrupt jump
        https://bugs.webkit.org/show_bug.cgi?id=220886
        <rdar://71177566>

        Reviewed by Sam Weinig.

        Add test infrastructure to allow UIScriptController::scrollToOffset() and
        UIScriptController::immediateScrollToOffset() to take an options argument with
        a 'unconstrained' property, which allows scrolling to unstable offset to simulate
        rubberbanding.

        * DumpRenderTree/ios/UIScriptControllerIOS.h:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::contentOffsetBoundedIfNecessary):
        (WTR::UIScriptControllerIOS::scrollToOffset):
        (WTR::UIScriptControllerIOS::immediateScrollToOffset):
        (WTR::contentOffsetBoundedInValidRange): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::scrollToOffset):
        (WTR::UIScriptController::immediateScrollToOffset):
        * TestRunnerShared/UIScriptContext/UIScriptControllerShared.cpp:
        (WTR::toScrollToOptions):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::contentOffsetBoundedIfNecessary):
        (WTR::UIScriptControllerIOS::scrollToOffset):
        (WTR::UIScriptControllerIOS::immediateScrollToOffset):
        (WTR::contentOffsetBoundedInValidRange): Deleted.

2021-01-23  Xan Lopez  <xan@igalia.com>

        [JSC] Allow to build WebAssembly without B3
        https://bugs.webkit.org/show_bug.cgi?id=220365

        Reviewed by Yusuke Suzuki.

        * Scripts/webkitperl/FeatureList.pm: add WebAssembly B3 JIT option.

2021-01-22  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r266148) Cancelling a navigation in decidePolicyForNavigationAction should not suspend the previous document's font loading timer
        https://bugs.webkit.org/show_bug.cgi?id=220882
        <rdar://problem/71634501>

        Reviewed by Brady Eidson.

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

2021-01-22  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add GitHub credentials (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=220562
        <rdar://problem/73063457>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Change xmldict version.

2021-01-22  W.D. Xiong  <w_xiong@apple.com>

        Update run-benchmark to work with Python3
        https://bugs.webkit.org/show_bug.cgi?id=220878

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver._find_http_server_port): Convert byte output to string before parsing regex

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

        [webkitpy][GTK] Xvfb driver fails to start with python3
        https://bugs.webkit.org/show_bug.cgi?id=220870

        Reviewed by Jonathan Bedard.

        Python2 and Python3 differ in how they handle file descriptor inheritance
        and Popen's close_fds default value.

        In Python2, os.pipe creates the fds with the inheritable flag set, and
        Popen's close_fds defaults to True.

        In Python3, os.pipe creates the fds non-inheritable, requiring a call
        to os.set_inheritable to enable it. Also, Popen's close_fds defaults
        to False, closing all file descriptors except stdin, stdout and stderr.

        With this commit, Python3 is able to launch the Xvfb driver for
        run-webdriver-tests, but is still failing later with some pytest issue
        to be tracked in another bug.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._xvfb_pipe): Make the write_fd inheritable if in py3.
        (XvfbDriver._xvfb_read_display_id): Encode for py3 bytes compatibility.
        (XvfbDriver._xvfb_run): Tell popen to keep the file descriptors open.

2021-01-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        DisplayList::Replayer should stop replay and inform clients after encountering an invalid item
        https://bugs.webkit.org/show_bug.cgi?id=220867

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:

        Adjust a few API tests, since the item handle in the `DisplayList` iterator is now optional.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:

        Add a couple of new API tests to exercise display list item decoding and validation failures.

2021-01-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        Retried tests are run without --prefer-integrated-gpu
        https://bugs.webkit.org/show_bug.cgi?id=220845

        Reviewed by Jonathan Bedard.

        Run the test helper with --prefer-integrated-gpu also for retried tests, if
        user originally passed --prefer-integrated-gpu to run-webkit-tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):
        (Manager._force_pixel_tests_if_needed):

2021-01-22  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Map alternative default branch names
        https://bugs.webkit.org/show_bug.cgi?id=220865
        <rdar://problem/73502370>

        Reviewed by Aakash Jain.

        As WebKit transitions from Subversion to Git, our default branch is changing from
        trunk to main. This change allow identifiers with 'main' in them to work in Subversion checkouts.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.find): Map set of common default branches to this repository's default branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.find): Map set of common default branches to this repository's default branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.find): Map set of common default branches to this repository's default branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_alternative_default_branch):
        (TestGitHub.test_alternative_default_branch):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_alternative_default_branch):
        (TestRemoteSvn.test_alternative_default_branch):

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

        [WebDriver] Add info about importing tests
        https://bugs.webkit.org/show_bug.cgi?id=220786

        Reviewed by Carlos Garcia Campos.

        * Scripts/import-webdriver-tests: Replace optparse with argparse and
        refer to the tests README.md
        (Importer.import_tests):

2021-01-21  Aakash Jain  <aakash_jain@apple.com>

        [ews] Use github instead of svn.webkit.org to fetch contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=220808

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer): Changed url to github.
        (ValidateCommiterAndReviewer.load_contributors_from_github): Renamed.
        (ValidateCommiterAndReviewer.load_contributors):

2021-01-21  Aakash Jain  <aakash_jain@apple.com>

        Update setup-commit-queue.sh for github repo
        https://bugs.webkit.org/show_bug.cgi?id=220750

        Reviewed by Jonathan Bedard.

        * EWSTools/setup-commit-queue.sh:

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

        Unreviewed, reverting r271691.
        https://bugs.webkit.org/show_bug.cgi?id=220812

        Introduced crash, and failing API tests.

        Reverted changeset:

        "[macOS] Titlebar separator doesn't show when WKWebView is scrolled"
        https://bugs.webkit.org/show_bug.cgi?id=220633
        https://trac.webkit.org/changeset/271691

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

        Remove ENABLE_USERSELECT_ALL macro which is enabled for all ports
        https://bugs.webkit.org/show_bug.cgi?id=100424

        Reviewed by Don Olmstead.

        * Scripts/webkitperl/FeatureList.pm:

2021-01-21  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Handle machines that cannot import keyring
        https://bugs.webkit.org/show_bug.cgi?id=220800
        <rdar://problem/73454666>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.credentials): Make keyring optional.

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

        Rework color clamping logic to be more consistent and clear
        https://bugs.webkit.org/show_bug.cgi?id=220716

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update tests to use new convertTo<> functions.

2021-01-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        autoinstall python-secretstorage
        https://bugs.webkit.org/show_bug.cgi?id=220796

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * gtk/install-dependencies:
        * wpe/install-dependencies:

2021-01-21  Angelos Oikonomopoulos  <angelos@igalia.com>

        [webkitcorepy] Don't import six at the top level
        https://bugs.webkit.org/show_bug.cgi?id=220795

        Reviewed by Aakash Jain.

        Instead, do the import after the module has been loaded, when
        AutoInstall has been set up properly. Fixes a regression after
        1d342a5067e22ac8069ff3ff337b2d58e1d06517, where task_pool.py uses
        the six module without it being installed.

        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (ChildException.__call__):
        (TaskPool.__exit__):

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

        [macOS] Titlebar separator doesn't show when WKWebView is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=220633
        <rdar://problem/71094055>

        Reviewed by Tim Horton.

        Added API tests to verify that the delegate implementation returns the
        correct value for `hasScrolledContentsUnderTitlebar` depending on
        the view's scroll position, visibility, and frame.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/WKWebViewTitlebarSeparatorTests.mm: Added.
        (-[TitlebarSeparatorTestWKWebView initWithFrame:configuration:]):
        (-[TitlebarSeparatorTestWKWebView separatorTrackingAdapter]):
        (BackForwardCache):
        (ChangeTitlebarAdjacency):
        (ChangeViewVisibility):
        (NavigationResetsTitlebarAppearance):
        (ScrollWithTitlebarAdjacency):
        (ScrollWithoutTitlebarAdjacency):

2021-01-20  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Gracefully handle missing keyring backend
        https://bugs.webkit.org/show_bug.cgi?id=220784

        Reviewed by Yusuke Suzuki.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.credentials): Handle RuntimeErrors from keyring.

2021-01-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Include an origin identifier when writing promised image data to the drag pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=220782

        Reviewed by Megan Gardner.

        Make a slight adjustment to an existing API test, to verify that custom pasteboard data is serialized when
        dragging an image element.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:

2021-01-20  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add TaskPool
        https://bugs.webkit.org/show_bug.cgi?id=220547
        <rdar://problem/73043887>

        Reviewed by Dewei Zhu.

        The TaskPool object is a Python 3.8 compatible multiprocessing tool. Notable features are forwarding stdout,
        stderr and logging to the parent process, exception propagation between processes, and graceful clean-up when
        exceptions in the parent process are encountered

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, add tblib.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py: Added.
        (Message): Base class for message passed between processes.
        (Task): Message including function and arguments to that function.
        (Result): Return value of a task passed to the parent process.
        (Log): Pass log message from child process to parent process.
        (Print): Pass stdout or stderr line from child process to parent process.
        (State): Notify parent process that the child process has changed state.
        (ChildException): Pass exception and stack trace from
        (BiDirectionalQueue): Pair for multiprocess queues allowing for messages to be passed between processes.
        (Process): Scoping class managing child-process logic.
        (Process.LogHandler): Logging handler that passes log lines from the child process to it's parent.
        (Process.Stream): Writable stream which passes content from the child process to the standard out or error
        of that process's parent.
        (Process.handler): SIGTERM should prevent future processing but allow currently in-flight tasks to complete.
        (Process.main): Entry-point to child process.
        (TaskPool): Managing allocation of tasks to child processes and clean up those child processes.
        (TaskPool.Exception): Exception owned by TaskPool object.
        (TaskPool.__init__):
        (TaskPool.__enter__):
        (TaskPool.do): Pass task to child processes.
        (TaskPool.wait): Wait until all processes are completed.
        (TaskPool.__exit__): Teardown all child processes.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py: Added.
        (setup):
        (teardown):
        (action):
        (log):
        (wait):
        (exception):
        (TaskPoolUnittest):
        (TaskPoolUnittest.test_single):
        (TaskPoolUnittest.test_multiple):
        (TaskPoolUnittest.test_callback):
        (TaskPoolUnittest.test_exception):
        (TaskPoolUnittest.test_setup):
        (TaskPoolUnittest.test_teardown):
        (TaskPoolUnittest.test_invalid_shutdown):

2021-01-20  Aakash Jain  <aakash_jain@apple.com>

        EWS should display commit identifier in builds
        https://bugs.webkit.org/show_bug.cgi?id=220769

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/factories.py:
        (Factory.__init__): Added ShowIdentifier build step.
        (StyleFactory.__init__):
        (WatchListFactory.__init__):
        (CommitQueueFactory.__init__):
        * CISupport/ews-build/steps.py:
        (ShowIdentifier): build-step to show commit identifier.
        (ShowIdentifier.start):
        (ShowIdentifier.evaluateCommand):
        (ShowIdentifier.getLastBuildStepByName):
        (ShowIdentifier.url_for_identifier):
        (ShowIdentifier.getResultSummary): Display custom failure message.
        (ShowIdentifier.hideStepIf): Hide this step if successful.
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.
        * CISupport/ews-build/factories_unittest.py:

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

        Two pages in the same process should not be able to play media stream backed video elements at the same time
        https://bugs.webkit.org/show_bug.cgi?id=220504

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia2.html: Added.

2021-01-20  Kate Cheney  <katherine_cheney@apple.com>

        Safari says "Blocked Plug-in" instead showing a PDF
        https://bugs.webkit.org/show_bug.cgi?id=220665
        <rdar://problem/64372944>

        Reviewed by Darin Adler.

        API test coverage.

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

2021-01-20  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Support alternative default pypi url on macOS (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=220744
        <rdar://problem/73369338>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (_default_pypi_index): Ensure that "simple" is excluded from the pypi url.

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

        A DOMWindow should not be reused if its JSDOMWindow has been created
        https://bugs.webkit.org/show_bug.cgi?id=220658
        <rdar://problem/70335075>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:

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

        On page close, make sure to notify of capture state immediately
        https://bugs.webkit.org/show_bug.cgi?id=220588

        Reviewed by Geoffrey Garen.

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

2021-01-19  Sihui Liu  <sihui_liu@appe.com>

        Update media state for active speech recognition as it uses audio capture
        https://bugs.webkit.org/show_bug.cgi?id=220667

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionUIDelegate _webView:mediaCaptureStateDidChange:]):
        (TestWebKitAPI::TEST):
        (-[SpeechRecognitionPermissionUIDelegate _webView:requestSpeechRecognitionPermissionForOrigin:decisionHandler:]): Deleted.
        (-[SpeechRecognitionPermissionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]): Deleted.
        (-[SpeechRecognitionPermissionUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]): Deleted.
        (-[SpeechRecognitionPermissionUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]): Deleted.

2021-01-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r271506): webkit-patch keyring integration is broken on Linux
        https://bugs.webkit.org/show_bug.cgi?id=220736

        Reviewed by Jonathan Bedard.

        r271506 updated python-keyring to the last version to support python2, but unfortunately
        this version seems to be somehow incompatible with python-secretstorage, which is required
        for system keyring support on Linux. This bug is fixed in newer versions of python-keyring
        that do not support python2, but we still support python2, so we cannot upgrade. I've tested
        several versions of python-keyring and found that version 11.1.0 is the most recent version
        that supports python2 and works properly on Linux, so let's stick with that until we are
        ready to give up on python2.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:

2021-01-19  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Support alternative default pypi url on macOS
        https://bugs.webkit.org/show_bug.cgi?id=220744
        <rdar://problem/73369338>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (_default_pypi_index): Pull default pypi index from pip.conf, if available.
        (AutoInstall): Set index based on result of _default_pypi_index.

2021-01-19  Jonathan Bedard  <jbedard@apple.com>

        [commit-queue] Cache credentials for https instead of http
        https://bugs.webkit.org/show_bug.cgi?id=220746
        <rdar://problem/73369984>

        Reviewed by Aakash Jain.

        * EWSTools/configure-svn-auth.sh:

2021-01-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r271606.
        https://bugs.webkit.org/show_bug.cgi?id=220747

        Didn't work properly

        Reverted changeset:

        "[update-webkit] Do not automatically use git svn rebase"
        https://bugs.webkit.org/show_bug.cgi?id=220739
        https://trac.webkit.org/changeset/271606

2021-01-19  Jonathan Bedard  <jbedard@apple.com>

        [update-webkit] Do not automatically use git svn rebase
        https://bugs.webkit.org/show_bug.cgi?id=220739
        <rdar://problem/73365632>

        Rubber-stamped by Aakash Jain.

        git svn rebase is an expensive operation, it is also usually the wrong operation
        when your git checkout is already being automatically populated from Subversion

        * Scripts/webkitdirs.pm:
        (runGitUpdate): Replace `git svn rebase` with `git svn fetch`.

2021-01-19  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Support generating patch with main as the default branch
        https://bugs.webkit.org/show_bug.cgi?id=220737
        <rdar://problem/73362104>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.remote_branch_ref): Support 

2021-01-19  Jonathan Bedard  <jbedard@apple.com>

        [GitHub] Use github.com as the source of truth for EWS
        https://bugs.webkit.org/show_bug.cgi?id=220479
        <rdar://problem/72941463>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (CheckOutSource.__init__): Use GitHub.com instead of git.webkit.org.

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

        [Win][DumpRenderTree] ASSERT(!m_channel) failed in WebSocket::contextDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=220450

        Reviewed by Per Arne Vollan.

        WebSocket::failAsynchronously() posts a deferred task calling
        WebSocket::stop() by using callOnMainThread, but the task was not
        executed soon because DumpRenderTree stopped running the run loop
        after finishing the test.

        DumpRenderTree's run loop should dispatch all deferred tasks
        before finishing the current test. Deffer setting the variable
        'done' by posting a application message.

        * DumpRenderTree/win/DumpRenderTree.cpp: Define a application message WM_DRT_TEST_DONE.
        (DumpRenderTreeWndProc): Set 'done' in the case of WM_DRT_TEST_DONE.
        (dump): Post WM_DRT_TEST_DONE.

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

        [WPE] Fix WPEQt tests after r271514
        https://bugs.webkit.org/show_bug.cgi?id=220681

        Reviewed by Carlos Garcia Campos.

        Setting the title became async, so we must wait for it to be
        processed.

        * TestWebKitAPI/Tests/WPEQt/TestLoad.cpp:
        (TestLoad::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadHtml.cpp:
        (TestLoadHtml::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadRequest.cpp:
        (TestLoadRequest::main):
        * TestWebKitAPI/Tests/WPEQt/TestRunJavaScript.cpp:
        (TestRunJavaScript::main):

2021-01-17  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add GitHub credentials (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=220562
        <rdar://problem/73063457>

        Unreviewed follow-up fix.

        * Scripts/webkitpy/__init__.py: Ensure that webkitscmpy's dependencies are auto installed.

2021-01-15  Alexey Proskuryakov  <ap@apple.com>

        Build fixes with newer clang
        https://bugs.webkit.org/show_bug.cgi?id=220679

        Reviewed by Mark Lam.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (lockDownDiscreteGraphics):
        (addSleepAssertions):
        Added "static" to functions without prototypes.

2021-01-15  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Cache credentials from keychain
        https://bugs.webkit.org/show_bug.cgi?id=220671
        <rdar://problem/73262349>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.credentials): Cache credentials from keychain even when not specified by the user.

2021-01-15  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Make UI parsing for parent commits more flexible
        https://bugs.webkit.org/show_bug.cgi?id=220661
        <rdar://problem/73256932>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.__init__): Handle commit links in the UI using both 'commits/' URLs and 'tree-commit/'.

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

        [GStreamer] Clean-up the TextSink
        https://bugs.webkit.org/show_bug.cgi?id=220651

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py: Add GStreamer TextSink implementation to GObject
        classes allow-list.

2021-01-15  Rob Buis  <rbuis@igalia.com>

        Use event loop to set title
        https://bugs.webkit.org/show_bug.cgi?id=218496

        Reviewed by Ryosuke Niwa.

        Adapt unit tests to wait for title change tasks
        to be processed.

        * TestWebKitAPI/Tests/WebKit/PageLoadState.cpp:
        (TestWebKitAPI::didChangeTitle):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):

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

        [GStreamer] Clean-up the TextCombiner
        https://bugs.webkit.org/show_bug.cgi?id=220463

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py: Add GStreamer TextCombiner implementation to GObject
        classes allow-list.

2021-01-14  Aditya Keerthi  <akeerthi@apple.com>

        [Cocoa] Strip DataDetectors links when copying content to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=220526
        <rdar://problem/71045590>

        Reviewed by Ryosuke Niwa.

        Added API tests to verify DataDetectors links are not preserved when
        copying/pasting WebArchives and rich text.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyRTF.mm:
        (StripsDataDetectorsLinks):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:
        (StripsDataDetectorsLinks):

2021-01-14  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Add GitHub credentials
        https://bugs.webkit.org/show_bug.cgi?id=220562
        <rdar://problem/73063457>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version, add keyring.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub):
        (GitHub.__enter__): Set username and token in environment.
        (GitHub.__exit__): Unset username and token in environment.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.__init__):
        (GitHub.credentials): Search for credentials in both environment and keyring before
        prompting user.
        (GitHub.request): Use GitHub credentials, if they are available.
        * Scripts/webkitpy/__init__.py: Move keyring to webkitscmpy.
        * Scripts/webkitpy/common/net/credentials.py: New version of keyring prints output when
        Imported, suppress this output.

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

        Add dotless j and small N to unicode lookalike character list
        https://bugs.webkit.org/show_bug.cgi?id=220632
        <rdar://problem/72101901>

        Reviewed by David Kilzer.

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

2021-01-14  Aakash Jain  <aakash_jain@apple.com>

        EWS should correctly identify the OS for Big Sur dot releases
        https://bugs.webkit.org/show_bug.cgi?id=220622

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (PrintConfiguration.convert_build_to_os_name): Change 11.0 to 11 since we use startswith() for matching.

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

        REGRESSION (r266634): Messages crashes sometimes while scrolling around and playing YouTube videos
        https://bugs.webkit.org/show_bug.cgi?id=220602
        <rdar://problem/70402593>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/PlatformWebView.h:
        Mark PlatformWebView noncopyable, since it is effectively noncopyable
        (at least, the macOS implementation will overrelease the view if you
        copy it, whoops).

        * TestWebKitAPI/Tests/WebKit/DeferredViewInWindowStateChange.mm:
        (TestWebKitAPI::TEST):
        Add a matching dispatch_async, or this test fails.

2021-01-13  Alex Christensen  <achristensen@webkit.org>

        Remove deprecated script and stylesheet SPI, replaced with more inclusively-named SPI
        https://bugs.webkit.org/show_bug.cgi?id=214937

        Fix iOS build after r271457.

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

2021-01-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] "Correct Spelling Automatically" menu items are inconsistent when autocorrect="off"
        https://bugs.webkit.org/show_bug.cgi?id=220598
        <rdar://problem/71713611>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DisableAutomaticSpellingCorrection.mm: Added.

        Add a new API test to verify that the `NSMenuItem` for toggling automatic spelling correction is invalid when
        editing inside a form control with autocorrect="off".

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::getMenuItemEnabledCallback):

        Add the readonly `enabled` JS property on context menu items. See the new layout test,
        editing/mac/spelling/disable-automatic-spelling-correction-context-menu-item.html, for more information.

2021-01-13  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Handle single commit touching multiple branches
        https://bugs.webkit.org/show_bug.cgi?id=220601
        <rdar://problem/73165609>

        Reviewed by Stephanie Lewis.

        In WebKit's history, there are a few cases of commits that touch multiple branches (like
        https://trac.webkit.org/changeset/92419/webkit). These types of commits are not correct,
        but we need to handle them if they are in the history of a branch.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn._cache_revisions): Branches only intersect trunk when two sequential commits are from trunk.
        (Svn.commit): Support case where no commit time can be found.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn._cache_revisions): Branches only intersect trunk when two sequential commits are from trunk.
        (Svn.commit): Support case where no commit time can be found.

2021-01-13  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Use PostgreSQL for new build.webkit.org database
        https://bugs.webkit.org/show_bug.cgi?id=220589

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2021-01-13  Sam Sneddon  <gsnedders@apple.com>

        Avoid over-aggressive clearing of *.pyc files running webkitpy tests
        https://bugs.webkit.org/show_bug.cgi?id=220594

        Reviewed by Darin Adler.

        * Scripts/webkitpy/test/finder.py:
        (source_from_cache): Added fallback for PY2
        (_DirectoryTree.clean): Change to use imported/fallback source_from_cache

2021-01-13  Diego Pino Garcia  <dpino@igalia.com>

        [buildbot] WebKitGTK(GTK4) isn't triggered after a binary build
        https://bugs.webkit.org/show_bug.cgi?id=220586

        Reviewed by Aakash Jain.

        r269945 added a new WebKitGTK (GTK4) post-commit bot that runs several test suites
        (layout-test, api-tests and webdriver-tests). The bot was expected to run after
        every binary build, however that wasn't happening because the bot wasn't set as
        triggerable.

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

2021-01-12  Angelos Oikonomopoulos  <angelos@igalia.com>

        Implement serial tests for the ruby test writer
        https://bugs.webkit.org/show_bug.cgi?id=220360

        Reviewed by Yusuke Suzuki.

        This is a verbatim copy of the implementation in the default writer.

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

2021-01-12  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Invoke ccache properly on macOS aarch64
        https://bugs.webkit.org/show_bug.cgi?id=220497

        Reviewed by Darin Adler.

        For macOS aarch64, the current homebrew recommends to install homebrew to `/opt/homebrew`.
        https://docs.brew.sh/Installation

        This patch adds it to the list which `ccache-wrapper` searches.

        * ccache/ccache-wrapper:

2021-01-12  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: move browser domain activation methods back to WKWebView and UIDelegate
        https://bugs.webkit.org/show_bug.cgi?id=220480

        Reviewed by Devin Rousso.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (-[UIDelegate _webViewDidEnableInspectorBrowserDomain:]):
        (-[UIDelegate _webViewDidDisableInspectorBrowserDomain:]):
        (-[InspectorDelegate inspectorDidEnableBrowserDomain:]): Deleted.
        (-[InspectorDelegate inspectorDidDisableBrowserDomain:]): Deleted.
        Adapt to new location for delegate methods.

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

        REGRESSION (r265044): [macOS] Safari autocorrects text when typing in login field on amazon.com
        https://bugs.webkit.org/show_bug.cgi?id=220556
        <rdar://problem/71602937>

        Reviewed by Darin Adler.

        Add an API test that uses WebKit C API (`WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled`) to disable or
        enable spellchecking on input elements.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheck.mm: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheckPlugIn.mm: Added.
        (-[DisableSpellcheckPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[DisableSpellcheckPlugIn webProcessPlugInBrowserContextController:didClearWindowObjectForFrame:inScriptWorld:]):
        (-[DisableSpellcheckPlugIn webProcessPlugInBrowserContextController:didFinishLoadForFrame:]):

2021-01-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update force schedulers as per new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=220544

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/loadConfig.py:
        (loadBuilderConfig):

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

        [WPE] Gardening API test crash

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-01-11  Sihui Liu  <sihui_liu@appe.com>

        Make SpeechRecognition permission error more informative
        https://bugs.webkit.org/show_bug.cgi?id=220436

        Reviewed by Youenn Fablet.

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

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

        ASSERTION FAILED: !event || event.type == NSEventTypeLeftMouseDown || event.type == NSEventTypeRightMouseDown || event.type == NSEventTypeOtherMouseDown
        https://bugs.webkit.org/show_bug.cgi?id=220520
        <rdar://problem/73007898>

        Reviewed by Tim Horton.

        Fix the assertion by synthesizing a "mouse down" event instead of "mouse entered".

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

2021-01-11  BJ Burg  <bburg@apple.com>

        Unreviewed, update my contributor information.

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

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

        WebProcessPool::establishWorkerContextConnectionToNetworkProcess should make sure to remove the selected process from the cache
        https://bugs.webkit.org/show_bug.cgi?id=220503

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-01-11  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Stop using deprecated addFactoryArguments method
        https://bugs.webkit.org/show_bug.cgi?id=220513

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:

2021-01-11  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add python 3 support - part 1
        https://bugs.webkit.org/show_bug.cgi?id=220510

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/email_unittest.py:
        * CISupport/ews-build/loadConfig.py:
        * CISupport/ews-build/loadConfig_unittest.py:

2021-01-11  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Add MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=220359

        Reviewed by Don Olmstead.

        Add PlayStation MiniBrowser sources and CMakeLists.txt.

        * MiniBrowser/playstation/CMakeLists.txt: Added.
        * MiniBrowser/playstation/ImageButton.cpp: Added.
        * MiniBrowser/playstation/ImageButton.h: Added.
        * MiniBrowser/playstation/MainWindow.cpp: Added.
        * MiniBrowser/playstation/MainWindow.h: Added.
        * MiniBrowser/playstation/StringUtils.h: Added.
        * MiniBrowser/playstation/TitleBar.cpp: Added.
        * MiniBrowser/playstation/TitleBar.h: Added.
        * MiniBrowser/playstation/ToolkittenUtils.h: Added.
        * MiniBrowser/playstation/URLBar.cpp: Added.
        * MiniBrowser/playstation/URLBar.h: Added.
        * MiniBrowser/playstation/WebContext.cpp: Added.
        * MiniBrowser/playstation/WebContext.h: Added.
        * MiniBrowser/playstation/WebViewWindow.cpp: Added.
        * MiniBrowser/playstation/WebViewWindow.h: Added.
        * MiniBrowser/playstation/main.cpp: Added.
        (loadLibraryOrExit):
        (initialize):
        (ApplicationClient::updateApplication):
        (main):
        * PlatformPlayStation.cmake: Added.

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

        [GStreamer] Build failure with gst-build: Missing gst/audio/audio.h
        https://bugs.webkit.org/show_bug.cgi?id=220494

        Reviewed by Philippe Normand.

        Make the tests include the audio headers for gst/audio/audio. It is
        included in TestUIClient through WebPreferences -> IPC::Decoder ->
        SharedBuffer -> GStreamerCommon.

        * TestWebKitAPI/glib/CMakeLists.txt:

2021-01-08  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Provide command to automatically configure git-svn
        https://bugs.webkit.org/show_bug.cgi?id=220442
        <rdar://problem/72908233>

        Reviewed by Yusuke Suzuki.

        Add commands to update repository and connect a git repository to a subversion repository.

        * Scripts/git-webkit: Define subversion URL.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.pull): Add function to update repository with the remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.pull): Add function to update repository with the remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.__init__): Suppress exception when metadata cache is invalid.
        (Svn.pull): Add function to update repository with the remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): Use tabs in git config, add 'git svn fetch' and 'git pull' commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__): Add 'svn up' command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add Pull and SetupGitSvn commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (Command.parser): Support use of the default parser.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull.py: Added.
        (Pull): Update the current repository from its remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup_git_svn.py: Added.
        (SetupGitSvn): Add command which populates the .git config file with information
        linking to a subversion repository.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_git_svn_unittest.py: Added.
        (TestSetupGitSvn):
        (TestSetupGitSvn.test_svn):
        (TestSetupGitSvn.test_empty):
        (TestSetupGitSvn.test_add):

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

        Unreviewed test gardening. Attempting to diagnose failing PiP API tests by enabling more logging 
        during the test run, to be collected after a failed test.

        * DumpRenderTree/DumpRenderTree.xcodeproj/xcshareddata/xcschemes/DumpRenderTree.xcscheme:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ExitPiPOnSuspendVideoElement.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCloseAllMediaPresentations.mm:
        (TEST):

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

        [macOS] -[WKWebView acceptsFirstMouse:] sometimes crashes in IPC::Connection::createSyncMessageEncoder
        https://bugs.webkit.org/show_bug.cgi?id=220469
        <rdar://problem/72319199>

        Reviewed by Chris Dumez.

        Add an API test that exercises the crash by calling into `-acceptsFirstMouse:` during web process launch.

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

2021-01-08  Sihui Liu  <sihui_liu@appe.com>

        Stop using MediaRecorder in API test WebKit2.SpeechRecognitionErrorWhenStartingAudioCaptureOnDifferentPage
        https://bugs.webkit.org/show_bug.cgi?id=220347

        Reviewed by Youenn Fablet.

        Because MediaRecorder (with real backend) is only supported in some recent MacOS versions now.

        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/speechrecognition-basic.html:

2021-01-08  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add standard mechanism for packaging pip packages (work-around)
        https://bugs.webkit.org/show_bug.cgi?id=220468
        <rdar://problem/72935720>

        Reviewed by Stephanie Lewis.

        Temporary change to make these packages easier to pip install.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/setup.py: Use string instead of version object.
        * Scripts/libraries/webkitcorepy/setup.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitflaskpy/setup.py: Use string instead of version object.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/setup.py: Use string instead of version object.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.

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

        Make it safe to re-enter HashMap::clear()
        https://bugs.webkit.org/show_bug.cgi?id=220445

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2021-01-08  Chris Lord  <clord@igalia.com>

        [WPE] Enable smooth-motion and kinetic scrolling on touchpads
        https://bugs.webkit.org/show_bug.cgi?id=219942

        Reviewed by Žan Doberšek.

        * wpe/backends/WindowViewBackend.cpp:
        Update to Wayland protocol 5 and interpret axis stop, discrete and
        smooth axis motion events.

2021-01-07  Paulo Matos  <pmatos@igalia.com>

        Fix mktemp call for busybox mktemp
        https://bugs.webkit.org/show_bug.cgi?id=220422

        Reviewed by Alexey Proskuryakov.

        Busybox mktemp requires the template to have 6 Xs.
        GNU mktemp doesn't care so use 6 Xs in order to ensure this will work if busybox mktemp is installed.

        * Scripts/run-jsc-stress-tests:

2021-01-07  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Split program into separate files (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=220369
        <rdar://problem/72856906>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitscmpy/setup.py: Add program to directories to export.

2021-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        compare-results should be able to compare PLUM3 results
        https://bugs.webkit.org/show_bug.cgi?id=220443

        Reviewed by Simon Fraser.

        Added the support to compare PLUM3 results.

        * Scripts/compare-results:
        (plum3Breakdown): Added.
        (detectPLUM3): Added.
        (PLUM3Results): Added.
        (detectBenchmark): Detect PLUM3.
        (biggerIsBetter): PLUM3 is a smaller-is-better benchmark.
        (main): Added PLUM3.

2021-01-07  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Split program into separate files
        https://bugs.webkit.org/show_bug.cgi?id=220369
        <rdar://problem/72856906>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize: Move to webkitscmpy/program/canonicalize.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Update imports.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program: Moved from webkitscmpy/program.py.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py: Moved to webkitscmpy/program.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py: Moved from webkitscmpy/program.py.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize: Moved from webkitscmpy/canonicalize.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/committer.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/message.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/checkout.py: Moved from webkitscmpy/program.py.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py: Moved from webkitscmpy/program.py.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py: Moved from webkitscmpy/program.py.

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

        Text fields should not be translated while typing
        https://bugs.webkit.org/show_bug.cgi?id=220431
        <rdar://problem/71724918>

        Reviewed by Tim Horton.

        Add an API test that modifies text in two input fields (by executing an edit command, and then by
        programmatically setting the value attribute). The test verifies that only the latter (programmatic) value
        change propagates a text manipulation update to the client layer.

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

2021-01-07  Jonathan Bedard  <JonWBedard@gmail.com>

        [webkitscmpy] Use .git/config to verify if repository is git-svn
        https://bugs.webkit.org/show_bug.cgi?id=220427
        <rdar://problem/72899735>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version number.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.is_svn): Use .git/config to verify if a repository is git-svn.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): Populate .git/config if the provided path is writeable.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind.test_revision_git_svn): Use a temporary directory so files
        can be written.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_scm_type): Use a temporary directory so files can be written.
        (TestGit.test_info): Ditto.
        (TestGit.test_commit_revision): Ditto.

2021-01-07  Chris Dumez  <cdumez@apple.com>

        [GPUProcess] Implement GPUProcess crash recovery for MediaElementAudioSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=220391

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/webaudio-createMediaElementSource.html: Added.

2021-01-07  Sam Sneddon  <gsnedders@apple.com>

        LayoutTestFinder should be in charge of finding layout tests
        https://bugs.webkit.org/show_bug.cgi?id=220025

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (_is_reference_html_file): Formerly Port.is_reference_html_file
        (_has_supported_extension): Formerly Port._has_supported_extension
        (LayoutTestFinder.__init__): Define self._w3c_resource_files
        (LayoutTestFinder.find_tests): Change to call within the class
        (LayoutTestFinder.find_tests_by_path): Formerly Port.tests
        (LayoutTestFinder._expanded_paths): Formerly Port._expanded_paths
        (LayoutTestFinder._real_tests): Formerly Port._real_tests
        (LayoutTestFinder._is_test_file): Formerly Port._is_test_file
        (LayoutTestFinder._is_w3c_resource_file): Formerly Port._is_w3c_resource_file
        (LayoutTestFinder.find_touched_tests): Update for the above
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        (MockLayoutTestFinder):
        (MockLayoutTestFinder._real_tests): Move this from the former MockPort.tests
        (LayoutTestFinderTests.make_finder): Similar to the make_port in base_unittest.py
        (LayoutTestFinderTests.touched_files): Adjust for MockLayoutTestFinder
        (LayoutTestFinderTests):
        (LayoutTestFinderTests.test_is_reference_html_file): Add test to check references are subset of tests
        (LayoutTestFinderTests.test_find_no_paths_specified): Formerly PortTest.test_find_no_paths_specified
        (LayoutTestFinderTests.test_find_one_test): Formerly PortTest.test_find_one_test
        (LayoutTestFinderTests.test_find_glob): Formerly PortTest.test_find_glob
        (LayoutTestFinderTests.test_find_with_skipped_directories): Formerly PortTest.test_find_with_skipped_directories
        (LayoutTestFinderTests.test_find_with_skipped_directories_2): Formerly PortTest.test_find_with_skipped_directories_2
        (LayoutTestFinderTests.test_is_test_file): Formerly PortTest.test_is_test_file
        (LayoutTestFinderTests.test_is_w3c_resource_file): Formerly PortTest.test_is_w3c_resource_file
        (test_touched_but_skipped_test): Adjust for MockLayoutTestFinder
        (MockPort): Deleted.
        (LayoutTestFinderTests.test_touched_test): Deleted.
        (LayoutTestFinderTests.test_expected_touched_test): Deleted.
        (LayoutTestFinderTests.test_platform_expected_touched_test): Deleted.
        (LayoutTestFinderTests.test_platform_duplicate_touched_test): Deleted.
        (LayoutTestFinderTests.test_touched_but_skipped_test): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__): Remove unused reference_files and should_run_pixel_tests
        (TestInput.__repr__): Remove unused should_run_pixel_tests
        * Scripts/webkitpy/port/base.py:
        (Port.tests): Deleted.
        (Port._expanded_paths): Deleted.
        (Port._real_tests): Deleted.
        (Port.is_w3c_resource_file): Deleted.
        (Port.is_reference_html_file): Deleted.
        (Port._has_supported_extension): Deleted.
        (Port._is_test_file): Deleted.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_find_no_paths_specified): Deleted.
        (PortTest.test_find_one_test): Deleted.
        (PortTest.test_find_glob): Deleted.
        (PortTest.test_find_with_skipped_directories): Deleted.
        (PortTest.test_find_with_skipped_directories_2): Deleted.
        (PortTest.test_is_test_file): Deleted.
        (PortTest.test_is_reference_html_file): Deleted.
        (PortTest.test_tests): Deleted.
        (PortTest.test_is_w3c_resource_file): Deleted.
        (test_jhbuild_wrapper): Deleted.
        (test_ref_tests_platform_directory): Deleted.
        (test_commits_for_upload): Deleted.
        * Scripts/webkitpy/port/factory.py:
        (PortFactory): Remove mock_drt
        * Scripts/webkitpy/port/mock_drt.py: Removed.
        * Scripts/webkitpy/port/mock_drt_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations.execute): Adjust for Port.tests moving to LayoutTestFinder
        (PrintBaselines.execute): Adjust for Port._real_tests moving to LayoutTestFinder

2021-01-07  Sihui Liu  <sihui_liu@appe.com>

        ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
        https://bugs.webkit.org/show_bug.cgi?id=220404

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionPermissionUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[SpeechRecognitionNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[SpeechRecognitionNavigationDelegate webView:didFinishNavigation:]):
        (TestWebKitAPI::TEST):

2021-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build failures with GTK4 3.99.5.1
        https://bugs.webkit.org/show_bug.cgi?id=219844

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserSearchBox.c:
        (browserSearchBoxSizeAllocate):
        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewReadyToShow):
        * MiniBrowser/gtk/CMakeLists.txt:

2021-01-06  Katherine Cheney  <katherine_cheney@apple.com>

        Storage access prompt does not appear on MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=220379
        <rdar://problem/72861088>

        Reviewed by Darin Adler.

        ITP should be on-by-default in MiniBrowser.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController initWithMenu:]):

2021-01-06  Alexey Proskuryakov  <ap@apple.com>

        Assorted fixes for bisect-builds
        https://bugs.webkit.org/show_bug.cgi?id=220158

        Reviewed by Jonathan Bedard.

        Switched to Python 3.
        Many trivial Python style changes.
        Simplified arguments, and cleaned up output.
        Switched from run-safari to run-minibrowser on macOS, as run-safari currently
        doesn't work on regular macOS installations.

        * Scripts/bisect-builds: 
        (QueueDescriptor): New class that holds a description of a queue, or a "platform",
        as coming from a string like mac-catalina or mac-catalina-x86_64-release. Used for
        matching arguments to an existing archive directory on the server.
        (trac_link): Added. The tool now prints a trac link for seeing where the regression
        was introduced.
        (bisect_builds): Fixed arithmetic mistakes. Got rid of an unnecessary while-true loop,
        as the function was already recursive.
        (host_platform_name): The script now defaults to current platform, so -p argument
        is mostly to select simulator.
        (main): Moved code from "if __name__ == '__main__'" block into main function for
        consistency.

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

        Add SPI to determine whether a regex is supported in WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=220095

        Reviewed by Tim Horton.

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

2021-01-06  Sihui Liu  <sihui_liu@appe.com>

        Stop speech recognition if page becomes invisible
        https://bugs.webkit.org/show_bug.cgi?id=220073
        <rdar://problem/72710704>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm: updated 
        WebKit2.SpeechRecognitionErrorWhenStartingAudioCaptureOnDifferentPage for updated behavior.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView _setUpTestWindow:]): set the origin of host window to be the origin of frame of TestWKWebView.

2021-01-06  Jonathan Bedard <jbedard@apple.com>

        [webkitscmpy] Add command to canonicalize unpushed commits (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=219982
        <rdar://problem/72427536>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/__init__.py:
        (Canonicalize.main): git filter-branch requires the repository root.

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

        [Flatpak SDK] coredumpctl invocation when using a local SDK repo fallbacks to the remote repo
        https://bugs.webkit.org/show_bug.cgi?id=219934

        Reviewed by Philippe Normand.

        Some commands run in flatpak may end up calling other commands on the
        host through flatpak-spawn that would enter the flatpak environment
        again. One such command happens when getting crash logs, which invokes
        webkit-flatpak with --gdb-stack-trace.

        Before this commit, the WEBKIT_FLATPAK_USER_DIR is not forwarded,
        making flatpakutils.py to download the regular UserFlatpak SDK instead
        of using the one in the mentioned variable.

        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._get_trace_from_flatpak):

2021-01-05  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r261157): Crash in WKSelectPopover when running as iPhone app on iPad
        https://bugs.webkit.org/show_bug.cgi?id=220065
        <rdar://problem/71932792>

        Reviewed by Darin Adler.

        Added an API test to exercise the previously crashing, and now fixed,
        codepath. Note that the test will trivially pass on iPhones, since the
        crash only occurs on iPads. See below for an explanation of how the
        test functions on iPads.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/UserInterfaceIdiomUpdate.mm: Added.
        (TestWebKitAPI::TEST):

        Since TestWebKitAPI is not an application, [UIApplication sharedApplication]
        is nil when the test creates a WKWebView. Consequently, when the WKWebView
        is created, WebKit uses the device hardware information to determine the user
        interface idiom (iPad). Now, before the test interacts with the WKWebView,
        the user interface idiom is changed to an iPhone and the UIApplication is
        initialized. Note that the UIApplicationDidFinishLaunchingNotification
        is manually posted, since there is no UIApplicationDelegate.

        Without the changes in this patch, the test will crash, since the user
        interface idiom maintained by WebKit would not be updated, and would
        remain iPad rather than iPhone. Hence, when focusing a select element, the test
        would attempt to present a UIPopoverController. However, since the idiom
        is actually iPhone, UIKit will throw an NSInvalidArgumentException.

        After the changes in this patch, the test does crash, as the change to the
        user interface idiom after UIApplication creation is recognized by WebKit,
        and the attempt to present a UIPopoverController under the iPhone idiom
        does not occur.

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

        [webkitscmpy] Add command to canonicalize unpushed commits
        https://bugs.webkit.org/show_bug.cgi?id=219982
        <rdar://problem/72427536>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit: Specify web-service for canonical identifier translation.
        * Scripts/libraries/webkitscmpy/setup.py: Add canonicalize directory to package.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/__init__.py: Added.
        (Canonicalize): Command to edit history of unpushed commits on a branch.
        (Canonicalize.parser):
        (Canonicalize.main): Call `git filter-branch` to edit commit message and authorship
        of unpushed commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/committer.py: Added.
        (canonicalize): Given a name, email and a contributor mapping, return a canonical name
        and email for the given author or committer.
        (main): Print out the canonical author and committer to be parsed by `git filter-branch`.
        * Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/message.py: Added.
        (main): Add the canonical identifier to a commit message.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor): Add unknown author regex.
        (Contributor.from_scm_log):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add `git filter-branch` mock. Note that this mock makes an effort to test
        message.py and contributor.py, but not the shell script passed to the command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py:
        (Command.main): Accept arbitrary **kwargs.
        (Find.main): Ditto.
        (Checkout.main): Ditto.
        (main): Allow caller to specify a string template for canonical identifiers in commit messages.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py: Added.
        (TestCanonicalize):
        (TestCanonicalize.test_invalid):
        (TestCanonicalize.test_no_commits):
        (TestCanonicalize.test_formated_identifier):
        (TestCanonicalize.test_git_svn):
        (TestCanonicalize.test_branch_commits):

2021-01-05  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] allow stress tests to opt out of parallel execution
        https://bugs.webkit.org/show_bug.cgi?id=213373

        Reviewed by Yusuke Suzuki.

        On memory-limited devices, some JSC stress tests may intermittently OOM when
        they get scheduled along with another heavy JSC stress test. However, the tests
        might be able to complete if run on their own.

        This patch adds a serial! directive that causes a JSC stress test to only ever
        be scheduled to run by itself. It's currently unused and needs to be enabled on
        a test-by-test basis.

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

2021-01-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r271169.

        Caused
        TestWebKitAPI.WebKit2.SpeechRecognitionErrorWhenStartingAudioCaptureOnDifferentPage
        to time out on macOS.

        Reverted changeset:

        "Stop speech recognition if page becomes invisible"
        https://bugs.webkit.org/show_bug.cgi?id=220073
        https://trac.webkit.org/changeset/271169

2021-01-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, revert part of r271158 to fix builtins generator tests.

        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.wrappers_builtin_test):

2021-01-05  Sihui Liu  <sihui_liu@appe.com>

        Stop speech recognition if page becomes invisible
        https://bugs.webkit.org/show_bug.cgi?id=220073
        <rdar://problem/72710704>

        Reviewed by Youenn Fablet.

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

2021-01-05  Alexey Proskuryakov  <ap@apple.com>

        Revert part of https://trac.webkit.org/r271158
        Update root level scripts in Tools/Scripts to Python 3

        * Scripts/make-dist: This also needed print_function.

2021-01-05  Alexey Proskuryakov  <ap@apple.com>

        Revert part of https://trac.webkit.org/r271158
        Update root level scripts in Tools/Scripts to Python 3

        * Scripts/extract-dependencies-from-makefile: This print_function import
        was necessary, the build is broken without it.

2021-01-05  Alexey Proskuryakov  <ap@apple.com>

        Remove some unused variables from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=220180

        Reviewed by Aakash Jain, Sam Weinig and Jonathan Bedard.

        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        * Scripts/webkitpy/codegen/main.py:
        * Scripts/webkitpy/common/checkout/changelog.py:
        * Scripts/webkitpy/common/checkout/checkout.py:
        * Scripts/webkitpy/common/checkout/scm/git.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/config/committers.py:
        * Scripts/webkitpy/common/config/contributionareas.py:
        * Scripts/webkitpy/common/message_pool.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/common/system/crashlogs.py:
        * Scripts/webkitpy/common/system/executive.py:
        * Scripts/webkitpy/common/system/profiler.py:
        * Scripts/webkitpy/common/system/user.py:
        * Scripts/webkitpy/generate_xcfilelists_lib/application.py:
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        * Scripts/webkitpy/performance_tests/perftest.py:
        * Scripts/webkitpy/port/device_port.py:
        * Scripts/webkitpy/port/factory.py:
        * Scripts/webkitpy/port/leakdetector_valgrind.py:
        * Scripts/webkitpy/port/server_process.py:
        * Scripts/webkitpy/style/checkers/js.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        * Scripts/webkitpy/tool/bot/queueengine.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        * Scripts/webkitpy/tool/commands/queues.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        * Scripts/webkitpy/tool/steps/commit.py:
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        * Scripts/webkitpy/tool/steps/haslanded.py:
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        * Scripts/webkitpy/tool/steps/sortxcodeprojectfiles.py:
        * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
        * Scripts/webkitpy/w3c/test_exporter.py:
        * Scripts/webkitpy/xcode/simulated_device.py:

2021-01-05  Sihui Liu  <sihui_liu@appe.com>

        Fail speech recognition when page is muted for audio capture
        https://bugs.webkit.org/show_bug.cgi?id=220133
        <rdar://problem/72745232>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionPermissionUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (-[SpeechRecognitionPermissionUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/speechrecognition-basic.html: Added.

2021-01-05  Alexey Proskuryakov  <ap@apple.com>

        Update root level scripts in Tools/Scripts to Python 3
        https://bugs.webkit.org/show_bug.cgi?id=220200

        Reviewed by Darin Adler and Jonathan Bedard.

        Mostly 2to3 inspired.

        * Scripts/check-for-global-bss-symbols-in-webkitgtk-libs:
        * Scripts/check-for-invalid-symbols-in-version-script:
        * Scripts/check-for-platform-layering-violations:
        * Scripts/clean-webkit:
        * Scripts/compare-results:
        * Scripts/compare-webkit-configurations:
        * Scripts/download-github-release.py:
        * Scripts/dump-webkit-tests-run:
        * Scripts/export-w3c-performance-wg-tests:
        * Scripts/extract-dependencies-from-makefile:
        * Scripts/extract-localizable-strings:
        * Scripts/find-duplicate-files:
        * Scripts/ic-stats.py:
        * Scripts/import-w3c-performance-wg-tests:
        * Scripts/make-dist:
        * Scripts/malloc-tree:
        * Scripts/mark-jsc-stress-test:
        * Scripts/open-layout-test:
        * Scripts/read-checksum-from-png:
        * Scripts/rebase-patch-after-webkit-move:
        * Scripts/run-gtk-tests:
        * Scripts/run-webdriver-tests:
        * Scripts/run-wpe-tests:
        * Scripts/sampstat:
        * Scripts/sync-feature-defines:
        * Scripts/sync-master-with-upstream:
        * Scripts/update-wasm-gcc-torture.py:
        * Scripts/validate-committer-lists:

2021-01-05  Youenn Fablet  <youenn@apple.com>

        Enable WebRTC codecs in GPU process only for --use-gpu-process option
        https://bugs.webkit.org/show_bug.cgi?id=220316

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        Enable WebRTC codecs in GPU process experimental feature in gpu process mode.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        By default, disable WebRTC codecs in GPU process experimental feature.

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

        [WebXR][WPE] Build fails without openxr installed
        https://bugs.webkit.org/show_bug.cgi?id=220250

        Reviewed by Carlos Alberto Lopez Perez.

        * jhbuild/jhbuild-minimal.modules: Add openxr to wpe's minimal
        moduleset.

2020-12-28  Alexey Proskuryakov  <ap@apple.com>

        built-product-archive should work with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=220157

        Reviewed by Aakash Jain.

        * CISupport/built-product-archive:
        (webkitBuildDirectoryForConfigurationAndPlatform): Decode result as a string,
        because the directory is then used in string manipulation.
        (createZipFromList): Use Python 3 compatible 'except' syntax. The new syntax works
        in Python 2.6 and newer.
        (createZip): Ditto.

2020-12-23  Dean Jackson  <dino@apple.com>

        Simulated Python crash during test runs
        https://bugs.webkit.org/show_bug.cgi?id=220108
        <rdar://problem/72605338>

        Reviewed by Geoffrey Garen.

        The ResourceLoadStatistics code can unlink a database during the test
        run, which causes a simulated python crash. We already worked around this
        by setting the SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS environment variable
        on a temporary directory, but it needs to include /private/var/folders as well.
        However, I didn't have any luck setting multiple directories, so I
        used '/' instead.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):

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

        Unreviewed, fix the build with recent SDKs.

        * MiniBrowser/mac/ExtensionManagerWindowController.m:
        (-[ExtensionManagerWindowController add:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController saveAsPDF:]):
        (-[WK2BrowserWindowController saveAsWebArchive:]):

2020-12-22  Lauro Moura  <lmoura@igalia.com>

        [Flapak SDK] Allow setting custom SDK repository locations and other small fixes
        https://bugs.webkit.org/show_bug.cgi?id=219884

        Reviewed by Philippe Normand.

        - Update envvar to match the WEBKIT_FLATPAK prefix
        - Give precedence to the verbose flag instead of envvar
        - Enable logging earlier to be used in the parse step
        - Error out if the user provides an user repo that is not accessible.

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

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

        [macOS MiniBrowser] Add menu items to reset all experimental and internal debug features to defaults
        https://bugs.webkit.org/show_bug.cgi?id=220060

        Reviewed by Wenson Hsieh.

        Add menu items at the bottom of the "Experimental" and "Internal Debug" feature submenus
        to reset all the features to their default values.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController resetAllExperimentalFeatures:]):
        (-[SettingsController resetAllInternalDebugFeatures:]):

2020-12-21  Ryan Hostetler  <rhost@apple.com>

        $(findstring iphone,$(SDKROOT)) fails when SDKROOT is not lowercase
        https://bugs.webkit.org/show_bug.cgi?id=219993
        rdar://72436093

        Reviewed by Darin Adler.

        Update SDKROOT evaluation to be lowercase and SDK filename only.

        * ImageDiff/Makefile:
        * Makefile:

2020-12-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Update built-in User-Agent strings (December 2020)
        https://bugs.webkit.org/show_bug.cgi?id=220048

        Reviewed by Alex Christensen.

        * MiniBrowser/win/BrowserWindow.cpp:
        (BrowserWindow::setUserAgent):

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

        Fix the lldb WebCoreColorProvider
        https://bugs.webkit.org/show_bug.cgi?id=220049

        Reviewed by Sam Weinig.

        Fix the lldb color provider after Color internals where shifted around.

        * lldb/lldb_webkit.py:
        (WebCoreColorProvider.to_string):

2020-12-18  Tim Horton  <timothy_horton@apple.com>

        iOS wheel events don't work on many websites
        https://bugs.webkit.org/show_bug.cgi?id=220034

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        (TEST):
        Add a test ensuring that if the UIScrollPhaseBegin scroll event
        has zero delta, that we let a subsequent UIScrollPhaseChanged event
        with non-zero delta cancel the gesture's default action.

2020-12-18  Said Abou-Hallawa  <said@apple.com>

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

        Reviewed by Alexey Proskuryakov.

        r270959 increases the warm-up time to 1000ms. This should fix a bi-
        modality problem in the score of Images and Multiply sub-tests.

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

2020-12-17  Jer Noble  <jer.noble@apple.com>

        REGRESSION: [ BigSur ] 3 PictureInPicture related API tests timing out
        https://bugs.webkit.org/show_bug.cgi?id=219999

        Reviewed by Eric Carlson.

        Not a fix for the timeout itself, but a change which will allow us to see the Util::run() statement which
        is timing out. Rather than just get a generic TIMEOUT result with no clue to the cause, a Util::run() statement
        which takes longer than the specified amount of time will generate an ASSERT() error with the line number
        which caused the timeout.

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ExitPiPOnSuspendVideoElement.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCloseAllMediaPresentations.mm:
        (TEST):
        * TestWebKitAPI/Utilities.h:
        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        (TestWebKitAPI::Util::runFor):

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

        REGRESSION(r270638) decidePolicyForNewWindowAction should have non-null request
        https://bugs.webkit.org/show_bug.cgi?id=220001

        Reviewed by Tim Horton.

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

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

        [webkitscmpy] Correct mock `git log` call in standard git repositories
        https://bugs.webkit.org/show_bug.cgi?id=219992
        <rdar://problem/72436380>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: git_svn flag should only
        control the final line of the message, not the existence of the entire message.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind.test_basic_git):
        (TestFind.test_identifier_git):
        (TestFind.test_identifier_git_svn):
        (TestFind.test_hash):

2020-12-17  Sam Sneddon  <gsnedders@apple.com>

        Stop parsing reftest.list files
        https://bugs.webkit.org/show_bug.cgi?id=203783

        Reviewed by Jonathan Bedard.

        This has only been used by the webkitpy integration tests in recent years. Needless to say,
        this is Not Useful.

        We do still have one reftest.list file,
        media/track/opera/track/webvtt/rendering/reftest/reftest.list, but as this is in a reftest
        directory we don't run any of the tests in it (and never have). See the above bug for more
        detail about that history.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RebaselineTest.assertBaselines): docstring fix
        (RunTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist): Deleted.
        (EndToEndTest): Deleted.
        (EndToEndTest.test_reftest_with_two_notrefs): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.__init__): remove Port._reftest_list
        (Port.reference_files): don't use reftest.list as source of truth
        (Port._get_reftest_list): Deleted.
        (Port._parse_reftest_list): Deleted.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_parse_reftest_list): Deleted.
        * Scripts/webkitpy/port/test.py:
        (unit_test_list): remove tests used to test reftest.list

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

        [run-webkit-tests] Replace FailureNotTested with FailureNoOutput
        https://bugs.webkit.org/show_bug.cgi?id=219994
        <rdar://problem/72440201>

        Reviewed by Geoffrey Garen.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_text): Replace FailureNotTest with FailureNoOutput.
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (determine_result_type): Replace FailureNotTest with FailureNoOutput.
        (FailureNoOutput): Renamed from FailureNotTested.
        (FailureNotTested): Renamed to FailureNoOutput.
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py:
        (TestFailuresTest.test_all_failure_classes): Replace FailureNotTest with FailureNoOutput.

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

        [webkitscmpy] Capture Mock process logging during tests 
        https://bugs.webkit.org/show_bug.cgi?id=219989
        <rdar://problem/72435662>

        Reviewed by Dewei Zhu.

        When declaring two mock local repositories, we need to ensure that logs are captured when
        Instantiating the second repository so that "Mock process # send signal 9" is not logged
        to the user's terminal.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/checkout_unittest.py:
        (TestCheckout):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit):

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

        [webkitscmpy] Remove branches argument from mock Git
        https://bugs.webkit.org/show_bug.cgi?id=219988
        <rdar://problem/72434657>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Remote branches argument.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_branches):

2020-12-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, reordering associated email addresses in
        preparation for the GitHub migration.

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

2020-12-16  Yusuke Suzuki  <ysuzuki@apple.com>

        Use python3 in Tools/Scripts/dump-class-layout
        https://bugs.webkit.org/show_bug.cgi?id=219945

        Reviewed by Simon Fraser.

        Newer LLDB python module only contains python3 version. So Tools/Scripts/dump-class-layout does not work.
        This patch makes Tools/Scripts/dump-class-layout working with python3.

        * Scripts/dump-class-layout:
        (webkit_build_dir): Deleted.
        (main): Deleted.
        (main.or): Deleted.
        * lldb/lldb_dump_class_layout.py:
        (ClassLayoutBase.dump):
        (LLDBDebuggerInstance.__init__):
        (LLDBDebuggerInstance._get_first_file_architecture):
        (LLDBDebuggerInstance.layout_for_classname):

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

        [webkitscmpy] Include remote directories when packaging
        https://bugs.webkit.org/show_bug.cgi?id=219927
        <rdar://problem/72362529>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Include remote directories.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.

2020-12-15  Andy Estes  <aestes@apple.com>

        [Mac] Numerous webgl tests continue to time out with the WebM format reader enabled
        https://bugs.webkit.org/show_bug.cgi?id=219928

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip): Stripped unnecessary logging during VP9 decoding.

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

        [webkitscmpy] Support remote GitHub repository
        https://bugs.webkit.org/show_bug.cgi?id=219602
        <rdar://problem/72050026>

        Reviewed by Stephanie Lewis.

        Services often need to interact with the WebKit repository without actually downloading the
        repository. In particular, it is useful to be able to retrieve commits and their identifiers.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git): Move GIT_SVN_REVISION regex to base class.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/__init__.py: Add GitHub class.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py: Added.
        (GitHub): Mock request router for a limited subset of GitHub's API.
        (GitHub.__init__):
        (GitHub.commit): Return a commit object given a reference.
        (GitHub._api_response):
        (GitHub._list_refs_response):
        (GitHub._commit_response):
        (GitHub._compare_response):
        (GitHub._branches_for_request):
        (GitHub._parents_of_request):
        (GitHub.request): Return a response object for the specified request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/__init__.py: Add GitHub class.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py: Added.
        (GitHub): Repository object representing a GitHub remote.
        (GitHub.is_webserver): True if the provided URL is a GitHub webserver.
        (GitHub.__init__): Verify the provided URL and split it into it's composite parts.
        (GitHub.is_git): Return True.
        (GitHub.request): Make an API request, combining pagination into a single request.
        (GitHub._count_for_ref): Scrape the GitHub UI to find the number of parent commits for a specified
        branch or commit.
        (GitHub._difference): Compute the number of commits a specified reference is ahead of another.
        (GitHub._branches_for): Scrape the GitHub UI to determine what branches a commit is on.
        (GitHub.default_branch): Query GitHub to determine the default branch for a specified commit.
        (GitHub.branches): Return all branches for a repository.
        (GitHub.tags): Return all tags for a repository.
        (GitHub.commit): Return a commit object given a revision, branch, identifier or tag.
        (GitHub.find): Use git to match branches and tags to a hash instead of trying to do it ourselves.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.from_url): Add GitHub to the set of candidate remote repositories.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase): Move GIT_SVN_REVISION regex to base class.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGitHub):
        (TestGitHub.test_detection):
        (TestGitHub.test_branches):
        (TestGitHub.test_tags):
        (TestGitHub.test_scm_type):
        (TestGitHub.test_commit_revision):
        (TestGitHub.test_commit_from_branch):
        (TestGitHub.test_identifier):
        (TestGitHub.test_non_cannonical_identifiers):
        (TestGitHub.test_tag):
        (TestGitHub.test_no_log):

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

        Add webkit- prefix to SpeechRecognition
        https://bugs.webkit.org/show_bug.cgi?id=219869

        Reviewed by Geoffrey Garen.

        Replace SpeechRecognition with webkitSpeechRecognition in test.

        * TestWebKitAPI/Tests/WebKitCocoa/speechrecognition-user-permission-persistence.html:

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

        [webkitscmpy] Save contributors to json file
        https://bugs.webkit.org/show_bug.cgi?id=219908
        <rdar://problem/72351153>

        Reviewed by Dewei Zhu.

        The motivation for this change is not to replace contributors.json (although that could
        eventually be the case), instead, the motivation for this change is to pass contributors
        to `git filter-branch` subprocesses.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Increment version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.Mapping):
        (Contributor.Mapping.load): Load contributor mapping from a json file.
        (Contributor.Mapping.save): Save contributor mapping to a json file.
        (Contributor.Mapping.add):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor):
        (TestContributor.test_saving):

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

        [webkitscmpy] Contributor emails with capitalizations should be searchable as lowercase
        https://bugs.webkit.org/show_bug.cgi?id=219892
        <rdar://problem/72341870>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.Mapping.create):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor):
        (TestContributor.test_upper_case_email):

2020-12-15  Angelos Oikonomopoulos  <angelos@igalia.com>

        generate-bundle: don't ignore --no-strip
        https://bugs.webkit.org/show_bug.cgi?id=219855

        Reviewed by Jonathan Bedard.

        * Scripts/generate-bundle:

2020-12-15  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add support for type annotated select
        https://bugs.webkit.org/show_bug.cgi?id=219595

        Reviewed by Yusuke Suzuki.
        
        Add support for testing ref-types.

        * Scripts/run-jsc-stress-tests:

2020-12-14  Andy Estes  <aestes@apple.com>

        [Mac] MediaFormatReader.bundle fails to load in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=219879

        Reviewed by Eric Carlson.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Tell CoreMedia to allow unsigned format reader
        plug-ins when running in WebKitTestRunner. This resolves test timeouts under
        LayoutTests/webgl/2.0.0/.

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

        Remove WKDownloadDelegate.didWriteData
        https://bugs.webkit.org/show_bug.cgi?id=219820

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadObserver observeValueForKeyPath:ofObject:change:context:]):
        (TestWebKitAPI::mutateFile):
        * TestWebKitAPI/cocoa/TestDownloadDelegate.h:
        * TestWebKitAPI/cocoa/TestDownloadDelegate.mm:
        (-[TestDownloadDelegate download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]): Deleted.

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

        [webkitscmpy] Load mock repository data from json file
        https://bugs.webkit.org/show_bug.cgi?id=219803
        <rdar://problem/72236132>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/git-repo.json: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Move mock data into git-repo.json.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__): Move mock data into git-repo.json.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.__init__): Move mock data into git-repo.json.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/svn-repo.json: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_tags): Specify tags.
        (TestGit.test_tag): Ditto.
        (TestGit.test_checkout): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_branches): Remove branch specification.

2020-12-13  Andy Estes  <aestes@apple.com>

        [Mac] Create a MediaToolbox format reader plug-in for WebM
        https://bugs.webkit.org/show_bug.cgi?id=218908
        <rdar://problem/71373264>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/SampleMap.cpp:

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

        Unreviewed, reverting r270661.

        Caused layout test failures and timeouts

        Reverted changeset:

        "Unreviewed, re-landing r270132."
        https://bugs.webkit.org/show_bug.cgi?id=202874
        https://trac.webkit.org/changeset/270661

2020-12-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn][iOS] Turn on modern WebAuthn for default browsers
        https://bugs.webkit.org/show_bug.cgi?id=219823
        <rdar://problem/72250436>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::WebCore::webAuthenticationModernExperimentalFeature):
        (TestWebKitAPI::TEST):
        Turn modern WebAuthn off for old tests.

2020-12-11  Tim Horton  <timothy_horton@apple.com>

        Trackpad and Mouse scroll events on iPad only fire "pointermove" -- not "wheel"
        https://bugs.webkit.org/show_bug.cgi?id=210071
        <rdar://problem/54616853>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        (-[WKUIScrollEvent initWithPhase:location:delta:]):
        (-[WKUIScrollEvent phase]):
        (-[WKUIScrollEvent locationInView:]):
        (-[WKUIScrollEvent _adjustedAcceleratedDeltaInView:]):
        (TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:
        Add a very simple test that directly calls the new UIScrollViewDelegate SPI
        and verifies that only the first event is cancelable (unless the first event
        is canceled, in which case all subsequent events are cancelable).

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

        [webkitscmpy] Do not use actual URLs in testing
        https://bugs.webkit.org/show_bug.cgi?id=219790
        <rdar://problem/72228983>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): Use example.org instead of webkit.org.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.__init__): Use example.org instead of webkit.org.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind.test_basic_svn_remote): Use example.org instead of webkit.org.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_info): Use example.org instead of webkit.org.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestRemoteSvn): Use example.org instead of webkit.org.
        (TestRemoteSvn.test_detection):

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

        [CMake] Determine correct visibility for linked frameworks
        https://bugs.webkit.org/show_bug.cgi?id=210366

        Reviewed by Michael Catanzaro.

        Remove explicit setting of STATICALLY_LINKED_WITH_${framework}.

        * TestWebKitAPI/PlatformWin.cmake:

2020-12-11  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add table.init
        https://bugs.webkit.org/show_bug.cgi?id=219297

        Reviewed by Yusuke Suzuki.

        Support ref-types spec tests.

        * Scripts/run-jsc-stress-tests:

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

        REGRESSION(r270186): [GTK] MiniBrowser: do not exit after load when no arguments given
        https://bugs.webkit.org/show_bug.cgi?id=219737

        Reviewed by Adrian Perez de Castro.

        Only exit after load when --exit-after-load is passed.

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

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

        Accept click measurement data from hosting application
        https://bugs.webkit.org/show_bug.cgi?id=219763
        <rdar://problem/72121094>

        Reviewed by John Wilander.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (testCertificate):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm: Added.
        (-[MockEventAttribution initWithReportEndpoint:attributeOn:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:

2020-12-10  Chris Dumez  <cdumez@apple.com>

        [GPUProcess] Cut in half amount of IPC needed to do WebAudio
        https://bugs.webkit.org/show_bug.cgi?id=219715

        Reviewed by Geoff Garen.

        Minor API test changes due to CARingBuffer API change. fetch() always returned Ok
        so I dropped the return value.

        * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::MixingTest::run):

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

        Unreviewed, re-landing r270132.

        Regression test failures have been resolved.

        Re-landed changeset:

        "Use a Version 1 CFRunLoopSource for faster task dispatch"
        https://bugs.webkit.org/show_bug.cgi?id=202874
        https://trac.webkit.org/changeset/270132

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

        [CMake] Determine when to use $<TARGET_OBJECTS> for executables
        https://bugs.webkit.org/show_bug.cgi?id=219648

        Reviewed by Michael Catanzaro.

        Use ${taget_name}_FRAMEWORKS to specify WebKit frameworks when linking executables.
        Remove use of $<TARGET_OBJECTS>.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/CMakeLists.txt:

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

        Introduce new download SPI
        https://bugs.webkit.org/show_bug.cgi?id=217747

        Reviewed by Brady Eidson.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decidePolicyForNavigationResponse):
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        (TestWebKitAPI::navigationResponseDidBecomeDownload):
        (TestWebKitAPI::setPagePolicyClient):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::decidePolicyForNavigationAction): Deleted.
        (TestWebKitAPI::setContextDownloadClient): Deleted.
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        (TestWebKitAPI::contextMenuDidCreateDownload):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::decideDestinationWithSuggestedFilenameContainingSlashes):
        (TestWebKitAPI::contextMenuDidCreateDownloadWithSuggestedFilenameContainingSlashes):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[BecomeDownloadDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[ConvertResponseToDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFinishNavigation:]):
        (TEST):
        (downloadTestServer):
        (checkResumedDownloadContents):
        (simpleDownloadTestServer):
        (checkFileContents):
        (tempFileThatDoesNotExist):
        (-[DownloadTestSchemeDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (TestWebKitAPI::mutateFile):
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationResponse:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestDownloadDelegate.h:
        * TestWebKitAPI/cocoa/TestDownloadDelegate.mm:
        (-[TestDownloadDelegate download:willPerformHTTPRedirection:newRequest:decisionHandler:]):
        (-[TestDownloadDelegate download:decideDestinationWithResponse:suggestedFilename:completionHandler:]):
        (-[TestDownloadDelegate download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[TestDownloadDelegate download:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestDownloadDelegate downloadDidFinish:]):
        (-[TestDownloadDelegate download:didFailWithError:resumeData:]):
        (-[TestDownloadDelegate webView:navigationResponse:didBecomeDownload:]):
        (-[TestDownloadDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[TestDownloadDelegate waitForDownloadDidFinish]):
        (-[TestDownloadDelegate takeCallbackRecord]):
        (-[TestDownloadDelegate _downloadDidStart:]): Deleted.
        (-[TestDownloadDelegate _download:didReceiveServerRedirectToURL:]): Deleted.
        (-[TestDownloadDelegate _download:didReceiveResponse:]): Deleted.
        (-[TestDownloadDelegate _download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]): Deleted.
        (-[TestDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]): Deleted.
        (-[TestDownloadDelegate _downloadDidFinish:]): Deleted.
        (-[TestDownloadDelegate _download:didFailWithError:]): Deleted.
        (-[TestDownloadDelegate _downloadDidCancel:]): Deleted.
        (-[TestDownloadDelegate _download:didReceiveAuthenticationChallenge:completionHandler:]): Deleted.
        (-[TestDownloadDelegate _download:didCreateDestination:]): Deleted.
        * TestWebKitAPI/cocoa/TestLegacyDownloadDelegate.h: Copied from Tools/TestWebKitAPI/cocoa/TestDownloadDelegate.h.
        * TestWebKitAPI/cocoa/TestLegacyDownloadDelegate.mm: Copied from Tools/TestWebKitAPI/cocoa/TestDownloadDelegate.mm.
        (-[TestLegacyDownloadDelegate _downloadDidStart:]):
        (-[TestLegacyDownloadDelegate _download:didReceiveServerRedirectToURL:]):
        (-[TestLegacyDownloadDelegate _download:didReceiveResponse:]):
        (-[TestLegacyDownloadDelegate _download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[TestLegacyDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[TestLegacyDownloadDelegate _downloadDidFinish:]):
        (-[TestLegacyDownloadDelegate _download:didFailWithError:]):
        (-[TestLegacyDownloadDelegate _downloadDidCancel:]):
        (-[TestLegacyDownloadDelegate _download:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestLegacyDownloadDelegate _download:didCreateDestination:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::navigationDidBecomeDownloadShared):
        (WTR::TestController::navigationActionDidBecomeDownload):
        (WTR::TestController::navigationResponseDidBecomeDownload):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::downloadDidFinish):
        (WTR::TestController::downloadDidFail):
        (WTR::TestController::downloadDidReceiveServerRedirectToURL):
        (WTR::TestController::downloadDidStart):
        (WTR::TestController::decidePolicyForNavigationAction):
        (WTR::TestController::downloadDidCancel): Deleted.
        * WebKitTestRunner/TestController.h:

2020-12-10  Lauro Moura  <lmoura@igalia.com>

        [Flapak SDK] Add envvar to enable verbose mode
        https://bugs.webkit.org/show_bug.cgi?id=219744

        Reviewed by Adrian Perez de Castro.

        While webkit-flatpak has the --verbose option, some scripts like
        run-minibrowser, run-gtk-tests etc might not expose it to the user.

        This change checks for WEBKIT_SDK_VERBOSE in order to be able to
        control it regardless of command line options.

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

2020-12-10  David Kilzer  <ddkilzer@apple.com>

        prepare-ChangeLog won't parse rdar://nnnnnnnn URLs in fetchRadarURLFromBugXMLData()
        <https://webkit.org/b/219645>
        <rdar://problem/72182806>

        Reviewed by Darin Adler.

        Relax the format for rdar:// URLs not to require angle brackets
        (<>) or the "problem/" pseudo-path.

        Include drive-by fixes for global variables in prepare-ChangeLog
        that cause warnings when running tests:

            Variable "$var" is not available

        * Scripts/prepare-ChangeLog:
        (main):
        - Move %attributeCache from global scope into this subroutine,
          then pass to generateFileList() to fix a variable warning.
        (fetchRadarURLFromBugXMLData):
        - Update regex that parses rdar:// URLs.  This fixes the bug.
        (attributeCommand):
        - Add argument for $attributeCache hash ref since it is no
          longer a global variable.
        - Move definition of $devNull here to fix a variable warning.
        (generateFileList):
        - Add argument for $attributeCache hash ref to pass through to
          attributeCommand().
        * Scripts/webkitperl/prepare-ChangeLog_unittest/fetchRadarURLFromBugXMLData.pl:
        - Add tests for newly supported rdar:// URL formats.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/filenameWithParentheses.pl:
        - Update to pass $attributeCache to attributeCommand().

2020-12-10  Chris Dumez  <cdumez@apple.com>

        [iOS] TestWebKitAPI.GPUProcess.WebProcessTerminationAfterTooManyGPUProcessCrashes is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=219719
        <rdar://problem/72158303>

        Reviewed by Darin Adler.

        We currently have an issue where the audio track gets removed after the GPUProcess
        crashes. This is what is causing GPUProcess.WebProcessTerminationAfterTooManyGPUProcessCrashes
        to be flaky on iOS. For the same reason, GPUProcess.CrashWhilePlayingVideo was flaky on
        iOS until we temporarily disabled the checks in r270328. For now, do the same thing as in r270328
        for WebProcessTerminationAfterTooManyGPUProcessCrashes since I have not found the reason why
        we lose audio on iOS after a GPU process crash yet and we don't want to keep a flaky test on
        the bots.

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

2020-12-10  Lauro Moura  <lmoura@igalia.com>

        [GTK] Fix EventSender wheel phase names
        https://bugs.webkit.org/show_bug.cgi?id=219726

        Reviewed by Carlos Garcia Campos.

        It was causing the events to be sent with 0 phase as the momentum
        phase switch overwrote it.

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

2020-12-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Adopt new UI for the Security Key makeCredential flow
        https://bugs.webkit.org/show_bug.cgi?id=219708
        <rdar://problem/72154735>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        Adjusted to the new behavior.

2020-12-09  Cathie Chen  <cathiechen@igalia.com>

        Support overscroll-behavior parsing
        https://bugs.webkit.org/show_bug.cgi?id=219305

        Reviewed by Simon Fraser.

        Based on Frédéric Wang's patch.

        Add support for testing overscroll-behavior parsing.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2020-12-09  John Wilander  <wilander@apple.com>

        PCM: Make JSON key names use underscores according to the W3C conversation
        https://bugs.webkit.org/show_bug.cgi?id=219696
        <rdar://problem/72143642>

        Reviewed by Brent Fulgham.

        Further discussion in https://github.com/privacycg/private-click-measurement/issues/30
        concluded that the JSON report should use underscores in its keys instead of dashes.
        This patch makes that change and shortens the "report_version" key to just "version".

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

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

        Make PDFHUD.MoveIFrame API test more robust
        https://bugs.webkit.org/show_bug.cgi?id=219667
        <rdar://problem/68639688>

        Reviewed by Geoffrey Garen.

        This test would time out if the place where the TestWKWebView is obscured, which happens frequently on the bots.
        Make the test pass if this is the case.  It's unfortunate to skip it often, but it still runs sometimes,
        and I think this is better than having no test.

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

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

        [webkitcorepy] Specify TLS configuration of autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=219694
        <rdar://problem/72139146>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall._request): Encountered an issue where the default TLS configuration
        was too restrictive in Python 2.7.18.

2020-12-09  Kimmo Kinnunen  <kkinnunen@apple.com>

        Implement RemoteGraphicsContextGL
        https://bugs.webkit.org/show_bug.cgi?id=217216
        <rdar://problem/69876258>

        Reviewed by Simon Fraser.

        Implements a remote version of GraphicsContextGL for GPU process.
        Current implementation is using WebKit IPC and is incomplete.

        Add the code generator to generate the implementation. Currently
        the generator generates a WebKit IPC implementation.

        The input definition to the generator is the proxy implementation
        header files.
        The output of the generator is
           - WebKit IPC message definition file
           - Message sender code
           - Message receiver and payload invocation code

        The generator converts GraphicsContextGL GCGL -prefixed types to
        sized IPC types.

        The generator is invoked during development time and the results are
        stored in the repository.

        * Scripts/generate-gpup-webgl: Added.

2020-12-09  Michael Catanzaro  <mcatanzaro@gnome.org>

        check-for-global-bss-symbols-in-webkigtk-libs is misspelled
        https://bugs.webkit.org/show_bug.cgi?id=219686

        Reviewed by Carlos Garcia Campos.

        * Scripts/check-for-global-bss-symbols-in-webkitgtk-libs: Renamed from Tools/Scripts/check-for-global-bss-symbols-in-webkigtk-libs.
        (bss_symbols):
        * Scripts/make-dist:
        (Distcheck.check_symbols):

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

        WebDriver: add support for pen pointer events
        https://bugs.webkit.org/show_bug.cgi?id=219024

        Reviewed by Brian Burg.

        Add optional pointerType parameter to EventSenderProxy mouseDown(), mouseUp() and mouseMoveTo() methods.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::createMouseMessageBody):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::scheduleAsynchronousClick):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

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

        Increase maximum size of WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=219626

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):

2020-12-08  Devin Rousso  <drousso@apple.com>

        [macCatalyst] Enable context menus for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=219617
        <rdar://problem/53770300>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h:
        * TestWebKitAPI/cocoa/TestContextMenuDriver.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:
        Note that none of these tests actually work right now because of <rdar://problem/59610140>.

2020-12-08  Geoffrey Garen  <ggaren@apple.com>

        TextManipulationController sometimes fails to notify its delegate of new text (if an element has been removed)
        https://bugs.webkit.org/show_bug.cgi?id=219656

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST): Added a test that removes lots of elements. The
        bug in this case depended on finding a removed element after an inserted
        element in set iteration order. Using lots of removed elements gives us
        a reasonable chance to trigger the relevant order.

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

        Unreviewed, reverting r269983.

        Seems to have regressed PLT5

        Reverted changeset:

        "[iOS] beforeunload event does not fire in MobileSafari"
        https://bugs.webkit.org/show_bug.cgi?id=219102
        https://trac.webkit.org/changeset/269983

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

        Potential crash under [WKRemoteObjectEncoder encodeObject:forKey:] when the object graph contains a cycle
        https://bugs.webkit.org/show_bug.cgi?id=219620

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn takeDictionary:completionHandler:]):

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

        [webkitcorepy] Defer pypi index check until usage
        https://bugs.webkit.org/show_bug.cgi?id=219271
        <rdar://problem/71748250>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.Archive.download): Verify our index before using it.
        (Package.archives): Ditto.
        (AutoInstall): Provide variables to cache information needed for pypi index verification.
        (AutoInstall._verify_index): Verify the current index is reachable if a fallback index exists.
        (AutoInstall.set_index): Defer checking the provided index by default.

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

        [Concurrent Display Lists] Add a way for display list clients to get missing cached resource identifiers
        https://bugs.webkit.org/show_bug.cgi?id=219652

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):

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

        [webkitcorepy] Fix case where cached=True with other arguments
        https://bugs.webkit.org/show_bug.cgi?id=219644
        <rdar://problem/72092851>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:
        (Memoize.__call__.decorator): Use keyargs instead of args.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/decorators_unittest.py:
        (TestMemoize):
        (TestMemoize.increment_with_arg): Added.
        (TestMemoize.test_override):

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

        [ews] commit-queue should use only the first email from contributors.json to validate committers and reviewers
        https://bugs.webkit.org/show_bug.cgi?id=219608

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer.load_contributors): Use only first email for validating commiters and reviewers.
        * Scripts/webkitpy/common/config/contributors.json: Correct Antoine Quint's and Justin Michaud's active accounts.

2020-12-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed sort-Xcode-project-file

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * jsc-cli/jsc-cli.xcodeproj/project.pbxproj:

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

        Unreviewed API test gardening, disable failing tests on Big Sur.

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

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

        Unreviewed API test gardening, disable failing tests on Big Sur.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:

2020-12-07  Youenn Fablet  <youenn@apple.com>

        Add a SFrame H264 experimental compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=219532

        Reviewed by Eric Carlson.

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

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

        [build.webkit.org] Automatically delete old buildbot logs
        https://bugs.webkit.org/show_bug.cgi?id=218817

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg: Configured JanitorConfigurator to delete logs older than six months, and
        configured to run every morning.

2020-12-07  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Bundle non-native libs in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=219485

        Reviewed by Carlos Alberto Lopez Perez.

        run-jsc-stress-tests already tries to bundle library dependencies
        (on linux) when using the --remote functionality; this ensures
        that we don't need to depend on the remote environment exactly
        matching the build environment. However, this breaks when
        cross-building; run-jsc-stress-tests uses ldd, which relies on
        code execution to get the shared object paths.

        This patch extends generate-bundle to be able to handle the output
        from a cross ldd (specifically, xldd from crosstool-NG) and
        changes run-jsc-stress-tests to use generate-bundle for bundling
        the libraries for the remotes.

        * Scripts/generate-bundle:
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:

2020-12-07  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Leaked RunLoop objects on worker threads
        https://bugs.webkit.org/show_bug.cgi?id=219232
        <rdar://problem/71772277>

        Reviewed by Geoffrey Garen.

        Add a unit test covering proper RunLoop teardown upon thread destruction
        even if RunLoop references are stored in the dispatch queues.

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

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

        [Concurrent display lists] Synchronize display list rendering across remote image buffers
        https://bugs.webkit.org/show_bug.cgi?id=219091
        <rdar://problem/71747695>

        Reviewed by Geoff Garen.

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

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

        [webkitscmpy] local.Svn reports incorrect timestamps
        https://bugs.webkit.org/show_bug.cgi?id=219549
        <rdar://problem/71989052>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Remote dateutil dependency. Add svn remote dependencies.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version, move dateutil library hook.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.commit): Increment parsed time by UTC delta instead of configuring timezone.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn): Allow caller to specify UTC offset, treat all times as UTC to avoid issues with the
        local timezone.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_info):
        * Scripts/webkitpy/__init__.py: Move dateutil library hook.

2020-12-04  John Wilander  <wilander@apple.com>

        PCM: Switch to 8+4 bits for source IDs and trigger values respectively
        https://bugs.webkit.org/show_bug.cgi?id=219519
        <rdar://problem/70470036> 

        Reviewed by Brent Fulgham.

        We've received a lot of feedback saying increased entropy on the click side is more
        important than the current 6 bits on the conversion side. Some of that conversation
        is captured in https://github.com/privacycg/private-click-measurement/issues/28.

        This patch switches from 6+6 bits to 8+4 bits.

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

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

        Unreviewed, reverting r270422.
        https://bugs.webkit.org/show_bug.cgi?id=219554

        Deleted an SPI that is still in use.

        Reverted changeset:

        "Introduce new download API"
        https://bugs.webkit.org/show_bug.cgi?id=217747
        https://trac.webkit.org/changeset/270422

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

        [git-webkit] Use contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=217732
        <rdar://problem/70309518>

        Reviewed by Dewei Zhu.

        The interaction between Git, Svn and old commits means that our canonical record of
        commit authors is somewhat incomplete. contributors.json has most of the information
        we are missing, we should rely on it to map non-standard author names to their canonical
        names and email addresses.

        Additionally, making the record of Contributors owned by the repository instead of being global
        to the entire process.

        * Scripts/git-webkit: Parse contributors.json and add it to a Contributor.Mapping.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit): Contributor class object no longer owns record of contributors.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor):
        (Contributor.Mapping): Dictionary mapping Contributors and their potential aliases.
        (Contributor.Mapping.__init__):
        (Contributor.Mapping.add): Add Contributor to mapping.
        (Contributor.Mapping.create): Find or create a contributor with the specified name and email
        addresses and bind it to the record of contributors.
        (Contributor.from_scm_log): Leverage Contributor.Mapping provided by caller.
        (Contributor.clear): Deleted.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.__init__): Instantiate repository with existing Contributor.Mapping.
        (Git.commit): Repository now owns the record of contributors.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.from_path): Instantiate repository with existing Contributor.Mapping.
        (Scm.__init__): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.__init__): Instantiate repository with existing Contributor.Mapping.
        (Svn.commit): Repository now owns the record of contributors.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py:
        (main): Allow caller to pass an existing record of contributors.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.from_url): Instantiate repository with existing Contributor.Mapping.
        (Scm.__init__): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn.__init__): Instantiate repository with existing Contributor.Mapping.
        (Svn.commit): Repository now owns the record of contributors.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.__init__): Instantiate repository with existing Contributor.Mapping.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor.test_git_log): No more global contributor record.
        (TestContributor.test_git_svn_log): Ditto.
        (TestContributor.test_git_no_author): Ditto.
        (TestContributor.test_git_svn_no_author): Ditto.
        (TestContributor.test_svn_log): Ditto.
        (TestContributor.test_short_svn_log): Ditto.
        (TestContributor.test_svn_patch_by_log): Ditto.
        (TestContributor.test_author_mapping): Contributor record is owned by the caller of the caller
        of Contributor management.
        (TestContributor.test_email_mapping): Ditto.
        (TestContributor.test_invalid_log): No more global contributor record.

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

        Create API to enable/disable text interaction gestures in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=217784
        <rdar://problem/63406241>

        Reviewed by Wenson Hsieh.

        Add API test coverage for macOS and support for layout tests for iOS.
        API tests do not support user gestures which is why iOS tests must
        use WebKitTestRunner.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDisableSelection.mm: Added.
        (TEST):
        (clickAndDragToSelectText):
        * TestWebKitAPI/Tests/WebKitCocoa/try-text-select-with-disabled-text-interaction.html: Added.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        (WTR::TestOptions::keyTypeMapping):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::textInteractionEnabled const):

2020-12-04  Adam Roben  <aroben@apple.com>

        More FALLBACK_PLATFORM adoption
        https://bugs.webkit.org/show_bug.cgi?id=219545

        Reviewed by Tim Horton.

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * TestWebKitAPI/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:
        Use FALLBACK_PLATFORM if it's defined.

        * ContentExtensionTester/Configurations/SDKVariant.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig:
        WK_EMPTY_$(THIS_IS_NOT_EMPTY) evaluates to the empty string, not to
        NO.

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

        Introduce new download SPI
        https://bugs.webkit.org/show_bug.cgi?id=217747

        Reviewed by Brady Eidson.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decidePolicyForNavigationResponse):
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        (TestWebKitAPI::navigationResponseDidBecomeDownload):
        (TestWebKitAPI::setPagePolicyClient):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::decidePolicyForNavigationAction): Deleted.
        (TestWebKitAPI::setContextDownloadClient): Deleted.
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        (TestWebKitAPI::contextMenuDidCreateDownload):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::decideDestinationWithSuggestedFilenameContainingSlashes):
        (TestWebKitAPI::contextMenuDidCreateDownloadWithSuggestedFilenameContainingSlashes):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[BecomeDownloadDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[ConvertResponseToDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFinishNavigation:]):
        (TEST):
        (downloadTestServer):
        (checkResumedDownloadContents):
        (simpleDownloadTestServer):
        (checkFileContents):
        (tempFileThatDoesNotExist):
        (-[DownloadTestSchemeDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (TestWebKitAPI::mutateFile):
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationResponse:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestDownloadDelegate.h:
        * TestWebKitAPI/cocoa/TestDownloadDelegate.mm:
        (-[TestDownloadDelegate download:willPerformHTTPRedirection:newRequest:decisionHandler:]):
        (-[TestDownloadDelegate download:decideDestinationWithResponse:suggestedFilename:completionHandler:]):
        (-[TestDownloadDelegate download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[TestDownloadDelegate download:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestDownloadDelegate downloadDidFinish:]):
        (-[TestDownloadDelegate download:didFailWithError:resumeData:]):
        (-[TestDownloadDelegate webView:navigationResponse:didBecomeDownload:]):
        (-[TestDownloadDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[TestDownloadDelegate waitForDownloadDidFinish]):
        (-[TestDownloadDelegate takeCallbackRecord]):
        (-[TestDownloadDelegate _downloadDidStart:]): Deleted.
        (-[TestDownloadDelegate _download:didReceiveServerRedirectToURL:]): Deleted.
        (-[TestDownloadDelegate _download:didReceiveResponse:]): Deleted.
        (-[TestDownloadDelegate _download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]): Deleted.
        (-[TestDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]): Deleted.
        (-[TestDownloadDelegate _downloadDidFinish:]): Deleted.
        (-[TestDownloadDelegate _download:didFailWithError:]): Deleted.
        (-[TestDownloadDelegate _downloadDidCancel:]): Deleted.
        (-[TestDownloadDelegate _download:didReceiveAuthenticationChallenge:completionHandler:]): Deleted.
        (-[TestDownloadDelegate _download:didCreateDestination:]): Deleted.
        * TestWebKitAPI/cocoa/TestLegacyDownloadDelegate.h: Copied from Tools/TestWebKitAPI/cocoa/TestDownloadDelegate.h.
        * TestWebKitAPI/cocoa/TestLegacyDownloadDelegate.mm: Copied from Tools/TestWebKitAPI/cocoa/TestDownloadDelegate.mm.
        (-[TestLegacyDownloadDelegate _downloadDidStart:]):
        (-[TestLegacyDownloadDelegate _download:didReceiveServerRedirectToURL:]):
        (-[TestLegacyDownloadDelegate _download:didReceiveResponse:]):
        (-[TestLegacyDownloadDelegate _download:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[TestLegacyDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[TestLegacyDownloadDelegate _downloadDidFinish:]):
        (-[TestLegacyDownloadDelegate _download:didFailWithError:]):
        (-[TestLegacyDownloadDelegate _downloadDidCancel:]):
        (-[TestLegacyDownloadDelegate _download:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestLegacyDownloadDelegate _download:didCreateDestination:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::navigationDidBecomeDownloadShared):
        (WTR::TestController::navigationActionDidBecomeDownload):
        (WTR::TestController::navigationResponseDidBecomeDownload):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::downloadDidFinish):
        (WTR::TestController::downloadDidFail):
        (WTR::TestController::downloadDidReceiveServerRedirectToURL):
        (WTR::TestController::downloadDidStart):
        (WTR::TestController::decidePolicyForNavigationAction):
        (WTR::TestController::downloadDidCancel): Deleted.
        * WebKitTestRunner/TestController.h:

2020-12-03  Adam Roben  <aroben@apple.com>

        Adopt FALLBACK_PLATFORM
        https://bugs.webkit.org/show_bug.cgi?id=219504

        Reviewed by Tim Horton.

        * ContentExtensionTester/Configurations/SDKVariant.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig:
        Use FALLBACK_PLATFORM it if it's defined, otherwise use PLATFORM_NAME
        as before.

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

        Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=219452

        Reviewed by Geoffrey Garen.

        Update syntax of existing tests, which cover behavior quite well.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFAHelpers.h:
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::buildDFAFromPatterns):

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

        [webkitscmpy] Incorrect identifier on remote SVN branches
        https://bugs.webkit.org/show_bug.cgi?id=219509
        <rdar://problem/71953465>

        Reviewed by Stephanie Lewis.

        Request reconstructed from packet inspection of requests sent by the svn binary.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn._cache_revisions): Clarify that revisions should only come from the specified branch.

2020-12-02  Tim Horton  <timothy_horton@apple.com>

        Many different assertion failures on the GPU process bot after r270366
        https://bugs.webkit.org/show_bug.cgi?id=219467

        Reviewed by Simon Fraser.

        * CISupport/build-webkit-org/config.json:
        Revert r270366; macOS UI-side compositing is in way too sad
        of a state, the world is not ready for this yet.

2020-12-02  Brent Fulgham  <bfulgham@apple.com>

        [macOS] WebContent sandbox; remove AppleIntelMEUserClient
        https://bugs.webkit.org/show_bug.cgi?id=219012
        <rdar://problem/70462796>

        Reviewed by Eric Carlson.

        Update the various sandboxes to allow the UIProcess to extend IOKit classes
        to child processes on macOS. We already do this on iOS.

        * MiniBrowser/MiniBrowser.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements:
        * WebKitTestRunner/Configurations/WebKitTestRunner.entitlements:

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

        [webkitcorepy] Allow caller of autoinstall to specify CA file
        https://bugs.webkit.org/show_bug.cgi?id=219433
        <rdar://problem/71869247>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall):
        (AutoInstall._request): Allow user to specify CA cert file.
        (AutoInstall.set_index): Allow caller to specify CA cert file.

2020-12-02  Tim Horton  <timothy_horton@apple.com>

        Enable UI-side compositing on the GPU Process layout tests bot
        https://bugs.webkit.org/show_bug.cgi?id=219450

        Reviewed by Simon Fraser.

        * CISupport/build-webkit-org/config.json:
        GPU Process without UI-side compositing is not a valid configuration.

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

        [webkitscmpy] Json encode Contributor
        https://bugs.webkit.org/show_bug.cgi?id=217932
        <rdar://problem/70462473>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit.Encoder.default): Use Json encoding for Contributor.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.Encoder): Encode Contributor object as dictionary.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor.test_json_encode):
        (TestContributor.test_json_decode):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:

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

        Create and draw app highlights
        https://bugs.webkit.org/show_bug.cgi?id=219365

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/MarkedText.cpp:
        (WebCore::operator<<):

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

        Remove unused JSC ARMv7 worker from EWS
        https://bugs.webkit.org/show_bug.cgi?id=219444

        Reviewed by Aakash Jain.

        Worker igalia-jsc32-armv7-ews-03 is unused and there isn't any
        plan to use it on the near future.

        * CISupport/ews-build/config.json:

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

        [webkitscmpy] Provide switch to exclude commit message
        https://bugs.webkit.org/show_bug.cgi?id=219409
        <rdar://problem/71866445>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Pass --format-short if the user is opting out of the commit message.
        (Git.find): Add include_log flag, pass to commit(...) function.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.commit): Skip network call to retrieve commit message if include_log is false.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py:
        (Find.parser): Add --log and --no-log flags.
        (Find.main): Allow user to skip network call to retrieve commit message.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn.info): Support case were SVN cannot determine the author.
        (Svn.commit): Skip network call to retrieve commit message if include_log is false.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.commit): Add include_log flag.
        (ScmBase.find): Add include_log flag, pass to commit(...) function.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind.test_no_log_svn):
        (TestFind.test_no_log_git):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_no_log):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_no_log):
        (TestRemoteSvn.test_no_log):

2020-12-02  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add unit-tests based on new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=219363

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/loadConfig_unittest.py: Drive-by fix to import loadConfig when running through runUnittests.py
        * CISupport/build-webkit-org/htdigestparser.py: Adding python 3 compatibality.
        * CISupport/build-webkit-org/htdigestparser_unittest.py: Adding python 3 compatibality.
        * CISupport/build-webkit-org/steps_unittest.py: Added unit-tests for various steps.
        (ExpectMasterShellCommand):
        (BuildStepMixinAdditions):
        (TestStepNameShouldBeValidIdentifier):
        (TestStepNameShouldBeValidIdentifier.test_step_names_are_valid):
        (TestRunBindingsTests):
        (TestRunBindingsTests.test_success):
        (TestRunBindingsTests.test_failure):
        (TestKillOldProcesses):
        (TestKillOldProcesses.test_success):
        (TestKillOldProcesses.test_failure):
        (TestCleanBuildIfScheduled):
        (TestCleanBuildIfScheduled.test_success):
        (TestCleanBuildIfScheduled.test_failure):
        (TestCleanBuildIfScheduled.test_skip):
        (TestInstallGtkDependencies):
        (TestInstallGtkDependencies.test_success):
        (TestInstallGtkDependencies.test_failure):
        (TestInstallWpeDependencies):
        (TestInstallWpeDependencies.test_success):
        (TestInstallWpeDependencies.test_failure):
        (TestCompileWebKit):
        (TestCompileWebKit.test_success):
        (TestCompileWebKit.test_success_gtk):
        (TestCompileWebKit.test_success_wpe):
        (TestCompileWebKit.test_failure):
        (TestCompileJSCOnly):
        (TestCompileJSCOnly.test_success):
        (TestCompileJSCOnly.test_failure):

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

        [webkitscmpy] Handle adding, modifying and deleting files on branches
        https://bugs.webkit.org/show_bug.cgi?id=219432
        <rdar://problem/71894089>

        Rubber-stamped by Aakash Jain.

         Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn._branch_for): Support branch detection when files are added or deleted.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.request):
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn._branch_for): Support branch detection when files are deleted.

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

        Switch EWS workers for JSC-ARMv7-32bits build and test queues to a new machine.
        https://bugs.webkit.org/show_bug.cgi?id=219189

        Reviewed by Aakash Jain.

        This switches the workers for the JSC-ARMv7-32bits-Build-EWS and
        JSC-ARMv7-32bits-Test-EWS queues to a new ARM server that will run
        things faster than the previous combination of cross-builder + RPis

        Since now the tets run natively there is no need for passing the
        "--remote-config-file" switch to the run-javascriptcore-tests script.

        However "--memory-limited" is still needed because the issues with
        failures on memory intensive tests happen on all Linux machines.
        So the check to pass this flag is generalized like we do for all
        Linux ports on the build.webkit.org buildbot config.

        * CISupport/ews-build/config.json:
        * CISupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.start):
        * CISupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.test_remote_success):
        (TestRunJavaScriptCoreTests.test_dfg_air_and_stress_test_failure):
        (TestReRunJavaScriptCoreTests.test_remote_success):

2020-12-02  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Add Tetsuharu Ohzeki to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=219429

        Reviewed by Jonathan Bedard.

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

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

        [iOS] GPUProcess.CrashWhilePlayingVideo is flaky
        https://bugs.webkit.org/show_bug.cgi?id=219377
        <rdar://problem/71859117>

        Reviewed by Darin Adler.

        Disable the flaky check on iOS while this is investigated so that the bots are happy.

        In the iOS simulator, I see the audio track getting disabled shortly after the GPU
        process is relaunched for some reason. I have spent a lot of time investigating the
        issue but have been unable to identify the root cause yet.

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

2020-12-01  Sergey Rubanov  <chi187@gmail.com>

        Add Sergey Rubanov to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=219400

        Reviewed by Jonathan Bedard.

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

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

        Unreviewed, reverting r270132.

        Caused at least one regression test failure
        (webkit.org/b/219401)

        Reverted changeset:

        "Use a Version 1 CFRunLoopSource for faster task dispatch"
        https://bugs.webkit.org/show_bug.cgi?id=202874
        https://trac.webkit.org/changeset/270132

2020-12-01  Aakash Jain  <aakash_jain@apple.com>

        Share runUnittests.py for ews-build and build.webkit.org unit-tests
        https://bugs.webkit.org/show_bug.cgi?id=219374

        Reviewed by Jonathan Bedard.

        * CISupport/runUnittests.py: Moved from Tools/CISupport/ews-build/runUnittests.py.
        * CISupport/ews-build/runUnittests.py: Removed.
        * CISupport/ews-build/steps.py:
        (RunEWSUnitTests): Updated ews configuration appropriately.
        (RunEWSUnitTests.__init__):
        * CISupport/ews-build/steps_unittest.py: Updated EWS unit-tests accordingly.

2020-12-01  Youenn Fablet  <youenn@apple.com>

        Add support for readable/writable to RTCRtpSFrameTransform
        https://bugs.webkit.org/show_bug.cgi?id=219298

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp:
        (TestWebKitAPI::createVideoTransformer):

2020-11-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        check-webkit-style should allow WebKitAdditions headers to appear after soft linking headers
        https://bugs.webkit.org/show_bug.cgi?id=219382

        Reviewed by Darin Adler.

        The header include ordering rule that forces soft linking headers to be included last in implementation (cpp and
        mm) files shouldn't really apply to WebKitAdditions headers, since those additions headers are only meant to
        contain method and function implementations anyways.

        Fix this by adding code to recognize WebKitAdditions headers as a special type of header, and exempt these
        headers from the `'*SoftLink.h header should be included after all other headers.'` rule.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_IncludeState):
        (_IncludeState.check_next_include_order):
        (_classify_include):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Add a test case to exercise this scenario.

2020-11-30  Brian Burg  <bburg@apple.com>

        filter-build-webkit: reduce non-actionable warnings from objc runtime and xcodebuild
        https://bugs.webkit.org/show_bug.cgi?id=219376

        Reviewed by Simon Fraser.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):

2020-11-30  Chris Dumez  <cdumez@apple.com>

        sessionStorage should not be cloned when a window is opened with rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=218804
        <rdar://problem/71286606>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SessionStorage.mm: Added.
        (-[SessionStorageUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[SessionStorageUIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (createAndInitializeTestWebView):
        (checkSessionStorageInNewWindow):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/confirm.html: Added.

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

        [git transition] Add old aliases to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=219367
        <rdar://problem/71821209>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/config/contributors.json: Add old aliases for Ken Kocienda and
        Maciej Stachowiak.

2020-11-30  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Move old buildbot unittests to steps_unittest_old.py (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=219364
        <rdar://problem/71821157>

        Unreviewed minor follow-up fix.

        * CISupport/build-webkit-org/loadConfig_unittest.py:

2020-11-30  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Move old buildbot unittests to steps_unittest_old.py
        https://bugs.webkit.org/show_bug.cgi?id=219364

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/committer_auth_unittest.py: Removed.
        * CISupport/build-webkit-org/committer_auth_unittest_old.py: Moved from Tools/CISupport/build-webkit-org/committer_auth_unittest.py.
        * CISupport/build-webkit-org/steps_unittest.py: Removed.
        * CISupport/build-webkit-org/steps_unittest_old.py: Moved from Tools/CISupport/build-webkit-org/steps_unittest.py.
        * CISupport/ews-build/steps.py:
        (RunBuildWebKitOrgUnitTests): Updated ews configuration appropriately.
        (RunBuildWebKitOrgUnitTests.getResultSummary):
        * CISupport/ews-build/steps_unittest.py: Updated ews unit-tests.

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

        [webkitscmpy] Support remote repositories in git-webkit
        https://bugs.webkit.org/show_bug.cgi?id=219172
        <rdar://problem/71594909>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py:
        (Command.parser): Remove repository, since it depends on the parser.
        (Command.main): Support arguments to main functions.
        (Find.parser): Remove repository, since it depends on the parser.
        (Checkout.parser): Ditto.
        (Checkout.main): Early return if specified repository is remote.
        (main): Construct repository based on path argument.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/checkout_unittest.py:
        (TestCheckout):
        (TestCheckout.test_checkout_remote):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind.test_baisc_svn_remote):

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

        [webkitscmpy] webkitscmpy.test.svn_unittest.TestRemoteSvn.test_info timezone dependent
        https://bugs.webkit.org/show_bug.cgi?id=219263
        <rdar://problem/71806358>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestRemoteSvn.test_info):

2020-11-30  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update RunTest262Tests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=219356

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (RunTest262Tests):
        (RunTest262Tests.start): Initialized log observer.
        (RunTest262Tests.parseOutputLine): Parse each log line as they come.
        (RunTest262Tests.countFailures): Updated to return failedTestCount.

2020-11-30  Aakash Jain  <aakash_jain@apple.com>

        Automatically delete old data from ews buildbot instance
        https://bugs.webkit.org/show_bug.cgi?id=214921

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/master.cfg: Configured JanitorConfigurator to delete logs older than one year, and
        configured to run every morning.

2020-11-30  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update RunLLINTCLoopTests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=219084

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (RunLLINTCLoopTests):
        (RunLLINTCLoopTests.start): Initialized log observer.
        (RunLLINTCLoopTests.parseOutputLine): Parse each log line as they come.
        (RunLLINTCLoopTests.countFailures): Updated to return failedTestCount.

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

        Introduce new display list meta commands in preparation for webkit.org/b/219091
        https://bugs.webkit.org/show_bug.cgi?id=219262

        Reviewed by Ryosuke Niwa.

        Rename `MetaCommandSwitchToItemBuffer`.

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

2020-11-27  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] use lz4 compression for improving buildbot performance
        https://bugs.webkit.org/show_bug.cgi?id=219133

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

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

        [GTK] MiniBroeser add an option to quit the browser after loading finishes
        https://bugs.webkit.org/show_bug.cgi?id=219081

        Reviewed by Carlos Alberto Lopez Perez.

        It's useful to run benchmarks or test case reduction tools.

        * MiniBrowser/gtk/BrowserTab.c:
        (webProcessTerminatedCallback): Show a warning when the web process crashes.
        (browserTabConstructed): Connect to web-process-terminated signal.
        * MiniBrowser/gtk/main.c:
        (quitApplication): Quit the MiniBrowser.
        (exitAfterWebViewLoadFinishesCallback): Schedule a browser quit to the next run loop iteration.
        (exitAfterWebProcessCrashed): Call exitAfterWebViewLoadFinishesCallback with WEBKIT_LOAD_FINISHED.
        (exitAfterWebViewLoadFinishes): Connect to load-changed and web-process-terminated signals
        (activate): Ensure the browser is exited after the load finishes or web process crashes when --exit-after-load is passed.

2020-11-26  Lauro Moura  <lmoura@igalia.com>

        [GTK] Unreviewed. Remove leftover test case after Internet Explorer quirks changes

        The test cases were still expecting Linux platform for
        drive.google.com, which now uses the IE quirk and thus the Windows
        platform.

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

2020-11-26  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update Run32bitJSCTests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=219085

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (Run32bitJSCTests):
        (Run32bitJSCTests.start): Initialized log observer.
        (Run32bitJSCTests.parseOutputLine): Parse each log line as they come.
        (Run32bitJSCTests.countFailures): Updated to return failedTestCount.

2020-11-26  Frederic Wang  <fwang@igalia.com>

        [GTK] Allow WebKitTestServer to run non-loopback addresses for API tests
        https://bugs.webkit.org/show_bug.cgi?id=219257

        GTK API tests currently assumes that loopback IP addresses can be treated as mixed content
        in order to test WEBKIT_INSECURE_CONTENT_RUN and WEBKIT_INSECURE_CONTENT_DISPLAYED APIs.
        After bug 218623, this will no longer be true so this patch adds an option to
        WebKitTestServer so that it can run a server listening to "localhost" instead. This approach
        will work until bug 171934 is fixed, but we might add a way to launch a server listening to
        non-localhost addresses (bug 219198) or review the whole mixed content handling in the
        future (bug 140625). This patch also tweaks a bit WebKitTestServer options, so they use a
        bitset instead.

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (beforeAll): Add a ServerNonLoopback bit to the HTTPS server used by the tests, so that
        insecure content APIs will still work after bug 218623. Also remove explicit options for the
        HTTP server since it just uses the default (no bits set).
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer): Use the new bitset syntax. Starts a server listening to
        "localhost" if the ServerNonLoopback bit is set.
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h: Make the enum a list of bit positions
        and the parameter a bitset of options. Add the new ServerNonLoopback option and remove
        ServerHTTP, which corresponds to the default value (no bits set).

2020-11-26  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Use Internet Explorer quirk for Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=219278

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasFirefoxBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasInternetExplorerBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasWindowsPlatformQuirk):
        (TestWebKitAPI::TEST):

2020-11-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement SPI for AuthenticationServices.Framework
        https://bugs.webkit.org/show_bug.cgi?id=218893
        <rdar://problem/71364731>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        (): Deleted.

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

        PCM: Persist pending ad clicks and attributions so they can survive browser restart
        https://bugs.webkit.org/show_bug.cgi?id=219134
        <rdar://problem/70470129>

        Reviewed by John Wilander.

        Add support for testing of expired ad-clicks and attributions.
        Update names after Private Click Measurement standards discussions.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WTR::TestRunner::simulateResourceLoadStatisticsSessionRestart):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::markAttributedPrivateClickMeasurementsAsExpiredForTesting):
        (WTR::TestController::simulateResourceLoadStatisticsSessionRestart):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-11-20  Geoffrey Garen  <ggaren@apple.com>

        Use a Version 1 CFRunLoopSource for faster task dispatch
        https://bugs.webkit.org/show_bug.cgi?id=202874

        Reviewed by Simon Fraser.

        Fixed a test incompatibiilty.

        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        (TestWebKitAPI::Util::spinRunLoop): Be sure to run the runloop until
        it runs out of sources to handle.

        The SuspendServiceWorkerProcessBasedOnClientProcesses test invokes
        spinRunLoop while adding items to the runloop. Under those conditions,
        whether a given source will fire or not in a single invocation of
        CFRunLoopRunInMode is undefined behavior.

2020-11-20  Don Olmstead  <don.olmstead@sony.com>

        Remove quota module
        https://bugs.webkit.org/show_bug.cgi?id=219206

        Reviewed by Anders Carlsson.

        Remove the option to ENABLE_QUOTA.

        * Scripts/webkitperl/FeatureList.pm:

2020-11-20  Frederic Wang  <fwang@igalia.com>

        [GTK] Migrate WebKitTestServer to libsoup 2.48 API
        https://bugs.webkit.org/show_bug.cgi?id=219160

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer): SOUP_SERVER_INTERFACE and soup_server_get_port are
        deprecated. The libsoup doc recommends to use soup_server_listen* and soup_server_get_uris
        instead. Existing code uses 127.0.0.1 (https or http) which corresponds to calling
        soup_server_listen_local with thIPV4_ONLY (and HTTPS or HTTP) option.

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

        REGRESSION (r259151): The "Convert Text to Traditional Chinese" services menu action is broken
        https://bugs.webkit.org/show_bug.cgi?id=219190
        <rdar://problem/71438389>

        Reviewed by Tim Horton.

        Add an API test to exercise `-readSelectionFromPasteboard:`.

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

2020-11-19  Hoa Dinh  <dvh@apple.com>

        Code formatting: change instances of "@synthesize a=b" to "@synthesize a = b".
        https://bugs.webkit.org/show_bug.cgi?id=219094

        Reviewed by Wenson Hsieh.

        There was a mix of "@synthesize a=b" and "@synthesize a = b" in the codebase.
        Most of the instances are "@synthesize a = b", with spaces around the equal sign.
        With https://bugs.webkit.org/show_bug.cgi?id=219092, we're changing the behavior of
        the code style checker to require spaces around the equal sign.
        The change replace all the instances of "@synthesize a=b" with "@synthesize a = b".

        * DumpRenderTree/DumpRenderTreeFileDraggingSource.m:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * MiniBrowser/mac/BrowserWindowController.m:
        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleObject.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm:
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        * TestWebKitAPI/mac/TestFontOptions.mm:

2020-11-19  Hoa Dinh  <dvh@apple.com>

        check-webkit-style: requires spaces around the equal sign for Objective-C @synthesize.
        https://bugs.webkit.org/show_bug.cgi?id=219092

        Reviewed by Wenson Hsieh.

        Teach the Objective-C style checker to prefer `@synthesize a = b` over `@synthesize a=b`. As a followup,
        <webkit.org/b/219094> will apply this style rule in existing @synthesize statements in WebKit.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):

2020-11-19  James Darpinian  <jdarpinian@chromium.org>

        Improve update-angle script and move to Tools/Scripts
        https://bugs.webkit.org/show_bug.cgi?id=218831

        Reviewed by Kenneth Russell.

        update-angle fetches changes from upstream ANGLE into Source/ThirdParty/ANGLE,
        updates WebKit's build files and helps merge WebKit's local changes.

         - Moved to Tools/Scripts so that it doesn't overwrite itself during the
           update process.
         - Reversed direction of rebase. Before the script rebased ANGLE on WebKit;
           now it rebases WebKit's ANGLE changes on upstream ANGLE master. This
           makes a lot more sense and results in fewer changes to rebase. This
           requires the use of git-filter-repo to make the rebase not prohibitively
           slow.
         - Removed bash dependency.
         - Fixed all issues identified by shellcheck.
         - Fixed changes.diff to show added files, while filtering files added by
           WebKit's build process.
         - Fixed changes.diff to ignore whitespace changes.
         - Added --regenerate-changes-diff option to update changes.diff in between
           ANGLE updates.
         - Updated [angle_]commit.h generation for upstream changes.
         - Removed need to run the script multiple times during the rebase process.

        * Scripts/update-angle: Added.

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

        [webkitpy] Resolve baseline search path for Big Sur as default version
        https://bugs.webkit.org/show_bug.cgi?id=219176
        <rdar://problem/71597951>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path):

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

        [webkitscmpy] Support remote Subversion repository
        https://bugs.webkit.org/show_bug.cgi?id=218827
        <rdar://problem/71304485>

        Rubber-stamped by Aakash Jain.

        It is possible to interact with a Subversion repository without the svn command. This is useful
        for services hosted in environments where installing binaries is burdensome, or in cases where
        tools are running without a checkout.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, add dependencies.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/__init__.py: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py: Added.
        (Svn): Interact with a remote Subversion repository without using the svn command.
        (Svn.is_webserver): Check if the provided url matches the pattern for a Subversion server.
        (Svn.__init__):
        (Svn.is_svn):
        (Svn._latest): Return the latest revision.
        (Svn.info): Return the bits of the `svn info` command that are used in code.
        (Svn.default_branch):
        (Svn.list):
        (Svn.branches): List all branches.
        (Svn.tags): List all tags.
        (Svn._cache_path): Return path to json cache.
        (Svn._cache_lock): Filesystem lock used to prevent contention over the json cache, this
        is particularly important during testing.
        (Svn._cache_revisions): Cache the identifier/revision mapping.
        (Svn._branch_for): Given a commit, determine which branch that commit is on.
        (Svn._commit_count): Determine the amount of commits on a branch since branching.
        (Svn.commit): Return a commit object given a revision, branch, identifier or tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/__init__.py: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py: Added.
        (Scm):
        (Scm.from_url): Given a URL, attempt to determine what kind of remote API is available.
        (Scm.__init__):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py: Added.
        (Svn): Mock requests needed to interact with a remote Subversion repository.
        (Svn.latest): Return the most recent commit on any branch.
        (Svn.branches): Return branches at some revision.
        (Svn.tags): Return tags at some revision.
        (Svn.range): Give a start and end revision, along with a tag or branch,
        return all commits in that range.
        (Svn.request): Handle a small subset of requests to a Subversion server.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn): Moved from TestSvn.
        (TestRemoteSvn): Added.
        (TestSvn): Moved to TestLocalSvn.

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

        [macOS] Issue sandbox extension to Web Inspector service
        https://bugs.webkit.org/show_bug.cgi?id=219041
        <rdar://problem/71495287>

        Reviewed by Brent Fulgham.

        Allow MiniBrowser to read preferences from the domain com.apple.Safari.SandboxBroker.

        * MiniBrowser/MiniBrowser.entitlements:

2020-11-19  Alexey Proskuryakov  <ap@apple.com>

        Make block-spammers autoinstall requests
        https://bugs.webkit.org/show_bug.cgi?id=219137

        Reviewed by Jonathan Bedard.

        * Scripts/block-spammers: Move the webkitpy import first, making autoinstaller
        is available for subsequent imports.

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

        Rename MetaCommandSwitchTo to MetaCommandSwitchToItemBuffer
        https://bugs.webkit.org/show_bug.cgi?id=219130

        Reviewed by Tim Horton.

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

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

        [webitscmpy] Branch point incorrect for Git checkouts
        https://bugs.webkit.org/show_bug.cgi?id=219132
        <rdar://problem/71561569>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Banca-point is the distance from the primordial commit minus the distance from
        the default branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:

2020-11-18  Alexey Proskuryakov  <ap@apple.com>

        Remove IRC bots from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=219111

        Reviewed by Jonathan Bedard and Aakash Jain.

        We haven't been running any IRC bots for a while, this is dead code.

        * Scripts/webkitpy/common/net/irc: Removed.
        * Scripts/webkitpy/thirdparty/irc: Removed.
        * Scripts/webkitpy/tool/bot/irc_command.py: Removed.
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot/ircbot.py: Removed.
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py: Removed.
        * Scripts/webkitpy/tool/bot/sheriff.py: Removed.
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/newcommitbot.py: Removed.
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/perfalizer.py: Removed.
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/sheriffbot.py: Removed.
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py: Removed.
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch):
        (WebKitPatch.__init__):
        (WebKitPatch.path):
        (WebKitPatch.command_completed):
        (WebKitPatch.handle_global_options):
        (WebKitPatch.ensure_irc_connected): Deleted.
        (WebKitPatch.irc): Deleted.
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.__init__):
        (MockTool.path):
        (MockTool.ensure_irc_connected): Deleted.
        (MockTool.irc): Deleted.

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

        [Concurrent display lists] Add a way for display lists to partially replay
        https://bugs.webkit.org/show_bug.cgi?id=219067

        Reviewed by Simon Fraser.

        Add a test that exercises partial display list replay.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp: Added.
        (TestWebKitAPI::TEST):

2020-11-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Improve Wasm binary test coverage
        https://bugs.webkit.org/show_bug.cgi?id=204843

        Reviewed by Darin Adler.

        We add more tests for LEBDecoder. In particular, the added tests focus on the case which overflow bits.

        * TestWebKitAPI/Tests/WTF/LEBDecoder.cpp:
        (TestWebKitAPI::toString):
        (TestWebKitAPI::testUInt32LEBDecode):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testUInt64LEBDecode):
        (TestWebKitAPI::testInt32LEBDecode):
        (TestWebKitAPI::testInt64LEBDecode):

2020-11-18  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add timeout to network requests
        https://bugs.webkit.org/show_bug.cgi?id=218994

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (BugzillaMixin.fetch_data_from_url_with_authentication): Added timeout to requests.get() call.
        (BugzillaMixin.fetch_data_from_url): Ditto.
        (ValidateCommiterAndReviewer.load_contributors_from_trac): Ditto.
        (CheckPatchStatusOnEWSQueues.get_patch_status): Ditto.

2020-11-18  Keith Rollin  <krollin@apple.com>

        Extend check-for-inappropriate-files-in-framework to check for .tmp files
        https://bugs.webkit.org/show_bug.cgi?id=219064
        <rdar://problem/71519010>

        Reviewed by Alexey Proskuryakov.

        Some *.tmp files that were generated from post-processing header files
        were appearing in *.framework/Headers directories. The problem doesn't
        seem to be occurring any more, but update
        check-for-inappropriate-files-in-framework to catch it if it does
        again.

        * Scripts/check-for-inappropriate-files-in-framework:

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

        [webkitpy] Respect --result-report-flavor on device ports
        https://bugs.webkit.org/show_bug.cgi?id=219112
        <rdar://problem/71553965>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.configuration_for_upload): Add flavor to the configuration, if flag passed.

2020-11-18  Matt Lewis  <jlewis3@apple.com>

        Big Sur testers failing to download build products
        https://bugs.webkit.org/show_bug.cgi?id=219095

        Reviewed by Aakash Jain.

        Fixing the url parsing to deal with special characters. Also
        reworking the imports to help with transition to python3.
        
        * CISupport/download-built-product:
        (main):

2020-11-18  Chris Dumez  <cdumez@apple.com>

        [iOS] beforeunload event does not fire in MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=219102
        <rdar://problem/70550655>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/beforeunload.html:
        * TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm:
        (-[UIDelegateWithoutRunBeforeUnload webViewDidClose:]):
        (-[BeforeUnloadMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2020-11-18  Chris Dumez  <cdumez@apple.com>

        navigator.clipboard is not exposed on *.localhost pages
        https://bugs.webkit.org/show_bug.cgi?id=219020

        Reviewed by Wenson Hsieh.

        Extend API test coverage.

        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        (TestWebKitAPI::TEST_F):

2020-11-18  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update RunPerlTests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=219083

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (RunPerlTests):
        (RunPerlTests.start): Initialized log observer.
        (RunPerlTests.parseOutputLine): Parse each log line as they come.
        (RunPerlTests.countFailures): Updated to return failedTestCount.

2020-11-18  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update RunPythonTests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=219082

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (RunPythonTests):
        (RunPythonTests.start): Initialized log observer.
        (RunPythonTests.parseOutputLine): Parse each log line as they come.
        (RunPythonTests.countFailures): Updated to return failedTestCount.

2020-11-18  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Update Outlook user agent quirk
        https://bugs.webkit.org/show_bug.cgi?id=219049

        Reviewed by Carlos Garcia Campos.

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

2020-11-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [FlatPak] update-webkitgtk-libs fails after a clean build
        https://bugs.webkit.org/show_bug.cgi?id=218724

        Reviewed by Philippe Normand.

        The issue was caused because when adding a new flatpak repository
        via the method FlatpakRepos.add() that repository is not added to
        the internal list of available repositories inside the object FlatpakRepos.
        So then the check on setup_builddir() added in r268542 failed because
        the internal list of repositories on the object FlatpakRepos() was
        empty on the first run (after a clean build).
        To fix this we ensure to re-generate the internal list of flatpak
        repositories any time that a new reporistory is added by calling
        FlatpakRepos.update() after FlatpakRepos.add()

        On top of that fix, we add another fix to make the code more robust.
        Now it allows the generation of toolchains to fail without causing
        a fatal error. Also a new check is added in order to retry to generate
        the toolchains in the next run if is detected that they were not
        correctly generated.

        * flatpak/flatpakutils.py:
        (FlatpakRepos.add):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.main):
        (WebkitFlatpak.check_toolchains_generated):
        (WebkitFlatpak.pack_toolchain):

2020-11-17  Diego Pino Garcia  <dpino@igalia.com>

        [buildbot] Add buildAndTest bot for WebKitGTK (GTK4)
        https://bugs.webkit.org/show_bug.cgi?id=213016

        Reviewed by Carlos Alberto Lopez Perez.

        Add a new post-commit bot to test WebKitGTK using GTK4 library.

        The bot builds WebKitGTK and runs the following test suites: layout-test, api-test
        and webdriver-test.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/factories.py:
        (BuildAndTestAllButJSCFactory):
        (BuildAndTestAllButJSCFactory.getProduct):
        (BuildAndTestAllButJSCFactory.__init__):
        * CISupport/build-webkit-org/steps_unittest.py:

2020-11-17  Matt Lewis  <jlewis3@apple.com>

        Big Sur testers fail to find proper archives due to architecture keys.
        https://bugs.webkit.org/show_bug.cgi?id=219039

        Reviewed by Aakash Jain.

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

2020-11-17  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Support mocking request network calls.
        https://bugs.webkit.org/show_bug.cgi?id=218927
        <rdar://problem/71389720>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests.py: Moved to requests_.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests_.py: Copied from Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests.py.
        (Response): Object mimicking the structure of Requests's response object, useful for mocking.
        (Requests): Context manager which will intercept http and https requests to a specific host.
        (Requests.__exit__):
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/requests_unittest.py: Added.
        (MockRequests):
        (MockRequests.test_basic):
        (MockRequests.test_fallback):

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

        [build.webkit.org] Update ExtractTestResults step for new buildbot (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=218759
        <rdar://problem/71246754>

        Unreviewed minor follow-up fix.

        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults):

2020-11-16  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Generalize parts of local.Scm class
        https://bugs.webkit.org/show_bug.cgi?id=218935
        <rdar://problem/71395688>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm):
        (Scm.Exception): Moved to ScmBase.
        (Scm.__init__): Move branches logic to ScmBase.
        (Scm.is_svn): Moved to ScmBase.
        (Scm.is_git): Ditto.
        (Scm.default_branch): Ditto.
        (Scm.branches): Ditto.
        (Scm.tags): Ditto.
        (Scm.find): Ditto.
        (Scm.commit): Ditto.
        (Scm.prioritize_branches): Ditto.
        (Scm.log): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.commit): Passing branch to self.info is redundant.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py: Added.
        (ScmBase): Base class for all local and remote Scm objects.
        (ScmBase.Exception): Moved from local.Scm.
        (ScmBase.__init__): Ditto.
        (ScmBase.is_svn): Ditto.
        (ScmBase.is_git): Ditto.
        (ScmBase.default_branch): Ditto.
        (ScmBase.branches): Ditto.
        (ScmBase.tags): Ditto.
        (ScmBase.commit): Ditto.
        (ScmBase.prioritize_branches): Ditto.
        (ScmBase.find): Ditto.
        (ScmBase.log): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:

2020-11-16  Ling Ho  <lingho@apple.com>

        Updated contributors.json to remove inactive committers and reviewers.
        Removed irc user "Adam Barth" from IRCCommand in webkitpy unittest. 
        https://bugs.webkit.org/show_bug.cgi?id=219006

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):

2020-11-16  John Wilander  <wilander@apple.com>

        PCM: Change attribute and JSON key names according to the W3C conversation
        https://bugs.webkit.org/show_bug.cgi?id=218967

        Reviewed by Brent Fulgham.

        We've discussed extensively with Google and others on naming for the link
        attributes and JSON key names in these issues:
        https://github.com/privacycg/private-click-measurement/issues/30
        https://github.com/privacycg/private-click-measurement/issues/56

        This patch changes PCM accordingly.

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

2020-11-16  Matt Lewis  <jlewis3@apple.com>

        Bring up Big Sur Builders and Testers
        https://bugs.webkit.org/show_bug.cgi?id=218917

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2020-11-16  Chris Dumez  <cdumez@apple.com>

        Fix several leaks of CGContext in API tests
        https://bugs.webkit.org/show_bug.cgi?id=218988

        Reviewed by Wenson Hsieh.

        Make sure we adopt the value returned by CGBitmapContextCreate().

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        (TestWebKitAPI::TEST):

2020-11-15  Youenn Fablet  <youenn@apple.com>

        Add a WebRTC SFrame transform
        https://bugs.webkit.org/show_bug.cgi?id=218752

        Reviewed by Eric Carlson.

        Add unit tests that validate SFrame generation and parsing.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp: Added.
        (TestWebKitAPI::getRawKey):
        (TestWebKitAPI::createVideoTransformer):
        (TestWebKitAPI::checkVectorsAreEqual):
        (TestWebKitAPI::TEST):

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

        Implement basic permission check for SpeechRecognition
        https://bugs.webkit.org/show_bug.cgi?id=218476
        <rdar://problem/71222638>

        Reviewed by Youenn Fablet.

        * MiniBrowser/mac/Info.plist:
        * MobileMiniBrowser/MobileMiniBrowser/Info.plist:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm: Added.
        (-[SpeechRecognitionPermissionUIDelegate _webView:requestSpeechRecognitionPermissionForOrigin:decisionHandler:]):
        (-[SpeechRecognitionMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/speechrecognition-user-permission-persistence.html: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIsSpeechRecognitionPermissionGranted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForSpeechRecognitionPermissionRequest):
        (WTR::TestController::completeSpeechRecognitionPermissionCheck):
        (WTR::TestController::setIsSpeechRecognitionPermissionGranted):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-11-13  Chris Dumez  <cdumez@apple.com>

        [GPUProcess] Add basic GPUProcess crash handling for canvas
        https://bugs.webkit.org/show_bug.cgi?id=218924

        Reviewed by Simon Fraser.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (convertToCGImage):
        (getPixelIndex):
        (TEST):

2020-11-13  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update CompileWebKit step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218922

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (CompileWebKit.start): Initialize logobserver.
        (CompileWebKit.parseOutputLine): Method to process each line.
        (CompileWebKit._addToLog): Method to add to the log which is displayed in UI.
        (CompileWebKit.createSummary):

2020-11-13  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: r269514 Reset server port before restarting webserver
        https://bugs.webkit.org/show_bug.cgi?id=218918
        <rdar://problem/71380345>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve): Reset server port.
        (SimpleHTTPServerDriver.kill_server): Ditto.

2020-11-13  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update RunAPITests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218907

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (TestWithFailureCount.getText): Added FIXME to remove this method after switching to buildbot v2.
        (TestWithFailureCount.getText2): Added FIXME to remove this method after switching to buildbot v2.
        (TestWithFailureCount.getResultSummary): Method to generate custom step summary.
        (RunWebKitTests.getResultSummary): Removed unnecessary u'', python3 defaults to unicode anyways.
        (RunAPITests):
        (RunAPITests.start): Use ParseByLineLogObserver.
        (RunAPITests.countFailures):
        (RunAPITests.parseOutputLine): Method to process each line.

2020-11-12  Darin Adler  <darin@apple.com>

        Remove unused advanced plug-in features: snapshotting and plug-in load policy
        https://bugs.webkit.org/show_bug.cgi?id=218835

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Removed
        PluginLoadClientPolicies.mm.
        * TestWebKitAPI/Tests/WebKitCocoa/PluginLoadClientPolicies.mm: Removed.
        This tested a feature that is now removed.

2020-11-13  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Use python3 to run transfer-to-s3 script
        https://bugs.webkit.org/show_bug.cgi?id=218904

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (TransferToS3.start):

2020-11-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add Kimmo Kinnunen as committer
        https://bugs.webkit.org/show_bug.cgi?id=218888

        Reviewed by Antti Koivisto.

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

2020-11-12  Sam Weinig  <weinig@apple.com>

        Move more WebKitLegacy specific settings usage to WebPreferences.yaml
        https://bugs.webkit.org/show_bug.cgi?id=218852

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        Remove unnecessary call of [WebPreferences setUsePreHTML5ParserQuirks:NO] as this is the default.

2020-11-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: ensure that `JSON::ArrayOf<T>` doesn't allow `addItem` to be called with a type other than `T`
        https://bugs.webkit.org/show_bug.cgi?id=218686

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/WTF/JSONValue.cpp:
        (TestWebKitAPI::TEST):
        Use `_s` and `makeString` to ensure that the `String` function overload is used.

2020-11-12  Ali Juma  <ajuma@chromium.org>

        configure-xcode-for-embedded-development breaks @available in Swift files
        https://bugs.webkit.org/show_bug.cgi?id=218850

        Reviewed by Jonathan Bedard.

        The changes applied by configure-xcode-for-embedded-development
        for AvailabilityProhibitedInternal.h cause API_AVAILABLE to be ignored
        in Objective-C, but @available is not ignored in Swift. As a result,
        if an Objective-C method marked with API_AVAILABLE makes a call
        into a Swift class marked with @available, this can lead to an
        availability warning even when the calling method is only available
        when the callee is available.

        To fix this, ensure that @available is also ignored in Swift.

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

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

        [GPUProcess] Add basic GPUProcess crash handling for media playback
        https://bugs.webkit.org/show_bug.cgi?id=218825

        Reviewed by Eric Carlson.

        Add API test coverage.

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

2020-11-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] configure buildbot not to send Usage Data to buildbot developers
        https://bugs.webkit.org/show_bug.cgi?id=218821

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2020-11-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Remove obsolete buildHorizon, eventHorizon and logHorizon properties from master_buildbot2.cfg
        https://bugs.webkit.org/show_bug.cgi?id=218818

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2020-11-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Replace status with www in master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=218822

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2020-11-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] replace c['slavePortnum'] with c['protocols'] in master_buildbot2.cfg
        https://bugs.webkit.org/show_bug.cgi?id=218819

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:

2020-11-12  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update CheckOutSource step for new buildbot (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=218802
        <rdar://problem/71295484>

        Unreviewed minor follow-up fix.

        * CISupport/build-webkit-org/steps.py:
        (CheckOutSource):

2020-11-12  Zalan Bujtas  <zalan@apple.com>

        Show legacy line layout visual coverage instead of "simple line" layout.
        https://bugs.webkit.org/show_bug.cgi?id=218695

        Reviewed by Antti Koivisto.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleLegacyLineLayoutVisualCoverageEnabled:]):
        (-[SettingsController legacyLineLayoutVisualCoverageEnabled]):
        (-[SettingsController toggleSimpleLineLayoutDebugBordersEnabled:]): Deleted.
        (-[SettingsController simpleLineLayoutDebugBordersEnabled]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2020-11-12  Lauro Moura  <lmoura@igalia.com>

        [WPE][TestWebKitAPI] Wait for RenderingState::Started to avoid flakiness
        https://bugs.webkit.org/show_bug.cgi?id=218841

        Reviewed by Adrian Perez de Castro.

        The external audio rendering test asked JS to play the video but
        checked the condition right away. As with other tests, the full side
        effects of the JS call might not have propagated, causing the
        assertion to fail. This became especially visible after the build with
        r269579.

        So, like the other conditions in the test, add a method to wait for
        the condition.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (AudioRenderingWebViewTest::waitUntilStarted): Added

2020-11-11  Sam Weinig  <weinig@apple.com>

        Move more WebKitLegacy preferences bound to Settings to WebPreferences.yaml
        https://bugs.webkit.org/show_bug.cgi?id=218826

        Reviewed by Tim Horton.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        Switch to using TestOptions for ShrinksStandaloneImagesToFit now that it is supported.

2020-11-11  John Wilander  <wilander@apple.com>

        PCM: Change from ad-click-attribution to private-click-measurement (in all forms, including .well-known URL)
        https://bugs.webkit.org/show_bug.cgi?id=218730
        <rdar://problem/71094296>

        Reviewed by Alex Christensen.

        Change to the official name of the proposed standard Private Click Measurement
        https://github.com/privacycg/private-click-measurement.

        This includes a change of the reporting URL from 
        "/.well-known/ad-click-attribution/" to
        "/.well-known/private-click-measurement/".

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp: Removed.
        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp: Added.
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpPrivateClickMeasurement):
        (WTR::TestRunner::clearPrivateClickMeasurement):
        (WTR::TestRunner::clearPrivateClickMeasurementsThroughWebsiteDataRemoval):
        (WTR::TestRunner::setPrivateClickMeasurementOverrideTimerForTesting):
        (WTR::TestRunner::setPrivateClickMeasurementConversionURLForTesting):
        (WTR::TestRunner::markPrivateClickMeasurementsAsExpiredForTesting):
        (WTR::TestRunner::dumpAdClickAttribution): Deleted.
        (WTR::TestRunner::clearAdClickAttribution): Deleted.
        (WTR::TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval): Deleted.
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting): Deleted.
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting): Deleted.
        (WTR::TestRunner::markAdClickAttributionsAsExpiredForTesting): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::PrivateClickMeasurementStringResultCallbackContext::PrivateClickMeasurementStringResultCallbackContext):
        (WTR::privateClickMeasurementStringResultCallback):
        (WTR::TestController::dumpPrivateClickMeasurement):
        (WTR::PrivateClickMeasurementVoidCallbackContext::PrivateClickMeasurementVoidCallbackContext):
        (WTR::privateClickMeasurementVoidCallback):
        (WTR::TestController::clearPrivateClickMeasurement):
        (WTR::TestController::clearPrivateClickMeasurementsThroughWebsiteDataRemoval):
        (WTR::TestController::setPrivateClickMeasurementOverrideTimerForTesting):
        (WTR::TestController::setPrivateClickMeasurementConversionURLForTesting):
        (WTR::TestController::markPrivateClickMeasurementsAsExpiredForTesting):
        (WTR::AdClickAttributionStringResultCallbackContext::AdClickAttributionStringResultCallbackContext): Deleted.
        (WTR::adClickAttributionStringResultCallback): Deleted.
        (WTR::TestController::dumpAdClickAttribution): Deleted.
        (WTR::AdClickAttributionVoidCallbackContext::AdClickAttributionVoidCallbackContext): Deleted.
        (WTR::adClickAttributionVoidCallback): Deleted.
        (WTR::TestController::clearAdClickAttribution): Deleted.
        (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval): Deleted.
        (WTR::TestController::setAdClickAttributionOverrideTimerForTesting): Deleted.
        (WTR::TestController::setAdClickAttributionConversionURLForTesting): Deleted.
        (WTR::TestController::markAdClickAttributionsAsExpiredForTesting): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::dumpPrivateClickMeasurement):
        (WTR::TestInvocation::dumpAdClickAttribution): Deleted.
        * WebKitTestRunner/TestInvocation.h:

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

        Add minimal support for deep color IOSurface backing store to ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=218816

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):

2020-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add system trace points for the GPU process display list processing loop
        https://bugs.webkit.org/show_bug.cgi?id=218824

        Reviewed by Simon Fraser.

        * Tracing/SystemTracePoints.plist:

2020-11-11  Ryan Haddad  <ryanhaddad@apple.com>

        [webkitpy] Bump CURRENT_VERSION to 11.0 for Mac port
        https://bugs.webkit.org/show_bug.cgi?id=218581

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_big_sur_baseline_search_path):

2020-11-11  Sam Weinig  <weinig@apple.com>

        Remove unused ExperimentalNotificationsEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=218813

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        Stop setting ExperimentalNotificationsEnabled to false. It does nothing.

2020-11-11  Chris Dumez  <cdumez@apple.com>

        Terminate WebProcesses if GPUProcess crashes more than twice in 30 seconds
        https://bugs.webkit.org/show_bug.cgi?id=218811
        <rdar://problem/71292424>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate waitForWebContentProcessDidTerminate]):
        (-[WKWebView _test_waitForWebContentProcessDidTerminate]):

2020-11-11  Brian Burg  <bburg@apple.com>

        [Cocoa] Inspector Extensions: Add _WKInspectorExtension and related plumbing
        https://bugs.webkit.org/show_bug.cgi?id=217783
        <rdar://problem/69968787>

        Reviewed by Devin Rousso.

        Add API tests to exercise new methods of the _WKInspectorExtensionHost protocol.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: New test file.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionHost.mm: Added.
        (resetGlobalState):
        (-[UIDelegateForTestingInspectorExtensionHost _webView:didAttachLocalInspector:]):
        (TEST):

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

        [build.webkit.org] Update CheckOutSource step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218802

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (CheckOutSource):
        (CheckOutSource.__init__):

2020-11-11  Chris Dumez  <cdumez@apple.com>

        [GPUProcess] Seamlessly resume WebAudio playback if the GPU Process crashes
        https://bugs.webkit.org/show_bug.cgi?id=218806

        Reviewed by Geoffrey Garen.

        Extend API test coverage.

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

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

        [build.webkit.org] Update RunWebKitTests step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218805

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ParseByLineLogObserver):  New helper class to replace usage of LineConsumerLogObserver. This both makes it
        easier to adopt the generator-based approach and reduces duplication of: while True, try, run some code,
        then except GeneratorExit.
        (ParseByLineLogObserver.__init__): Takes one argument: the function to run against each line produced.
        (RunWebKitTests):
        (RunWebKitTests.start): Initialize log_observer and appropriate variables.
        (RunWebKitTests._parseRunWebKitTestsOutput): Added FIXME to remove this method after switching to buildbot v2.
        (RunWebKitTests.parseOutputLine): Method to parse each log line as it is generated.
        (RunWebKitTests.processTestFailures): Method to summarize the test failure information.
        (RunWebKitTests.commandComplete): 
        (RunWebKitTests.evaluateCommand): Call processTestFailures method before processing results.
        (RunWebKitTests.getResultSummary): Method to show step summary in new buildbot.
        (RunWebKitTests.getText): Added FIXME to remove this method after switching to buildbot v2.
        (RunWebKitTests.getText2): Ditto.

2020-11-11  Angelos Oikonomopoulos  <angelos@igalia.com>

        Use FileDownload to fetch built product from master
        https://bugs.webkit.org/show_bug.cgi?id=218440

        Reviewed by Aakash Jain.

        This removes the need for a front-end web server to serve the static
        files.

        * CISupport/ews-build/steps.py:
        (DownloadBuiltProductFromMaster):
        (DownloadBuiltProductFromMaster.__init__):
        (DownloadBuiltProductFromMaster.getResultSummary):
        * CISupport/ews-build/steps_unittest.py:

2020-11-10  Noam Rosenthal  <noam@webkit.org>

        Unreviewed, cleanup my watchlist entries.

        * Scripts/webkitpy/common/config/watchlist:

2020-11-10  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Update page-visibility test after r269665

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewPageVisibility):

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

        Unreviewed, reverting r269660.
        https://bugs.webkit.org/show_bug.cgi?id=218786

        Crashing in EWS iOS simulator bots

        Reverted changeset:

        "PCM: Change from ad-click-attribution to private-click-
        measurement (in all forms, including .well-known URL)"
        https://bugs.webkit.org/show_bug.cgi?id=218730
        https://trac.webkit.org/changeset/269660

2020-11-10  Chris Dumez  <cdumez@apple.com>

        Webkit incorrectly setting visibilityState to "prerender" when opening link in new tab
        https://bugs.webkit.org/show_bug.cgi?id=215851
        <rdar://problem/67817100>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/VisibilityState.mm: Added.
        (TEST):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPageVisibility):

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

        Remove another function that implicitly uses the composed tree (intersects with range)
        https://bugs.webkit.org/show_bug.cgi?id=218726

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp:
        (TestWebKitAPI::makeBoundaryPoint): Deleted.
        Deleted the DocumentOrder.IsPointInRange, DocumentOrder.RangeIntersectsRange and
        DocumentOrder.RangeIntersectsNode tests, each replaced by an internals-based test.

2020-11-10  John Wilander  <wilander@apple.com>

        PCM: Change from ad-click-attribution to private-click-measurement (in all forms, including .well-known URL)
        https://bugs.webkit.org/show_bug.cgi?id=218730
        <rdar://problem/71094296>

        Reviewed by Devin Rousso.

        Change to the official name of the proposed standard Private Click Measurement
        https://github.com/privacycg/private-click-measurement.

        This includes a change of the reporting URL from 
        "/.well-known/ad-click-attribution/" to
        "/.well-known/private-click-measurement/".

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp: Removed.
        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp: Added.
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpPrivateClickMeasurement):
        (WTR::TestRunner::clearPrivateClickMeasurement):
        (WTR::TestRunner::clearPrivateClickMeasurementsThroughWebsiteDataRemoval):
        (WTR::TestRunner::setPrivateClickMeasurementOverrideTimerForTesting):
        (WTR::TestRunner::setPrivateClickMeasurementConversionURLForTesting):
        (WTR::TestRunner::markPrivateClickMeasurementsAsExpiredForTesting):
        (WTR::TestRunner::dumpAdClickAttribution): Deleted.
        (WTR::TestRunner::clearAdClickAttribution): Deleted.
        (WTR::TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval): Deleted.
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting): Deleted.
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting): Deleted.
        (WTR::TestRunner::markAdClickAttributionsAsExpiredForTesting): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::PrivateClickMeasurementStringResultCallbackContext::PrivateClickMeasurementStringResultCallbackContext):
        (WTR::privateClickMeasurementStringResultCallback):
        (WTR::TestController::dumpPrivateClickMeasurement):
        (WTR::PrivateClickMeasurementVoidCallbackContext::PrivateClickMeasurementVoidCallbackContext):
        (WTR::privateClickMeasurementVoidCallback):
        (WTR::TestController::clearPrivateClickMeasurement):
        (WTR::TestController::clearPrivateClickMeasurementsThroughWebsiteDataRemoval):
        (WTR::TestController::setPrivateClickMeasurementOverrideTimerForTesting):
        (WTR::TestController::setPrivateClickMeasurementConversionURLForTesting):
        (WTR::TestController::markPrivateClickMeasurementsAsExpiredForTesting):
        (WTR::AdClickAttributionStringResultCallbackContext::AdClickAttributionStringResultCallbackContext): Deleted.
        (WTR::adClickAttributionStringResultCallback): Deleted.
        (WTR::TestController::dumpAdClickAttribution): Deleted.
        (WTR::AdClickAttributionVoidCallbackContext::AdClickAttributionVoidCallbackContext): Deleted.
        (WTR::adClickAttributionVoidCallback): Deleted.
        (WTR::TestController::clearAdClickAttribution): Deleted.
        (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval): Deleted.
        (WTR::TestController::setAdClickAttributionOverrideTimerForTesting): Deleted.
        (WTR::TestController::setAdClickAttributionConversionURLForTesting): Deleted.
        (WTR::TestController::markAdClickAttributionsAsExpiredForTesting): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::dumpPrivateClickMeasurement):
        (WTR::TestInvocation::dumpAdClickAttribution): Deleted.
        * WebKitTestRunner/TestInvocation.h:

2020-11-10  Chris Dumez  <cdumez@apple.com>

        GPUProcess does not properly get relaunched after crashing
        https://bugs.webkit.org/show_bug.cgi?id=218769

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/audio-context-playing.html: Added.

2020-11-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r269525): Many layout tests crash when run under ASan
        https://bugs.webkit.org/show_bug.cgi?id=218733
        <rdar://problem/71206273>

        Reviewed by Tim Horton.

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

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

        Fix for LayoutTests/accessibility/mac/search-predicate.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=218732

        Reviewed by Chris Fleizach.

        Exposed isOnScreen method to JS.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isOnScreen const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isOnScreen const):

2020-11-10  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Only upload to S3 when running on production server
        https://bugs.webkit.org/show_bug.cgi?id=218755

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (TransferToS3.doStepIf):

2020-11-10  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update ExtractTestResults step for new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218759

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults): Making this step similar to corresponding EWS step. Also added name to this step to make it more readable (than MasterShellCommand).
        (ExtractTestResults.__init__):
        (ExtractTestResults.resultDirectoryURL):
        (ExtractTestResults.start):
        * CISupport/build-webkit-org/steps_unittest.py: Updated unit-tests to handle step name change.

2020-11-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [REGRESSSION(r269390) Several editing/ tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=218607

        Reviewed by Adrian Perez de Castro.

        After r269390 some of the internal preferences like LiveRangeSelectionEnabled
        are not resetted to their default value on WTR between test runs.
        So when a test changes some of this properties it may cause failures on
        the next tests that will run on the same WTR process.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues): Add back the call to WKPreferencesResetAllInternalDebugFeatures() that was removed on r269390.

2020-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: add buttons to insert ordered/unordered lists to editor toolbar
        https://bugs.webkit.org/show_bug.cgi?id=218648

        Reviewed by Carlos Alberto Lopez Perez.

        * MiniBrowser/gtk/BrowserWindow.c:

2020-11-09  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Do not print master environment variables in build steps
        https://bugs.webkit.org/show_bug.cgi?id=218711

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (TransferToS3.__init__): Set logEnviron to False for newer buildbot.
        (ExtractTestResults.__init__): Ditto.

2020-11-09  Xan López  <xan@igalia.com>

        [JSC] Enable bytecode cache testing in stress tests for Linux
        https://bugs.webkit.org/show_bug.cgi?id=218072

        Reviewed by Yusuke Suzuki.

        We only need to tweak how we define the temporary dir for the
        bytecode cache in order for stress tests to support bytecode cache
        testing on Linux.

        This is skipped on Linux/MIPS for now, since the bots are already
        slow enough and we have one blocker bug with incorrect parameter
        quoting on some tests. See bug #218703.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:
        receive the temporary dir template as an argument. Also tweak the
        script a bit so that it does not use arrays, that way it will work
        in any POSIX shell.
        * Scripts/run-jsc-stress-tests: pass a different temporary dir
        template for Darwin and Linux, since mktemp works differently
        there.

2020-11-09  Alan Bujtas  <zalan@apple.com>

        Unreviewed, reverting r269603.

        Needs Safari patch

        Reverted changeset:

        "Show legacy line layout visual coverage instead of "simple
        line" layout."
        https://bugs.webkit.org/show_bug.cgi?id=218695
        https://trac.webkit.org/changeset/269603

2020-11-09  Zalan Bujtas  <zalan@apple.com>

        Show legacy line layout visual coverage instead of "simple line" layout.
        https://bugs.webkit.org/show_bug.cgi?id=218695

        Reviewed by Antti Koivisto.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleLegacyLineLayoutVisualCoverageEnabled:]):
        (-[SettingsController legacyLineLayoutVisualCoverageEnabled]):
        (-[SettingsController toggleSimpleLineLayoutDebugBordersEnabled:]): Deleted.
        (-[SettingsController simpleLineLayoutDebugBordersEnabled]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2020-11-09  Diego Pino Garcia  <dpino@igalia.com>

        [webkitpy] When platform is GTK or WPE, make lint-test-expectations lint GLIB too
        https://bugs.webkit.org/show_bug.cgi?id=218691

        Reviewed by Carlos Alberto Lopez Perez.

        In the test expectations hierarchy, both GTK and WPE share a common
        root, GLIB. It's not possible to lint GLIB test expectations as it's 
        not a platform with a builder associated. Thus, make lint-test-expectations
        lint GLIB test expectations when linting GLIB or WPE.

        * Scripts/webkitpy/layout_tests/lint_test_expectations.py:
        (lint):

2020-11-09  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Use workersrc instead of slavesrc for new Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218717

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (UploadBuiltProduct.__init__): Used workersrc instead of slavesrc.
        (UploadTestResults.__init__): Ditto.
        (Run32bitJSCTests.start): Drive-by fix to use workerEnvironment instead of slaveEnvironment.

2020-11-09  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] remove unused imports from loadConfig.py
        https://bugs.webkit.org/show_bug.cgi?id=218718

        Reviewed by Dewei Zhu.

        * CISupport/build-webkit-org/loadConfig.py:

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

        [macOS] System sounds should be played in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=218405

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/SystemBeep.mm: Added.
        (TEST):

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

        [macOS] Set preference for overridden languages in the WebContent process after entering the sandbox.
        https://bugs.webkit.org/show_bug.cgi?id=218097

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/AccessibilityReduceMotion.mm:
        * TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
        * TestWebKitAPI/Tests/WebKit/OverrideAppleLanguagesPreference.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:

2020-11-09  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add python 3 support - part 3
        https://bugs.webkit.org/show_bug.cgi?id=218706

        Reviewed by Jonathan Bedard.

        * CISupport/Shared/transfer-archive-to-s3: Updated print method to be both python 2 and 3 compatible.
        * CISupport/built-product-archive: Ditto.
        * CISupport/delete-stale-build-files: Ditto.
        * CISupport/build-webkit-org/loadConfig.py: Removed unnecessary filter method.
        * CISupport/ews-build/loadConfig.py: Ditto.

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

        [GTK] REGRESSION(r267250) API test /webkit/WebKitWebView/usermedia-enumeratedevices-permission-check is crashing
        https://bugs.webkit.org/show_bug.cgi?id=216727

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/glib/TestExpectations.json: Remove expectations

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

        Remove another function that implicitly uses the composed tree (documentOrder on nodes and boundary points)
        https://bugs.webkit.org/show_bug.cgi?id=218673

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp: Removed BoundaryPointOffsetZero and
        BoundaryPointOffsets tests, both replaced by a internals-based test.

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

        REGRESSION (r269435): [iOS Debug] ASSERTION FAILED: !m_impl || Thread::mayBeGCThread() || m_impl->wasConstructedOnMainThread() == isMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=218662

        Reviewed by Chris Dumez.

        We were missing a few WebThreadLock calls, which changes the return value of isMainThread() in UIWebView.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLNoCrashOnOtherThreadAccess.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm:
        (TestWebKitAPI::TEST):

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

        [ews] Speed up ews status bubble loading speed
        https://bugs.webkit.org/show_bug.cgi?id=214821

        Reviewed by Jonathan Bedard.

        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): This significantly reduces the calculations done to estimate the position in queue. The position is queue
        is calculated based on patches sent to buildbot in last DAYS_TO_CHECK days, and results received from buildbot. However, in
        case any queue has a huge backlog (of more than 1 day), the position in queue might not be accurate. Slight trade-off for 
        speed vs accuracy.

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

        Add new display list item types in preparation for webkit.org/b/218426
        https://bugs.webkit.org/show_bug.cgi?id=218588

        Reviewed by Simon Fraser.

        Adjust an API test. See other ChangeLogs for more detail.

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

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

        [Concurrent display lists] Add API tests for WebCore::DisplayList::DisplayList and related classes
        https://bugs.webkit.org/show_bug.cgi?id=218425

        Reviewed by Tim Horton.

        Add two new API tests:
        -   One that covers basic display list functionality (i.e. appending items, checking whether a display list is
            empty, clearing a display list and iterating over items).
        -   Another that exercises the item buffer client hooks to provide data for writing and encode and decode out-
            of-line display list items. This test uses toy Reader/Writer classes that know how to "encode" and "decode"
            `StrokePath` items by storing and reading 8-byte indices into a shared `Vector<StrokePath>`.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp: Added.
        (TestWebKitAPI::createGradient):
        (TestWebKitAPI::createComplexPath):
        (TestWebKitAPI::TEST):

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

        [build.webkit.org] Use workerEnvironment instead of slaveEnvironment for new Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218656

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:

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

        Re-enable SharedArrayBuffer for JSC shell and Testers
        https://bugs.webkit.org/show_bug.cgi?id=212069

        Reviewed by Keith Miller.

        * Scripts/test262/Runner.pm:
        (getFeatureFlags):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):

2020-11-06  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r269486.

        Caused 50+ timeouts on Mac Debug WK2

        Reverted changeset:

        "[Cocoa] Inspector Extensions: Add _WKInspectorExtension and
        related plumbing"
        https://bugs.webkit.org/show_bug.cgi?id=217783
        https://trac.webkit.org/changeset/269486

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

        Do not allow pages to enter fullscreen while an exit fullscreen operation is ongoing.
        https://bugs.webkit.org/show_bug.cgi?id=218640
        <rdar://problem/70697738>

        Reviewed by Eric Carlson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::enterFullScreenForElement):
        (WTR::InjectedBundlePage::exitFullScreenForElement):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setEnterFullscreenForElementCallback):
        (WTR::TestRunner::callEnterFullscreenForElementCallback):
        (WTR::TestRunner::setExitFullscreenForElementCallback):
        (WTR::TestRunner::callExitFullscreenForElementCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2020-11-06  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak SDK] Update libmanette source URI to new location
        https://bugs.webkit.org/show_bug.cgi?id=218509

        Reviewed by Carlos Alberto Lopez Perez.

        * buildstream/elements/sdk/libmanette.bst: Update URI.

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

        REGRESSION(r268930): It broke the http server of run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=218643

        Reviewed by Jonathan Bedard.

        The http server was failing to start because it is executed in a
        subprocess and it can't find webkitpy.autoinstalled because the
        scripts dir is not in PYTHONPATH.

        Fix this and also add a check to ensure the http server is alive,
        and if not, then raise an error with the return code and outputs
        from the http server process.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver._find_http_server_port):

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

        webkitpy: Add a --no-comment switch to webkit-patch land
        https://bugs.webkit.org/show_bug.cgi?id=218067

        Reviewed by Ryosuke Niwa.

        Add an optional --no-comment switch to webkit-patch land.
        This is useful when landing gardening, build-fixes or follow-up patches
        on a bug and you don't want the tool to automatically add a comment with
        the revision landed because you preffer to later add a comment manually.

        Note that it will still close the bug, if you don't want the bug to
        be closed you need to pass also --no-close.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.close_bug_as_fixed):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest._default_options):
        (test_land_no_close):
        * Scripts/webkitpy/tool/steps/closebugforlanddiff.py:
        (CloseBugForLandDiff.options):
        (CloseBugForLandDiff.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

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

        PCM: Switch to JSON report format
        https://bugs.webkit.org/show_bug.cgi?id=218634
        <rdar://problem/70469923>

        Reviewed by Brent Fulgham.

        The standards conversation has landed in attribution reports in a JSON
        format as opposed to the currently implemented URL format. Discussion
        here: https://github.com/privacycg/private-click-measurement/issues/30

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

2020-11-05  Brian Burg  <bburg@apple.com>

        [Cocoa] Inspector Extensions: Add _WKInspectorExtension and related plumbing
        https://bugs.webkit.org/show_bug.cgi?id=217783
        <rdar://problem/69968787>

        Reviewed by Devin Rousso.

        Add API tests to exercise new methods of the _WKInspectorExtensionHost protocol.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: New test file.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionHost.mm: Added.
        (resetGlobalState):
        (-[UIDelegateForTestingInspectorExtensionHost _webView:didAttachLocalInspector:]):
        (TEST):

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

        [build.webkit.org] Rename BUILD_WEBKIT_URL to CURRENT_HOSTNAME
        https://bugs.webkit.org/show_bug.cgi?id=218629

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:

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

        [ews] Patch which break layout-test shouldn't cause infinite RETRY loop
        https://bugs.webkit.org/show_bug.cgi?id=218618

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests.evaluateResult): Do not retry when layout-tests fail with exit code 254. Instead fail the build-step, which
        will trigger re-run and run-layout-tests-without-patch steps.
        (RunWebKitTestsWithoutPatch.evaluateCommand): Set clean_tree_run_status build property.
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeLayoutTestsResults.start): If clean tree run passes, mark the build as failure.
        * CISupport/ews-build/steps_unittest.py: Added/updated unit-tests.

2020-11-05  Patrick Angle  <pangle@apple.com>

        Change my (Patrick Angle's) status to committer.

        Unreviewed, updating contributors.json for myself.

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

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

        [GTK] Test /webkit/WebKitWebsiteData/configuration is flaky
        https://bugs.webkit.org/show_bug.cgi?id=205441

        Reviewed by Carlos Garcia Campos.

        Checking the last 200 runs of gtk-release in the bots, the original
        error from the report does not appear, but other flakies happened
        related to checking if some directories were created (namely
        indexeddb, service-workers and dom-cache). As they are created
        asynchronously or lazily (i.e. requiring some operation to happen).
        This could be seen in the WPE bots, not covered by the original
        expectation, and also reproduced locally by running the test case
        alone.

        This commit adds some steps/wait time before each of these to make
        sure the directories are created properly.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataConfiguration): Add required steps before checking
        directories
        * TestWebKitAPI/glib/TestExpectations.json: Remove expectation

2020-11-05  Angelos Oikonomopoulos  <angelos@igalia.com>

        Test that skip_validation is effective
        https://bugs.webkit.org/show_bug.cgi?id=218611

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps_unittest.py:

2020-11-05  Angelos Oikonomopoulos  <angelos@igalia.com>

        Test that TransferToS3 is skipped properly
        https://bugs.webkit.org/show_bug.cgi?id=218610

        Reviewed by Aakash Jain.

        I.e. when not running on steps.EWS_BUILD_HOSTNAME.

        * CISupport/ews-build/steps_unittest.py:

2020-11-05  Angelos Oikonomopoulos  <angelos@igalia.com>

        Don't mark TransferToS3 as failed if it was skipped
        https://bugs.webkit.org/show_bug.cgi?id=218606

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (TransferToS3.getResultSummary):

2020-11-05  Rob Buis  <rbuis@igalia.com>

        Update my information in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=218608

        Reviewed by Carlos Garcia Campos.

        Update my information in contributors.json to change the autocomplete email address to be Igalia.

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

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

        [webkitscmpy] Add checkout command
        https://bugs.webkit.org/show_bug.cgi?id=218360
        <rdar://problem/70828312>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.checkout): Checkout repository to specified commit, branch or tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.checkout): Checkout repository to specified commit, branch or tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.checkout): Checkout repository to specified commit, branch or tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add concept of HEAD commit, mock `git checkout` command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__): Add concept of HEAD commit, mock `svn up -r *`.
        (Svn.branch): The HEAD's branch is the current branch.
        (Svn.find): Use the HEAD of the repository as the default.
        (Svn.up): Change the repository's HEAD.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py:
        (Checkout): Checkout repository to specified commit.
        (main): Add Checkout subcommand.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/checkout_unittest.py: Added.
        (TestCheckout):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit):
        (TestGit.test_checkout):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn):
        (TestSvn.test_checkout):

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

        [build.webkit.org] remove unnecessary code from loadConfig
        https://bugs.webkit.org/show_bug.cgi?id=218582

        Reviewed by Dewei Zhu.

        * CISupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Also renamed variables to be consistent with EWS counterpart.
        * CISupport/build-webkit-org/loadConfig.py:
        (loadBuilderConfig):

2020-11-04  Aditya Keerthi  <akeerthi@apple.com>

        [Contact Picker API] Add support for picker UI on iOS
        https://bugs.webkit.org/show_bug.cgi?id=218189
        <rdar://problem/69862277>

        Reviewed by Devin Rousso.

        Added UIScriptController hooks to observe the presentation and
        dismissal of a contact picker. Furthermore, the
        dismissContactPickerWithContacts method was added to allow tests to
        dismiss the presented contact picker with a set of selected contacts.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::isShowingContactPicker const):
        (WTR::UIScriptController::dismissContactPickerWithContacts):
        * TestRunnerShared/UIScriptContext/UIScriptControllerShared.cpp:
        (WTR::UIScriptController::setDidShowContactPickerCallback):
        (WTR::UIScriptController::didShowContactPickerCallback const):
        (WTR::UIScriptController::setDidHideContactPickerCallback):
        (WTR::UIScriptController::didHideContactPickerCallback const):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView resetInteractionCallbacks]):
        (-[TestRunnerWKWebView _didPresentContactPicker]):
        (-[TestRunnerWKWebView _didDismissContactPicker]):
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setDidShowContactPickerCallback):
        (WTR::UIScriptControllerCocoa::setDidHideContactPickerCallback):
        (WTR::UIScriptControllerCocoa::isShowingContactPicker const):
        (WTR::UIScriptControllerCocoa::dismissContactPickerWithContacts):

2020-11-04  Angelos Oikonomopoulos  <angelos@igalia.com>

        Conditionally disable the patch validation step
        https://bugs.webkit.org/show_bug.cgi?id=218441

        Reviewed by Aakash Jain.

        This makes it easy to submit an arbitrary patch (i.e. one that doesn't
        appear on bugzilla) for an EWS run. Useful for non-interactive testing.

        Note that the skip_validation parameter can only be supplied by
        ews-app, so patches cannot skip the validation step in the
        production EWS deployment.

        * CISupport/ews-build/steps.py:
        (ValidatePatch.doStepIf):

2020-11-04  Sam Weinig  <weinig@apple.com>

        Remove support for experimental: and internal: prefixes from WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=218569

        Reviewed by Tim Horton.

        The prefixes were removed from use in tests in r269360.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::webViewIsCompatibleWithOptions const):
        Replace duplicated comparison code with call to operator==.

        * TestRunnerShared/TestFeatures.cpp:
        (WTR::merge):
        Remove special maps for internal and experimental features.

        (WTR::operator==):
        (WTR::operator!=):
        Add operator== support for use by TestOptions in determining compatibility.

        (WTR::parseTestHeaderFeature):
        (WTR::parseTestHeader):
        Split out feature parsing for future use in command line parsing.

        * TestRunnerShared/TestFeatures.h:
        Remove special maps for internal and experimental features.

        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionAcceleratedDrawing):
        (WTR::handleOptionRemoteLayerTree):
        (WTR::handleOptionShowWebView):
        (WTR::handleOptionShowTouches):
        (WTR::parseFeature):
        (WTR::handleOptionExperimentalFeature):
        (WTR::handleOptionInternalFeature):
        * WebKitTestRunner/Options.h:
        Rather than parsing into bools / extra maps, parse the command line options
        directly into a TestFeatures.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Initialize global features from the new Options' TestFeatures. 

        (WTR::TestController::resetPreferencesToConsistentValues):
        Remove special casing for experimental and internal features, they are now just
        generic bool WebPreferences. Move special cases for internal features into TestOptions.

        (WTR::TestController::testOptionsForTest const):
        Now that global features is not seeded with the default features, construct the
        full merge chain starting with the default features instead.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Add some additional defaults moved from TestController::resetPreferencesToConsistentValues.

        (WTR::TestOptions::hasSameInitializationOptions const):
        Use operator== to reduce duplicated code.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::experimentalFeatures const): Deleted.
        (WTR::TestOptions::internalDebugFeatures const): Deleted.
        Remove now unused extra maps for external and internal features.

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

        WebKit should remove unused debug variant support
        <https://webkit.org/b/218315>
        <rdar://problem/70785369>

        Reviewed by Darin Adler.

        Remove support for building the debug variant since it is
        currently unused. We now set default values for the
        DEAD_CODE_STRIPPING, DEBUG_DEFINES, GCC_OPTIMIZATION_LEVEL and
        STRIP_INSTALLED_PRODUCT variables.

        Also move these values out of the Xcode project into
        Base.xcconfig files using the [config=Debug] specifier so that
        these overrides are next to the definitions.

        Additional changes in behavior are noted below.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/ContentExtensionTester.xcodeproj/project.pbxproj:

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        - Remove unneeded Xcode variables that have no effect or are
          already set in xcconfig files.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:

        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        - Remove redundant PRODUCT_NAME which is defined in
          ImageDiff.xcconfig.
        - Let Xcode have its way with the project file.
        * ImageDiff/cg/Configurations/Base.xcconfig:

        * Scripts/check-for-exit-time-destructors:
        * Scripts/check-for-global-initializers:
        - Switch to use BUILD_VARIANTS instead of CURRENT_VARIANT. Xcode
          only invokes build phase scripts once (even when multiple
          variants are defined for a build), and it always sets
          CURRENT_VARIANT=normal, so using BUILD_VARIANTS is more
          accurate.
        - Add FIXME about building with multiple variants. These scripts
          are only used in engineering builds, which are only ever built
          with BUILD_VARIANTS=normal, so there is no urgency to handle
          multiple variants here.

        * Scripts/check-for-inappropriate-objc-class-names:
        * Scripts/check-for-weak-vtables-and-externals:
        - Remove unused $variants variable.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/lldbWebKitTester.xcconfig:
        * lldb/lldbWebKitTester/lldbWebKitTester.xcodeproj/project.pbxproj:
        - Correctly define DEAD_CODE_STRIPPING, GCC_OPTIMIZATION_LEVEL
          and STRIP_INSTALLED_PRODUCT when buliding Debug configuration.

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

        Set up basic infrastructure for SpeechRecognition
        https://bugs.webkit.org/show_bug.cgi?id=218216
        <rdar://problem/70703788>

        Reviewed by Youenn Fablet.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

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

        [webkitscmpy] Populate parent branch for tags
        <rdar://problem/70998928>
        https://bugs.webkit.org/show_bug.cgi?id=218521

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Version bump.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.commit): Populate cache of commits when the canonical branch does not match
        the provided commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn):
        (TestSvn.test_tag_previous):

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

        Add test for cacheModelForMainBundle() in WebKitLegacy
        <https://webkit.org/b/217960>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add WebPreferencesTest.mm to project.
        * TestWebKitAPI/Tests/WebKitLegacy/cocoa/WebPreferencesTest.mm: Add.
        (TestWebKitAPI::TEST):
        - Add test for TestWebPreferencesCacheModelForMainBundle().

2020-11-03  Adam Roben  <aroben@apple.com>

        Add SwiftUI MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=218393

        Rubber-stamped by Tim Horton.

        Using WKWebView in SwiftUI is pretty cumbersome today. At a minimum,
        you need to wrap the WKWebView in a NS/UIViewRepresentable SwiftUI
        view, but to react to any state changes in the WKWebView (e.g.,
        -canGoBack changing from NO to YES) you need to bridge between
        WKWebView's KVO and SwiftUI's use of Combine publishers or
        ObservableObjects. Setting up WKWebView's various delegates has to
        happen down inside the NS/UIViewRepresentable's Coordinator object.
        And so on.

        There have been some attempts at this in the past, e.g.:

        https://medium.com/macoclock/how-to-use-webkit-webview-in-swiftui-4b944d04190a
        https://medium.com/@mdyamin/swiftui-mastering-webview-5790e686833e
        https://github.com/kylehickinson/SwiftUI-WebView

        Someday it would be nice to provide an idiomatic SwiftUI API for
        WebKit out of the box, like the new VideoPlayer API that wraps
        AVPlayer.

        This change provides a SwiftUI MiniBrowser implementation as well as a
        very preliminary SwiftUI wrapper for WKWebView, originally authored by
        James Savage. This only exposes a subset of the WKWebView API, and is
        definitely not production ready yet, but will give us a place to
        experiment with ways to make WebKit and SwiftUI work together better.

        Here's James's description of the API:

        > The initial version of this API is composed of two primary
        > components: `WebView` and `WebViewState`. `WebView` conforms to
        > `View`, and its usage is straight-forward. `WebViewState` is novel,
        > and may not survive to the final API. It exists as a read-write
        > handle on the rather large amount of state that a web view offers.
        > This includes read-only access to properties about the current
        > page (`title`, `url`, `hasOnlySecureContent`), navigations
        > (`estimatedProgress`, `isLoading`), and back/forward history
        > (`canGoBack`, `canGoForward`). It also offers imperative methods
        > for navigation which map 1:1 with our existing Objective-C API.
        >
        > struct BrowserView : View {
        >     @StateObject var state = WebViewState(initialURL: URL(string: "https://apple.com")!)
        >     var body: some View {
        >         HStack {
        >             Text(verbatim: state.title ?? "Nothing Loaded")
        >             Text(verbatim: state.url ?? "--")
        >             WebView(state: state)
        >         }
        >     }
        > }
        >
        > JavaScript dialogs are supported with both built-in behavior for all
        > clients, and a customization point if desired. Clients can pass a
        > `Binding<Dialog?>` to their `WebView` to disable the built-in
        > display, and provide custom handling.
        >
        > Navigation policies can be customized using
        > `webViewNavigationPolicy(onAction:onResponse:)` to provide custom
        > decider for the action and response phases. These propagate via the
        > environment, allowing them to be defined at an app, window, or
        > individual view level.
        >
        > Future Directions
        >
        > To make `WebView` as declarative as possible, we're investigating
        > how to make broader use of `Binding` for navigation. As a simple
        > example, you could imagine if the `WebView`'s initializer took a
        > `Binding<URL?>` for the current page. However, this design alone is
        > too simplistic to model all states that the web view could be, so we
        > will likely need to introduce a more complex type for the binding.
        >
        > Currently navigation policies are attached via `View` modifiers.
        > This has the benefit that they can be installed at the root of an
        > application, which is useful for a web browser where all tabs want
        > to have uniform policies. Given the number of customization points
        > in existing `WKWebView` delegates, this may fail to scale and lead
        > to undesirable ergonomics. Another approach would to be just use a
        > delegate protocol (a la DropDelegate:
        > https://developer.apple.com/documentation/swiftui/dropdelegate).
        >
        > As a practical matter, we want to minimize the amount of work that
        > adding new functionality to WebKit API incurs for engineers. While
        > we could redefine every Objective-C type for SwiftUI, but this could
        > lead to SwiftUI falling behind as our Objective-C API gets updated.
        > We could use tools like `@dynamicMemberLookup` to automatically pull
        > our Objective-C APIs over to Swift, however this could have
        > undesirable impact our our ABI. There may be a better compromise we
        > haven’t yet reached.

        * MiniBrowserSwiftUI/Configurations/Base.xcconfig:
        * MiniBrowserSwiftUI/Configurations/Debug.xcconfig:
        * MiniBrowserSwiftUI/Configurations/MiniBrowserSwiftUI.xcconfig:
        * MiniBrowserSwiftUI/Configurations/Release.xcconfig:
        * MiniBrowserSwiftUI/Configurations/WebKit_SwiftUI.xcconfig:
        * MiniBrowserSwiftUI/MiniBrowserSwiftUI.xcodeproj/project.pbxproj:
        * MiniBrowserSwiftUI/MiniBrowserSwiftUI.xcodeproj/xcshareddata/xcschemes/MiniBrowserSwiftUI.xcscheme:
        * MiniBrowserSwiftUI/MiniBrowserSwiftUI.xcodeproj/xcshareddata/xcschemes/_WebKit_SwiftUI.xcscheme:
        Added the new project and its configuration. The project was generated
        from Xcode's "Multiplatform App" template. There are two targets: the
        MiniBrowserSwiftUI app, and the _WebKit_SwiftUI framework. Both are
        cross-platform. The build settings were extracted out of the .pbxproj
        into the .xcconfig files.

        * MiniBrowserSwiftUI/Shared/Assets.xcassets/AccentColor.colorset/Contents.json:
        * MiniBrowserSwiftUI/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json:
        * MiniBrowserSwiftUI/Shared/Assets.xcassets/Contents.json:
        * MiniBrowserSwiftUI/Shared/Assets.xcassets/URLFieldBackground.colorset/Contents.json:
        Defines a couple of colors and an empty icon for the app.

        * MiniBrowserSwiftUI/iOS/Info.plist:
        * MiniBrowserSwiftUI/macOS/Info.plist:
        * MiniBrowserSwiftUI/macOS/macOS.entitlements:
        * MiniBrowserSwiftUI/WebKit_SwiftUI/WebKit_SwiftUI-Info.plist: Added.
        Added these files generated by Xcode. The only change was adding
        com.apple.security.network.client to the entitlements so the browser
        can connect to servers.

        * MiniBrowserSwiftUI/Shared/BrowserApp.swift: Added. This is the entry
        point of the app, and just sets up a BrowserScene.

        * MiniBrowserSwiftUI/Shared/BrowserScene.swift: Added. This sets up
        the browser's windows, each of which just contain a single BrowserTab.
        On iOS we wrap the BrowserTab in a NavigationView so there will be
        somewhere to show our toolbar buttons.

        * MiniBrowserSwiftUI/Shared/BrowserTab.swift: Added. This is the heart
        of the browser.
        (BrowserTab.body): Sets up the WebView itself plus some toolbar items:
        the back/forward buttons and URL field.
        (BrowserTab.onNavigate(to:)): Callback called when the user presses
        Return in the URL field.
        (BrowserTab.decidePolicy(for:state:)): Callback called when the
        WebView is about to navigate, similar to WKNavigationDelegate's
        -webView:decidePolicyForNavigationAction:decisionHandler:.
        (BrowserTab.makeExternalNavigationAlert(_:)): Displays an alert to let
        the user decide whether to follow a URL that will open in some other
        application.
        (UserInput): Represents text typed in the URL field after determining
        whether it is a URL or a search query.
        (ExternalURLNavigation): Provides the data for the external navigation
        alert.
        (BrowserTab_Previews): Shows a canned BrowserTab in Xcode's preview
        canvas.

        * MiniBrowserSwiftUI/Shared/FoundationExtras.swift: Added. Provides a
        few utility functions for URLs.

        * MiniBrowserSwiftUI/Shared/URLField.swift: Added.
        (URLField): The SwiftUI view you use directly. It contains a leading
        glyph (e.g., a lock icon when viewing a secure page), a text field,
        a trailing accessory view provided by the caller, and a progress bar.
        It also supports callbacks to notify the caller when the text field
        gains/loses focus and when the user has committed the text in the
        field (e.g., by pressing Return).
        (Background): The background view for the URLField, which defines both
        the rounded rectangle shape for the field and the progress bar.
        (URLField_Previews): Shows some canned URLFields in Xcode's preview
        canvas.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/Dialog.swift: Added.
        (Dialog): Represents a single JavaScript dialog (alert, confirm, or
        prompt).
        (DialogContainer): Provides the default UI shared by all JavaScript
        dialog types.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/JavaScriptDialogs.swift: Added.
        (JavaScriptAlert): Default UI for a JavaScript alert dialog.
        (JavaScriptConfirm): Default UI for a JavaScript confirm dialog.
        (JavaScriptPrompt): Default UI for a JavaScript prompt dialog.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/Navigation.swift: Added.
        (View.webViewNavigationPolicy(onAction:)):
        (View.webViewNavigationPolicy(onResponse:)):
        (View.webViewNavigationPolicy(onAction:onResponse:)):
        These let the application specify navigation policy logic for any
        descendant WebViews in the view hierarchy, using SwiftUI's Environment
        facility.
        (NavigationAction): Idiomatic SwiftUI wrapper around
        WKNavigationAction and its decision handler callback.
        (NavigationResponse): Idiomatic SwiftUI wrapper around
        WKNavigationResponse and its decision handler callback.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/SwiftUIExtras.swift: Added.
        (Color.platformSeparator):
        (Color.platformBackground):
        Cross-platform wrappers around platform-specific colors.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/WebView.swift: Added.
        (WebView): The heart of the SwiftUI API. You provide it a WebViewState
        struct to represent and control its state (similar to AVFoundation's
        VideoPlayer view controlled by AVPlayer). You can optionally provide a
        Binding to be notified of the current JavaScript dialog that the web
        content wishes to display. If you don't provide this binding, WebView
        will present the dialog using default UI.
        (WebView.dialogView): Configures the default dialog UI if the caller
        doesn't want to handle dialogs on its own.
        (_WebView): Internal view that bridges SwiftUI to WKWebView.
        (Coordinator): Internal class that functions as the WKWebView's
        WKNavigationDelegate and WKUIDelegate.
        (Coordinator.webView(_:decidePolicyFor:preferences:decisionHandler:)):
        Looks for a navigation decider in the view's environment and delegates
        to it if found, otherwise allows all navigations.

        (Coordinator.webView(_:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:)):
        (Coordinator.webView(_:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:)):
        (Coordinator.webView(_:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:)):
        Passes the dialog information up to the WebView, which then decides
        whether to present default UI itself or let the caller handle it.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/WebViewModifiers.swift: Added.
        (View.webViewAllowsBackForwardNavigationGestures(_:)): Specifies
        whether WebViews below this point in the view hierarchy should support
        swipe gestures to navigate back/forward.

        * MiniBrowserSwiftUI/WebKit_SwiftUI/WebViewState.swift: Added.
        (WebViewState): Represents the state and actions of a WebView.
        Conforms to ObservableObject so SwiftUI views can react to changes in
        the WebViewState.
        (WebViewState.webView(_:didChangeKeyPath:)): Detects when the
        WKWebView's state has changed via KVO and reflects those through the
        ObservableObject.objectWillChange mechanism so SwiftUI views will be
        updated.

        (WebViewState.canGoBack):
        (WebViewState.canGoForward):
        (WebViewState.title):
        (WebViewState.url):
        (WebViewState.isLoading):
        (WebViewState.estimatedProgress):
        (WebViewState.hasOnlySecureContent):
        Wrappers around WKWebView properties.

        (WebViewState.load(_:)):
        (WebViewState.goBack):
        (WebViewState.goForward):
        (WebViewState.reload):
        (WebViewState.stopLoading):
        (WebViewState.createPDF(configuration:completion:)):
        Wrappers around WKWebView methods.

2020-11-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        WebKitTestRunner --show-webview doesn't work since r268238
        https://bugs.webkit.org/show_bug.cgi?id=218430

        Reviewed by Simon Fraser.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Use insert_or_assign() of
        std::unordered_map instead of insert() which does nothing if the
        key already exists.

2020-11-03  Keith Rollin  <krollin@apple.com>

        Extend check-for-inappropriate-files-in-framework to WebKitLegacy and JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=218272
        <rdar://problem/70748116>

        Reviewed by Simon Fraser.

        Bug 218268 reports that some *.txt files got included in WebKitLegacy.
        To help protect against this happening in the future, extend
        check-for-inappropriate-files-in-framework to check for *.txt files,
        and apply the script to WebKitLegacy and JavaScriptCore in addition to
        WebCore and WebKit.

        * Scripts/check-for-inappropriate-files-in-framework:

2020-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: increase default window size
        https://bugs.webkit.org/show_bug.cgi?id=218513

        Reviewed by Adrian Perez de Castro.

        Because 800x600 is to small nowadays. Use 1024x768 instead.

        * MiniBrowser/gtk/BrowserWindow.c:

2020-11-03  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Cannot remove individual scripts/stylesheets using WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=218403

        Reviewed by Carlos Garcia Campos.

        Add the missing WebKitUserContentManager functions which allow
        removing a single script and style sheet from the manager. Given
        that it is possible to remove a single content filter and message
        handlers already, this make the API orthogonal for scripts and style
        sheets as well.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testUserContentManagerInjectedStyleSheet): Add test for
        webkit_user_content_manager_remove_style_sheet().
        (testUserContentManagerInjectedScript): Add test for
        webkit_user_content_manager_remove_script().

2020-11-02  Sam Weinig  <weinig@apple.com>

        Sort/cleanup preferences in resetWebPreferencesToConsistentValues
        https://bugs.webkit.org/show_bug.cgi?id=218467

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        Sort things.

2020-11-02  Sam Weinig  <weinig@apple.com>

        [Testing] Match WebKitTestRunner and enable all "experimental" features in DumpRenderTree (cocoa)
        https://bugs.webkit.org/show_bug.cgi?id=218447

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add missing file, TestOptionsGeneratedWebKitLegacyKeyMapping.cpp.erb.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (enableExperimentalFeatures): Deleted.
        Match WebKitTestRunner and enable all experimental features by default. Disable a few of them to 
        keep the current behavior, but added FIXME to figure out why they are exposed but not enabled. Also 
        ensure a few preferences that are not experimental features, but were in the enableExperimentalFeatures
        function remain set.

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

        Sort Xcode project file

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2020-11-02  Aakash Jain  <aakash_jain@apple.com>

        Only upload to S3 when running on ews-build.webkit.org (follow-up fix for unit-test).
        https://bugs.webkit.org/show_bug.cgi?id=218439

        Unreviewed follow-up fix.

        * CISupport/ews-build/steps_unittest.py: Set CURRENT_HOSTNAME to EWS_BUILD_HOSTNAME during TestTransferToS3 unit-tests,
        restore it in tearDown so that it doesn't affect any other unit-test.

2020-11-01  Darin Adler  <darin@apple.com>

        Start removing functions that implicitly use composed tree
        https://bugs.webkit.org/show_bug.cgi?id=218424

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp: Moved the tests of documentOrder
        for two nodes and contains for range/range or range/node into internals-based tests
        in the LayoutTests directory. Eventually we'll move the rest of these tests, too.

2020-11-02  Angelos Oikonomopoulos  <angelos@igalia.com>

        Don't fail the build on S3 upload failure
        https://bugs.webkit.org/show_bug.cgi?id=218438

        Reviewed by Aakash Jain.

        This allows buildbots to keep going even when S3 is down. Using
        S3 is not strictly necessary, as the built product can also be
        downloaded from the buildbot server.

        Patch-by: aakash_jain@apple.com

        * CISupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand):
        (TransferToS3):
        (TransferToS3.finished):

2020-11-02  Angelos Oikonomopoulos  <angelos@igalia.com>

        Only upload to S3 when running on ews-build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=218439

        Reviewed by Aakash Jain.

        Uploading to S3 is inconvenient for testing instances, so only run this
        step if we're executing on ews-build.webkit.org. Otherwise, transfer the
        file through the buildbot server.

        Patch-by: aakash_jain@apple.com

        * CISupport/ews-build/steps.py:
        (TransferToS3.doStepIf):

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

        Remove remaining alternative preference setting mechanisms from LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=218417

        Reviewed by Simon Fraser.

        Remove various one off solutions for setting preferences in WebKitTestRunner and DumpRenderTree
        keeping only test header commands (which can be set without JS and can be in place before the 
        inital load) and internals.settings, which can be used when dynamic changing is required.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::supportedUInt32WebPreferenceFeatures):
        (WTR::TestOptions::defaults):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestRunner.cpp:
        (setPagePausedCallback):
        (TestRunner::staticFunctions):
        (setAuthorAndUserStylesEnabledCallback): Deleted.
        (setJavaScriptCanAccessClipboardCallback): Deleted.
        (setXSSAuditorEnabledCallback): Deleted.
        (setAllowUniversalAccessFromFileURLsCallback): Deleted.
        (setAllowFileAccessFromFileURLsCallback): Deleted.
        (setNeedsStorageAccessFromFileURLsQuirkCallback): Deleted.
        (setTelephoneNumberParsingEnabledCallback): Deleted.
        (setPopupBlockingEnabledCallback): Deleted.
        (setPluginsEnabledCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        (webPreferenceFeatureValue):
        (setWebPreferencesForTestOptions):
        (runTest):
        (boolWebPreferenceFeatureValue): Deleted.
        (shouldEnableDeveloperExtras): Deleted.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setAuthorAndUserStylesEnabled): Deleted.
        (TestRunner::setXSSAuditorEnabled): Deleted.
        (TestRunner::setAllowUniversalAccessFromFileURLs): Deleted.
        (TestRunner::setAllowFileAccessFromFileURLs): Deleted.
        (TestRunner::setNeedsStorageAccessFromFileURLsQuirk): Deleted.
        (TestRunner::setPopupBlockingEnabled): Deleted.
        (TestRunner::setPluginsEnabled): Deleted.
        (TestRunner::setJavaScriptCanAccessClipboard): Deleted.
        (TestRunner::setTelephoneNumberParsingEnabled): Deleted.
        (TestRunner::setDeveloperExtrasEnabled): Deleted.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        (webPreferenceFeatureValue):
        (setWebPreferencesForTestOptions):
        (runTest):
        (shouldEnableDeveloperExtras): Deleted.
        (boolWebPreferenceFeatureValue): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setAuthorAndUserStylesEnabled): Deleted.
        (TestRunner::setXSSAuditorEnabled): Deleted.
        (TestRunner::setAllowUniversalAccessFromFileURLs): Deleted.
        (TestRunner::setAllowFileAccessFromFileURLs): Deleted.
        (TestRunner::setNeedsStorageAccessFromFileURLsQuirk): Deleted.
        (TestRunner::setPopupBlockingEnabled): Deleted.
        (TestRunner::setPluginsEnabled): Deleted.
        (TestRunner::setJavaScriptCanAccessClipboard): Deleted.
        (TestRunner::setDeveloperExtrasEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::overridePreference): Deleted.
        (WTR::TestRunner::setXSSAuditorEnabled): Deleted.
        (WTR::TestRunner::setMediaDevicesEnabled): Deleted.
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled): Deleted.
        (WTR::TestRunner::setWebAPIStatisticsEnabled): Deleted.
        (WTR::TestRunner::setModernMediaControlsEnabled): Deleted.
        (WTR::TestRunner::setWebGL2Enabled): Deleted.
        (WTR::TestRunner::setWritableStreamAPIEnabled): Deleted.
        (WTR::TestRunner::setTransformStreamAPIEnabled): Deleted.
        (WTR::TestRunner::setReadableByteStreamAPIEnabled): Deleted.
        (WTR::TestRunner::setEncryptedMediaAPIEnabled): Deleted.
        (WTR::TestRunner::setPictureInPictureAPIEnabled): Deleted.
        (WTR::TestRunner::setGenericCueAPIEnabled): Deleted.
        (WTR::TestRunner::setAllowUniversalAccessFromFileURLs): Deleted.
        (WTR::TestRunner::setAllowFileAccessFromFileURLs): Deleted.
        (WTR::TestRunner::setNeedsStorageAccessFromFileURLsQuirk): Deleted.
        (WTR::TestRunner::setPluginsEnabled): Deleted.
        (WTR::TestRunner::setJavaScriptCanAccessClipboard): Deleted.
        (WTR::TestRunner::setPopupBlockingEnabled): Deleted.
        (WTR::TestRunner::setAuthorAndUserStylesEnabled): Deleted.
        (WTR::TestRunner::setOffscreenCanvasEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2020-10-31  Sam Weinig  <weinig@apple.com>

        Remove all remaining testRunner.overridePreference calls
        https://bugs.webkit.org/show_bug.cgi?id=218373

        Reviewed by Simon Fraser.

        Remove implementations of testRunner.overridePreference. Adds testRunner.setShouldInvertColors,
        which is a windows only preference. When we generate preferences for Windows, we can convert
        this to use test header commands instead.
        
        Also add default for MinimumFontSize so it can be used as test header commands for DumpRenderTree.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * DumpRenderTree/TestRunner.cpp:
        (setShouldInvertColors):
        (TestRunner::staticFunctions):
        (overridePreferenceCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::overridePreference): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setShouldInvertColors):
        (TestRunner::overridePreference): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::toBool): Deleted.
        (WTR::TestRunner::overridePreference): Deleted.

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

        [webkitpy] Use allowlist and blocklist
        https://bugs.webkit.org/show_bug.cgi?id=217985
        <rdar://problem/70499499>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/pylintrc:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_namespace_indentation):
        * Scripts/webkitpy/w3c/common.py:
        (is_basename_skipped):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.setup_gstbuild):

2020-10-30  Lauro Moura  <lmoura@igalia.com>

        webkitpy: Sync package versions with WPT suite
        https://bugs.webkit.org/show_bug.cgi?id=217826
        <rdar://problem/70619091>

        Reviewed by Carlos Garcia Campos.

        Sync most packages. funcsics is already imported with a newer version
        in webkitcorepy.

        * Scripts/webkitpy/__init__.py:

2020-10-30  Martin Robinson  <mrobinson@igalia.com>

        Re-add Martin Robinson as a committer
        https://bugs.webkit.org/show_bug.cgi?id=218376

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/common/config/contributors.json: Updated with new status.

2020-10-29  Sam Weinig  <weinig@apple.com>

        Remove all remaining boolean overridePreference calls
        https://bugs.webkit.org/show_bug.cgi?id=218355

        Reviewed by Darin Adler.
        
        Add a few more defaults for DumpRenderTree to allow them to be
        used as test header commands.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2020-10-29  Aditya Keerthi  <akeerthi@apple.com>

        [Cocoa] Remove soft linking of NetworkExtension.framework
        https://bugs.webkit.org/show_bug.cgi?id=218314
        <rdar://problem/70785239>

        Reviewed by Andy Estes.

        Updated a test to reflect that NetworkExtension.framework is no longer
        loaded at runtime. This test was failing on Catalina after r269109,
        as the Contacts framework was loading NetworkExtension.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.h:
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFilteringPlugIn.mm:
        (-[ContentFilteringPlugIn checkIfPlatformFrameworksAreLoaded:]):

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

        Regression(PSON): Back/forward navigation may hang
        https://bugs.webkit.org/show_bug.cgi?id=216611
        <rdar://problem/68992714>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Unreviewed, reverting r268192.

        PLT regression - rdar://problem/70141350

        Reverted changeset:

        "Adjust heuristic for checking whether view reaches visually
        non-empty state"
        https://bugs.webkit.org/show_bug.cgi?id=217400
        https://trac.webkit.org/changeset/268192

2020-10-29  Sam Weinig  <weinig@apple.com>

        [Testing] Remove requirement of adding new SPI for each preference that needs testing (WebKitLegacy Windows)
        https://bugs.webkit.org/show_bug.cgi?id=218291

        Reviewed by Brent Fulgham.

        Adopt set*PreferenceForTesting functions to match DumpRenderTree for cocoa platforms, and
        make it so that only TestOptions.cpp needs to be touched to add support for new preference
        in tests.
        
        Also adds some helpers to convert between string types and use RetainPtr in a few more places.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (toUTF8):
        (toBSTR):
        (resetWebPreferencesToConsistentValues):
        (boolWebPreferenceFeatureValue):
        (setWebPreferencesForTestOptions):
        (runTest):

2020-10-28  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] loadConfig unittest fail depending on locally installed version of buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218234

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/loadConfig_unittest.py:

2020-10-28  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Use -q and -o while unzipping layout-test-results.zip
        https://bugs.webkit.org/show_bug.cgi?id=218230

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.start):

2020-10-28  Aakash Jain  <aakash_jain@apple.com>

        Rename build.webkit.org-config directory to build-webkit-org
        https://bugs.webkit.org/show_bug.cgi?id=218302

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org: Copied from Tools/CISupport/build.webkit.org-config.
        * CISupport/build-webkit-org/htdigestparser_unittest.py:
        * CISupport/build-webkit-org/public_html/TestFailures/scripts/builders_unittests.js:
        * CISupport/build-webkit-org/steps.py:
        * CISupport/build-webkit-org/steps_unittest.py:
        * CISupport/build-webkit-org/wkbuild.py:
        * CISupport/build-webkit-org/wkbuild_unittest.py:
        * CISupport/build.webkit.org-config: Removed.
        * CISupport/ews-build/steps.py:
        * CISupport/ews-build/steps_unittest.py:
        * Scripts/run-dashboard-tests:
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:

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

        [webkitscmpy] Support finding commit by tag
        https://bugs.webkit.org/show_bug.cgi?id=218212
        <rdar://problem/70700121>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Find a commit referred to by a provided tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.find): Find a commit by tag, if applicable.
        (Scm.commit):
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.info): Pull information by tag, support non-standard branches.
        (Svn._cache_revisions): Support non-standard branches.
        (Svn._branch_for): Return the non-standard branch name for tags.
        (Svn.commit): Find a commit referred to by a provided tag.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): Support tags.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__): Support tags.
        (Svn.tags): Tags are simply specialized branches, return the names of those tags
        based on the commit mapping.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit):
        (TestGit.test_tag):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn):
        (TestSvn.test_tag):

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

        [webkitflaskpy] Create shared library for WebKit's flask tooling
        https://bugs.webkit.org/show_bug.cgi?id=218257
        <rdar://problem/70736269>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py:
        (_maybe_add_webkit_python_library_paths): Add webkitcorepy and webkitflaskpy.
        (_maybe_add_webkitcorepy_path): Renamed _maybe_add_webkit_python_library_paths.
        * Scripts/libraries/resultsdbpy/resultsdbpy/flask_support/util.py: Moved to webkitflaskpy/util.py.
        * Scripts/libraries/resultsdbpy/resultsdbpy/flask_support/util_unittest.py: Moved to webkitflaskpy/util_unittest.py.
        * Scripts/libraries/webkitflaskpy: Added.
        * Scripts/libraries/webkitflaskpy/MANIFEST.in: Added.
        * Scripts/libraries/webkitflaskpy/README.md: Added.
        * Scripts/libraries/webkitflaskpy/setup.py: Added.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy: Added.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py: Added.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/util.py: Moved from resultsdpy/flask_support/util.py.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/util_unittest.py: Moved from resultsdpy/flask_support/util_unittest.py.
        * Scripts/webkitpy/test/main.py:
        (main): Add

2020-10-28  Sam Weinig  <weinig@apple.com>

        Reduce Preference Override Methods: TabsToLinks/SpatialNavigation
        https://bugs.webkit.org/show_bug.cgi?id=218288

        Reviewed by Tim Horton.

        Replace uses of testRunner.overridePreference("WebKitTabToLinksPreferenceKey", ...) and
        testRunner.setSpatialNavigationEnabled(...) with test header commands, helping to reduce
        the number of different ways we have to override preferences in LayoutTests.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setSpatialNavigationEnabledCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setSpatialNavigationEnabled): Deleted.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setSpatialNavigationEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2020-10-28  Aakash Jain  <aakash_jain@apple.com>

        [ews] Ensure that uat instance doesn't send emails
        https://bugs.webkit.org/show_bug.cgi?id=218227

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/send_email.py:

2020-10-28  Sam Weinig  <weinig@apple.com>

        [Testing] Remove requirement of adding new SPI for each preference that needs testing
        https://bugs.webkit.org/show_bug.cgi?id=218267

        Reviewed by Simon Fraser.

        Removes the requirement for WebKitLegacy (macOS), which has already been lifted for
        modern WebKit, that testing new preferences requires new WebPreferences SPI. Instead,
        new testing specific SPI ([WebPreferences _set*PreferenceForTestingWithValue:forKey:])
        are used to allow string based setting.
        
        To make this work with the shared WebPreferences*.yaml names, a helper is generated to
        map from the shared name to the WebKitLegacy specific name.

        This still doesn't quite take us all the way to supporting any WebPreferences*.yaml name
        in test headers, as is supported in WebKitTestRunner, as we still need a viable mechanism
        to fully reset WebPreferences between tests. Right now, each preference must be set on
        each test run, requiring the complete set of preferences to be known up front.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:
        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/PreferencesTemplates/TestOptionsGeneratedWebKitLegacyKeyMapping.cpp.erb: Added.
        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::supportedBoolWebPreferenceFeatures):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::overridePreference):

2020-10-28  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Update Mesa and GTK4 dependencies
        https://bugs.webkit.org/show_bug.cgi?id=218281

        Reviewed by Carlos Alberto Lopez Perez.

        * buildstream/elements/flatpak/sdk.bst: Switch to app-debug-link as in the upstream FDO SDK.
        * buildstream/elements/freedesktop-sdk.bst: Bump junction ref.
        * buildstream/elements/sdk/mesa.bst: Update to 20.1.10 and add patch not present in stable release yet.
        * buildstream/patches/fdo-0001-pango-Bump-to-1.47.patch: Added.
        * buildstream/patches/mesa/0001-mesa-rename-_mesa_free_errors_data.patch: Removed.
        * buildstream/patches/mesa/0002-mesa-add-bool-param-to-_mesa_free_context_data.patch: Removed.
        * buildstream/patches/mesa/0003-mesa-st-release-debug_output-after-destroying-the-co.patch: Removed.
        * buildstream/patches/mesa/0004-mesa-clear-texture-s-views-when-texture-is-remove.patch: Added.

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

        [GTK4] Build broken with GTK 3.99.3
        https://bugs.webkit.org/show_bug.cgi?id=218270

        Reviewed by Carlos Garcia Campos.

        * buildstream/elements/sdk/gtk.bst: Bump GTK4 version to 3.99.4

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

        Use _CFURLConnectionSetFrameworkStubs for SecItemShim instead of DYLD_INTERPOSE on Apple Silicon Macs
        https://bugs.webkit.org/show_bug.cgi?id=218269
        <rdar://problem/70491533>

        Reviewed by Darin Adler.

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

2020-10-27  Sam Weinig  <weinig@apple.com>

        DumpRenderTree spams stderr with CFNetwork warnings about null diskcache path
        https://bugs.webkit.org/show_bug.cgi?id=218241

        Reviewed by Darin Adler.

        Remove attempt at using a memory only shared URL cache, as subsequent calls
        to [WebPreferences setCacheModel:] cause a disk cache to be used anyway. All
        this really seems to do is cause CFNetwork to log to stderr. It's unlikely
        this optimization is worthwhile anyway these days, as avoiding touching the
        filesystem is less necessary.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment):

2020-10-27  Brian Burg  <bburg@apple.com>

        [Cocoa] Introduce _WKInspectorConfiguration for customizing local and remote Web Inspectors
        https://bugs.webkit.org/show_bug.cgi?id=217896
        <rdar://problem/70355910>

        Reviewed by Devin Rousso.

        Add an API test for _WKInspectorConfiguration. Disabled for now, will
        be turned back on when more web extensions API has landed.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (-[SimpleURLSchemeHandler webView:startURLSchemeTask:]):
        (-[SimpleURLSchemeHandler webView:stopURLSchemeTask:]):
        (-[UIDelegate _webView:configurationForLocalInspector:]):
        (-[UIDelegate _webView:didAttachLocalInspector:]):
        (TEST):

2020-10-27  Keith Rollin  <krollin@apple.com>

        Update generate_xcfilelists to accommodate paths with symlinks
        https://bugs.webkit.org/show_bug.cgi?id=218223
        <rdar://problem/70709808>

        Reviewed by Timothy Hatcher.

        There are cases where file system paths are compared against each
        other, and where the comparisons are failing because one or the other
        (or both) make use of symlinks, causing paths that refer to the same
        location to fail to compare correctly. Address this by resolving path
        components that are symlinks.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (BaseGenerator):
        (BaseGenerator._unexpand):
        (BaseGenerator._unexpand._expand_if_abs):
        (BaseGenerator._unexpand._variations):
        (BaseGenerator._unexpand._variations._gen):
        (BaseGenerator._unexpand._try_unexpand):
        (BaseGenerator._unexpand._do_unexpand):

2020-10-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Don't disable MSE build support on Debian and Ubuntu LTS bots
        https://bugs.webkit.org/show_bug.cgi?id=218247

        Reviewed by Philippe Normand.

        The version of gstreamer on this bots (Ubuntu-18.04 and Debian 10)
        is now newer enough (1.14) to enable MSE support.

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

2020-10-27  Aakash Jain  <aakash_jain@apple.com>

        Rename BuildSlaveSupport to CISupport
        https://bugs.webkit.org/show_bug.cgi?id=218026

        Reviewed by Jonathan Bedard.

        * CISupport: Copied from Tools/BuildSlaveSupport.
        * CISupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * CISupport/build.webkit.org-config/steps.py:
        * CISupport/build.webkit.org-config/wkbuild.py:
        * CISupport/build.webkit.org-config/wkbuild_unittest.py:
        * CISupport/ews-app/ews/views/statusbubble.py:
        * CISupport/ews-build/steps.py:
        * CISupport/ews-build/steps_unittest.py:
        * BuildSlaveSupport: Replaced.
        * EWSTools/Start-Queue.ps1:
        * Scripts/bisect-builds:
        * Scripts/run-dashboard-tests:
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * .gitattributes:

2020-10-27  Sam Weinig  <weinig@apple.com>

        Rename WKPreferencesSet*ValueForKey SPI to WKPreferencesSet*ValueForKeyForTesting
        https://bugs.webkit.org/show_bug.cgi?id=218240

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Update for renamed function names.

2020-10-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Move step for generating the JSC bundle back to the release build bot
        https://bugs.webkit.org/show_bug.cgi?id=218207

        Reviewed by Adrian Perez de Castro.

        On r266208 I moved the step to generate the JSC bundle from the default
        GTK release build bot to the new bots for Ubuntu-20.04 packaging.

        But it seems the ICU version of Ubuntu-20.04 (66) is not new enough for
        testing some Intl features like Intl.ListFormat as JS Intl feature behaviors
        are derived from ICU versions.

        Move back this step to the GTK release build bot that runs with flatpak,
        so it bundles the version of ICU from the FreeDesktop SDK (67 currently)

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

2020-10-26  Federico Bucchi  <fbucchi@apple.com>

        Add Federico Bucchi to list of WebKit contributors
        https://bugs.webkit.org/show_bug.cgi?id=218136

        - Added Federico Bucchi
        - Removed "slackId" : "UTWC5TTSP", because it was causing:
        ERROR: Tools/Scripts/webkitpy/common/config/contributors.json:0:  contributors.json differs from the canonical format.

        Reviewed by Brian Burg.

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

2020-10-26  Aakash Jain  <aakash_jain@apple.com>

        Allow skipping specific files from report-non-inclusive-language
        https://bugs.webkit.org/show_bug.cgi?id=218199

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language:

2020-10-26  Matt Lewis  <jlewis3@apple.com>

        Webkitscmpy has missing / in scm executable candidate list.
        https://bugs.webkit.org/show_bug.cgi?id=218166

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Version Bump
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.executable):

2020-10-26  Youenn Fablet  <youenn@apple.com>

        W3C test importer should not import manual HTTPS tests
        https://bugs.webkit.org/show_bug.cgi?id=217944

        Reviewed by Jonathan Bedard.

        Uodate manual test detection heuristic to simply search for '-manual.'.

        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.is_wpt_manualtest):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2020-10-26  Zan Dobersek  <zdobersek@igalia.com>

        Remove Accelerated2dCanvasEnabled WebPreferences entry
        https://bugs.webkit.org/show_bug.cgi?id=218114

        Reviewed by Adrian Perez de Castro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Adjust the test case to properly evaluate the
        deprecated no-op behavior.

2020-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should expose ArrayBuffer for an unknown decoded argument
        https://bugs.webkit.org/show_bug.cgi?id=218113

        Reviewed by Darin Adler.

        Updated a test case to check that the unknown type produces an ArrayBuffer.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (IPCTestingAPI.CanInterceptAlert):

2020-10-22  Darin Adler  <darin@apple.com>

        REGRESSION(r266295): DOMSelection's addRange and containsNode behave incorrectly when selection crosses shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=218007

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp: Disabled the isPointInRange
        test and added comments about how we will restore it in the future.

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

        Unreviewed, reverting r268761.

        May have casued webrtc crashes on Catalina Debug.

        Reverted changeset:

        "[webkitpy] Use allowlist and blocklist"
        https://bugs.webkit.org/show_bug.cgi?id=217985
        https://trac.webkit.org/changeset/268761

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

        [webkitpy] Remove the old autointaller
        https://bugs.webkit.org/show_bug.cgi?id=218131
        <rdar://problem/70627699>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Remove reference to old autoinstaller.
        * Scripts/webkitpy/thirdparty/__init__.py: Deleted content.
        (autoinstall_everything): Deleted.

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

        [webkitscmpy] Use 'which' to find git and svn paths
        https://bugs.webkit.org/show_bug.cgi?id=217717
        <rdar://problem/70299192>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git):
        (Git.executable): Generate git path from 'which' call.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.executable): Generate a program path from a 'which' call.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn):
        (Svn.executable): Generate svn path from 'which' call.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__):

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

        [build.webkit.org] Add python 3 support - part 2
        https://bugs.webkit.org/show_bug.cgi?id=218130

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac:
        * BuildSlaveSupport/build.webkit.org-config/htdigestparser_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        * BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py:

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

        [build.webkit.org] Create master.cfg for newer buildbot
        https://bugs.webkit.org/show_bug.cgi?id=218102

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac:
        * BuildSlaveSupport/build.webkit.org-config/master_buildbot2.cfg: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/master.cfg.

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

        [webkitpy] Use webkitcorepy's autoinstaller for buildbot and twisted
        https://bugs.webkit.org/show_bug.cgi?id=218105
        <rdar://problem/70593576>

        Rubber-stamped by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        (BuildBotConfigLoader._add_dependent_modules_to_sys_modules):
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.archives): tar.bz2 archives are tar.gz archives.
        (Package.install): After r267056, we don't need "old-and-unmanageable" and
        "single-version-externally-managed", handle case of nested modules more completely.
        * Scripts/webkitpy/autoinstalled/buildbot.py: Added.
        * Scripts/webkitpy/autoinstalled/twisted.py: Added.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        Import new auto installed twisted.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver._ensure_http_server_dependencies): Import new auto installed twisted.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove all modules.
        (AutoinstallImportHook._install_buildbot): Deleted.
        (AutoinstallImportHook._install_twisted_15_5_0): Deleted.
        * Scripts/webkitpy/thirdparty/__init___unittest.py: Removed.

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

        Rename slave to worker in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=218123

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py:

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

        Null check platformStrategies when making blob read stream for an NSURLRequest
        https://bugs.webkit.org/show_bug.cgi?id=218112
        <rdar://problem/70507102>

        Reviewed by Wenson Hsieh.

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

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

        [webkitpy] Use webkitcorepy's autoinstaller for chrome and gecko drivers
        https://bugs.webkit.org/show_bug.cgi?id=218059
        <rdar://problem/70551255>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/autoinstalled: Added.
        * Scripts/webkitpy/autoinstalled/__init__.py: Added.
        * Scripts/webkitpy/autoinstalled/chromedriver.py: Added.
        (ChromeDriverPackage): Special listing rules for the chrome driver.
        * Scripts/webkitpy/autoinstalled/geckodriver.py: Added.
        (GeckoDriverPackage): Special listing rules for the GeckoDriver.
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (get_driver_binary_path):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove Chrome and Gecko drivers.
        (AutoinstallImportHook.install_chromedriver): Deleted.
        (AutoinstallImportHook.install_geckodriver): Deleted.
        (get_driver_filename): Deleted.
        (get_os_info): Deleted.

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

        report-non-inclusive-language should also report total for all the non-inclusive terms
        https://bugs.webkit.org/show_bug.cgi?id=218096

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language: Report total for all the non-inclusive terms. Also improved
        formatting of the output to make it one-line.

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

        [webkitpy] Rename slave to worker in perftestsrunner
        https://bugs.webkit.org/show_bug.cgi?id=218082

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Supporting both --slave-config-json-path and --worker-config-json-path for now.
        (_generate_results):
        (_merge_worker_config_json):
        (_merge_slave_config_json): Deleted.
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_parse_args):
        (MainTest.test_parse_deprecated_args): Added unit-test for deprecated parameter.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunAndUploadPerfTests):

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

        Few webkitpy tests fail for machines in non-PST timezones
        https://bugs.webkit.org/show_bug.cgi?id=218079
        <rdar://problem/70579517>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_info):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn.test_info):

2020-10-22  Eric Carlson  <eric.carlson@apple.com>

        UIClient isn't notified when page muted state changes
        https://bugs.webkit.org/show_bug.cgi?id=218085
        <rdar://problem/70462420>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaMutedState.mm: Added.
        (-[AudioStateObserver initWithWebView:]):
        (-[AudioStateObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[AudioStateTestView setMuted:]):
        (TestWebKitAPI::TEST):

2020-10-22  Angelos Oikonomopoulos  <angelos@igalia.com>

        Detect unrecognized options in build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=218077

        Reviewed by Yusuke Suzuki.

        Currently, Getopt::Long is configured with pass_through, in order to
        be able to forward arbitrary arguments in buildMyProject. However, that
        means that typos in option names (e.g. using --cmake-args instead of
        --cmakeargs) go undetected and the option is silently ignored.
 
        For cmake builds, there is no such forwarding, so check that there are
        no remaining arguments in ARGV and refuse to continue if so. This runs
        the risk of breaking wrapper scripts that incorrectly pass unrecognized
        options, but that seems like a good thing.

        * Scripts/build-jsc:

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

        Let webkitDisplayingFullscreen() return true when a video element’s fullscreen mode is not VideoFullscreenModeNone
        https://bugs.webkit.org/show_bug.cgi?id=216426

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCloseAllMediaPresentations.mm:
        (TEST):
        Use internals.isChangingPresentationMode() to make sure a video presentation mode
        change (from inline to picture-in-picture) is completed before moving to the next
        step of the test.

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

        [Flatpak SDK] Backport GStreamer device monitor patch
        https://bugs.webkit.org/show_bug.cgi?id=218021

        Reviewed by Adrian Perez de Castro.

        Backport of https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/679 to be shipped in 1.20.
        This is needed to prevent false-positive critical warnings on the bots. See #217959.
        
        * buildstream/elements/sdk/gstreamer.bst:
        * buildstream/patches/gstreamer-0001-devicemonitor-Stop-only-the-already-started-provider.patch: Added.

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

        Unreviewed. Update W3C WebDriver imported tests.

        Always connect to WebKitWebView::close even if the view is never made active.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowSwitchTab):
        (browser_window_append_view):

2020-10-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JHbuild] Add patch to wpebackend-fdo to fix the build on Ubuntu-18.04
        https://bugs.webkit.org/show_bug.cgi?id=218068

        Reviewed by Adrian Perez de Castro.

        On r268591 I updated the version of wpebackend-fdo to the last stable 1.8
        but this version is failing to build on Ubuntu-18.04 because of the cmake version.
        Backport a patch to fix this.

        * gtk/jhbuild.modules:
        * gtk/patches/wpebackend-fdo-cmake-buildfix-3.10.patch: Added.
        * jhbuild/jhbuild-minimal.modules:
        * jhbuild/patches/wpebackend-fdo-cmake-buildfix-3.10.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/patches/wpebackend-fdo-cmake-buildfix-3.10.patch: Added.

2020-10-21  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should have the capability to observe messages being sent and received
        https://bugs.webkit.org/show_bug.cgi?id=217870

        Reviewed by Darin Adler.

        Added tests to intercept IPC messages sent and received by WebContent process.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (IPCTestingAPI.CanInterceptAlert):
        (IPCTestingAPI.CanInterceptHasStorageAccess):
        (IPCTestingAPI.CanInterceptFindString):

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

        [webkitpy] Use webkitcorepy's autoinstaller for beautifulsoup
        https://bugs.webkit.org/show_bug.cgi?id=218049
        <rdar://problem/70542684>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/__init__.py:
        * Scripts/webkitpy/thirdparty/BeautifulSoup.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove _install_beatifulsoup.
        (AutoinstallImportHook._install_pytest_timeout): Deleted.
        (AutoinstallImportHook._install_pytest): Deleted.
        (AutoinstallImportHook._install_beautifulsoup): Deleted.

2020-10-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        update-webkitgtk-libs and run-webkit-tests fail silently if flatpak has problems updating
        https://bugs.webkit.org/show_bug.cgi?id=218047

        Reviewed by Philippe Normand.

        This scripts were returning zero status when flatpak failed to
        update in some cases. Fix them to return a non-zero status.

        * Scripts/update-webkit-flatpak: Add missing sys.exit call with the return code.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): In python false is zero when casted to int.

2020-10-21  Lauro Moura  <lmoura@igalia.com>

        webkitpy: Check for duplicated keys in json expectation files
        https://bugs.webkit.org/show_bug.cgi?id=218032

        Reviewed by Carlos Alberto Lopez Perez.

        When JSON contains repeated keys, Python only uses the last key/value
        pair in the resulting dict, without warnings. This may cause some
        expectations to be ignored, like what r267323 fixed.

        This change also makes MockTestExpectations use the same loading
        validation as the actual expectation instead of calling json.loads
        directly.

        * Scripts/webkitpy/common/test_expectations.py:
        (check_repeated_keys): Added.
        (TestExpectations.__init__): Use helper function.
        (TestExpectations._load_expectation_string): Moved validation here.
        * Scripts/webkitpy/common/test_expectations_unittest.py:
        (MockTestExpectations.__init__): Use helper function.
        (test_repeated_keys): Added test when there are repeated keys.

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

        Don't crash when deallocating WKWebView during TLS handshake
        https://bugs.webkit.org/show_bug.cgi?id=218025
        <rdar://problem/70225969>

        Reviewed by Tim Horton.

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

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

        Cleanup DumpRenderTree in preparation for supporting arbitrary test header commands
        https://bugs.webkit.org/show_bug.cgi?id=217962

        Reviewed by Darin Adler.

        - Moves DumpRenderTree's TestOptions to be fully backed by TestFeatures like WebKitTestRunnner,
          allowing future changes to utilize any WebPreference once SPI is available from WebKitLegacy.

        - Removes use of using namespace std; from DumpRenderTree.mm, which is not something we normally
          do and made the code a bit confusing.

        - Move some random setting of preferences to centralized reset functions.

        * DumpRenderTree/TestOptions.cpp:
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/win/DumpRenderTree.cpp:

2020-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for wheel actions
        https://bugs.webkit.org/show_bug.cgi?id=217174

        Reviewed by Brian Burg.

        Add webdriver-wheel-interactions option.

        * Scripts/webkitperl/FeatureList.pm:

2020-10-21  Lauro Moura  <lmoura@igalia.com>

        webkitpy: Fix webdriver logging message
        https://bugs.webkit.org/show_bug.cgi?id=218006

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.process_results): Use the test name instead of
        the dir name.

2020-10-20  Aakash Jain  <aakash_jain@apple.com>

        report-non-inclusive-language should do exact match for directory names to ignore
        https://bugs.webkit.org/show_bug.cgi?id=217993

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language:

2020-10-20  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Rename slavename to workername in steps.py
        https://bugs.webkit.org/show_bug.cgi?id=217988

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:

2020-10-20  Aakash Jain  <aakash_jain@apple.com>

        Make report-non-inclusive-language ignore autoinstalled directories and certain file types (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=217972

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language: Rename IGNORE_DIRECTORIES to IGNORE_DIRECTORIES_CONTAINING.

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

        Add stubs for SpeechRecognition
        https://bugs.webkit.org/show_bug.cgi?id=217780
        <rdar://problem/70350727>

        Reviewed by Youenn Fablet.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

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

        [webkitpy] Use allowlist and blocklist
        https://bugs.webkit.org/show_bug.cgi?id=217985
        <rdar://problem/70499499>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/pylintrc:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_namespace_indentation):
        * Scripts/webkitpy/w3c/common.py:
        (is_basename_skipped):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.setup_gstbuild):

2020-10-20  Aakash Jain  <aakash_jain@apple.com>

        Make report-non-inclusive-language ignore autoinstalled directories and certain file types
        https://bugs.webkit.org/show_bug.cgi?id=217972

        Reviewed by Beth Dakin.

        * Scripts/report-non-inclusive-language: startswith and endswith also takes a tuple of suffixes to
        look for, reference: https://docs.python.org/3/library/stdtypes.html#str.endswith

2020-10-20  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Use builder tags instead of category for latest buildbot
        https://bugs.webkit.org/show_bug.cgi?id=217958

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig):
        (PlatformSpecificScheduler.filter):
        (getInvalidTags):
        (getValidTags):
        (getTagsForBuilder):
        * BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py: Added unit-tests, copied from EWS code.
        (TagsForBuilderTest):
        (TagsForBuilderTest.verifyTags):
        (TagsForBuilderTest.test_getTagsForBuilder):
        (TagsForBuilderTest.test_tags_type):
        (TagsForBuilderTest.test_getInvalidTags):

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

        TestOptionsGeneratedKeys.h:30:52: warning: backslash-newline at end of file
        https://bugs.webkit.org/show_bug.cgi?id=217957

        Reviewed by Sam Weinig.

        I guess this is bad because something else from another header could be on the next line,
        depending on the order that headers get included into the source file. So let's add a blank
        line to the end of the file.

        * WebKitTestRunner/Scripts/PreferencesTemplates/TestOptionsGeneratedKeys.h.erb:

2020-10-16  Jer Noble  <jer.noble@apple.com>

        Add skeleton implementation of Media Session API
        https://bugs.webkit.org/show_bug.cgi?id=217797
        <rdar://problem/70367487>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2020-10-20  Aakash Jain  <aakash_jain@apple.com>

        [ews] Remove blacklist terminology
        https://bugs.webkit.org/show_bug.cgi?id=217953

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (getInvalidTags):
        (getValidTags):
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (TagsForBuilderTest.test_getInvalidTags):

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

        Unreviewed, partial revert of r268721.

        * buildstream/elements/sdk/libmanette.bst: libevdev is actually a requirement for libmanette.

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

        WebDriver: start a https server too for tests
        https://bugs.webkit.org/show_bug.cgi?id=217223
        <rdar://problem/70136595>

        Reviewed by Adrian Perez de Castro.

        Handle HTTPS configuration in WebDriver WPT server.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__): Set https configuration from server.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer._wait_for_server): Also wait for HTTPS port.
        (WebDriverW3CWebServer.start): Write config file and get also https port.
        (WebDriverW3CWebServer.http_port): Renamed port as http_port.
        (WebDriverW3CWebServer.https_port): Added to return the https port.
        (WebDriverW3CWebServer.port): Deleted.

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

        [Flatpak SDK] Update rr for AMD Ryzen support
        https://bugs.webkit.org/show_bug.cgi?id=217474

        Reviewed by Adrian Perez de Castro.

        * buildstream/Pipfile: Remove Python 3.8 hard requirement.
        * buildstream/Pipfile.lock:
        * buildstream/elements/freedesktop-sdk.bst: Bump to latest version of the 20.08 FDO junction.
        * buildstream/elements/sdk/rr.bst: Bump to current git master.

2020-10-20  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Gamepad events do not occur in the flatpak shell.
        https://bugs.webkit.org/show_bug.cgi?id=212453

        Reviewed by Michael Catanzaro.

        If the support for gudev is disabled in libmanette, it falls back to monitoring the
        files under /dev/input by itself without trying to use udev at all. This works fine
        because the Flatpak SDK environment has access to all of /dev.

        * buildstream/elements/sdk/libmanette.bst: Pass -Dgudev=disabled to Meson, and remove
        the libgudev dependency from the element.

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

        Tweak WebPreferences*.yaml "exposed" key to only indicate that the key should not be changeable by the frontend
        https://bugs.webkit.org/show_bug.cgi?id=217918

        Reviewed by Darin Adler.

        Update to use new "exposed" prefix bindings and use default value explicitly
        when updating settings for non-exposed preferences.

        * DumpRenderTree/Scripts/PreferencesTemplates/TestOptionsGeneratedKeys.h.erb:
        * WebKitTestRunner/Scripts/PreferencesTemplates/TestOptionsGeneratedKeys.h.erb:

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

        REGRESSION(r268115) [GTK] Build failures with GCC 7 (Ubuntu 18.04) and GCC 8 (Debian Buster)
        https://bugs.webkit.org/show_bug.cgi?id=217425

        Reviewed by Carlos Alberto Lopez Perez.

        * WebKitTestRunner/CMakeLists.txt: Link with stdc++fs if using
        <experimental/filesystem>.

2020-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r268693.

        Re-landing these changes as the underlying issue may have been
        with CI infrastructure (and should now be resolved)

        Reverted changeset:

        "Unreviewed, reverting r268495, r268571, and r268682."
        https://bugs.webkit.org/show_bug.cgi?id=217723
        https://trac.webkit.org/changeset/268693

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

        [results.webkit.org] Refresh S3 context when token expires
        https://bugs.webkit.org/show_bug.cgi?id=217924
        <rdar://problem/70381137>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/model/s3_archiver.py:
        (S3Archiver.__init__): Add _cached_token variable.
        (S3Archiver.__enter__): Refresh S3 resource when the current token and cached token don't match.
        (S3Archiver.__exit__): Clear out the cached token.

2020-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r268495, r268571, and r268682.

        Caused failures for some internal build configurations

        Reverted changesets:

        "[Testing] Generate test header key map for DumpRenderTree"
        https://bugs.webkit.org/show_bug.cgi?id=217723
        https://trac.webkit.org/changeset/268495

        "Attempt to fix the build."
        https://trac.webkit.org/changeset/268571

        "Switch to a static pattern for DumpRenderTree preferences
        generation to avoid ambiguous rules"
        https://bugs.webkit.org/show_bug.cgi?id=217907
        https://trac.webkit.org/changeset/268682

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

        [ews] use -o while unzipping layout-test-results.zip
        https://bugs.webkit.org/show_bug.cgi?id=217914

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ExtractTestResults.__init__):
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2020-10-19  Sam Weinig  <weinig@apple.com>

        Switch to a static pattern for DumpRenderTree preferences generation to avoid ambiguous rules
        https://bugs.webkit.org/show_bug.cgi?id=217907

        Reviewed by Simon Fraser.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        Add DerivedSources.make and generate-derived-sources.sh to ensure things get rebuilt when they change.

        * DumpRenderTree/DerivedSources.make:
        Switch to using a static pattern to avoid ambiguous and ciruclar rules.

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

        [build.webkit.org] Use feature flag to support Buildbot 2 code
        https://bugs.webkit.org/show_bug.cgi?id=217834

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig):

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

        [webkitpy] Use webkitcorepy's autoinstaller for keyring
        https://bugs.webkit.org/show_bug.cgi?id=217839
        <rdar://problem/70389225>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/__init__.py: Add keyring.
        * Scripts/webkitpy/common/net/credentials.py:
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove _install_keyring.
        (AutoinstallImportHook._install_keyring): Deleted.

2020-10-18  Lauro Moura  <lmoura@igalia.com>

        webkitcorepy: Allow one package to require another package
        https://bugs.webkit.org/show_bug.cgi?id=217856

        Reviewed by Jonathan Bedard.

        In some cases a package may check whether another package is
        installed without actually importing it, which would make
        the AutoInstall to miss the dependency as it would not be
        imported. An example is pytest autoload feature searching
        for plugins like pytest_timeout.

        So, this commit adds a new argument to autoinstall.Package:
        implicit_deps. It is not intended to be a full fledged dependency
        tracking system, just covering these corner cases.

        This commit also downgrades pytest from 3.10 to 3.6 to match the
        version used in WPT tests.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump mini
        version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.__init__): Add new implicit_deps argument.
        (Package.install): Install implicit_deps.
        * Scripts/webkitpy/__init__.py: Update pytest version and add
        pytest_timeout dependency.
        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (run): Ignore DISABLE_AUTOLOAD as it was added in pytest 3.8 and go
        back to implicitly loading pytest_timeout.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.run): Add the harness error log messages
        like the ones in the w3c runner from r268402.

2020-10-17  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] flatpakutils.py reports "KeyError: 'gcc'" error if using with icecc and toolchains aren't generated yet
        https://bugs.webkit.org/show_bug.cgi?id=217799

        Reviewed by Fujii Hironori.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Gracefully exit with an error message when the icecc
        configuration failed to complete.

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

        Add system trace points for flushing remote image buffers
        https://bugs.webkit.org/show_bug.cgi?id=217853

        Reviewed by Simon Fraser.

        See WebKit ChangeLog for more details.

        * Tracing/SystemTracePoints.plist:

2020-10-16  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should expose whether a given IPC message has sync reply or not
        https://bugs.webkit.org/show_bug.cgi?id=217861

        Reviewed by Darin Adler.

        Added a test for IPC.messages.*.isSync using RunJavaScriptAlert.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (createWebViewWithIPCTestingAPI): Extracted to share more code between tests.
        (IPCTestingAPI.AlertIsSyncMessage): Added.

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

        Enable individual CSS transform properties by default
        https://bugs.webkit.org/show_bug.cgi?id=217849
        <rdar://problem/70052493>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

2020-10-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Remove experimental feature flag: WebAuthenticationLocalAuthenticatorEnabled
        https://bugs.webkit.org/show_bug.cgi?id=217796
        <rdar://problem/70358912>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::boolDefaultsMap):
        (WTR::keyTypeMap):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::enableWebAuthentication const):
        (WTR::TestOptions::enableWebAuthenticationLocalAuthenticator const): Deleted.

2020-10-16  Matt Lewis  <jlewis3@apple.com>

        Move EWS to new SDKs: iOS 14.
        https://bugs.webkit.org/show_bug.cgi?id=217840

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json:

2020-10-16  Sam Weinig  <weinig@apple.com>

        [Testing] Support configuring any preference from test headers for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=217645

        Reviewed by Tim Horton.

        Support using any preference defined in any of the WebPreference*.yaml configuration files
        as a test header command rather than limiting it to a hard coded subset by generating the 
        list of supported commands and their types from the yaml files themselves.
        
        This currently only works for WebKitTestRunner, but will be made to work with DumpRenderTree
        in subsequent changes.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/DerivedSources-input.xcfilelist:
        * WebKitTestRunner/DerivedSources-output.xcfilelist:
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/Scripts/PreferencesTemplates: Added.
        * WebKitTestRunner/Scripts/PreferencesTemplates/TestOptionsGeneratedKeys.h.erb: Added.
        Add generation of TestOptionsGeneratedKeys.h from the WebPreference*.yaml using
        the shared GeneratePreferences.rb script in WTF.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Move preference setting to the bottom of the file to allow any preference
        to be overriden. Also adds in support for double, uint32_t, and string preferences
        though none of those are currently being used.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::keyTypeMapping):
        Use generated macro GENERATED_WEB_PREFERENCE_KEY_TYPE_MAPPINGS rather than hardcoding
        all the preferences types.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::boolWebPreferenceFeatures const):
        (WTR::TestOptions::doubleWebPreferenceFeatures const):
        (WTR::TestOptions::uint32WebPreferenceFeatures const):
        (WTR::TestOptions::stringWebPreferenceFeatures const):
        Expose accessors for preferences values for use in setting the actual preference
        values. Rather than setting all preferences, we now only set preferences that have
        been explicitly requested, using the default value for any that have not.

2020-10-16  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org Rename slave to worker in steps.py
        https://bugs.webkit.org/show_bug.cgi?id=217836

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/steps.py: Renamed slave to worker.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

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

        [webkitpy] Use webkitcorepy's autoinstaller for plint 
        https://bugs.webkit.org/show_bug.cgi?id=217793
        <rdar://problem/70356095>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall): Support multiple aliases to a single library.
        (AutoInstall.register):
        (AutoInstall.install):
        (AutoInstall.install_everything):
        * Scripts/webkitpy/__init__.py: Add pylint, map install zope.interface when zope is imported. 
        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter.run):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove _install_pylint().
        (AutoinstallImportHook._install_pylint): Deleted.
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports): mechanize and pylint are managed by the new autoinstaller.

2020-10-16  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] buildbot checkconfig fails when passwords.json is missing
        https://bugs.webkit.org/show_bug.cgi?id=217831

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Set is_test_mode_enabled based on BUILDBOT_TESTING env variable.
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Renamed test_mode_is_enabled to is_test_mode_enabled to
        be consistent with EWS code.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

2020-10-16  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add copyright message to steps_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=217830

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2020-10-16  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Remove SVNMirror
        https://bugs.webkit.org/show_bug.cgi?id=217823

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/factories.py: Removed SVNMirror.
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Ditto.
        (WaitForSVNServer): Deleted.
        (WaitForSVNServer.evaluateCommand): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * BuildSlaveSupport/wait-for-SVN-server.py: Removed.

2020-10-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JHBuild] Update libwpe and wpebackend-fdo and add libmanette to minimal moduleset
        https://bugs.webkit.org/show_bug.cgi?id=217825

        Reviewed by Adrian Perez de Castro.

        libmanette 0.2.4 is required for enabling gamepad support, which
        defaults to on since r268389 for developer builds. The version
        shipped by ubuntu-20.04 is not enough (0.2.3), so we should include
        this on the minimal moduleset which is used to generate the bundle
        products on the packaging bots.

        Seize to also update the libwpe and wpebackend-fdo libraries.

        * gtk/jhbuild.modules:
        * jhbuild/jhbuild-minimal.modules:
        * wpe/jhbuild.modules:

2020-10-16  Sam Sneddon  <gsnedders@apple.com>

        Match webkitpy.port.base.Port's merging of .webarchive/.txt
        https://bugs.webkit.org/show_bug.cgi?id=217795

        Reviewed by Alexey Proskuryakov.

        * Scripts/check-for-duplicated-platform-test-results:
        (check_duplicate): Check for both .webarchive and .txt
        (check_platform): Don't call the function that probably just threw

2020-10-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Ensure the tests are run with US/Pacific time zone
        https://bugs.webkit.org/show_bug.cgi?id=186612

        Reviewed by Michael Catanzaro.

        Some tests fail if the time zone is not set to US/Pacific, and
        this causes issues for contributors living outside of that timezone.
        Ideally we should fix those tests, but in the meantime setting this
        environment variable before starting the layout tests seems like
        an acceptable workaround. Note that something similar is also
        already done for the JSC tests.

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

2020-10-15  Sam Weinig  <weinig@apple.com>

        Attempt to fix the build.

        * DumpRenderTree/DerivedSources.make: Don't use such fancy substitution, it wasn't working.

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

        [webkitpy] Use webkitcorepy's autoinstaller for mechanize
        https://bugs.webkit.org/show_bug.cgi?id=217683
        <rdar://problem/70272262>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/__init__.py: Add mechanize.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._get_browser): 
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        * Scripts/webkitpy/common/net/ewsserver.py:
        (EWSServer.__init__):
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        (NetworkTransactionTest._raise_500_error):
        (NetworkTransactionTest._raise_URLError):
        (NetworkTransactionTest._raise_404_error):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remov _install_mechanize().
        (AutoinstallImportHook._install_mechanize): Deleted.

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

        [Flatpak SDK] Check for installed packages in setup_buildir
        https://bugs.webkit.org/show_bug.cgi?id=217768

        Reviewed by Philippe Normand.

        During a cleanup of one of the bots, setup_builddir failed with a null
        self.sdk member, which is set in get_packages.

        While I could not reproduce it again, this commit prevents this by
        checking whether the packages are installed before continuing the
        original setup_builddir steps.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.setup_builddir): Check for installed packages.
        (WebkitFlatpak.run_in_sandbox): Check for setup_builddir return code.
        (WebkitFlatpak.check_installed_packages): Extracted from
        setup_dev_env.
        (WebkitFlatpak.setup_dev_env): Call extracted method.

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

        [webkitscmpy] Unconditionally extract git-svn-id from commit message
        https://bugs.webkit.org/show_bug.cgi?id=217740
        <rdar://problem/70313868>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Unconditionally attempt to extract git-svn-id.

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

        [webkitscmpy] Support <identifier>@ abbreviated idiom
        https://bugs.webkit.org/show_bug.cgi?id=217716
        <rdar://problem/70299119>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit):
        (Commit._parse_identifier): Support <identifier>@ shorthand.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
        (TestCommit.test_parse_identifier):

2020-10-15  Aakash Jain  <aakash_jain@apple.com>

        EWS bot should fail if a new test is missing its result
        https://bugs.webkit.org/show_bug.cgi?id=177723

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.evaluateResult):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-test.

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

        webkitpy: Fix remaining pytest autoinstall imports
        https://bugs.webkit.org/show_bug.cgi?id=217694

        Reviewed by Carlos Garcia Campos.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump mini
        version due to argument rename below.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.__init__): Change argument name to communicate that the first
        arg is the name of the package to be imported.
        * Scripts/webkitpy/__init__.py: Some changes:
        - Downgrade attr to a compatible version with the pytest used.
        - Fix pytest_timeout import name
        - Downgrade pytest to 3.x. Version 4.x deprecated direct invocation of
        fixtures, which is still used by W3C webdriver test code.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (run): Avoid using pytest autoload features to ensure it would import
        plugins like pytest_timeout, triggering their install.

2020-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing JS API should expose a reply and describe the list of arguments for each message
        https://bugs.webkit.org/show_bug.cgi?id=217565

        Reviewed by Geoffrey Garen.

        Added tests for decoding replies for sync and async messages and one for argument descriptions.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (-[IPCTestingAPIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        (-[IPCTestingAPIDelegate _webView:webContentProcessDidTerminateWithReason:]):
        (IPCTestingAPI.DecodesReplyArgumentsForPrompt):
        (IPCTestingAPI.DecodesReplyArgumentsForAsyncMessage):
        (IPCTestingAPI.DescribesArguments):

2020-10-14  Hector Lopez  <hector_i_lopez@apple.com>

        Unreviewed, reverting r268474.

        Revision is causing a number of test failures across iOS and
        macOS

        Reverted changeset:

        "[Testing] Support configuring any preference from test
        headers for WebKitTestRunner"
        https://bugs.webkit.org/show_bug.cgi?id=217645
        https://trac.webkit.org/changeset/268474

2020-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Enabling IPC testing API should prevent the termination of WebContent process which sends an invalid IPC
        https://bugs.webkit.org/show_bug.cgi?id=217698

        Reviewed by Geoffrey Garen.

        Added regression tests.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (IPCTestingAPI.CanSendInvalidAsyncMessageWithoutTermination):
        (IPCTestingAPI.CanSendInvalidMessageWithoutTermination):

2020-10-14  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add python 3 support - part 1
        https://bugs.webkit.org/show_bug.cgi?id=217727

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (UploadBuiltProduct.__init__): Changed 0644 to 0o644.
        (UploadTestResults.__init__): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Removed unused imports.
        * BuildSlaveSupport/build.webkit.org-config/run-buildbot-test.py: Used .format() instead of % string formatting.

2020-10-14  Sam Weinig  <weinig@apple.com>

        [Testing] Generate test header key map for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=217723

        Reviewed by Tim Horton.

        Copy test header command type generation from WebKitTestRunner to DumpRenderTree, to 
        begin support for using any WebPreference from DumpRenderTree. This does not actually
        change any behavior yet, just updates the key mapping. 

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:
        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/PreferencesTemplates: Added.
        * DumpRenderTree/Scripts/PreferencesTemplates/TestOptionsGeneratedKeys.h.erb: Added.
        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::keyTypeMapping):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2020-10-14  Alexey Proskuryakov  <ap@apple.com>

        Remove WebKitLauncher
        https://bugs.webkit.org/show_bug.cgi?id=217729

        Reviewed by Darin Adler.

        This is part of long defunct nightly build infrastructure.

        * .gitattributes:
        * BuildSlaveSupport/build-launcher-app: Removed.
        * Scripts/webkitpy/style/checkers/sdkvariant.py:
        * WebKitLauncher: Removed.

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

        Unreviewed, reverting r268431 and r268443.
        https://bugs.webkit.org/show_bug.cgi?id=217728

        Broke debug builds of GTK, WinCairo and Playstation ports

        Reverted changesets:

        "IPC testing JS API should expose a reply and describe the
        list of arguments for each message"
        https://bugs.webkit.org/show_bug.cgi?id=217565
        https://trac.webkit.org/changeset/268431

        "IPC testing JS API should expose a reply and describe the
        list of arguments for each message"
        https://bugs.webkit.org/show_bug.cgi?id=217565
        https://trac.webkit.org/changeset/268443

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

        Disallow ports in file URLs
        https://bugs.webkit.org/show_bug.cgi?id=217252

        Reviewed by Darin Adler.

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

2020-10-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        Unreviewed. Update my status to "reviewer" and add WebIDL expertise.

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

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

        'make debug' fails on the repository root if ccache is installed on mac after r262147
        https://bugs.webkit.org/show_bug.cgi?id=212469
        <rdar://problem/70278783>

        Reviewed by David Kilzer.

        ccache is frequently installed in /usr/local/bin. However, when
        running under XCBuild, $PATH does not include /usr/local/bin. This
        leaves in a situation where the check for the existence of ccache in
        Makefile.shared succeeds, but the use of ccache in ccache-wrapper
        fails. To address this, look for ccache in a few well-known places
        rather than just relying on $PATH. If it still can't be found, fall
        back to compiling normally without ccache.

        * ccache/ccache-wrapper:

2020-10-14  Sam Weinig  <weinig@apple.com>

        [Testing] Support configuring any preference from test headers for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=217645

        Reviewed by Tim Horton.

        Support using any preference defined in any of the WebPreference*.yaml configuration files
        as a test header command rather than limiting it to a hard coded subset by generating the 
        list of supported commands and their types from the yaml files themselves.
        
        This currently only works for WebKitTestRunner, but will be made to work with DumpRenderTree
        in subsequent changes.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/DerivedSources-input.xcfilelist:
        * WebKitTestRunner/DerivedSources-output.xcfilelist:
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/Scripts/PreferencesTemplates: Added.
        * WebKitTestRunner/Scripts/PreferencesTemplates/TestOptionsGeneratedKeys.h.erb: Added.
        Add generation of TestOptionsGeneratedKeys.h from the WebPreference*.yaml using
        the shared GeneratePreferences.rb script in WTF.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Move preference setting to the bottom of the file to allow any preference
        to be overriden. Also adds in support for double, uint32_t, and string preferences
        though none of those are currently being used.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::keyTypeMapping):
        Use generated macro GENERATED_WEB_PREFERENCE_KEY_TYPE_MAPPINGS rather than hardcoding
        all the preferences types.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::boolWebPreferenceFeatures const):
        (WTR::TestOptions::doubleWebPreferenceFeatures const):
        (WTR::TestOptions::uint32WebPreferenceFeatures const):
        (WTR::TestOptions::stringWebPreferenceFeatures const):
        Expose accessors for preferences values for use in setting the actual preference
        values. Rather than setting all preferences, we now only set preferences that have
        been explicitly requested, using the default value for any that have not.

2020-10-14  Stephan Szabo  <stephan.szabo@sony.com>

        builtins-generator-tests and bindings-generation-tests are reporting "Failed to install configparser-4.0.2!" since r268267 on WinCairo Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=217586

        Reviewed by Jonathan Bedard.

        Pass proxy environment variables to setup.py so wincairo bots
        which need the proxy set can reach pypi.org.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:

2020-10-14  Ryan Haddad  <ryanhaddad@apple.com>

        Temporarily reduce the number of iOS simulators booted during testing
        https://bugs.webkit.org/show_bug.cgi?id=217681

        Reviewed by Jonathan Bedard.

        To work around unexpected timouts with iOS 14 (webkit.org/b/217392),
        increase the estimated memory cost for booting iOS simulators.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager): Remove an obsolete FIXME and change the
        estimated memory cost for a simulator to 8GB, which reduces the number
        of booted simulators in our CI from 10 to 8. This change reduced the
        number of unexpected timeouts seen on our bots from ~20 to 2, and came
        at a penalty of < 5 minutes to layout test duration.

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

        Remove ResourceLoadStatistics telemetry
        https://bugs.webkit.org/show_bug.cgi?id=217665
        <rdar://problem/69748988>

        Reviewed by Sam Weinig.

        Telemetry calculation in ITP is unused, very complicated, a potential
        privacy risk, and it causes flaky tests. We should remove it.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidRunTelemetryCallback): Deleted.
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Deleted.
        (WTR::TestRunner::statisticsSubmitTelemetry): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsSubmitTelemetry): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        Remove _WKWebViewCategory from WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=217679
        <rdar://problem/70260337>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2020-10-14  Aakash Jain  <aakash_jain@apple.com>

        Rename slave to bot for gtk-linux bot names
        https://bugs.webkit.org/show_bug.cgi?id=217702

        Reviewed by Carlos Alberto Lopez Perez.

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

2020-10-14  Zan Dobersek  <zdobersek@igalia.com>

        Remove ACCELERATED_2D_CANVAS build flags and guarded code
        https://bugs.webkit.org/show_bug.cgi?id=217603

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm:
        Remove the ACCELERATED_2D_CANVAS feature flag.

2020-10-14  Diego Pino Garcia  <dpino@igalia.com>

        [webkitpy] Allow passing subtests to GLIB API testrunner
        https://bugs.webkit.org/show_bug.cgi?id=217466

        Reviewed by Carlos Garcia Campos.

        GLIB API testrunner didn't allow passing a list of subtests to run.
        That was possible, however, when executing a GLIB API binary directly
        using knob -p. The patch adds the same option to GLIB API testrunner
        and passes down the list of subtests accordingly.

        * glib/api_test_runner.py:
        (TestRunner._run_test_glib):
        (TestRunner._run_test):
        (TestRunner.run_tests):
        (add_options):

2020-10-13  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing JS API should expose a reply and describe the list of arguments for each message
        https://bugs.webkit.org/show_bug.cgi?id=217565

        Fixed the tests.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:

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

        [webkitscmpy] Add `git-webkit find` (Follow up fix)
        https://bugs.webkit.org/show_bug.cgi?id=217534
        <rdar://problem/70152431>

        Unreviewed follow up fix.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Version bump.
        * Scripts/libraries/webkitscmpy/setup.py: "program" was not a directory in the landed change.

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

        [webkitscmpy] Add `git-webkit find`
        https://bugs.webkit.org/show_bug.cgi?id=217534
        <rdar://problem/70152431>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/arguments.py:
        (NoAction.__call__):
        (CountAction): Create an action to increment or decrement a variable by a value.
        (CallbackAction): Create an action which will trigger a callback when set.
        (LoggingGroup): Create a group which allows the user to change logging behavior.
        * Scripts/libraries/webkitscmpy/git-webkit: Added.
        * Scripts/libraries/webkitscmpy/setup.py: Add webkitscmpy.program and git-webkit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit): Make the 12 character hash based on a class variable.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.default_branch): Fallback to 'master' or 'main' if the remote isn't available.
        (Git.find): Use git to match branches and tags to a hash instead of trying to do it ourselves.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.find): Add function to convert generic string arguments to a commit, and then find that commit in
        the repository.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn): Support a few different SVN binary paths.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Add rev-parse branch/tag/HEAD -> hash conversion.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program.py: Added.
        (Command): Base class for all commands.
        (Find):
        (Find.parser): Configure parser for 'find' sub-program.
        (Find.main): Given an identifier, revision, hash or branch name, find and print the matching commit from
        (main): Entry point to git-<project> scripts.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py: Added.
        (TestFind):
        (TestFind.test_basic_git):
        (TestFind.test_basic_git_svn):
        (TestFind.test_basic_svn):
        (TestFind.test_branch_tilde):
        (TestFind.test_identifier_git):
        (TestFind.test_identifier_git_svn):
        (TestFind.test_identifier_svn):
        (TestFind.test_hash):
        (TestFind.test_revision_svn):
        (TestFind.test_revision_git_svn):
        (TestFind.test_standard):

2020-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing JS API should expose a reply and describe the list of arguments for each message
        https://bugs.webkit.org/show_bug.cgi?id=217565

        Reviewed by Geoffrey Garen.

        Added tests for decoding replies for sync and async messages and one for argument descriptions.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (-[IPCTestingAPIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        (-[IPCTestingAPIDelegate _webView:webContentProcessDidTerminateWithReason:]):
        (IPCTestingAPI.DecodesReplyArgumentsForPrompt):
        (IPCTestingAPI.DecodesReplyArgumentsForAsyncMessage):
        (IPCTestingAPI.DescribesArguments):

2020-10-13  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Rename slave to worker in config.json
        https://bugs.webkit.org/show_bug.cgi?id=217672

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Renamed slaves to workers and slavenames to workernames.
        Also deleted unused entry for test-slave.
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Renamed slave to worker.
        * BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/make_passwords_json.py: Ditto.
        (create_mock_worker_passwords_dict):

2020-10-13  Ellie Epskamp-Hunt  <eepskamphunt@apple.com>

        Expose a property on WKWebView to know if it's being inspected.
        https://bugs.webkit.org/show_bug.cgi?id=217629
        rdar://70073369

        Reviewed by Brian Burg.

        Update the property name in existing tests.

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

2020-10-13  Keith Rollin  <krollin@apple.com>

        Remove leftover MACOSX_DEPLOYMENT_TARGET_macosx support
        https://bugs.webkit.org/show_bug.cgi?id=217649
        <rdar://problem/70236877>

        Reviewed by Darin Adler.

        Bug 42796 introduced MACOSX_DEPLOYMENT_TARGET_<PLATFORM> as "support
        for compiling WebKit against iOS SDKs". Support for the iOS part of
        this feature was later removed in several changes, including Bug
        139212, Bug 139463 and Bug 144762. However, vestiges have remained for
        five or six years in the form of MACOSX_DEPLOYMENT_TARGET_macosx. The
        inclusion of the platform in MACOSX_DEPLOYMENT_TARGET is no longer
        needed and can be removed.

        This changes brings most projects in conformance with other projects
        that don't support including the platform in MACOSX_DEPLOYMENT_TARGET,
        including WebEditingTester, gtest, WebKitTestRunner, MiniBrowser, and
        TestWebKitAPI.

        Along the way, remove a couple of left-over references to macOS 10.16,
        and a couple of places where [sdk=macosx*] was still being used.

        With this change, initialization of MACOSX_DEPLOYMENT_TARGET should be
        consistent across all projects, with two exceptions: WebKitLauncher
        (which hardcodes it to 10.12) and libwebrtc's copy of googletest
        (which hardcodes it to 10.4). The reasons for these hard-coded values
        is not apparent, so leave them be.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig:
        * lldb/lldbWebKitTester/Configurations/DebugRelease.xcconfig:

2020-10-13  Lauro Moura  <lmoura@igalia.com>

        webkitpy: Log and report webdriver harness errors
        https://bugs.webkit.org/show_bug.cgi?id=217659

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.process_results): Report failed harness tests,
        not just subtests.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.run): Print to error log when a test run
        fails, not just subtests.

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

        [Testing] Rename test header commands to match names in WebPreferences*.yaml
        https://bugs.webkit.org/show_bug.cgi?id=217654

        Reviewed by Simon Fraser.

        Renames all the test header commands (e.g. useAcceleratedDrawing) to match name in
        WebPreferences*.yaml files (e.g. AcceleratedDrawingEnabled).
        
        Also splits up TestFeatures into test runner specific features (e.g. runSingly) that
        don't have a WebPreferences counterpart, and WebPreferences specific features. This
        will allow future patches to support arbritrary WebPreferences more easily.

        * DumpRenderTree/TestOptions.cpp:
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * TestRunnerShared/TestFeatures.cpp:
        * TestRunnerShared/TestFeatures.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestOptions.cpp:
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:

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

        Clean up the API tests of CARingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=217633

        Reviewed by Simon Fraser.

        Remove unused private functions and enable the tests for iOS.

        * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp:
        (TestWebKitAPI::CARingBufferTest::audioBufferListSizeForStream): Deleted.
        (TestWebKitAPI::CARingBufferTest::configureBufferListForStream): Deleted.

2020-10-13  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r268267) [webkitpy] Add missing deps for pytest when running webdriver tests
        https://bugs.webkit.org/show_bug.cgi?id=217650

        Reviewed by Jonathan Bedard.

        scandir (needed as os.scandir was added only in py 3.5)

        Also fixed more_itertools autoinstall declaration so the package
        name, with underscore, is the name of the webkitcorepy package and the
        dash is used for the pypi package name.

        With these changes the script does not error anymore, although there
        seems to be some issues with the executor when running tests. They
        happen to only start and stop the webserver but not actually being
        run. To be investigated in a separate bug.

        * Scripts/webkitpy/__init__.py:

2020-10-13  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Add support for gamepad tests
        https://bugs.webkit.org/show_bug.cgi?id=98937

        Reviewed by Carlos Garcia Campos.

        Change PLATFORM(MAC) guards to ENABLE(GAMEPAD) around the support code used for
        testing gamepad support in WKTR, and update GTK port test expectations accordingly.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Change guards to ENABLE(GAMEPAD).
        * WebKitTestRunner/TestController.cpp: Ditto.
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestInvocation.cpp: Ditto.
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        Unreviewed GLIB gardening. Remove several tests that were only failing in EWS API-GTK.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-10-12  Devin Rousso  <drousso@apple.com>

        CSS "any-pointer:fine" media query false on iPad/Pencil
        https://bugs.webkit.org/show_bug.cgi?id=212580
        <rdar://problem/63813283>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSStylusSupport.mm: Added.
        (iOSStylusSupport.StylusInitiallyDisconnected):
        (iOSStylusSupport.StylusInitiallyConnected):
        (iOSStylusSupport.StylusLaterDisconnected):
        (iOSStylusSupport.StylusLaterConnected):
        (iOSStylusSupport.StylusDisconnectedTimeout):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        [webkitcorepy] Attempt to terminate stuck processes before killing them
        https://bugs.webkit.org/show_bug.cgi?id=217632
        <rdar://problem/70222803>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py:
        (run): Killed processes will sometimes not have stdout or stderr, while terminated processes often will.

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        The previous workaround turns out to be ineffective because we can't set the value of 
        TARGET_MAC_OS_X_VERSION_MAJOR based on a previous value of itself. Introduce a new 
        variable TARGET_MAC_OS_X_VERSION_MAJOR to determine whether we need to explicitly 
        adjust MAC_OS_X_VERSION_MAJOR to 110000.

        * 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-10-12  Sam Weinig  <weinig@apple.com>

        Share TestFeatures and TestCommand infrastructure between DumpRenderTree and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=217614

        Reviewed by Dean Jackson.

        Move TestFeatures and TestCommand code from WebKitTestRunner to TestRunnerShared
        and adopt shared code in both WebKitTestRunner and DumpRenderTree.
        
        This allows us to remove duplicate argument and test header parsing code and
        avoid updating both when we want want change things.
        
        To support different sets of test header options, featureDefaultsFromTestHeaderForTest now
        has a parameter for a key type map, rather than the old hardcoded set. This allows
        WebKitTestRunner and DumpRenderTree, which currently have slightly different options
        to continue to behave in the same way. Eventually, it will probably make sense to have these
        mostly generated from the WebPreferences*.yaml configuration files.

        Matching precedent, shared files use the WTR namespace. 

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * TestRunnerShared/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Add new files.

        * DumpRenderTree/DumpRenderTree.h:
        Removes TestCommand and parseInputLine now that they come from shared TestCommand.h

        * DumpRenderTree/DumpRenderTreeCommon.cpp: Removed.
        Moved contents to shared TestCommand.cpp
        
        * DumpRenderTree/TestOptions.cpp:
        * DumpRenderTree/TestOptions.h:
        Adopt model from WebKitTestRunner and use initialization from TestFeatures.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        Adopt shared TestFeatures and TestCommand infrastructure. Construct TestOptions
        in a similar manner to WebKitTestRunner by merging together hardcoded / path based
        features and test header based features.
 
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        Update for new namespace.

        * TestRunnerShared/TestCommand.cpp: Added.
        * TestRunnerShared/TestCommand.h: Added.
        * TestRunnerShared/TestFeatures.cpp: Added.
        * TestRunnerShared/TestFeatures.h: Added.
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.cpp:
        * WebKitTestRunner/TestOptions.h:
        Moved from WebKitTestRunner. Generalized to TestFeatures to take a key type map,
        rather than hard coding it. Replace use of WebKit types, like WKURLRef, with std::string
        and std::filesystem::path.

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        Due to a bug in Xcode (rdar://70185899), Xcode 12.0 and Xcode 12.1 Beta incorrectly includes the 
        minor release number in MAC_OS_X_VERSION_MAJOR, which causes Debug and Release builds of WebKit 
        to be misconfigured when building on macOS Big Sur SUs, leading to webpages failing to load.

        To work around the Xcode bug, when the MAC_OS_X_VERSION_MAJOR includes the minor version number, 
        drop the minor version number by explicitly setting TARGET_MAC_OS_X_VERSION_MAJOR to 110000.

        Note: This change should be reverted after <rdar://70185899> is resolved.

        * 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-10-11  Sam Weinig  <weinig@apple.com>

        [Preferences] Introduce string based SPI for WKPreferences to allow tests to change internal behavior without always adding additional SPI
        https://bugs.webkit.org/show_bug.cgi?id=217582

        Reviewed by Darin Adler.

        Adopt new WebKit SPI to set preferences using the keys defined in the WebPreferences*.yaml 
        files. 

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Remove need for m_shouldUseAcceleratedDrawing by merging it into the global feature set.

        (WTR::TestController::createWebViewWithOptions):
        Move WKHTTPCookieStoreDeleteAllCookies() call out of resetPreferencesToConsistentValues
        where it did not make sense.

        (WTR::TestController::resetPreferencesToConsistentValues):
        Replace preference setters that used values from TestOptions with use of the new
        WKPreferencesSetBoolValueForKey SPI. Also removes some unnecessary #ifdefs, as the API
        it was guarding is always available, though may just be a no-op if the feature is disabled.

        (WTR::TestController::resetStateToConsistentValues):
        Move Cocoa specific call to WebCoreTestSupport::setAdditionalSupportedImageTypesForTesting to
        TestControllerCocoa.mm and Gtk specific call to WKTextCheckerContinuousSpellCheckingEnabledStateChanged
        to TestControllerGtk.cpp.

        * WebKitTestRunner/TestController.h:
        Remove unimplemented globalFeatureDefaultsForTest() function and now unused m_shouldUseAcceleratedDrawing
        member variable.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::boolWKPreferences const):
        Add helper to get all the bool options in TestOptions that correspond with WebKit preferences.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::useAcceleratedDrawing const): Deleted.
        (WTR::TestOptions::useMockScrollbars const): Deleted.
        (WTR::TestOptions::needsSiteSpecificQuirks const): Deleted.
        (WTR::TestOptions::enableIntersectionObserver const): Deleted.
        (WTR::TestOptions::enableMenuItemElement const): Deleted.
        (WTR::TestOptions::enableKeygenElement const): Deleted.
        (WTR::TestOptions::enableModernMediaControls const): Deleted.
        (WTR::TestOptions::enablePointerLock const): Deleted.
        (WTR::TestOptions::enableWebAuthentication const): Deleted.
        (WTR::TestOptions::enableWebAuthenticationLocalAuthenticator const): Deleted.
        (WTR::TestOptions::enableInspectorAdditions const): Deleted.
        (WTR::TestOptions::allowCrossOriginSubresourcesToAskForCredentials const): Deleted.
        (WTR::TestOptions::domPasteAllowed const): Deleted.
        (WTR::TestOptions::enableColorFilter const): Deleted.
        (WTR::TestOptions::checkForWorldLeaks const): Deleted.
        (WTR::TestOptions::shouldIgnoreMetaViewport const): Deleted.
        (WTR::TestOptions::enableServiceControls const): Deleted.
        (WTR::TestOptions::enableAppNap const): Deleted.
        (WTR::TestOptions::enableBackForwardCache const): Deleted.
        (WTR::TestOptions::enableCaptureVideoInUIProcess const): Deleted.
        (WTR::TestOptions::enableCaptureVideoInGPUProcess const): Deleted.
        (WTR::TestOptions::enableCaptureAudioInUIProcess const): Deleted.
        (WTR::TestOptions::enableCaptureAudioInGPUProcess const): Deleted.
        Remove all getters that are now replaced by boolWKPreferences.
        Also, sorts all the lists to make it easier to find things.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):
        Remove setting of configuration values that also covered by boolWKPreferences.

        (WTR::TestController::cocoaResetStateToConsistentValues):
        Move Cocoa specific call here.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformResetStateToConsistentValues):
        Move Gtk specific call here.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        (WTR::TestController::platformConfigureViewForTest):
        Remove setting of configuration values that also covered by boolWKPreferences.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformResetStateToConsistentValues):
        Moved default no-op implementation from TestController.cpp now that not all
        non-Cocoa platforms use the same implementation.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformResetStateToConsistentValues):
        Moved default no-op implementation from TestController.cpp now that not all
        non-Cocoa platforms use the same implementation.

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

        -Wdeprecated-declarations caused by WKTR using WKBundlePostSynchronousMessage
        https://bugs.webkit.org/show_bug.cgi?id=217591

        Reviewed by Darin Adler.

        Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::postSynchronousMessage):

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

        [macOS] Harden more build configurations against macOS versions 11 and higher as well as inclusion of patch versions
        https://bugs.webkit.org/show_bug.cgi?id=217595

        Reviewed by Alexey Proskuryakov.

        * ContentExtensionTester/Configurations/Base.xcconfig: Updated to same idiom used elsewhere.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Ditto.
        * ImageDiff/cg/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig: Ditto.

        * Scripts/webkitpy/common/config/contributors.json: Added contributor Luming Yin, an engineer who works on Safari at
        Apple who has been contributing build fixes like these.

2020-10-10  Darin Adler  <darin@apple.com>

        REGRESSION (r267761): editing/mac/spelling/autocorrection-contraction.html is a constant timeout on macOS wk2 Debug
        https://bugs.webkit.org/show_bug.cgi?id=217548

        Reviewed by Alexey Proskuryakov.

        * TestRunnerShared/Bindings/JSBasics.cpp:
        (WTR::objectProperty): Use JSValueIsObject instead of JSValueToObject. The latter
        function is *very* slow when passed undefined or null, creating an exception object
        every time, even when we pass nullptr to indicate that we don't want the exception
        object, and also invoking debugging machinery to inform the "inspector" about this
        exception, which results in logging to the console while running tests. This
        inefficiency is something we can fix in JavaScriptCore if we like, and makes it a
        bad idea to call the function on undefined and null. And also points out the problem
        with passing exceptions to anyone except the caller: there's no reason the inspector
        needs to know about the exception in a case like this. Because the uses of this
        function in the test runners don't need that behavior of converting non-object values
        to objects, it was best just to stop using JSValueToObject entirely.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): Use uint64Value here. Just something
        missed in my earlier refactoring and spotted while debugging.

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

        [webkitscmpy] Support json encoding of Commit object
        https://bugs.webkit.org/show_bug.cgi?id=217533
        <rdar://problem/70151709>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit.__repr__): Support identifiers being 0.
        (Commit.Encoder): Encode commit as dictionary.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:

2020-10-11  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix WK2 Debug test failures
        https://bugs.webkit.org/show_bug.cgi?id=217500

        WebKitTestRunner also uses WebCoreTestSupport's JIT operations so we need to populate them too.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):

2020-10-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Assert Operation and HostFunction are in JITOperationsList
        https://bugs.webkit.org/show_bug.cgi?id=217500

        Reviewed by Saam Barati.

        This patch turned out that WebCoreTestSupport has its own JIT operations. So we need to populate them in test harness specially.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

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

        [webkitscmpy] Handle svn info run from directory
        https://bugs.webkit.org/show_bug.cgi?id=217521
        <rdar://problem/70144173>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.__init__): Set the root_path, so that svn info is run from the top level.
        (Svn.info): Rely on root_path, not path.
        (Svn.root_path): Use self._root_path instead of self.info() call.
        (Svn.list): Rely on root_path, not path.
        (Svn._cache_revisions):  Ditto.
        (Svn.remote): The repository root will not change during a single command invocation.
        (Svn._branch_for): Handle initial branch commits, which. may have non-standard change lists.
        (Svn.commit): Rely on root_path, not path, certain svn info calls will not change during
        the invocation of a single program.

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

        REGRESSION: [Mac Release] 2 Cookie API are failing
        https://bugs.webkit.org/show_bug.cgi?id=217393

        Reviewed by Chris Dumez.

        If bad things happen when running API tests, the TestWebKitAPI default cookie storage can get stuck with
        a cookie accept policy of never, which causes future tests to fail.  All existing tests restore the cookie
        accept policy to what it was before the test started, but once a machine gets into a bad state, there's nothing
        to reset it to the default state.  Some of our test bots have gotten into this bad state, causing 2 cookie API
        tests to fail.  To fix this, set the cookie accept policy to its default value before running these two tests.
        I verified this works by getting my computer into this bad state, verifying repeated API test runs don't fix it,
        and verified this brings the computer back into a good state and causes the API tests to pass again.

        * TestWebKitAPI/Tests/WebKitCocoa/CookiePrivateBrowsing.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):

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

        [webkitscmpy] Support unicode contributor names
        https://bugs.webkit.org/show_bug.cgi?id=217520
        <rdar://problem/70143490>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.__init__): Standardize name and emails as unicode.
        (Contributor.__repr__): Ensure native string representation.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor):
        (TestContributor.test_unicode):

2020-10-09  Kate Cheney  <katherine_cheney@apple.com>

        Promote WKWebView media playback SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=217335
        <rdar://problem/63406100>

        Reviewed by Jer Noble.

        Add API testing coverage for new API. Also converted testing to
        use the new API instead of SPI.

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

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

        [webkitpy] Use webkitcorepy's auto installer for pytest packages
        https://bugs.webkit.org/show_bug.cgi?id=215895
        <rdar://problem/67885471>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/__init__.py: Add pytest and it's dependencies.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove pytest and pytest_timeout.
        (AutoinstallImportHook._install_pytest_timeout): Deleted.
        (AutoinstallImportHook._install_pytest): Deleted.
        * Scripts/webkitpy/webdriver_tests/pytest_runner.py: Implicitly use webkitcorepy's autoinstaller.

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

        Use sendWithAsyncReply for NetworkProcess::CancelDownload
        https://bugs.webkit.org/show_bug.cgi?id=217420

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[WaitUntilDownloadCanceledDelegate _download:didFailWithError:]):
        (-[DownloadMonitorTestDelegate _download:didFailWithError:]):
        (-[DownloadMonitorTestDelegate waitForDidFail]):
        (-[DownloadMonitorTestDelegate stopWaitingForDidFail]):
        (TestWebKitAPI::monitorDelegate):
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):
        (TestWebKitAPI::downloadAtRate):
        (TestWebKitAPI::TEST):
        (-[WaitUntilDownloadCanceledDelegate _downloadDidCancel:]): Deleted.
        (-[DownloadMonitorTestDelegate _downloadDidCancel:]): Deleted.

2020-10-09  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Fix tests compilation warnings with deprecated API
        https://bugs.webkit.org/show_bug.cgi?id=217504

        Reviewed by Carlos Garcia Campos.

        webkit_web_context_set_network_proxy_settings() is deprecated in favor of
        webkit_website_data_manager_set_network_proxy_settings().

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (ProxyAuthenticationTest::ProxyAuthenticationTest):

2020-10-09  Paulo Matos  <pmatos@igalia.com>

        Add armv8l arch to generic arm umbrella architecture variable
        https://bugs.webkit.org/show_bug.cgi?id=217470

        Reviewed by Adrian Perez de Castro.

        The armv8l architecture specifies a system running an arm64 kernel
        but running in 32bit user land. Therefore for JSC purposes armv8l and
        armv7l are arm (32bit) architectures.

        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture):

2020-10-01  Matt Lewis  <jlewis3@apple.com>

        Move EWS to new SDKs: tvOS 14, and watchOS 7.
        https://bugs.webkit.org/show_bug.cgi?id=217145

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json:

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

        Make it possible to send an arbitrary IPC message from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=217423
        <rdar://problem/69969351>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm: Added.
        (-[IPCTestingAPIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

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

        Refactor TestOptions code in WebKitTestRunner to make it easier to rationalize and extend
        https://bugs.webkit.org/show_bug.cgi?id=217390

        Reviewed by Darin Adler.

        Refactors TestOptions code in WebKitTestRunner to make it clear how options coming in at 
        different levels are treated and what precedence each has. The order is (from least to most):
        
        - Global features passed to WebKitTestRunner via the command line (e.g. --show-touches)
        - Hardcoded features based on the path of the test being run (hopefully we can remove all soon)
        - Hardcoded platform specific defaults (currently only used by macOS for useThreadedScrolling).
        - Features from the test headers within the test itself.
        - Finally, a second chance for more platform specific defaults (currenly only used the Cocoa ports
          for setting enableProcessSwapOnNavigation and enableProcessSwapOnWindowOpen based on NSUserDefaults.)

        To make this change work, and pave the way for future autogeneration of some of these test options,
        the TestOptions struct (now class) was overhauled. Instead of storing the state itself, TestOptions
        is now an immutable owner of a TestFeatures object. TestFeatures is a simple struct that contains maps 
        of option keys to values and can be merged with other TestFeatures objects. TestOptions takes a 
        TestFeatures at construction, and exposes getters for all keys, as well as defaults for when they are
        not in the maps. In future changes, I would like to remove many of these (the ones that correspond
        with WebKit preferences anyway) and have the keys and values automatically dealt with by WKPreferences.

        * WebKitTestRunner/Options.cpp:
        * WebKitTestRunner/Options.h:
        Switch to std::unordered_map for consistency and ease of conversion.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::viewSupportsOptions const):
        Update to call new TestOptions functions.

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK):
        (WTR::toWTFString):
        Add conversions for std::string.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Replace some bools with a new global TestFeatures instance that forms the base of
        all TestFeatures merges.
        
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        Update to call new TestOptions functions.
        
        (WTR::TestController::createTestURL):
        Expose as a static member function on TestController for use in other files.
        
        (WTR::TestController::testOptionsForTest const):
        Rework to be a sequence of TestFeatures merges.
        
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        Update to call new TestOptions functions.
        
        (WTR::createTestURL): Deleted.
        (WTR::parseBooleanTestHeaderValue): Deleted.
        (WTR::parseStringTestHeaderValueAsRelativePath): Deleted.
        (WTR::parseStringTestHeaderValueAsURL): Deleted.
        (WTR::updateTestOptionsFromTestHeader): Deleted.
        (WTR::TestController::platformAddTestOptions const): Deleted.
        Moved TestOptions parsing to TestOptions.cpp

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::createTestSettingsDictionary):
        Update to call new TestOptions functions.

        * WebKitTestRunner/TestOptions.h:
        Reworks TestOptions to be an immutable owner of a TestFeatures struct, which is a set
        of maps that map feature string keys, to values of type bool, double, string or string vector.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::merge):
        Merges two TestFeatures objects. If both contain the same key, the 'additional'
        TestFeatures overrides the 'base' TestFeatures.

        (WTR::dumpFeatures):
        Helper to dump features to stderr, useful for debugging.

        (WTR::keyType):
        Helper for parser to know which value parser to use.

        (WTR::parseBooleanTestHeaderValue):
        (WTR::parseStringTestHeaderValueAsRelativePath):
        (WTR::parseStringTestHeaderValueAsURL):
        Value parsers moved from TestController.cpp

        (WTR::parseTestHeader):
        Header parser moved from TestController.cpp. Update to now return
        a TestFeatures object and use keyType to pick value parser rather
        than inlining the if statements.
        
        (WTR::hardcodedFeaturesBasedOnPathForTest):
        Moved from the TestOptions contructor and reworked to return a TestFeatures
        object to be merged by the caller.

        (WTR::featureDefaultsFromTestHeaderForTest):
        Creates a TestFeatures for the test headers of the current test.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformSpecificFeatureOverridesDefaultsForTest const):
        Reworked to now return a TestFeatures object that will be merged, rather than updating
        a TestOptions. Moves enableInAppBrowserPrivacy work to TestController::platformWillRunTest
        where it is more appropriate.

        (WTR::TestController::platformInitializeDataStore):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::finishCreatingPlatformWebView):
        (WTR::TestController::setApplicationBundleIdentifier):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::contentMode):
        Update to call new TestOptions functions.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformConfigureViewForTest):
        Update to call new TestOptions functions.
        
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Moved GeneratedTouchesDebugWindow work to TestController::platformConfigureViewForTest
        where it is more appropriate and removed shouldShowTouches setting as that is done
        globally now. 
        
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Update to call new TestOptions functions.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Remove shouldUseRemoteLayerTree and shouldShowWebView, as those are now done globally,
        and re-implemented useThreadedScrolling to use boolFeatures.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Updated for new signature.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Updated for new signature.

        * WebKitTestRunner/gtk/TestControllerGTK.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Updated for new signature.

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

        REGRESSION (r267763): [ iOS wk2 ] http/tests/in-app-browser-privacy/non-app-bound-domain-does-not-get-app-bound-session.html is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=217386

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformAddTestOptions const):
        (WTR::TestController::platformInitializeDataStore):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

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

        [webkitpy] Support custom version information
        https://bugs.webkit.org/show_bug.cgi?id=217485
        <rdar://problem/70069051>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):

2020-10-08  Keith Rollin  <krollin@apple.com>

        Remove copy-webkitlibraries-to-product-directory
        https://bugs.webkit.org/show_bug.cgi?id=217465
        <rdar://problem/70082193>

        Reviewed by Darin Adler.

        This script no longer does anything, so remove it along with the
        scaffolding around it that invokes it during the build.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory: Removed.

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

        Crash under WebKit::WebProcessCache::clear()
        https://bugs.webkit.org/show_bug.cgi?id=217480

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Adjust heuristic for checking whether view reaches visually non-empty state
        https://bugs.webkit.org/show_bug.cgi?id=217400

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/deferred-script-load-in-empty-document.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/FirstVisuallyNonEmptyMilestone.mm:
        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
        (TEST):

2020-10-07  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION(r268123): [ iOS ] 4 TestWebKitAPI.WebKitLegacy failures: File name unavailable. Unknown C++ exception thrown in the test body.
        https://bugs.webkit.org/show_bug.cgi?id=217445
        <rdar://problem/70063370>

        Reviewed by Wenson Hsieh.

        The patch which introduced these tests swizzled [UIDatePicker setDatePickerMode:]
        to avoid a crash within UIKit, resulting from the fact that TestWebKitAPI isn't
        actually an app.
 
        However, this was not a reliable solution since UIKit was still attempting to
        create a QoS interval. To fix, swizzle out a method much closer to the source
        of the exception: [UITableView cellForRowAtIndexPath:].

        * TestWebKitAPI/Tests/WebKitLegacy/ios/DateTimeInputsAccessoryViewTests.mm:
        (cellForRowAtIndexPath):
        (runTestWithInputType):

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

        [build.webkit.org] Ensure that builder names are valid Buildbot identifiers
        https://bugs.webkit.org/show_bug.cgi?id=217434

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Updated builder names.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Ensure that unit-tests fail when any builder name does
        not follow required naming convention.

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

        REGRESSION (r268080): [test-webkitpy] Mojave bots failing to install python-dateutil-2.8.1
        https://bugs.webkit.org/show_bug.cgi?id=217438

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Include wheel package.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): The wheel package may be needed by setup tools.

2020-10-07  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK][WPE] Remove Apache's mod_bw from install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=217441

        Reviewed by Carlos Alberto Lopez Perez.

        It is not activated in any of Apache configs in LayoutTests, and is not
        referenced anywhere else.

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

2020-10-07  Karl Rackler  <rackler@apple.com>

        Unreviewed, reverting r268115.

        This reverts commit r268115 while investigating ews test
        failure.

        Reverted changeset:

        "Refactor TestOptions code in WebKitTestRunner to make it
        easier to rationalize and extend"
        https://bugs.webkit.org/show_bug.cgi?id=217390
        https://trac.webkit.org/changeset/268115

2020-10-07  Basuke Suzuki  <basuke.suzuki@sony.com>

        [build-webkit] Compare with cmakeargs and unhandled to detect configuration change
        https://bugs.webkit.org/show_bug.cgi?id=207012

        Reviewed by Carlos Alberto Lopez Perez.

        Added command line arguments on top of @featureArgs for comparison with previous build
        options. This forces regeneration of CMakeCache.txt when any configuration is changed.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache):

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

        [build.webkit.org] Ensure that invalid step names are not allowed
        https://bugs.webkit.org/show_bug.cgi?id=217431

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig):

2020-10-07  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION: Date/time pickers are not displayed in UIWebViews
        https://bugs.webkit.org/show_bug.cgi?id=217341
        <rdar://problem/66881739>

        Reviewed by Wenson Hsieh.

        Added regression tests to ensure this preference is not accidently
        modified in the future.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/DateTimeInputsAccessoryViewTests.mm: Added.
        (-[DateTimeInputsTestsLoadingDelegate webViewDidFinishLoad:]):
        (runTestWithInputType):

        Note that [UIDatePicker setDatePickerMode:] had to be swizzled to an
        empty implementation as the UIKit version on the bots attempts to
        create a QoS interval upon setting the initially selected row in
        a UITableView when the date picker is presented. This fails because
        TestWebKitAPI isn't actually an app. To avoid an exception, the method
        is swizzled out.

2020-10-06  Devin Rousso  <drousso@apple.com>

        Move platform logic for CSS `hover` and `pointer` media queries outside of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=217413

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (iOSMouseSupport.MouseInitiallyDisconnected):
        (iOSMouseSupport.MouseInitiallyConnected):
        (iOSMouseSupport.MouseLaterDisconnected):
        (iOSMouseSupport.MouseLaterConnected):
        (iOSMouseSupport.MouseAlwaysConnected):

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

        Refactor TestOptions code in WebKitTestRunner to make it easier to rationalize and extend
        https://bugs.webkit.org/show_bug.cgi?id=217390

        Reviewed by Darin Adler.

        Refactors TestOptions code in WebKitTestRunner to make it clear how options coming in at 
        different levels are treated and what precedence each has. The order is (from least to most):
        
        - Global features passed to WebKitTestRunner via the command line (e.g. --show-touches)
        - Hardcoded features based on the path of the test being run (hopefully we can remove all soon)
        - Hardcoded platform specific defaults (currently only used by macOS for useThreadedScrolling).
        - Features from the test headers within the test itself.
        - Finally, a second chance for more platform specific defaults (currenly only used the Cocoa ports
          for setting enableProcessSwapOnNavigation and enableProcessSwapOnWindowOpen based on NSUserDefaults.)

        To make this change work, and pave the way for future autogeneration of some of these test options,
        the TestOptions struct (now class) was overhauled. Instead of storing the state itself, TestOptions
        is now an immutable owner of a TestFeatures object. TestFeatures is a simple struct that contains maps 
        of option keys to values and can be merged with other TestFeatures objects. TestOptions takes a 
        TestFeatures at construction, and exposes getters for all keys, as well as defaults for when they are
        not in the maps. In future changes, I would like to remove many of these (the ones that correspond
        with WebKit preferences anyway) and have the keys and values automatically dealt with by WKPreferences.

        * WebKitTestRunner/Options.cpp:
        * WebKitTestRunner/Options.h:
        Switch to std::unordered_map for consistency and ease of conversion.

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::viewSupportsOptions const):
        Update to call new TestOptions functions.

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK):
        (WTR::toWTFString):
        Add conversions for std::string.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Replace some bools with a new global TestFeatures instance that forms the base of
        all TestFeatures merges.
        
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        Update to call new TestOptions functions.
        
        (WTR::TestController::createTestURL):
        Expose as a static member function on TestController for use in other files.
        
        (WTR::TestController::testOptionsForTest const):
        Rework to be a sequence of TestFeatures merges.
        
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        Update to call new TestOptions functions.
        
        (WTR::createTestURL): Deleted.
        (WTR::parseBooleanTestHeaderValue): Deleted.
        (WTR::parseStringTestHeaderValueAsRelativePath): Deleted.
        (WTR::parseStringTestHeaderValueAsURL): Deleted.
        (WTR::updateTestOptionsFromTestHeader): Deleted.
        (WTR::TestController::platformAddTestOptions const): Deleted.
        Moved TestOptions parsing to TestOptions.cpp

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::createTestSettingsDictionary):
        Update to call new TestOptions functions.

        * WebKitTestRunner/TestOptions.h:
        Reworks TestOptions to be an immutable owner of a TestFeatures struct, which is a set
        of maps that map feature string keys, to values of type bool, double, string or string vector.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::merge):
        Merges two TestFeatures objects. If both contain the same key, the 'additional'
        TestFeatures overrides the 'base' TestFeatures.

        (WTR::dumpFeatures):
        Helper to dump features to stderr, useful for debugging.

        (WTR::keyType):
        Helper for parser to know which value parser to use.

        (WTR::parseBooleanTestHeaderValue):
        (WTR::parseStringTestHeaderValueAsRelativePath):
        (WTR::parseStringTestHeaderValueAsURL):
        Value parsers moved from TestController.cpp

        (WTR::parseTestHeader):
        Header parser moved from TestController.cpp. Update to now return
        a TestFeatures object and use keyType to pick value parser rather
        than inlining the if statements.
        
        (WTR::hardcodedFeaturesBasedOnPathForTest):
        Moved from the TestOptions contructor and reworked to return a TestFeatures
        object to be merged by the caller.

        (WTR::featureDefaultsFromTestHeaderForTest):
        Creates a TestFeatures for the test headers of the current test.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformSpecificFeatureOverridesDefaultsForTest const):
        Reworked to now return a TestFeatures object that will be merged, rather than updating
        a TestOptions. Moves enableInAppBrowserPrivacy work to TestController::platformWillRunTest
        where it is more appropriate.

        (WTR::TestController::platformInitializeDataStore):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::finishCreatingPlatformWebView):
        (WTR::TestController::setApplicationBundleIdentifier):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::contentMode):
        Update to call new TestOptions functions.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformConfigureViewForTest):
        Update to call new TestOptions functions.
        
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Moved GeneratedTouchesDebugWindow work to TestController::platformConfigureViewForTest
        where it is more appropriate and removed shouldShowTouches setting as that is done
        globally now. 
        
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Update to call new TestOptions functions.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Remove shouldUseRemoteLayerTree and shouldShowWebView, as those are now done globally,
        and re-implemented useThreadedScrolling to use boolFeatures.

        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Updated for new signature.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Updated for new signature.

        * WebKitTestRunner/gtk/TestControllerGTK.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const): Deleted.
        Updated for new signature.

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

        <input type="datetime-local"> not show calendar UI when it's inside ShadowDOM
        https://bugs.webkit.org/show_bug.cgi?id=216985
        <rdar://problem/69660273>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp:
        (TestWebKitAPI::createDocument):
        Update to pass a Settings object to Document::create which is now required.

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

        Reloading a view in its processTerminationHandler does not work reliably when using related views
        https://bugs.webkit.org/show_bug.cgi?id=217407

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebContentProcessDidTerminate.mm:
        (-[NavigationDelegateWithCrashHandlerThatLoadsAgain _webView:webContentProcessDidTerminateWithReason:]):
        (-[NavigationDelegateWithCrashHandlerThatLoadsAgain webView:didFinishNavigation:]):
        (TEST):

2020-10-06  Devin Rousso  <drousso@apple.com>

        CSS hover and "pointer: fine" media queries do not evaluate to true with iOS 13.4 mouse support
        https://bugs.webkit.org/show_bug.cgi?id=209292
        <rdar://problem/60663124>

        Reviewed by Tim Horton.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView evaluateMediaQuery:]): Added.
        Create helper function for synchronously testing media queries.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (iOSMouseSupport.MouseInitiallyDisconnected): Added.
        (iOSMouseSupport.MouseInitiallyConnected): Added.
        (iOSMouseSupport.MouseLaterDisconnected): Added.
        (iOSMouseSupport.MouseLaterConnected): Added.
        (iOSMouseSupport.MouseAlwaysConnected): Added.

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

        [webkitscmpy] Generate Commit object from local repository
        https://bugs.webkit.org/show_bug.cgi?id=216404
        <rdar://problem/68702897>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:
        (Memoize.__call__.decorator): Handle case where function arguments are different.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/popen.py:
        (PopenBase.poll): Reset stdout and stderr after calling the completion handler.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/decorators_unittest.py:
        (TestMemoize.test_conflicting_args):
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor): Number of lines may be singular.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git):
        (Git.__init__): Caller may wish to specify the patterns for production and development branches.
        (Git.branches): Call the more general _branches_for to unify remote stripping logic.
        (Git._commit_count): Given a parameter (hash, branch, difference between default branch and commit), compute
        the number of commits.
        (Git._branches_for): Given a hash, return all branches the commit is part of.
        (Git.commit): Construct a commit given a commit hash, revision, identifier or branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm):
        (Scm.__init__): Caller may wish to specify the patterns for production and development branches.
        (Scm.commit): Construct a commit given a commit hash, revision, identifier or branch.
        (Scm.prioritize_branches): Given a set of branches, pick the highest priority one.
        (Scm.log): Log error to a configured logger or stderr.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn):
        (Svn.__init__): Caller may wish to specify the patterns for production and development branches.
        (Svn.info): Allow info for a specific commit to be queried.
        (Svn._cache_path): Path to json cache of branch-commit mapping.
        (Svn._cache_revisions): Query the remote for a specific branch to get the list of all commits on that branch.
        (Svn._commit_count): Given a revision or branch, compute the number of commits.
        (Svn._branch_for): Given a revision, use local data to determine the most likely branch before asking the remote which branch
        a commit is on.
        (Svn.commit): Construct a commit given a commit hash, revision, identifier or branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): Add commands needed to construct an identifier, add mock commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn): Add commands needed to construct an identifier, add mock commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor.test_short_svn_log):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/scm_unittest.py:
        (TestScm.test_remote):
        (TestScm):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn):

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

        [build.webkit.org] Ensure that steps names are valid Buildbot identifiers
        https://bugs.webkit.org/show_bug.cgi?id=217394

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/steps.py: Removed spaces from step names.
        (ConfigureBuild):
        (KillOldProcesses):
        (CleanBuildIfScheduled):
        (DeleteStaleBuildFiles):
        (RunGLibAPITests):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Updated unit-tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:

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

        run-minibrowser not compatible with python3
        https://bugs.webkit.org/show_bug.cgi?id=217368

        Reviewed by Adrian Perez de Castro.

        * Scripts/webkitpy/minibrowser/run_webkit_app.py: Use webkitcorepy's unicode().

2020-10-06  Adrian Perez de Castro  <aperez@igalia.com>

        REGRESSION(r267399): [WPE] Build broken with ENABLE_ACCESSIBILITY=OFF
        https://bugs.webkit.org/show_bug.cgi?id=217380

        Reviewed by Philippe Normand.

        Before the ATK::Bridge target got introduced in r267399 a couple of CMake variables were
        used, which were empty when the accessility support was disabled and nothing was being
        added to the WebKit and WPEToolingBackends targets. Now that an imported target is used
        it is needed to add it as a dependency conditionally to avoid using an undefined target
        name.

        * wpe/backends/CMakeLists.txt: Use the ATK::Bridge target only when ENABLE_ACCESSIBILITY is set.

2020-10-05  Aditya Keerthi  <akeerthi@apple.com>

        Unreviewed. Update my primary email address.

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

2020-10-05  Eric Carlson  <eric.carlson@apple.com>

        Disable media capture if an app's entitlements won't allow access to capture devices
        https://bugs.webkit.org/show_bug.cgi?id=217319
        <rdar://problem/69956112>

        Unreviewed, address post-review comments.

        * MiniBrowser/mac/Info.plist: Update media capture usage strings.
        * MobileMiniBrowser/MobileMiniBrowser/Info.plist: Ditto.

2020-10-05  Eric Carlson  <eric.carlson@apple.com>

        Disable media capture if an app's entitlements won't allow access to capture devices
        https://bugs.webkit.org/show_bug.cgi?id=217319
        <rdar://problem/69956112>

        Reviewed by Youenn Fablet.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate defaultConfiguration]): Don't set configuration._mediaCaptureEnabled,
        it should no longer be necessary.

        * MiniBrowser/mac/Info.plist: Remove unneeded keys.

        * MobileMiniBrowser/MobileMiniBrowser/Info.plist: Ditto. Add usage strings.

2020-10-05  Aditya Keerthi  <akeerthi@apple.com>

        [Contact Picker API] Introduce bindings for the Contact Picker API
        https://bugs.webkit.org/show_bug.cgi?id=216793
        <rdar://problem/69317957>

        Reviewed by Wenson Hsieh.

        Added plumbing to support the associated experimental test option.

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

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

        Remove support for enabling subpixel CSSOM values, it's off by default everywhere and known to be not-compatible with the web
        https://bugs.webkit.org/show_bug.cgi?id=217300

        Reviewed by Simon Fraser.

        Remove support in MiniBrowser for toggling support for subpixel CSSOM values since it
        is no longer supported in WebCore.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleEnableSubPixelCSSOMMetrics:]): Deleted.
        (-[SettingsController subPixelCSSOMMetricsEnabled]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):

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

        Unify linkedOnOrAfter duplicate code and use SPI/WebCoreTestSupport instead of NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=217239

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (DumpRenderTreeMain):
        * MiniBrowser/mac/main.m:
        (main):
        * MobileMiniBrowser/MobileMiniBrowser/main.m:
        (main):
        * TestWebKitAPI/Configurations/TestWTF.xcconfig:
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):
        * WebKitTestRunner/ios/mainIOS.mm:
        (main):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):
        (main):

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

        Fix UTF-8 encoding in URL parsing
        https://bugs.webkit.org/show_bug.cgi?id=217289

        Reviewed by Darin Adler.

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

2020-10-05  Rob Buis  <rbuis@igalia.com>

        MIME type parser should skip trailing HTTP whitespace
        https://bugs.webkit.org/show_bug.cgi?id=217179

        Reviewed by Darin Adler.

        Add unit tests for trailing HTTP whitespace.

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

2020-10-04  Brian Burg  <bburg@apple.com>

        [Cocoa] Add WKUIDelegate SPI to inform clients when a _WKInspector is about to close
        https://bugs.webkit.org/show_bug.cgi?id=217233

        Reviewed by Timothy Hatcher and Devin Rousso.

        Add new test case for -_webView:willCloseLocalInspector:.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (-[InspectorDelegate inspectorDidEnableBrowserDomain:]):
        (-[UIDelegate _webView:didAttachLocalInspector:]):
        (-[UIDelegate _webView:willCloseLocalInspector:]):
        (TEST):
        Clean up how the other test case works so we don't call close from
        inside a delegate callback. Let's keep our tests structured the same way.

2020-10-04  Ryan Hostetler  <rhost@apple.com>

        Submission failure with "make: *** No rule to make target `installsrc'. Stop"
        https://bugs.webkit.org/show_bug.cgi?id=214696
        <rdar://problem/62268104>

        Reviewed by Darin Adler.

        Add support for XBS single base project build for WebKit repository.
        This change allows internal tools to submit and build from the repository root in a single step.

        * Makefile:
        Tools does not need to be submitted, so we stub out the installsrc phase.

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

        Add extra slash after empty host copied from base URL if path is also empty
        https://bugs.webkit.org/show_bug.cgi?id=217278

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:

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

        "http:" should not be a valid URL
        https://bugs.webkit.org/show_bug.cgi?id=217250

        Reviewed by Brady Eidson.

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

2020-10-03  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Enable date, time, and datetime-local input types
        https://bugs.webkit.org/show_bug.cgi?id=217229
        <rdar://problem/69882757>

        Reviewed by Sam Weinig.

        Update test expectations now that these input types no longer fallback
        to text fields. Also removed the test for input type=datetime, as it
        has been removed from the spec.

        * TestWebKitAPI/Tests/WebKitCocoa/InjectedBundleNodeHandleIsTextField.mm:
        (-[InjectedBundleNodeHandleIsTextField webProcessPlugIn:didCreateBrowserContextController:]):

2020-10-02  Yusuke Suzuki  <ysuzuki@apple.com>

        std::once_flag must be allocated in static storage
        https://bugs.webkit.org/show_bug.cgi?id=217271

        Reviewed by Mark Lam.

        Added cpplint rule for non-static std::once_flag / dispatch_once_t.

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

2020-10-02  Kate Cheney  <katherine_cheney@apple.com>

        Multiple calls to suspend media playback for the same page may result in resuming media playback too soon
        https://bugs.webkit.org/show_bug.cgi?id=217228
        rdar://problem/69709346

        Reviewed by Eric Carlson.

        Add API test coverage. Fix the existing SuspendResumeAllMediaPlayback
        test which had a small JavaScript bug, and was missing a call to
        TestWebKitAPI::Util::run(&didReject) which allowed the bug to go
        unnoticed.

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

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

        [webkitscmpy] Remove "i" from canonical identifier
        https://bugs.webkit.org/show_bug.cgi?id=217238
        <rdar://problem/69888017>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit):
        (Commit.pretty_print): Remove "i" from canonical identifier, add branch point.
        (Commit.__repr__): Remove "i" from canonical identifier.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
        (TestCommit.test_parse_revision):
        (TestCommit.test_parse_identifier):
        (TestCommit.test_parse):
        (TestCommit.test_pretty_print):

2020-10-02  Philippe Normand  <pnormand@igalia.com>

        [CMake] unused variable warning spam in UIScriptController.h
        https://bugs.webkit.org/show_bug.cgi?id=217176

        Reviewed by Adrian Perez de Castro.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_generateImplementationFile): Generate macros for unused variables.
        * TestRunnerShared/UIScriptContext/UIScriptController.h: Remove unused variable names declarations.
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        (WTR::UIScriptController::overridePreference):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::immediateZoomToScale):
        (WTR::UIScriptController::setSafeAreaInsets):
        (WTR::UIScriptController::propertiesOfLayerWithID const):
        (WTR::UIScriptController::scrollToOffset):
        (WTR::UIScriptController::immediateScrollToOffset):
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):
        (WTR::UIScriptController::touchDownAtPoint):
        (WTR::UIScriptController::liftUpAtPoint):
        (WTR::UIScriptController::singleTapAtPoint):
        (WTR::UIScriptController::singleTapAtPointWithModifiers):
        (WTR::UIScriptController::twoFingerSingleTapAtPoint):
        (WTR::UIScriptController::doubleTapAtPoint):
        (WTR::UIScriptController::dragFromPointToPoint):
        (WTR::UIScriptController::longPressAtPoint):
        (WTR::UIScriptController::activateAtPoint):
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::toggleCapsLock):
        (WTR::UIScriptController::applyAutocorrection):
        (WTR::UIScriptController::replaceTextAtRange):
        (WTR::UIScriptController::stylusDownAtPoint):
        (WTR::UIScriptController::stylusMoveToPoint):
        (WTR::UIScriptController::stylusUpAtPoint):
        (WTR::UIScriptController::stylusTapAtPoint):
        (WTR::UIScriptController::stylusTapAtPointWithModifiers):
        (WTR::UIScriptController::sendEventStream):
        (WTR::UIScriptController::playBackEventStream):
        (WTR::UIScriptController::dismissFilePicker):
        (WTR::UIScriptController::setTimePickerValue):
        (WTR::UIScriptController::setDefaultCalendarType):
        (WTR::UIScriptController::findString):
        (WTR::UIScriptController::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        (WTR::UIScriptController::rectForMenuAction const):
        (WTR::UIScriptController::attachmentInfo):
        (WTR::UIScriptController::insertAttachmentForFilePath):

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

        Update my information in contributors.json

        Unreviewed.

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

2020-10-02  Sam Weinig  <weinig@apple.com>

        Remove code behind ENABLE(MEDIA_SESSION), no ports enable it
        https://bugs.webkit.org/show_bug.cgi?id=216831

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm:
        Remove support for building with MEDIA_SESSION enabled.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        Update names to new 'unused' naming.

2020-10-02  Karl Rackler  <rackler@apple.com>

        Unreviewed, reverting r267796.

        This change is breaking the build on AzulE debug bots.

        Reverted changeset:

        "Remove code behind ENABLE(MEDIA_SESSION), no ports enable it"
        https://bugs.webkit.org/show_bug.cgi?id=216831
        https://trac.webkit.org/changeset/267796

2020-10-02  Andres Gonzalez  <andresg_22@apple.com>

        Layout Test accessibility/mac/html5-input-number.html is flaky.
        https://bugs.webkit.org/show_bug.cgi?id=180560
        <rdar://problem/36029379>

        Reviewed by Chris Fleizach.

        Dispatch the computation of the role and subrole to secondary AX thread in isolated tree mode = 2.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):

2020-10-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] Fix MiniBrowser compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=217208

        Reviewed by Carlos Garcia Campos.

        webkit_web_context_set_network_proxy_settings() is deprecated in favor of
        webkit_website_data_manager_set_network_proxy_settings().
        webkit_web_context_set_tls_errors_policy() is deprecated in favor of
        webkit_website_data_manager_set_tls_errors_policy().

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

2020-10-02  Kimmo Kinnunen  <kkinnunen@apple.com>

        [iOS WK1] Crashes when using ANGLE WebGL from another thread
        https://bugs.webkit.org/show_bug.cgi?id=216106
        <rdar://problem/68602452>

        Reviewed by Kenneth Russell.

        Add a WK1 test which runs WebGL code both in
        client main thread and in web thread.
        This tests the case where ANGLE EGL context is
        not being held current in one thread while the
        other thread runs WebGL and thus ANGLE EGL code.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLNoCrashOnOtherThreadAccess.mm: Added.
        (-[WebGLNoCrashOnOtherThreadAccessWebViewDelegate webViewDidFinishLoad:]):
        (-[WebGLNoCrashOnOtherThreadAccessWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        (TestWebKitAPI::TEST):

2020-10-01  Aakash Jain  <aakash_jain@apple.com>

        Limit number of tests to log in case of large number of API test failures
        https://bugs.webkit.org/show_bug.cgi?id=217181

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults):

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

        [DRT] imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=217187

        Reviewed by Eric Carlson.

        The test sometimes fails with DRT only because window.AudioWorkletNode does not exist. The thing is that
        window.AudioWorkletNode only exists in secure contexts. DumpRenderTree::resetWebViewToConsistentState()
        was calling [WebFrame globalContext] before each test, which would eagerly create the Window JS wrapper
        if it did not exist yet. Because the wrapper would get created too early, its security origin upon
        creation was null and we would decide NOT to expose window.AudioWorkletNode.

        To address the issue, I updated DumpRenderTree::resetWebViewToConsistentState() to only call
        `WebCoreTestSupport::resetInternalsObject([mainFrame globalContext])` after each test, instead of doing
        it both before AND after. This new behavior is also more consistent with WebKitTestRunner.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentState):
        (runTest):

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

        [webkitscmpy] Support git-svn committers
        https://bugs.webkit.org/show_bug.cgi?id=217151
        <rdar://problem/69812996>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version number.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor):
        (Contributor.from_scm_log): Handle case where a commit does not contain an author.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor):
        (TestContributor.test_git_no_author):
        (TestContributor.test_git_svn_no_author):

2020-10-01  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Rename type to factory in config.json
        https://bugs.webkit.org/show_bug.cgi?id=217127

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py:

2020-10-01  Eric Carlson  <eric.carlson@apple.com>

        Prevent media capture unless the application has correct data for system permission prompt
        https://bugs.webkit.org/show_bug.cgi?id=217104
        <rdar://problem/69761929>

        Reviewed by Darin Adler.

        * MiniBrowser/mac/Info.plist: Add necessary entitlements and usage strings.

        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m:
        (-[WebViewController createWebView]): Setting the private capture preference is
        not necessary because we set configuration._mediaCaptureEnabled.

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

        Non-special URLs are not idempotent
        https://bugs.webkit.org/show_bug.cgi?id=215762

        Reviewed by Tim Horton.

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

2020-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update W3C WebDriver imported tests.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebKitDriverProtocol):
        (WebDriverW3CExecutor.__init__):
        (WebDriverW3CExecutor.setup):

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

        [Flatpak] Nightly runner requires user interaction
        https://bugs.webkit.org/show_bug.cgi?id=217092

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkit-flatpak-run-nightly: The most recent version is 0.3 currently, this is the
        branch that should be installed. At some point we could add a new option to override this
        though.

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

        [webkitscmpy] Add Commit object
        https://bugs.webkit.org/show_bug.cgi?id=216403
        <rdar://problem/68702779>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version number.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py: Added.
        (Commit):
        (Commit._parse_hash): Given a hash, verify that the provided argument is
        Actually a git hash.
        (Commit._parse_revision): Given a string or integer, verify the provided
        argument is a valid SVN revision and return the revision as an integer.
        (Commit._parse_identifier): Given a string or integer, verify the provided
        argument is a valid identifier and return the identifier and branch.
        (Commit.parse): Given a string representing a commit hash, svn revision or
        identifier, return a commit object.
        (Commit.__init__):
        (Commit.pretty_print): Return a long string displaying the metadata for the commit
        (Commit.__repr__): Return a one-line representation of the commit.
        (Commit.__hash__):
        (Commit.__cmp__): Compare two commit objects.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py: Added.
        (TestCommit):
        (TestCommit.test_parse_hash):
        (TestCommit.test_parse_revision):
        (TestCommit.test_parse_identifier):
        (TestCommit.test_parse):
        (TestCommit.test_pretty_print):

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

        [webkitscmpy] Check if a git checkout is linked to an SVN checkout
        https://bugs.webkit.org/show_bug.cgi?id=216888
        <rdar://problem/69446322>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Increment library version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.info): Run `git svn info` if in a Git-SVN checkout.
        (Git.is_svn): Check if in a Git-SVN checkout.
        (Git.is_git): Return True.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.is_svn): Return False.
        (Scm.is_git): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.is_svn): Return True.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add `git svn` commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_scm_type):
        (TestGit.test_info):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn.test_scm_type):

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

        [webkitpy] Use webkitcorepy's auto installer for html5lib
        https://bugs.webkit.org/show_bug.cgi?id=217130
        <rdar://problem/69798724>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/__init__.py: Add html5lib, webencodings and genshi.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove html5lib.
        (AutoinstallImportHook._install_mechanize):Ditto.
        (AutoinstallImportHook._install_beautifulsoup): Ditto.
        (AutoinstallImportHook._install_html5lib): Deleted.

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

        Remove code behind ENABLE(MEDIA_SESSION), no ports enable it
        https://bugs.webkit.org/show_bug.cgi?id=216831

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm:
        Remove support for building with MEDIA_SESSION enabled.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        Update names to new 'unused' naming.

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

        [GStreamer] Internal audio rendering support
        https://bugs.webkit.org/show_bug.cgi?id=207634

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py: White-list the new audio sink from the style checker.
        * TestWebKitAPI/Tests/WebKit/file-with-video.html: New utility functions to pause and seek in the video.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp: WPE test for external audio
        rendering support. A video file is loaded through the webview and the test receives
        notifications during playback. In order to reduce timeout risks, a seek near the end of the
        video is performed early on.
        (AudioRenderingWebViewTest::setup):
        (AudioRenderingWebViewTest::teardown):
        (AudioRenderingWebViewTest::AudioRenderingWebViewTest):
        (AudioRenderingWebViewTest::handleStart):
        (AudioRenderingWebViewTest::handleStop):
        (AudioRenderingWebViewTest::handlePause):
        (AudioRenderingWebViewTest::handleResume):
        (AudioRenderingWebViewTest::handlePacket):
        (AudioRenderingWebViewTest::waitUntilPaused):
        (AudioRenderingWebViewTest::waitUntilEOS):
        (AudioRenderingWebViewTest::state const):
        (beforeAll):

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

        [Flatpak SDK] Bump libwpe and wpebackend-fdo
        https://bugs.webkit.org/show_bug.cgi?id=217122

        Reviewed by Carlos Garcia Campos.

        * buildstream/elements/sdk/libwpe.bst: Bump to 1.8.0 and switch to Meson build system.
        * buildstream/elements/sdk/wpebackend-fdo.bst: Bump to 1.9.0 development version and switch
        to Meson build system.

2020-09-30  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Fix assertion in linux_get_crash_log.py using Python 2.7
        https://bugs.webkit.org/show_bug.cgi?id=217121

        Reviewed by Philippe Normand.

        Fix assertion in linux_get_crash_log.py using Python 2.7:
        worker/6: UnicodeEncodeError(''ascii' codec can't encode character u'\u201c' in position 85: ordinal not in range(128)') raised:

        Encode data as utf-8 before passing on to communicate(). 

        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator.generate_crash_log):

2020-09-29  Andres Gonzalez  <andresg_22@apple.com>

        Modify END_AX_OBJC_EXCEPTIONS macro to assert to aid debugging of layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=217096

        Reviewed by Chris Fleizach.

        ASSERT_NOT_REACHED on thrown exceptions. This will tell us immediately
        the location of a failure instead of silently swallowing the exception
        and posibly causing a hang/timeout much harder to find after the fact.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:

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

        [watchOS] AVKitSPI build fixes
        https://bugs.webkit.org/show_bug.cgi?id=217070
        <rdar://problem/69724883>

        Rubber-stamped by Eric Carlson.

        * Scripts/configure-xcode-for-embedded-development: Copy AVKit headers for watchOS.

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

        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=216041

        Reviewed by Brady Eidson.

        Most changes to tests are just calling a function on the WKWebsiteDataStore instead of the WKProcessPool
        because we want to do something with the network process and it has a new owner.
        Exceptions are noted inline.

        * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::downloadAtRate):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        (checkRecoveryAfterCrash):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        This test was making a WKWebsiteDataStore, getting its resource load statistics directory,
        putting things in that directory, then starting the network process and making sure everything
        works when initializing the network process.  Now, network process initialization happens when a
        WKWebsiteDataStore is instantiated, so we need to put things there before instantiating a WKWebsiteDataStore.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Before this change, each WKProcessPool had its own network process, which holds the service worker registry
        for the WebsiteDataStores used with that process pool.  Now, the network process still needs to have a service
        worker registry in it, but when we receive a message from it looking for a web process to run the service
        worker, we go arbitrarily to the first process pool that has a process we can use.  This logic is in 
        WebProcessPool::establishWorkerContextConnectionToNetworkProcess.  Because we use the first process pool each
        time, setting the custom user agent to two different things in two different process pools causes only one
        to be used.  This is not a problem in practice, though, because the only application that uses the SPI to
        set a service worker's custom user agent is Safari, which only has one process pool.  This test still verifies
        that a user ageint is correctly sent.
        Similarly, the tests that count service worker processes either have different results or need to be run with
        one process pool per parent process.  To keep the results the same, I separated the tests into different
        TEST(ServiceWorkers, ...) macros which are run in separate parent processes.
        The test RestoreFromDiskNonDefaultStore needs to use the same data store for both WKWebViews now because otherwise
        there was a race condition in the startup of a new network process that wasn't there before because we were using the
        same process pool and therefore the same network process.  I added spinning the run loop and sleeping to be able to
        reproduce the race condition failure and I use the same WKWebsiteDataStore to use the same network process, which was
        the intent of using the same WKProcessPool before.  The test still tests that the registration is re-used when we are
        not using the default data store.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (-[CheckSessionCookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[CheckSessionCookieUIDelegate waitForMessage]):
        (-[CheckSessionCookieUIDelegate alertCookieHTML]):
        (TEST):
        This is the whole point of me doing this.
        I took a test that was flaky only on iOS (because of different NSHTTPCookieStorage syncing behavior) and made
        it flaky nowhere (fingers crossed!) and added a test that correctly handles session cookies like we could not
        before this change.
        I also re-used some test infrastructure and made it stop using process-global static variables for test state.
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        (TEST):
        * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm:
        (-[CloseWhileStartingProtocol startLoading]):
        (TestWebKitAPI::runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        (WTR::TestController::networkProcessDidCrash):
        (WTR::TestController::terminateNetworkProcess):
        (WTR::TestController::platformAdjustContext):
        WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting is not needed, so I removed it.
        WKContextSetPrimaryWebsiteDataStore isn't needed any more because WKContextRef (WebProcessPool) doesn't
        own a network process any more, so it doesn't care which is the default WebsiteDataStore.
        In fact, the "default" WebsiteDataStore isn't really important in the network process any more.

2020-09-26  Darin Adler  <darin@apple.com>

        Refactor test runner code to cut down on copy/paste code and long-winded repetitive idioms
        https://bugs.webkit.org/show_bug.cgi?id=217028

        Reviewed by Sam Weinig.

        I did a lot of simplifying, but even more is possible. For some reason, the test
        code is a hotbed of repeated idioms, and copy and paste rather than helper functions.
        Even after the refactoring, I have some doubts about the way this code is written with
        so much repeated marshaling for each function.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::makeWindowObject): Use setGlobalObjectProperty.
        (AccessibilityController::createJSClass): Replaced getJSClass with this. Return a
        JSRetainPtr to make it clear this passes ownership to the caller.
        * DumpRenderTree/AccessibilityController.h: Updated for the above.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementCountForSearchPredicateCallback): Removed unneeded initialization of
        JSRetainPtr, which starts out null.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_platformTypeConstructor): Use toOptionalBool and createJSString.
        (_returnExpression): Use makeValue.

        * DumpRenderTree/GCController.cpp:
        (GCController::GCController): Deleted.
        (GCController::~GCController): Deleted.
        (collectCallback): Use a reference and auto.
        (collectOnAlternateThreadCallback): Ditto.
        (getJSObjectCountCallback): Ditto.
        (GCController::makeWindowObject): Use setGlobalObjectProperty.
        (AccessibilityController::createJSClass): Replaced getJSClass with this. Return a
        JSRetainPtr to make it clear this passes ownership to the caller.
        * DumpRenderTree/GCController.h: Updated for the above.

        * DumpRenderTree/TestRunner.cpp:
        (encodeHostNameCallback): Use createJSString.
        (execCommandCallback): Ditto.
        (findStringCallback): Ditto.
        (isCommandEnabledCallback): Ditto.
        (overridePreferenceCallback): Ditto.
        (queueLoadCallback): Ditto.
        (queueLoadHTMLStringCallback): Ditto.
        (TestRunner::makeWindowObject): Use setGlobalObjectProperty.
        (TestRunner::createJSClass): Replaced getJSClass with this. Return a
        JSRetainPtr to make it clear this passes ownership to the caller.
        (TestRunner::staticValues): Made return value const*.
        (TestRunner::staticFunctions): Ditto.
        (TestRunner::waitToDumpWatchdogTimerFired): Simplified printing.
        (TestRunner::cacheTestRunnerCallback): Updated to use object pointers as hash
        table values instead of values, since callbacks need to be objects.
        (TestRunner::callTestRunnerCallback): Ditto.
        (TestRunner::clearTestRunnerCallbacks): Ditto.
        (TestRunner::setOpenPanelFiles): Use arrayLength.
        * DumpRenderTree/TestRunner.h: Updated for the above.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::platformName const): Use createJSString.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (createEmptyJSString): Dleted.
        (AccessibilityUIElement::stringForTextMarkerRange): Use createJSString.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.

        * DumpRenderTree/mac/AccessibilityCommonMac.h: Removed unneeded "extern".

        * DumpRenderTree/mac/AccessibilityCommonMac.mm:
        (searchPredicateParameterizedAttributeForSearchCriteria): Use arrayLength.
        Removed unneeded call to JSValueToObject after JSValueIsObject.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::platformName const): Use createJSString.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (createEmptyJSString): Deleted.
        (selectTextParameterizedAttributeForCriteria): Use arrayLength.
        Removed unneeded call to JSValueToObject after JSValueIsObject.
        (searchTextParameterizedAttributeForCriteria): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Use createJSString.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        Use auto. Pass fewer arguments to makeWindowObject. Simplified object
        creation code by using adoptNS instead of release.
        (-[FrameLoadDelegate didClearWindowObjectForFrame:inIsolatedWorld:]):
        Use createJSString.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::findString): Use arrayLength.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didClearWindowObjectForFrameInStandardWorld):
        Pass fewer arguments to makeWindowObject.

        * DumpRenderTree/win/TextInputController.cpp:
        (TextInputController::makeWindowObject): Use setGlobalObjectProperty.
        (TextInputController::createJSClass): Replaced getJSClass with this. Return a
        JSRetainPtr to make it clear this passes ownership to the caller.
        (TextInputController::staticValues): Made return value const*.
        (TextInputController::staticFunctions): Ditto.
        * DumpRenderTree/win/TextInputController.h: Updated for above.

        * TestRunnerShared/Bindings/JSBasics.cpp:
        (WTR::toOptionalBool): Renamed from JSValueMakeBooleanOrNull.
        (WTR::toOptionalDouble): Added.
        (WTR::makeValue): Added with overloads for various types.
        Replaced JSValueToNullableBoolean and JSValueMakeStringOrNull.
        (WTR::createJSString): Added with overloads for various types.
        (WTR::property): Added.
        (WTR::stringProperty): Added.
        (WTR::booleanProperty): Added.
        (WTR::numericProperty): Added.
        (WTR::objectProperty): Refactored to call property.
        (WTR::arrayLength): Added.
        (WTR::setGlobalObjectProperty): Added.
        (WTR::call): Refactored to let objectProperty do more of the null checking.
        (WTR::callConstructor): Ditto.
        * TestRunnerShared/Bindings/JSBasics.h: Updated for the above.

        * TestRunnerShared/Bindings/JSWrappable.h: Reduced includes a bit.

        * TestRunnerShared/Bindings/JSWrapper.h: Added setGlobalObjectProperty.

        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext): Pass fewer arguments to makeWindowObject.
        (UIScriptContext::runUIScript): Use createJSString.
        (UIScriptContext::objectFromRect const): Use setProperty.
        * TestRunnerShared/UIScriptContext/UIScriptController.h: Updated for the above.

        * TestRunnerShared/UIScriptContext/UIScriptControllerShared.cpp:
        (WTR::toDeviceOrientation): Use createJSString and JSStringIsEqualToUTF8CString.
        (WTR::UIScriptController::makeWindowObject): Use setGlobalObjectProperty.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (-[LayoutTestSpellChecker setResultsFromJSValue:inContext:]): Use createJSString
        and removed unneeded use of lroundl.

        * WebKitTestRunner/DictionaryFunctions.h: Added. Contains convenience functions
        for dealing with WKDictionaryRef.

        * WebKitTestRunner/EventSenderProxy.h: Initialize data members.

        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (GeolocationProviderMock::setPosition): Use Optional instead of separate bool.
        * WebKitTestRunner/GeolocationProviderMock.h: Updated for the above.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::makeWindowObject): Use setGlobalObjectProperty.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h: Updated for the above.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateImplementationFile): Use static initialization and a lambda instead of
        an if statement to initialize.
        (_platformTypeConstructor): Use toOptionalBool and createJSString. Also added
        support for nullable doubles and used auto a bit more.
        (_returnExpression): Use makeValue.

        * InjectedBundle/Bindings/TestRunner.idl: Made the optional arguments to the
        setMockGeolocationPosition function "double?" instead of "object".

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::getMenuItemChildrenCallback): Use auto and not JSValueToObject.
        (WTR::arrayLength): Moved to JSBasics.h/cpp.
        (WTR::parseTouchModifier): Added. Factored out of the
        EventSendingController::setTouchModifier function.
        (WTR::parseModifierArray): Use createJSString and remove unneeded ignored
        exception out argument, since that is optional. Also added overload that
        gets the context.
        (WTR::EventSendingController::EventSendingController): Deleted.
        (WTR::EventSendingController::~EventSendingController): Deleted.
        (WTR::createMouseMessageBody): Use adoptWK and setValue. Return a WKRetainPtr.
        (WTR::EventSendingController::mouseDown): Use postSynchronousPageMessage.
        (WTR::EventSendingController::mouseUp): Ditto.
        (WTR::EventSendingController::mouseMoveTo): Use setValue and
        postSynchronousPageMessages.
        (WTR::EventSendingController::mouseForceClick): Ditto.
        (WTR::EventSendingController::startAndCancelMouseForceClick): Ditto.
        (WTR::EventSendingController::mouseForceDown): Ditto.
        (WTR::EventSendingController::mouseForceUp): Ditto.
        (WTR::EventSendingController::mouseForceChanged): Ditto.
        (WTR::EventSendingController::leapForward): Ditto.
        (WTR::EventSendingController::scheduleAsynchronousClick): Use postPageMessage.
        (WTR::createKeyDownMessageBody): Use setValue.
        (WTR::EventSendingController::keyDown): Use postSynchronousPageMessage.
        (WTR::EventSendingController::scheduleAsynchronousKeyDown): Use postPageMessage.
        (WTR::EventSendingController::mouseScrollBy): Use setValue and postPageMessage.
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases): Use
        setValue and postPageMessage.
        (WTR::EventSendingController::continuousMouseScrollBy): Use setValue and
        postSynchronousPageMessage.
        (WTR::EventSendingController::contextClick): Use auto and not JSValueToObject.
        (WTR::toMonitorWheelEventsOptions): Use booleanProperty.
        (WTR::EventSendingController::addTouchPoint): Use setValue and postSynchronousPageMessage.
        (WTR::EventSendingController::updateTouchPoint): Ditto.
        (WTR::EventSendingController::setTouchModifier): Ditto.
        (WTR::EventSendingController::setTouchPointRadius): Ditto.
        (WTR::EventSendingController::touchStart): Ditto.
        (WTR::EventSendingController::touchMove): Ditto.
        (WTR::EventSendingController::touchEnd): Ditto.
        (WTR::EventSendingController::touchCancel): Ditto.
        (WTR::EventSendingController::clearTouchPoints): Ditto.
        (WTR::EventSendingController::releaseTouchPoint): Ditto.
        (WTR::EventSendingController::cancelTouchPoint): Ditto.
        (WTR::EventSendingController::makeWindowObject): Use setGlobalObjectProperty.
        * WebKitTestRunner/InjectedBundle/EventSendingController.h: Updated for the above.
        Deleted various unneeded functions.

        * WebKitTestRunner/InjectedBundle/GCController.cpp:
        (WTR::GCController::GCController): Deleted.
        (WTR::GCController::~GCController): Deleted.
        (WTR::GCController::makeWindowObject): Use setGlobalObjectProperty.

        * WebKitTestRunner/InjectedBundle/GCController.h: Updated for the above.
        Also marked the class final.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage): Use booleanValue.
        (WTR::InjectedBundle::didReceiveMessage): Use toWK.
        (WTR::InjectedBundle::postPageMessage): Added.
        (WTR::InjectedBundle::reportLiveDocuments): Use postPageMessage.
        (WTR::InjectedBundle::didReceiveMessageToPage): Use dictionaryValue,
        booleanValue, postPageMessage, value, and more to streamline.
        (WTR::InjectedBundle::booleanForKey): Deleted.
        (WTR::InjectedBundle::stringForKey): Deleted.
        (WTR::InjectedBundle::beginTesting): Use booleanValue.
        (WTR::InjectedBundle::done): Use stringValue.
        (WTR::InjectedBundle::closeOtherPages): Use setValue and toWK.
        (WTR::InjectedBundle::dumpToStdErr): Use postPageMessage
        (WTR::InjectedBundle::outputText): Use toWK.
        (WTR::InjectedBundle::postNewBeforeUnloadReturnValue): Use postPageMessage.
        (WTR::InjectedBundle::postAddChromeInputField): Ditto.
        (WTR::InjectedBundle::postRemoveChromeInputField): Ditto.
        (WTR::InjectedBundle::postFocusWebView): Ditto.
        (WTR::InjectedBundle::postSetBackingScaleFactor): Ditto.
        (WTR::InjectedBundle::postSetWindowIsKey): Use toWK.
        (WTR::InjectedBundle::postSetViewSize): Use setValue and toWK.
        (WTR::InjectedBundle::postSimulateWebNotificationClick): Use postPageMessage.
        (WTR::InjectedBundle::postSetAddsVisitedLinks): Ditto.
        (WTR::InjectedBundle::setGeolocationPermission): Ditto.
        (WTR::InjectedBundle::setMockGeolocationPosition): Use setValue and postPageMessage,
        and use Optional instead of bool/double pairs.
        (WTR::InjectedBundle::setMockGeolocationPositionUnavailableError): Use postPageMessage.
        (WTR::InjectedBundle::isGeolocationProviderActive const): Use toWK and booleanValue.
        (WTR::InjectedBundle::imageCountInGeneralPasteboard const): Use toWK and uint64Value.
        (WTR::InjectedBundle::setUserMediaPermission): Use postPageMessage.
        (WTR::InjectedBundle::resetUserMediaPermission): Ditto.
        (WTR::InjectedBundle::setUserMediaPersistentPermissionForOrigin): Use setValue
        and postPageMessage.
        (WTR::InjectedBundle::userMediaPermissionRequestCountForOrigin const): Ditto.
        (WTR::InjectedBundle::resetUserMediaPermissionRequestCountForOrigin): Uset setValue
        and uint64Value.
        (WTR::InjectedBundle::setCustomPolicyDelegate): Use setValue and postPageMessage.
        (WTR::InjectedBundle::setHidden): Ditto.
        (WTR::InjectedBundle::setCacheModel): Ditto.
        (WTR::InjectedBundle::shouldProcessWorkQueue const): Use toWK and booleanValue.
        (WTR::InjectedBundle::processWorkQueue): Use postPageMessage.
        (WTR::InjectedBundle::queueBackNavigation): Ditto.
        (WTR::InjectedBundle::queueForwardNavigation): Ditto.
        (WTR::InjectedBundle::queueLoad): Use setValue and postPageMessage.
        (WTR::InjectedBundle::queueLoadHTMLString): Ditto.
        (WTR::InjectedBundle::queueReload): Ditto.
        (WTR::InjectedBundle::queueLoadingScript): Ditto.
        (WTR::InjectedBundle::queueNonLoadingScript): Ditto.
        (WTR::postMessage): Added. Overloads for many types to keep caller code streamlined.
        (WTR::postSynchronousMessage): Ditto.
        (WTR::postPageMessage): Ditto.
        (WTR::postSynchronousPageMessage): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h: Updated for the above.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue): Deleted. Use functions from JSBasics.h instead.
        (WTR::propertyValueDouble): Ditto.
        (WTR::propertyValueInt): Ditto.
        (WTR::numericWindowProperty): Renamed from numericWindowPropertyValue for brevity
        and for consistency with JSBasics.h functions.
        (WTR::dumpPath): Use stringProperty, objectProperty, and makeString.
        (WTR::rangeToStr): Use auto, numericProperty, and makeString.
        (WTR::NavigationTypeToString): Use toWK.
        (WTR::string): Renamed from securityOriginToStr. Use makeString.
        (WTR::frameToStr): Use auto.
        (WTR::InjectedBundlePage::resetAfterTest): Removed unneeded local.
        (WTR::dumpFrameDescriptionSuitableForTestResult): Use auto.
        (WTR::dumpRequestDescriptionSuitableForTestResult): Ditto.
        (WTR::dumpErrorDescriptionSuitableForTestResult): Use auto and toWK.
        (WTR::dumpFrameScrollPosition): Update for name change.
        (WTR::toJS): Deleted. Use functions from JSBasics.h instead.
        (WTR::hasDocumentElement): Use objectProperty.
        (WTR::InjectedBundlePage::didClearWindowForFrame): Use setGlobalObjectProperty,
        and pass fewer arguments to makeWindowObject.
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction): Streamline code a bit.
        (WTR::InjectedBundlePage::decidePolicyForResponse): Use makeString.
        (WTR::lastFileURLPathComponent): Ditto.
        (WTR::InjectedBundlePage::willSetStatusbarText): Ditto.
        (WTR::InjectedBundlePage::didReachApplicationCacheOriginQuota): Ditto.
        (WTR::InjectedBundlePage::didExceedDatabaseQuota): Ditto.
        (WTR::InjectedBundlePage::shouldBeginEditing): Ditto.
        (WTR::InjectedBundlePage::shouldEndEditing): Ditto.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner): Use toWK.
        (WTR::page): Added.
        (WTR::mainFrame): Added.
        (WTR::mainFrameJSContext): Added.
        (WTR::TestRunner::display): Use page.
        (WTR::TestRunner::displayAndTrackRepaints): Use page.
        (WTR::toWK): Added overload for double.
        (WTR::createWKDictionary): Added.
        (WTR::postSynchronousMessageWithReturnValue): Added.
        (WTR::postSynchronousMessageReturningBoolean): Added.
        (WTR::postSynchronousPageMessageWithReturnValue): Added.
        (WTR::postSynchronousPageMessageReturningBoolean): Added.
        (WTR::postSynchronousPageMessageReturningUInt64): Added.
        (WTR::postSynchronousMessageReturningUInt64): Added.
        (WTR::overridePreference): Added.
        (WTR::TestRunner::shouldDumpPixels const): Use postSynchronousMessageReturningBoolean.
        (WTR::TestRunner::setDumpPixels): Use postSynchronousMessage.
        (WTR::TestRunner::whatToDump const): Use postSynchronousMessageReturningUInt64.
        (WTR::TestRunner::setWhatToDump): Use postSynchronousMessage.
        (WTR::TestRunner::setWaitUntilDone): Use postSynchronousMessage.
        (WTR::TestRunner::shouldWaitUntilDone const): Use postSynchronousMessageReturningBoolean.
        (WTR::TestRunner::setShouldDumpFrameLoadCallbacks): Use postSynchronousMessage.
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks): Use postSynchronousMessageReturningBoolean.
        (WTR::TestRunner::addUserScript): Use page.
        (WTR::TestRunner::addUserStyleSheet): Ditto.
        (WTR::TestRunner::execCommand): Ditto.
        (WTR::findOptionsFromArray): Use mainFrameJSContext, arrayLength, and createJSString.
        (WTR::TestRunner::findString): Use page.
        (WTR::TestRunner::findStringMatchesInPage): Ditto.
        (WTR::TestRunner::replaceFindMatchesAtIndices): Use mainFrameJSContext and arrayLength and
        removed unneeded call to std::round.
        (WTR::TestRunner::clearAllDatabases): Use postSynchronousMessage.
        (WTR::TestRunner::syncLocalStorage): Ditto.
        (WTR::TestRunner::clearAllApplicationCaches): Use page.
        (WTR::TestRunner::clearApplicationCacheForOrigin): Ditto.
        (WTR::TestRunner::setAppCacheMaximumSize): Ditto.
        (WTR::TestRunner::applicationCacheDiskUsageForOrigin): Ditto.
        (WTR::stringArrayToJS): Tweaked coding style a bit.
        (WTR::TestRunner::originsWithApplicationCache): Use page.
        (WTR::TestRunner::isCommandEnabled): Ditto.
        (WTR::TestRunner::setCanOpenWindows): Use postSynchronousMessage.
        (WTR::TestRunner::setXSSAuditorEnabled): Use overridePreference.
        (WTR::TestRunner::setMediaDevicesEnabled): Ditto.
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled): Ditto.
        (WTR::TestRunner::setCustomUserAgent): Use postSynchronousMessage.
        (WTR::TestRunner::setWebAPIStatisticsEnabled): Use overridePreference.
        (WTR::TestRunner::setModernMediaControlsEnabled): Ditto.
        (WTR::TestRunner::setWebGL2Enabled): Ditto.
        (WTR::TestRunner::setWritableStreamAPIEnabled): Ditto.
        (WTR::TestRunner::setTransformStreamAPIEnabled): Ditto.
        (WTR::TestRunner::setReadableByteStreamAPIEnabled): Ditto.
        (WTR::TestRunner::setEncryptedMediaAPIEnabled): Ditto.
        (WTR::TestRunner::setPictureInPictureAPIEnabled): Ditto.
        (WTR::TestRunner::setGenericCueAPIEnabled): Ditto.
        (WTR::TestRunner::setAllowsAnySSLCertificate): Use postSynchronousPageMessage.
        (WTR::TestRunner::setShouldSwapToEphemeralSessionOnNextNavigation): Ditto.
        (WTR::TestRunner::setShouldSwapToDefaultSessionOnNextNavigation): Ditto.
        (WTR::TestRunner::setPluginsEnabled): Use overridePreference.
        (WTR::TestRunner::isPageBoxVisible): Use mainFrame.
        (WTR::TestRunner::setValueForUser): Removed local.
        (WTR::TestRunner::setAudioResult): Ditto.
        (WTR::TestRunner::clearBackForwardList): Use page.
        (WTR::TestRunner::makeWindowObject): Use setGlobalObjectProperty.
        (WTR::TestRunner::showWebInspector): Use page.
        (WTR::TestRunner::closeWebInspector): Ditto.
        (WTR::TestRunner::evaluateInWebInspector): Ditto.
        (WTR::TestRunner::worldIDForWorld): Use range-based for loop.
        (WTR::TestRunner::evaluateScriptInIsolatedWorld): Use mainFrame.
        (WTR::TestRunner::setTextDirection): Use mainFrame.
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        Use postSynchronousPageMessage.
        (WTR::cacheTestRunnerCallback): Changed map to store objects instead of values.
        (WTR::callTestRunnerCallback): Simplify since map has objects. Use mainFrameJSContext.
        (WTR::TestRunner::clearTestRunnerCallbacks): Ditto.
        (WTR::TestRunner::setAlwaysAcceptCookies): Use postSynchronousMessage.
        (WTR::TestRunner::setOnlyAcceptFirstPartyCookies): Use auto and toWK.
        (WTR::TestRunner::setUserStyleSheetEnabled): Use toWK.
        (WTR::TestRunner::setUserStyleSheetLocation): Use page.
        (WTR::TestRunner::setTabKeyCyclesThroughElements): Ditto.
        (WTR::TestRunner::grantWebNotificationPermission): Ditto.
        (WTR::TestRunner::denyWebNotificationPermission): Ditto.
        (WTR::TestRunner::removeAllWebNotificationPermissions): Use mainFrameJSContext.
        (WTR::TestRunner::simulateWebNotificationClick): Ditto.
        (WTR::TestRunner::setMockGeolocationPosition): Use Optional<double> instead of bool/double
        pairs, letting the IDL bindings do the work for us.
        (WTR::TestRunner::setMockGeolocationPositionUnavailableError): Removed local.
        (WTR::TestRunner::isDoingMediaCapture const): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setUserMediaPersistentPermissionForOrigin): Removed locals.
        (WTR::TestRunner::userMediaPermissionRequestCountForOrigin const): Ditto.
        (WTR::TestRunner::resetUserMediaPermissionRequestCountForOrigin): DItto.
        (WTR::TestRunner::callShouldCloseOnWebView): Use mainFrame.
        (WTR::TestRunner::queueLoad): Ditto.
        (WTR::TestRunner::queueLoadHTMLString): Removed a local.
        (WTR::TestRunner::queueLoadingScript): Ditto.
        (WTR::TestRunner::queueNonLoadingScript): Ditto.
        (WTR::TestRunner::setRejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        Use postPageMessage.
        (WTR::TestRunner::setHandlesAuthenticationChallenges): Ditto.
        (WTR::TestRunner::setShouldLogCanAuthenticateAgainstProtectionSpace): Ditto.
        (WTR::TestRunner::setShouldLogDownloadCallbacks): Ditto.
        (WTR::TestRunner::setAuthenticationUsername): Ditto.
        (WTR::TestRunner::setAuthenticationPassword): Ditto.
        (WTR::TestRunner::secureEventInputIsEnabled const): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setBlockAllPlugins): Use postPageMessage.
        (WTR::TestRunner::setPluginSupportedMode): Ditto.
        (WTR::TestRunner::failNextNewCodeBlock): Use mainFrameJSContext.
        (WTR::TestRunner::numberOfDFGCompiles): Ditto.
        (WTR::TestRunner::neverInlineFunction): Ditto.
        (WTR::TestRunner::setShouldDecideNavigationPolicyAfterDelay): Use postPageMessage.
        (WTR::TestRunner::setShouldDecideResponsePolicyAfterDelay): Ditto.
        (WTR::TestRunner::setNavigationGesturesEnabled): Ditto.
        (WTR::TestRunner::setIgnoresViewportScaleLimits): Ditto.
        (WTR::TestRunner::setShouldDownloadUndisplayableMIMETypes): Ditto.
        (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess): Ditto.
        (WTR::TestRunner::terminateNetworkProcess): Use postSynchronousPageMessage.
        (WTR::TestRunner::terminateServiceWorkers): Ditto.
        (WTR::TestRunner::setUseSeparateServiceWorkerProcess): Ditto.
        (WTR::TestRunner::runUIScript): Use postPageMessage.
        (WTR::TestRunner::runUIScriptImmediately): Ditto.
        (WTR::TestRunner::runUIScriptCallback): Use mainFrameJSContext.
        (WTR::TestRunner::setAllowedMenuActions): Use mainFrameJSContext, arrayLength,
        and postPageMessage.
        (WTR::TestRunner::installCustomMenuAction): Use postPageMessage.
        (WTR::TestRunner::clearStatisticsDataForDomain): Use postSynchronousMessage.
        (WTR::TestRunner::doesStatisticsDomainIDExistInDatabase): Use
        postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setStatisticsEnabled): Use postSynchronousMessage.
        (WTR::TestRunner::isStatisticsEphemeral): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setStatisticsDebugMode): Use postMessage.
        (WTR::TestRunner::setStatisticsPrevalentResourceForDebugMode): Ditto.
        (WTR::TestRunner::setStatisticsLastSeen): Ditto.
        (WTR::TestRunner::setStatisticsMergeStatistic): Ditto.
        (WTR::TestRunner::setStatisticsExpiredStatistic): Ditto.
        (WTR::TestRunner::setStatisticsPrevalentResource): Ditto.
        (WTR::TestRunner::setStatisticsVeryPrevalentResource): Ditto.
        (WTR::TestRunner::dumpResourceLoadStatistics): Use postSynchronousPageMessage.
        (WTR::TestRunner::isStatisticsPrevalentResource): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::isStatisticsVeryPrevalentResource): Ditto.
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder): Ditto.
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder): Ditto.
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo): Ditto.
        (WTR::TestRunner::setStatisticsHasHadUserInteraction): Use postMessage.
        (WTR::TestRunner::isStatisticsHasHadUserInteraction): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::isStatisticsOnlyInDatabaseOnce): Ditto.
        (WTR::TestRunner::setStatisticsGrandfathered): Use postSynchronousMessage.
        (WTR::TestRunner::setUseITPDatabase): Ditto.
        (WTR::TestRunner::isStatisticsGrandfathered): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setStatisticsSubframeUnderTopFrameOrigin): Use postSynchronousMessage.
        (WTR::TestRunner::setStatisticsSubresourceUnderTopFrameOrigin): Ditto.
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectTo): Ditto.
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectFrom): Ditto.
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectTo): Ditto.
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectFrom): Ditto.
        (WTR::TestRunner::setStatisticsCrossSiteLoadWithLinkDecoration): Ditto.
        (WTR::TestRunner::setStatisticsTimeToLiveUserInteraction): Ditto.
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Use mainFrameJSContext.
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords): Use postSynchronousMessage.
        (WTR::TestRunner::statisticsUpdateCookieBlocking): Use postMessage.
        (WTR::TestRunner::statisticsSubmitTelemetry): Use postSynchronousMessage.
        (WTR::TestRunner::setStatisticsNotifyPagesWhenDataRecordsWereScanned): Ditto.
        (WTR::TestRunner::setStatisticsIsRunningTest): Ditto.
        (WTR::TestRunner::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval): Ditto.
        (WTR::TestRunner::setStatisticsMinimumTimeBetweenDataRecordsRemoval): Ditto.
        (WTR::TestRunner::setStatisticsGrandfatheringTime): Ditto.
        (WTR::TestRunner::setStatisticsMaxStatisticsEntries): Ditto.
        (WTR::TestRunner::setStatisticsPruneEntriesDownTo): Ditto.
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore): Use postMessage.
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours): Ditto.
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval): Ditto.
        (WTR::TestRunner::statisticsDeleteCookiesForHost): Use postSynchronousMessage.
        (WTR::TestRunner::isStatisticsHasLocalStorage): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setStatisticsCacheMaxAgeCap): Use postSynchronousMessage.
        (WTR::TestRunner::hasStatisticsIsolatedSession): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::setStatisticsShouldDowngradeReferrer): Use postMessage.
        (WTR::TestRunner::setStatisticsShouldBlockThirdPartyCookies): Ditto.
        (WTR::TestRunner::setStatisticsFirstPartyWebsiteDataRemovalMode): Ditto.
        (WTR::TestRunner::statisticsSetToSameSiteStrictCookies): Ditto.
        (WTR::TestRunner::statisticsSetFirstPartyHostCNAMEDomain): Ditto.
        (WTR::TestRunner::statisticsSetThirdPartyCNAMEDomain): Ditto.
        (WTR::TestRunner::statisticsResetToConsistentState): Ditto.
        (WTR::TestRunner::getAllStorageAccessEntries): Ditto.
        (WTR::makeDomainsValue): Factored out. Use mainFrameJSContext.
        (WTR::TestRunner::callDidReceiveAllStorageAccessEntriesCallback): Use makeDomainsValue.
        (WTR::TestRunner::loadedSubresourceDomains): Use postMessage.
        (WTR::TestRunner::callDidReceiveLoadedSubresourceDomainsCallback): Use makeDomainsValue.
        (WTR::TestRunner::addMockMediaDevice): Use postSynchronousMessage.
        (WTR::TestRunner::clearMockMediaDevices): Ditto.
        (WTR::TestRunner::removeMockMediaDevice): Ditto.
        (WTR::TestRunner::resetMockMediaDevices): Ditto.
        (WTR::TestRunner::setMockCameraOrientation): Ditto.
        (WTR::TestRunner::isMockRealtimeMediaSourceCenterEnabled): Use
        postSynchronousMessageReturningBoolean.
        (WTR::TestRunner::connectMockGamepad): Use postSynchronousMessage.
        (WTR::TestRunner::disconnectMockGamepad): Ditto.
        (WTR::TestRunner::setMockGamepadDetails): Ditto.
        (WTR::TestRunner::setMockGamepadAxisValue): Ditto.
        (WTR::TestRunner::setMockGamepadButtonValue): Ditto.
        (WTR::TestRunner::setOpenPanelFiles): Use mainFrameJSContext, arrayLength, createJSString,
        and postPageMessage.
        (WTR::TestRunner::setOpenPanelFilesMediaIcon): Use mainFrameJSContext and postPageMessage.
        (WTR::TestRunner::removeAllSessionCredentials): Use postMessage.
        (WTR::TestRunner::clearDOMCache): Use postSynchronousMessage.
        (WTR::TestRunner::clearDOMCaches): Ditto.
        (WTR::TestRunner::hasDOMCache): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::domCacheSize): Use postSynchronousPageMessageReturningUInt64.
        (WTR::TestRunner::setAllowStorageQuotaIncrease): Use postSynchronousPageMessage.
        (WTR::TestRunner::getApplicationManifestThen): Use postMessage.
        (WTR::TestRunner::injectUserScript): Use postSynchronousMessage.
        (WTR::TestRunner::sendDisplayConfigurationChangedMessageForTesting): Ditto.
        (WTR::TestRunner::setServiceWorkerFetchTimeout): Ditto.
        (WTR::TestRunner::addTestKeyToKeychain): Ditto.
        (WTR::TestRunner::cleanUpKeychain): Ditto.
        (WTR::TestRunner::keyExistsInKeychain): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount): Use
        postSynchronousMessageReturningUInt64.
        (WTR::TestRunner::setShouldDismissJavaScriptAlertsAsynchronously): Use
        postSynchronousMessage.
        (WTR::TestRunner::abortModal): Ditto.
        (WTR::TestRunner::dumpAdClickAttribution): Use postSynchronousPageMessage.
        (WTR::TestRunner::clearAdClickAttribution): Ditto.
        (WTR::TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval): Ditto.
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting): Ditto.
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting): Ditto.
        (WTR::TestRunner::markAdClickAttributionsAsExpiredForTesting): Ditto.
        (WTR::TestRunner::setOffscreenCanvasEnabled): Use overridePreference.
        (WTR::TestRunner::hasAppBoundSession): Use postSynchronousPageMessageReturningBoolean.
        (WTR::TestRunner::clearAppBoundSession): Use postSynchronousMessage.
        (WTR::TestRunner::setAppBoundDomains): Use mainFrameJSContext, arrayLength, createJSString,
        and toWK.
        (WTR::TestRunner::postMessage): Added.

        * WebKitTestRunner/InjectedBundle/TestRunner.h: Updated for the above. Also changed
        overridePreference ot a static member function.

        * WebKitTestRunner/InjectedBundle/TextInputController.cpp:
        (WTR::TextInputController::TextInputController): Deleted.
        (WTR::TextInputController::~TextInputController): Deleted.
        (WTR::TextInputController::makeWindowObject): Use setGlobalObjectProperty.
        (WTR::arrayLength): Deleted. Use the one from JSBasics.h now.
        (WTR::createCompositionHighlightData): Use setValue.
        * WebKitTestRunner/InjectedBundle/TextInputController.h: Updated for the above.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::platformName): Use createJSString.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::createEmptyJSString): Deleted. Use createJSString from JSBasics.h now.
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements): Use createJSString.
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (WTR::AccessibilityUIElement::attributesOfChildren): Ditto.
        (WTR::AccessibilityUIElement::allAttributes): Ditto.
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (WTR::AccessibilityUIElement::role): Ditto.
        (WTR::AccessibilityUIElement::subrole): Ditto.
        (WTR::AccessibilityUIElement::computedRoleString): Ditto.
        (WTR::AccessibilityUIElement::title): Ditto.
        (WTR::AccessibilityUIElement::orientation const): Ditto.
        (WTR::AccessibilityUIElement::language): Ditto.
        (WTR::AccessibilityUIElement::valueDescription): Ditto.
        (WTR::AccessibilityUIElement::isFocused const): Ditto.
        (WTR::AccessibilityUIElement::isSelectedOptionActive const): Ditto.
        (WTR::AccessibilityUIElement::isIndeterminate const): Ditto.
        (WTR::AccessibilityUIElement::ariaDropEffects const): Ditto.
        (WTR::AccessibilityUIElement::boundsForRange): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (WTR::AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumns): Ditto.
        (WTR::AccessibilityUIElement::attributesOfRows): Ditto.
        (WTR::AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (WTR::AccessibilityUIElement::attributesOfHeader): Ditto.
        (WTR::AccessibilityUIElement::clearSelectedChildren const): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Ditto.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::AccessibilityUIElement::isSelectable const): Ditto.
        (WTR::AccessibilityUIElement::isMultiSelectable const): Ditto.
        (WTR::AccessibilityUIElement::isVisible const): Ditto.
        (WTR::AccessibilityUIElement::isOffScreen const): Ditto.
        (WTR::AccessibilityUIElement::isCollapsed const): Ditto.
        (WTR::AccessibilityUIElement::isSingleLine const): Ditto.
        (WTR::AccessibilityUIElement::isMultiLine const): Ditto.
        (WTR::AccessibilityUIElement::takeFocus): Ditto.
        (WTR::AccessibilityUIElement::takeSelection): Ditto.
        (WTR::AccessibilityUIElement::addSelection): Ditto.
        (WTR::AccessibilityUIElement::removeSelection): Ditto.
        (WTR::AccessibilityUIElement::stringForTextMarkerRange): Ditto.

        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        (WTR::EventSenderProxy::EventSenderProxy): Initialize in the class definition.
        (WTR::EventSenderProxy::~EventSenderProxy): Deleted.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (WTR::makeJSArray): Return a JSObjectRef. Renamed from makeArrayRefForArray.
        (WTR::makeJSObject): Return a JSObjectRef. Renamed from makeObjectRefForDictionary.
        (WTR::makeValueRefForValue): Updated for the above.
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria): Use toWTFString
        and arrayLength.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::platformName): Use createJSString.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::createEmptyJSString): Deleted. Use createJSString from JSBasics.h instead.
        (WTR::convertVectorToObjectArray): Deleted.
        (WTR::makeJSArray): Renamed from convertVectorToObjectArray.
        (WTR::selectTextParameterizedAttributeForCriteria): Use toWTFString and arrayLength.
        (WTR::searchTextParameterizedAttributeForCriteria): Ditto.
        (WTR::AccessibilityUIElement::rowHeaders const): Use makeJSArray.
        (WTR::AccessibilityUIElement::columnHeaders const): Ditto.
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const): Ditto.
        (WTR::AccessibilityUIElement::searchTextWithCriteria): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Use createJSString.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.

        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL): Remove locals.

        * WebKitTestRunner/StringFunctions.h: Added toWKString overload that converts from
        a JSValueRef, JSStringRef, or JSRetainPtr<JSStringRef> and toWK overload that converts
        from a const char*.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Use toWK.
        (WTR::TestController::generateContextConfiguration const): Ditto.
        (WTR::TestController::resetPreferencesToConsistentValues): Ditto.
        (WTR::TestController::resetStateToConsistentValues): Use setValue.
        (WTR::TestController::updateLiveDocumentsAfterTest): Ditto.
        (WTR::TestController::checkForWorldLeaks): Use toWK.
        (WTR::contentExtensionJSONPath): Use toSTD.
        (WTR::TestController::configureContentExtensionForTest): Use toWK.
        (WTR::TestController::didReceiveKeyDownMessageFromInjectedBundle): Use stringValue
        and uint64Value.
        (WTR::TestController::didReceiveLiveDocumentsList): Use dictionaryValue and
        uint64Value.
        (WTR::TestController::didReceiveMessageFromInjectedBundle): Use dictionaryValue,
        stringValue, uint64Value, doubleValue, booleanValue.
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): Ditto.
        (WTR::TestController::setBlockAllPlugins): Use toWK.
        (WTR::TestController::setPluginSupportedMode): Ditto.
        (WTR::TestController::canAuthenticateAgainstProtectionSpace): Use auto.
        (WTR::TestController::didFinishNavigation): Removed local.
        (WTR::TestController::didReceiveAuthenticationChallenge): Use auto and toWTFString
        instead of toSTD.
        (WTR::TestController::setMockGeolocationPosition): Use Optional instead of pairs
        of bool and double.
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin): Use toWK.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Ditto.
        (WTR::TestController::updateBundleIdentifierInNetworkProcess): Use toWK.
        * WebKitTestRunner/TestController.h: Updated for the above.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::postPageMessage): Added.
        (WTR::TestInvocation::TestIncovation): Use toWTFString.
        (WTR::TestInvocation::createTestSettingsDictionary): Use auto and setValue.
        (WTR::TestInvocation::invoke): Use postPageMessage and setValue.
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Use postPageMessage
        and stringValue.
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): Use
        dictionaryValue, booleanValue, value, stringValue, doubleValue, and
        optionalDoubleValue.
        (WTR::TestInvocation::uiScriptDidComplete): Use postPageMessage and setValue.
        (WTR::TestInvocation::didBeginSwipe): Use postPageMessage.
        (WTR::TestInvocation::willEndSwipe): Ditto.
        (WTR::TestInvocation::didEndSwipe): Ditto.
        (WTR::TestInvocation::didRemoveSwipeSnapshot): Ditto.
        (WTR::TestInvocation::notifyDownloadDone): Ditto.
        (WTR::TestInvocation::didClearStatisticsInMemoryAndPersistentStore): Ditto.
        (WTR::TestInvocation::didClearStatisticsThroughWebsiteDataRemoval): Ditto.
        (WTR::TestInvocation::didSetShouldDowngradeReferrer): Ditto.
        (WTR::TestInvocation::didSetShouldBlockThirdPartyCookies): Ditto.
        (WTR::TestInvocation::didSetFirstPartyWebsiteDataRemovalMode): Ditto.
        (WTR::TestInvocation::didSetToSameSiteStrictCookies): Ditto.
        (WTR::TestInvocation::didSetFirstPartyHostCNAMEDomain): Ditto.
        (WTR::TestInvocation::didSetThirdPartyCNAMEDomain): Ditto.
        (WTR::TestInvocation::didResetStatisticsToConsistentState): Ditto.
        (WTR::TestInvocation::didSetBlockCookiesForHost): Ditto.
        (WTR::TestInvocation::didSetStatisticsDebugMode): Ditto.
        (WTR::TestInvocation::didSetPrevalentResourceForDebugMode): Ditto.
        (WTR::TestInvocation::didSetLastSeen): Ditto.
        (WTR::TestInvocation::didMergeStatistic): Ditto.
        (WTR::TestInvocation::didSetExpiredStatistic): Ditto.
        (WTR::TestInvocation::didSetPrevalentResource): Ditto.
        (WTR::TestInvocation::didSetVeryPrevalentResource): Ditto.
        (WTR::TestInvocation::didSetHasHadUserInteraction): Ditto.
        (WTR::TestInvocation::didReceiveAllStorageAccessEntries): Ditto.
        (WTR::TestInvocation::didReceiveLoadedSubresourceDomains): Ditto.
        (WTR::TestInvocation::didRemoveAllSessionCredentials): Ditto.
        (WTR::TestInvocation::didSetAppBoundDomains): Ditto.
        (WTR::TestInvocation::performCustomMenuAction): Ditto.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Added JSBasics.h to DictionaryFunctions.h to appropriate targets.

        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::ScriptItem::ScriptItem): Use toWK.
        (WTR::WorkQueueManager::queueLoadHTMLString): Ditto.

        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h: Make most functions private.

        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::overridePreference): Use toWTFString.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h: Marked the class final and made
        most functions private.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength): Deleted. Use the one in JSBasics.h.
        (WTR::parseModifierArray): Use the new toWTFString overload.
        (WTR::UIScriptControllerIOS::typeCharacterUsingHardwareKeyboard): Ditto.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::EventSenderProxy): Initialize in the class definition.
        (WTR::EventSenderProxy::keyDown): Use toWTFString.

        * WebKitTestRunner/mac/UIScriptControllerMac.h: Marked the class final and made
        most functions private.

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

        Refactor test runner code to cut down on copy/paste code and long-winded repetitive idioms
        https://bugs.webkit.org/show_bug.cgi?id=217028

        Reviewed by Sam Weinig.

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

        [tvOS] [watchOS] Add support in libTestWTFAlwaysMissing-iOS-v2.tbd
        https://bugs.webkit.org/show_bug.cgi?id=217068
        <rdar://problem/69724742>

        Rubber-stamped by Aakash Jain.

        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-iOS-v2.tbd: Add watchOS and tvOS.

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

        URL for Apple-iOS-14-Simulator-Debug-WK2-Tests is broken on the dashboard
        https://bugs.webkit.org/show_bug.cgi?id=217094

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Remove a space in the queue name.

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

        IndexedDB Index Corruption after upgrade from iOS 13 to iOS 14
        https://bugs.webkit.org/show_bug.cgi?id=216962
        <rdar://problem/69587004>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (runMultipleIndicesTestWithDatabase):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2WithMultipleIndices.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexUpgradeWithMultipleIndices.sqlite3: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexUpgradeWithMultipleIndicesHaveSameID.sqlite3: Added.

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

        Remove plist-based ResourceLoadStatistics storage, which has been replaced by database-based storage
        https://bugs.webkit.org/show_bug.cgi?id=217063

        Reviewed by John Wilander.

        These three tests API tests have been removed:

        ResourceLoadStatistics.ChildProcessesNotLaunched
        ResourceLoadStatistics.GrandfatherCallback
        ResourceLoadStatistics.ShouldNotGrandfatherOnStartup

        Each of those tests has a corresponding test that ends with "Database" that tests the database backend,
        so the only test coverage loss was of the code that was removed.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (ensureITPFileIsCreated):
        (TEST):
        (isITPDatabaseEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseITPDatabase): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUseITPDatabase): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        [resultsdbpy] Restrict incoming traffic to localhost
        https://bugs.webkit.org/show_bug.cgi?id=217089
        <rdar://problem/69749845>

        Reviewed by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/model/docker-compose.yml: Restrict incoming traffic to localhost.

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

        Limit number of tests to log in case of large number of JSC test failures
        https://bugs.webkit.org/show_bug.cgi?id=217085

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeJSCTestsResults.start):

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

        [ews] Refactor NUM_API_FAILURES_TO_DISPLAY
        https://bugs.webkit.org/show_bug.cgi?id=217086

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults):
        (AnalyzeAPITestsResults.analyzeResults):

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

        Limit maximum number of webkitpy failures to display
        https://bugs.webkit.org/show_bug.cgi?id=217087

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (WebKitPyTest):
        (WebKitPyTest.getResultSummary):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_lot_of_failures): Added unit-tests.

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

        [build.webkit.org] Add unit-test to detect invalid triggers in config.json
        https://bugs.webkit.org/show_bug.cgi?id=216898

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig_unittest.py: Added.
        (ConfigDotJSONTest):
        (ConfigDotJSONTest.get_config):
        (ConfigDotJSONTest.test_builder_keys):
        (ConfigDotJSONTest.test_multiple_scheduers_for_builder):
        (ConfigDotJSONTest.test_schduler_contains_valid_builder_name):
        (ConfigDotJSONTest.test_single_builder_for_triggerable_scheduler):

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

        [webkitpy] Use webkitcorepy's auto installer for pycodestyle (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=215427
        <rdar://problem/66931291>

        Unreviewed follow-up fix.

        Conflict resolution at some point broke the original change.

        * Scripts/webkitpy/style/checkers/python.py: Import directly from pycodestyle.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pycodestyle): Deleted.

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

        Add Bounds Check Elimination validation for debugging.
        https://bugs.webkit.org/show_bug.cgi?id=217055
        rdar://69122891

        Reviewed by Keith Miller.

        Added --validateBCE=true to ftl-no-cjit-validate-sampling-profiler
        and ftl-eager-no-cjit.

        * Scripts/run-jsc-stress-tests:

2020-09-28  Matt Lewis  <jlewis3@apple.com>

        Fix Build triggers for iOS, watchOS, and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=217057

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

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

        [webkitpy] Use webkitcorepy's auto installer for pycodestyle
        https://bugs.webkit.org/show_bug.cgi?id=215427
        <rdar://problem/66931291>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/__init__.py: Add pycodestyle.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove pycodestyle.

2020-09-28  Devin Rousso  <drousso@apple.com>

        [iOS] unable to airplay directly loaded fullscreen video
        https://bugs.webkit.org/show_bug.cgi?id=216858
        <rdar://problem/68746321>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/MediaDocument.mm: Added.
        (MediaDocument.WirelessPlaybackEnabled):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2020-09-28  Aakash Jain  <aakash_jain@apple.com>

        Notify igalia team about pre-existing test failures and build failures for WPE and GTK queues
        https://bugs.webkit.org/show_bug.cgi?id=217052

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email_to_bot_watchers): Moved the logic here to determine whether to email igalia folks.
        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Passed builder_name parameter.
        (AnalyzeJSCTestsResults.send_email_for_flaky_failure):
        (AnalyzeJSCTestsResults.send_email_for_pre_existing_failure):
        (ReRunWebKitTests.send_email_for_flaky_failure):
        (AnalyzeLayoutTestsResults.send_email_for_flaky_failure):
        (AnalyzeLayoutTestsResults.send_email_for_pre_existing_failure):
        (AnalyzeAPITestsResults.send_email_for_flaky_failure):
        (AnalyzeAPITestsResults.send_email_for_pre_existing_failure):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeJSCTestsResults.configureStep): Drive-by fix to improve unit-test.
        * BuildSlaveSupport/ews-build/emails.json: Added IGALIA_GTK_WPE_EMAILS. Renamed BOT_WATCHERS_EMAILS to APPLE_BOT_WATCHERS_EMAILS.
        * BuildSlaveSupport/ews-build/email_unittest.py: Updated unit-test.

2020-09-28  Matt Lewis  <jlewis3@apple.com>

        Unreviewed dashboard fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

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

        Remove run-webkit-tests code that strips trailing spaces when comparing expected.txt files
        https://bugs.webkit.org/show_bug.cgi?id=217041

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/port/base.py:
        (Port.do_text_results_differ): Removed code to strip the expected text before comparing.

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

        Change dumpAsText to strip trailing spaces
        https://bugs.webkit.org/show_bug.cgi?id=216944

        Reviewed by Alan Bujtas.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText): Strip trailing spaces.
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:]):
        Don't add trailing space.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]): Ditto.
        (addLeadingSpaceStripTrailingSpaces): Added.
        (stripTrailingSpaces): Added.
        (-[UIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]): Don't add trailing space.
        (-[UIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:]): Ditto.
        (-[UIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:]): Ditto.
        (-[UIDelegate webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:]): Ditto.
        (-[UIDelegate webView:setStatusText:]): Ditto.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFramesAsText): Strip trailing spaces.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::willPerformClientRedirectToURL): Don't add trailing space.
        * DumpRenderTree/win/UIDelegate.cpp:
        (toMessage): Changed to return std::wstring.
        (stripTrailingSpaces): Added.
        (addLeadingSpaceStripTrailingSpaces): Added.
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Don't add trailing space.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Ditto.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Ditto.
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage): Ditto.
        (UIDelegate::webViewAddMessageToConsole): Ditto.
        (UIDelegate::setStatusText): Ditto.

        * Scripts/webkitpy/port/base.py:
        (Port.do_text_results_differ): Strip trailing spaces from expected text.
        Plan is to remove this after stripping the actual expected.txt files.

        * Scripts/webkitpy/port/win.py:
        (WinPort.do_text_results_differ): Call through to base.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpFrameText): Strip trailing spaces.
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame): Don't add trailing space.
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction): Ditto.
        (WTR::stripTrailingSpaces): Added.
        (WTR::addLeadingSpaceStripTrailingSpaces): Added.
        (WTR::InjectedBundlePage::willAddMessageToConsole): Don't add trailing space.
        (WTR::InjectedBundlePage::willRunJavaScriptAlert): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptConfirm): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt): Ditto.

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

        Unreviewed, reverting r267608.

        Caused API test failures

        Reverted changeset:

        "Move NetworkProcessProxy ownership from WebProcessPool to
        WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=216041
        https://trac.webkit.org/changeset/267608

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

        Move NetworkProcessProxy ownership from WebProcessPool to WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=216041

        Reviewed by Brady Eidson.

        Most changes to tests are just calling a function on the WKWebsiteDataStore instead of the WKProcessPool
        because we want to do something with the network process and it has a new owner.
        Exceptions are noted inline.

        * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::downloadAtRate):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBCheckpointWAL.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        (checkRecoveryAfterCrash):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        This test was making a WKWebsiteDataStore, getting its resource load statistics directory,
        putting things in that directory, then starting the network process and making sure everything
        works when initializing the network process.  Now, network process initialization happens when a
        WKWebsiteDataStore is instantiated, so we need to put things there before instantiating a WKWebsiteDataStore.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Before this change, each WKProcessPool had its own network process, which holds the service worker registry
        for the WebsiteDataStores used with that process pool.  Now, the network process still needs to have a service
        worker registry in it, but when we receive a message from it looking for a web process to run the service
        worker, we go arbitrarily to the first process pool that has a process we can use.  This logic is in 
        WebProcessPool::establishWorkerContextConnectionToNetworkProcess.  Because we use the first process pool each
        time, setting the custom user agent to two different things in two different process pools causes only one
        to be used.  This is not a problem in practice, though, because the only application that uses the SPI to
        set a service worker's custom user agent is Safari, which only has one process pool.  This test still verifies
        that a user ageint is correctly sent.
        Similarly, the tests that count service worker processes either have different results or need to be run with
        one process pool per parent process.  To keep the results the same, I separated the tests into different
        TEST(ServiceWorkers, ...) macros which are run in separate parent processes.
        The test RestoreFromDiskNonDefaultStore needs to use the same data store for both WKWebViews now because otherwise
        there was a race condition in the startup of a new network process that wasn't there before because we were using the
        same process pool and therefore the same network process.  I added spinning the run loop and sleeping to be able to
        reproduce the race condition failure and I use the same WKWebsiteDataStore to use the same network process, which was
        the intent of using the same WKProcessPool before.  The test still tests that the registration is re-used when we are
        not using the default data store.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (-[CheckSessionCookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[CheckSessionCookieUIDelegate waitForMessage]):
        (-[CheckSessionCookieUIDelegate alertCookieHTML]):
        (TEST):
        This is the whole point of me doing this.
        I took a test that was flaky only on iOS (because of different NSHTTPCookieStorage syncing behavior) and made
        it flaky nowhere (fingers crossed!) and added a test that correctly handles session cookies like we could not
        before this change.
        I also re-used some test infrastructure and made it stop using process-global static variables for test state.
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        (TEST):
        * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm:
        (-[CloseWhileStartingProtocol startLoading]):
        (TestWebKitAPI::runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        (WTR::TestController::networkProcessDidCrash):
        (WTR::TestController::terminateNetworkProcess):
        (WTR::TestController::platformAdjustContext):
        WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting is not needed, so I removed it.
        WKContextSetPrimaryWebsiteDataStore isn't needed any more because WKContextRef (WebProcessPool) doesn't
        own a network process any more, so it doesn't care which is the default WebsiteDataStore.
        In fact, the "default" WebsiteDataStore isn't really important in the network process any more.

2020-09-25  Matt Lewis  <jlewis3@apple.com>

        Unreviewed dashboard fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS14Device.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS14Device@2x.png: Removed.

2020-09-25  Antoine Quint  <graouts@webkit.org>

        Add an experimental feature flag for CSS individual transform properties
        https://bugs.webkit.org/show_bug.cgi?id=216271
        <rdar://problem/68914539>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

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

        REGRESSION (r267516): `--use-gpu-process` no longer enables GPU process when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=216980

        Reviewed by Tim Horton.

        Rename `UseGPUProcessForMedia` and `RenderCanvasInGPUProcessEnabled`, and additionally enable a few internal
        feature flags: `UseGPUProcessForWebGLEnabled`, `UseGPUProcessForDOMRenderingEnabled`, and
        `CaptureVideoInGPUProcessEnabled`.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2020-09-25  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Use s3 for cold storage
        https://bugs.webkit.org/show_bug.cgi?id=216662
        <rdar://problem/69092010>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext.__init__): Differentiate between cache storage and long-term storage of archives.
        (ArchiveContext.__enter__): Connect to the cold storage archive, if one is available.
        (ArchiveContext.__exit__): Disconnect from the cold storage archive, if applicable.
        (ArchiveContext.register): Save to cold storage instead of cache storage by default.
        (ArchiveContext.find_archive):
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__): Pass S3 credentials to ArchiveContext.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/s3_archiver.py: Added.
        (S3Archiver):
        (S3Archiver.Credentials):
        (S3Archiver.__init__): Connect to S3 and configure our bucket.
        (S3Archiver._cipher): Construct new AES cipher, if a key was provided.
        (S3Archiver.__enter__): Create S3 resource, if one is not available.
        (S3Archiver.__exit__): Teardown S3 resource.
        (S3Archiver.save): Save an archive to S3 by it's hash.
        (S3Archiver.retrieve): Retreive an archive from S3 by its hash.
        * Scripts/libraries/resultsdbpy/setup.py: Add boto3.

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

        Implement default behavior for getUserMedia requests in case where there is no delegate set
        https://bugs.webkit.org/show_bug.cgi?id=216968

        Reviewed by Eric Carlson.

        Add camera and microphone entitlements to MobileMiniBrowser.
        Expose mediaDevices to web pages and use mock devices.

        * MobileMiniBrowser/MobileMiniBrowser/Info.plist:
        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m:
        (-[WebViewController createWebView]):

2020-09-25  Lauro Moura  <lmoura@igalia.com>

        [webkitperl] Check for custom Flatpak user dirs in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=216959

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm: Check for WEBKIT_FLATPAK_USER_DIR
        (getUserFlatpakPath):

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

        Introduce WKWebViewConfiguration mediaCaptureEnabled
        https://bugs.webkit.org/show_bug.cgi?id=216872

        Reviewed by Alex Christensen.

        Make use of new configuration boolean instead of mediaDevicesEnabled WebPreferences API.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate defaultConfiguration]):
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::GetDisplayMediaTest::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (MediaCaptureDisabledTest::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (MediaCaptureSimulateFailedSandbox::SetUp):

2020-09-24  Kate Cheney  <katherine_cheney@apple.com>

        InAppBrowserPrivacy HTTPCookie tests incorrectly use the IsInAppBrowserPrivacyEnabled NSUserDefaults value
        https://bugs.webkit.org/show_bug.cgi?id=216896
        <rdar://problem/69456713>

        Reviewed by Brady Eidson.

        The IsInAppBrowserPrivacyEnabled UserDefaults value no longer enables
        App-Bound Domains, so the tests should not use it in this way.
        Changing the bundle identifier using
        cleanUpInAppBrowserPrivacyTestSettings() and
        initializeInAppBrowserPrivacyTestSettings() is enough to
        enable/disable App-Bound Domains.

        This patch also adds a WKHTTPCookieStoreObserver to test setting
        app-bound cookies. This ensures we don't get a false positive from
        the test by being allowed to set but not retrieve app-bound cookies.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserPrivacyCookieObserver cookiesDidChangeInCookieStore:]):
        (setUpCookieTestWithWebsiteDataStore):
        (TEST):
        (setUpCookieTest): Deleted.
        Changed name and simplified.

2020-09-24  Jonathan Bedard  <jbedard@apple.com>

        [results.webkit.org] Drop old archive chunks
        https://bugs.webkit.org/show_bug.cgi?id=216936
        <rdar://problem/69513686>

        Unreviewed emergency infrastructure change.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Increment package version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/cassandra_archiver.py:
        (CassandraArchiver.ArchiveChunks): Changer archive chunk table.

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

        [GTK][WPE] Move proxy settings from WebKitContext to WebKitWebsiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=216927

        Reviewed by Alex Christensen.

        Use the new API in tests.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextProxySettings):

2020-09-24  Sergio Villar Senin  <svillar@igalia.com>

        [JHBUILD] Port jhbuild-wrapper to python3
        https://bugs.webkit.org/show_bug.cgi?id=216916

        Reviewed by Adrian Perez de Castro.

        Python2 is at its EOL, distributions are starting to remove it and python3 should be used by default now. Migrated
        jhbuild wrapper code to python3 (while keeping backwards compatibility with python2 just in case).

        * jhbuild/jhbuild-wrapper:
        (ensure_jhbuild): Replace has_key() by the more pythonic construction with 'in'.

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

        REGRESSION(r267502): [GTK][WPE] ephemeral WebKitWebsiteDataManager ignores TLS errors by default
        https://bugs.webkit.org/show_bug.cgi?id=216919

        Reviewed by Adrian Perez de Castro.

        Add a test case to check we propagate the setting to the network process for ephemeral sessions too.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (EphemeralSSLTest::setup):
        (EphemeralSSLTest::teardown):
        (testTLSErrorsEphemeral):
        (beforeAll):

2020-09-23  Antti Koivisto  <antti@apple.com>

        [Windows] Ignore render tree dump based results on Windows
        https://bugs.webkit.org/show_bug.cgi?id=209897

        Reviewed by Darin Adler.

        Render tree dumps are port specific and so difficult to maintain. They are mostly very old and
        have been superseded by more modern ref and text dump tests. They rarely reveal any port specific bugs.

        This patch adds --ignore-render-tree-dump-results option to run-webkit-tests and enables it by
        default on Apple Windows port.

        With the option set the render tree dump tests are still run (so crashes are detected) but their
        output is treated as if it always passed. Missing results are not written to disk.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_text):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (_set_up_derived_options):

2020-09-23  Matt Lewis  <jlewis3@apple.com>

        Unreviewed config fix.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Fixing random unicode character.

2020-09-23  Matt Lewis  <jlewis3@apple.com>

        Update iOS, watchOS and tvOS builders and tester with new SDKs
        https://bugs.webkit.org/show_bug.cgi?id=216658

        Reviewed by Jonathan Bedard.

        Bumped the versions on iOS, tvOS, and watchOS in config, dashboard and main CSS. Also, added the updated
        images for the queues.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS14Device.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS14Device@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS14Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS14Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS14.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS14@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS14Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/TvOS14Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOS7.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOS7@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOSSimulator7.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WatchOSSimulator7@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-14 img.logo):
        (table.queue-grid tr.platform.ios-14 img.logo):
        (table.queue-grid tr.platform.tvos-simulator-14 img.logo):
        (table.queue-grid tr.platform.tvos-14 img.logo):
        (table.queue-grid tr.platform.watchos-simulator-7 img.logo):
        (table.queue-grid tr.platform.watchos-7 img.logo):
        (table.queue-grid tr.platform.ios-simulator-13 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-13 img.logo): Deleted.
        (table.queue-grid tr.platform.tvos-simulator-13 img.logo): Deleted.
        (table.queue-grid tr.platform.tvos-13 img.logo): Deleted.
        (table.queue-grid tr.platform.watchos-simulator-6 img.logo): Deleted.
        (table.queue-grid tr.platform.watchos-6 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

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

        webkitpy: Make sw_vers the source of truth for the MacOS version
        https://bugs.webkit.org/show_bug.cgi?id=216903
        <rdar://problem/69462735>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Use sw_vers instead of platform.mac_ver().
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (fake_executive): Set a valid return value for sw_vers by default.

2020-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Move TLS errors API from WebKitContext to WebKitWebsiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=216822

        Reviewed by Alex Christensen.

        Update tests to use the new API instead of the deprecated one. Also update the TLSErrorsPolicy test to also
        check that ephemeral web views inherit the network settings from its web context.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL):
        (testInsecureContent):
        (testTLSErrorsPolicy):
        (testTLSErrorsRedirect):
        (testTLSErrorsHTTPAuth):
        (testLoadFailedWithTLSErrors):
        (testSubresourceLoadFailedWithTLSErrors):
        (testWebSocketTLSErrors):

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

        Force SYSTEM_VERSION_COMPAT=0 in Webkit scripts
        https://bugs.webkit.org/show_bug.cgi?id=216895
        <rdar://problem/69454393>

        Reviewed by Dewei Zhu.

        * Scripts/configure-xcode-for-embedded-development:
        * Scripts/webkitpy/__init__.py:

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

        Remove ENABLE_SVG_FONTS macro
        https://bugs.webkit.org/show_bug.cgi?id=216850

        Reviewed by Don Olmstead.

        * Scripts/webkitperl/FeatureList.pm:

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

        Limit number of emails to send for flaky and pre-existing API and layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=216876

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests): Simply limit the flaky failures immediately after they are calculated, since we don't display
        the count of flaky failures. Flaky failures are displayed only to help bot-watchers in noticing flaky tests.
        (AnalyzeLayoutTestsResults.report_pre_existing_failures): Limit pre-existing and flaky test failures just before sending emails.
        (AnalyzeAPITestsResults.analyzeResults):

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

        Notify igalia team about pre-existing test failures and build failures for JSC queues
        https://bugs.webkit.org/show_bug.cgi?id=216889

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Send email for pre-existing jsc build failures.
        (AnalyzeJSCTestsResults.send_email_for_pre_existing_failure): Send email for pre-existing jsc test failure.
        * BuildSlaveSupport/ews-build/send_email.py:
        * BuildSlaveSupport/ews-build/emails.json: Added email address of igalia jsc team.

2020-09-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r267403.

        Caused 50+ Crashes on iOS Debug

        Reverted changeset:

        "Move Media in GPU Process flag from internal to experimental"
        https://bugs.webkit.org/show_bug.cgi?id=216473
        https://trac.webkit.org/changeset/267403

2020-09-23  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r267368) [webkitpy] autoinstalled pytest raises ImportError in run-webdriver-tests
        https://bugs.webkit.org/show_bug.cgi?id=216879

        Reviewed by Jonathan Bedard.

        Autoinstalled pytest requires sys.path to be updated with the newly
        installed packages. Before r267368 it worked because
        webdriver_w3c_executor.py autoinstalled mozlog/mozprocess which
        updated the sys.path.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pytest):

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

        Add support for HTMLMediaElement.setSinkId
        https://bugs.webkit.org/show_bug.cgi?id=216696

        Reviewed by Eric Carlson.

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

2020-09-22  Keith Rollin  <krollin@apple.com>

        Unify debug and release target aliases
        https://bugs.webkit.org/show_bug.cgi?id=216863
        <rdar://problem/69407746>

        Reviewed by Tim Horton.

        All Makefiles have "debug", "d", "release", and "r" for build
        targets. Others -- but not all -- also include "dev", "develop",
        "development", "dep", "deploy", and "deployment". Because of this
        inconsistency, trying to use those additional targets didn't work. It
        looks like all Makefiles used to support all of those targets, but
        some got dropped along the way. For instance, the top-level Makefile
        and Source/Makefile dropped them in 2013 as part of Bug 107863. And it
        looks like WebKitLibraries/Makefile never had them. Given that those
        additional targets don't work, it seems like no one uses them, so
        let's remove them completely.

        * Makefile:

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

        Make TLSVersion API tests more robust.
        https://bugs.webkit.org/show_bug.cgi?id=216704

        Like I did in r267278, the TLSVersion.ShouldAllowDeprecatedTLS API test was also asserting with TCPServer,
        so use HTTPServer which gracefully handles a variable number of connection attempts.
        The NetworkSession tests that use NSUserDefaults need to be split into a separate test for bug 216041,
        so may as well do that here, too.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::makeWebViewWith):
        (TestWebKitAPI::TEST):

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

        Limit number of emails to send for flaky and pre-existing JSC test failures
        https://bugs.webkit.org/show_bug.cgi?id=216857

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeJSCTestsResults.start):

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

        REGRESSION(r266075): WebContent process crashes at TextManipulationController::getPath
        https://bugs.webkit.org/show_bug.cgi?id=216846

        Reviewed by Wenson Hsieh.

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

2020-09-22  Keith Rollin  <krollin@apple.com>

        Refactor build rules in Makefiles and Makefile.shared
        https://bugs.webkit.org/show_bug.cgi?id=216806
        <rdar://problem/69332316>

        Reviewed by David Kilzer.

        Factor out the common aspects of the build rules in Makefile.shared
        and the various Makefiles. This allows us to more easily see what's
        different between the various build targets, and to apply uniform
        changes across all of the targets.

        * Makefile:

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

        Implement a default prompt for getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=216821

        Reviewed by Eric Carlson.

        Remove getUserMedia delegate implementations to use WebKit built-in prompt.
        Add camera and microphone entitlements to allow using real cameras and microphones.
        Keep using mock devices as the default.

        * MiniBrowser/MiniBrowser.entitlements:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestMediaCaptureAuthorization:decisionHandler:]): Deleted.
        (-[WK2BrowserWindowController _webView:includeSensitiveMediaDeviceDetails:]): Deleted.

2020-09-22  Brian Burg  <bburg@apple.com>

        [Cocoa] _WKInspectorDelegate should handle showing external resources
        https://bugs.webkit.org/show_bug.cgi?id=216334

        Reviewed by Devin Rousso.

        Test the delegate using WebKit API and using InspectorFrontendHost API.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (-[InspectorDelegate inspector:openURLExternally:]): Added.
        (TEST):

2020-09-22  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r267380.

        Broke multiple test suites on Liberty

        Reverted changeset:

        "[webkitpy] Use webkitcorepy's auto installer for pytest
        packages"
        https://bugs.webkit.org/show_bug.cgi?id=215895
        https://trac.webkit.org/changeset/267380

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

        Move Media in GPU Process flag from internal to experimental
        https://bugs.webkit.org/show_bug.cgi?id=216473
        <rdar://problem/69318786>

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Disable Media in GPU Process flag and WebRTC codec experimental features by default.
        This can be overriden by WebKitTestRunner options.

2020-09-21  Adrian Perez de Castro  <aperez@igalia.com>

        [CMake] Use imported targets in find module for the ATK SPI2 bridge dependency
        https://bugs.webkit.org/show_bug.cgi?id=216773

        Reviewed by Don Olmstead.

        * wpe/backends/CMakeLists.txt: Use the ATK::Bridge imported target.

2020-09-21  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Use webkitcorepy's auto installer for pytest packages
        https://bugs.webkit.org/show_bug.cgi?id=215895
        <rdar://problem/67885471>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/__init__.py: Add pytest and it's dependencies.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove pytest and pytest_timeout.
        (AutoinstallImportHook._install_pytest_timeout): Deleted.
        (AutoinstallImportHook._install_pytest): Deleted.
        * Scripts/webkitpy/webdriver_tests/pytest_runner.py: Implicitly use webkitcorepy's autoinstaller.

2020-09-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Don't set the UV option if the authenticator doesn't support it
        https://bugs.webkit.org/show_bug.cgi?id=215836
        <rdar://problem/67817359>

        Reviewed by Darin Adler.

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

2020-09-21  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Use webkitcorepy's auto installer for moz* packages
        https://bugs.webkit.org/show_bug.cgi?id=215889
        <rdar://problem/67877935>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/__init__.py: Add mozprocess, mozlog and mozterm to AutoInstalled packages.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove mozlog and mozprocess.
        (AutoinstallImportHook._install_mozlog): Deleted.
        (AutoinstallImportHook._install_mozprocess): Deleted.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py: Implicitly use webkitcorepy's auto-installer.

2020-09-21  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Use webkitcorepy's auto installer for six
        https://bugs.webkit.org/show_bug.cgi?id=215770
        <rdar://problem/67683133>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize): Remove six.
        (AutoinstallImportHook._install_pytest): Ditto.
        (AutoinstallImportHook._install_six): Deleted.

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

        Enable AddressSanitizer in C++ std library templates
        <https://webkit.org/b/216746>

        Reviewed by Darin Adler.

        This change also prevents duplicate command-line switches from
        being passed to clang since OTHER_CFLAGS is used when compiling
        C++ sources.

        * sanitizer/asan.xcconfig:
        (WK_SANITIZER_OTHER_CPLUSPLUSFLAGS_YES): Add.
        - Undefines _LIBCPP_HAS_NO_ASAN macro to enable ASan for C++ std
          library templates.

        * sanitizer/sanitizer.xcconfig:
        (WK_SANITIZER_OTHER_CPLUSPLUSFLAGS_YES): Add.
        - Provide placeholder.
        (OTHER_CPLUSPLUSFLAGS):
        - Switch from WK_SANITIZER_OTHER_CFLAGS_ prefix to
          WK_SANITIZER_OTHER_CPLUSPLUSFLAGS_ prefix.

2020-09-21  Aakash Jain  <aakash_jain@apple.com>

        Make ews-app robust against config.json issues (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=216705

        Unreviewed follow-up fix to change a log statement.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.update_icons_for_queues_mapping):

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

        [GTK][WPE] WKTR has lost access to Pulseaudio
        https://bugs.webkit.org/show_bug.cgi?id=216745

        Reviewed by Carlos Garcia Campos.

        Let Pulseaudio env vars pass through in the test environment, this is specially needed when
        the test harness runs in the Flatpak sandbox.

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

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

        [GTK][WPE] Missing support for multi-word $WEBKIT_MINI_BROWSER_PREFIX
        https://bugs.webkit.org/show_bug.cgi?id=216604

        Reviewed by Adrian Perez de Castro.

        Gracefully handle cases where the env var contains multiple words, by splitting its contents
        to a list and inserting it at the beginning of the final minibrowser command.

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

2020-09-21  Kate Cheney  <katherine_cheney@apple.com>

        Allow about:blank subframe loads for non app-bound top frames
        https://bugs.webkit.org/show_bug.cgi?id=216715
        <rdar://problem/69070720>

        Reviewed by Darin Adler.

        Two new tests for about:blank loaded under an app-bound domain and
        non-app bound domain respectively. Tests that the subframe load
        has the same app-bound status as the parent frame by testing script
        injection powers.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        Fixed two test names that didn't make sense.

        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
        (TEST):

2020-09-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Drop Options::useBigInt
        https://bugs.webkit.org/show_bug.cgi?id=216743

        Reviewed by Darin Adler.

        * Scripts/run-jsc-benchmarks:
        * Scripts/run-jsc-stress-tests:

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

        [GLIB] Merge API test expectations

        Unreviewed test gardening.

        Two TestUIClient sections were causing the first one to be ignored.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-09-18  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] API test /webkit/WebKitWebView/usermedia-enumeratedevices-permission-check is crashing

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [macOS] REGRESSION (r265702): System Services receive 0 bytes when extracting selected content as rich text data
        https://bugs.webkit.org/show_bug.cgi?id=216718
        <rdar://problem/69150358>

        Reviewed by Tim Horton.

        Add a new API test to verify that we get non-empty web archive data when using
        `-writeSelectionToPasteboard:types:` to grab selected content as rich text data.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:

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

        REGRESSION (r266634): fast/selectors/text-field-selection-stroke-color.html and fast/selectors/text-field-selection-window-inactive-stroke-color.html are flaky failures with pixel noise
        https://bugs.webkit.org/show_bug.cgi?id=216394
        <rdar://problem/68679551>

        Reviewed by Tim Horton.

        Make sure activity state changes for window updates in resetStateToConsistentValues are dispatched in time.

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

2020-09-18  Aditya Keerthi  <akeerthi@apple.com>

        Date/time inputs should not use user-specified formats
        https://bugs.webkit.org/show_bug.cgi?id=216484
        <rdar://problem/68864815>

        Reviewed by Wenson Hsieh.

        Added a test which sets a custom date format using "defaults write"
        and verifies that the width is indistinguishable from the default
        format.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DateInputTests.mm: Added.
        (createWebViewForTest):
        (DateInputsTests.IgnoresUserEditsToLocale):

2020-09-18  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Date/time inputs should focus the next editable component when entering a separator key
        https://bugs.webkit.org/show_bug.cgi?id=216661
        <rdar://problem/69091856>

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown):

        Add support for colon, semicolon, and comma keys. The keycode values are
        taken from the virtual keycode values in HIToolbox/Events.h.

        Note that the keycode for colon and semicolon is the same, as there is
        no distinct value for colon. This is safe as it matches the Javascript
        behavior.

2020-09-18  Alex Christensen  <achristensen@webkit.org>

        WKWebView._tryClose should return whether it succeeded or not
        https://bugs.webkit.org/show_bug.cgi?id=216660

        Reviewed by Tim Horton.

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

2020-09-18  Alex Christensen  <achristensen@webkit.org>

        Make TLSVersion.NetworkSession API test more robust
        https://bugs.webkit.org/show_bug.cgi?id=216704
        <rdar://problem/68643674>

        Reviewed by Tim Horton.

        r265573 made preconnect attempts to legacy TLS servers fail.
        This caused the TLSVersion.NetworkSession to assert because the first connection attempt would fail
        (and the second would succeed if it was supposed to succeed with the conditions in the test).
        The test calls waitForDidFailProvisionalNavigation in cases where it is supposed to fail and
        waitForDidFinishNavigation in cases where it supposed to succeed.
        Like I did in r266100 with another test, use HTTPServer which allows a variable number of connection attempts.

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

2020-09-18  Aakash Jain  <aakash_jain@apple.com>

        Make ews-app robust against config.json issues
        https://bugs.webkit.org/show_bug.cgi?id=216705

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.fetch_config):
        (Buildbot.update_icons_for_queues_mapping):

2020-09-18  Diego Pino Garcia  <dpino@igalia.com>

        [ews] Set only one worker for JSC ARMv7 builder and tester queues
        https://bugs.webkit.org/show_bug.cgi?id=216476

        Reviewed by Aakash Jain.

        Currently many builds are failing in EWS JSC ARMv7 tester queue due to
        a linking error in libicu.  The problem lies on the boards that are
        used to run the tests which have different system libraries.

        Temporarily use one single builder and tester producing binaries compatible
        with the boards.

        * BuildSlaveSupport/ews-build/config.json:

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

        [GTK] Epiphany does not make connections in Incognito Mode after clearing .cache
        https://bugs.webkit.org/show_bug.cgi?id=216430

        Reviewed by Adrian Perez de Castro.

        Add unit test to check we can start downloads in ephemeral sessions before a web view is created.

        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (testDownloadEphemeralContext):
        (beforeAll):

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

        Unreviewed test gardening for rdar://57029120.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:

2020-09-17  Sam Weinig  <weinig@apple.com>

        Remove runtime setting for enabling/disabling the UserTiming and ResourceTiming APIs
        https://bugs.webkit.org/show_bug.cgi?id=216556

        Reviewed by Darin Adler.

        Remove runtime setting for enabling/disabling UserTiming and ResourceTiming 
        APIs. They have both been on for a while in WebKit2 and there aren't any
        known uses cases for disabling them. In addition to removing the setting, 
        they are now enabled in LegacyWebKit as well.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

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

        [Flatpak SDK] bwrap: add pipewire socket as bind mount
        https://bugs.webkit.org/show_bug.cgi?id=216606

        Reviewed by Philippe Normand.

        Add pipewire socket to bwrap as a try binding mount.

        * flatpak/webkit-bwrap:

2020-09-17  Diego Pino Garcia  <dpino@igalia.com>

        [ews] Re-enable api-gtk queue
        https://bugs.webkit.org/show_bug.cgi?id=216647

        Reviewed by Aakash Jain.

        The queue was disabled temporarily in r266956.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * BuildSlaveSupport/ews-build/config.json:

2020-09-17  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed gardening. API test WebKitWebInspectorServer/test-page-list is flaky.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-09-17  Antoine Quint  <graouts@webkit.org>

        Remove the legacy animation code
        https://bugs.webkit.org/show_bug.cgi?id=216608

        Reviewed by Dean Jackson.

        Since we now have a single animation engine, the runtime flags to optionally enable the Web Animations engine are
        not needed anymore and are now removed.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        (TestOptions::webViewIsCompatibleWithOptions const):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):

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

        [CMake] Add a new library target TestRunnerShared
        https://bugs.webkit.org/show_bug.cgi?id=216465

        Reviewed by Don Olmstead.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * PlatformFTW.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * TestRunnerShared/CMakeLists.txt: Added.
        * TestRunnerShared/config/config.h: Added.
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformFTW.cmake:
        * WebKitTestRunner/PlatformWin.cmake:

2020-09-16  Sam Weinig  <weinig@apple.com>

        Remove runtime setting for enabling/disabling CSS shadow parts
        https://bugs.webkit.org/show_bug.cgi?id=216567

        Reviewed by Tim Horton.

        Remove runtime setting for enabling/disabling CSS shadow parts. It is
        on by default and there is no known reason one would need to disable it.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2020-09-16  Stephan Szabo  <stephan.szabo@sony.com>

        Remove ENABLE_METER_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=216582

        Reviewed by Fujii Hironori.

        With PlayStation finally planning to turn this on,
        no ports had this disabled, so remove the enable flag.

        * Scripts/webkitperl/FeatureList.pm:

2020-09-16  Aakash Jain  <aakash_jain@apple.com>

        EWS emails to bot watchers about build failures should be grouped properly
        https://bugs.webkit.org/show_bug.cgi?id=216495

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Set email headers appropriately.

2020-09-16  Sam Weinig  <weinig@apple.com>

        Remove runtime setting for enabling/disabling the isSecureContext API?
        https://bugs.webkit.org/show_bug.cgi?id=216562

        Reviewed by Darin Adler.

        Remove runtime setting for enabling/disabling the the isSecureContext attribute. 
        on window and the worker global scope. There is no known reason one would need 
        to disable it.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2020-09-16  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r266844) [ BigSur ] http/tests/security/webaudio-render-remote-audio-allowed-crossorigin.html is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=216619

        Reviewed by Chris Dumez.

        In r266844, we adopted an API which would cause audio decoding to be supressed when a media element is initially muted. WebKitTestRunner
        calls a WebKit SPI to artificially mute all media elements within the page (because listening to LayoutTest beeps and boops is annoying)
        which causes this code path to be hit for all media elements. Rather than muting the page, WKTR should do the same as DRT, and set the
        output volume to zero.

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

2020-09-16  Aakash Jain  <aakash_jain@apple.com>

        [ews] Improve failure summary string for AnalyzeCompileWebKitResults step
        https://bugs.webkit.org/show_bug.cgi?id=216566

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.analyzeResults): Move self.finished() after setting self.descriptionDone.

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

        [Flatpak] webkit-bwrap drive-by cleanups

        Rubber-stamped by Adrian Perez de Castro.

        * flatpak/webkit-bwrap: Extend lists with tuples, use itertools and map to build the final
        command line.

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

        [Flatpak SDK] Cherry-pick Mesa use-after-free fixes
        https://bugs.webkit.org/show_bug.cgi?id=216532

        Reviewed by Žan Doberšek.

        These patches are not in any stable Mesa release yet. The crash is happening on various
        tests on both WPE and GTK test bots.

        Upstream MR: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5789

        * buildstream/elements/sdk/mesa.bst:
        * buildstream/patches/mesa/0001-mesa-rename-_mesa_free_errors_data.patch: Added.
        * buildstream/patches/mesa/0002-mesa-add-bool-param-to-_mesa_free_context_data.patch: Added.
        * buildstream/patches/mesa/0003-mesa-st-release-debug_output-after-destroying-the-co.patch: Added.

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

        [GStreamer] Update Flatpak SDK to 1.18.0
        https://bugs.webkit.org/show_bug.cgi?id=216270

        Reviewed by Žan Doberšek.

        Update to GStreamer 1.18.0, removing the patches now being shipped in this release.

        * buildstream/elements/sdk/gst-libav.bst:
        * buildstream/elements/sdk/gst-plugins-bad.bst:
        * buildstream/elements/sdk/gst-plugins-base.bst:
        * buildstream/elements/sdk/gst-plugins-good.bst:
        * buildstream/elements/sdk/gst-plugins-ugly.bst:
        * buildstream/elements/sdk/gstreamer.bst:
        * buildstream/patches/gst-libav-stop-caching-codecs.patch: Removed.
        * buildstream/patches/gst-plugins-bad-0001-h264parse-Post-a-WARNING-when-data-is-broken.patch: Removed.
        * buildstream/patches/gst-plugins-base-0001-glupload-Fix-fallback-from-direct-dmabuf-to-dmabuf-u.patch: Removed.
        * buildstream/patches/gst-plugins-base-0001-oggstream-Workaround-for-broken-PAR-in-VP8-BOS.patch: Removed.
        * buildstream/patches/gst-plugins-base-0001-playbin-Handle-error-message-with-redirection-indica.patch: Removed.
        * buildstream/patches/gst-plugins-base-0002-glupload-fix-segfault.patch: Removed.
        * buildstream/patches/gst-plugins-base-0003-glbasefilter-add-support-for-changing-the-display.patch: Removed.
        * buildstream/patches/gst-plugins-good-qtdemux-Specify-REDIRECT-information-in-error-messag.patch: Removed.
        * buildstream/patches/libav-0001-gstavviddec-Limit-default-number-of-decoder-threads.patch: Removed.

2020-09-15  David Kilzer  <ddkilzer@apple.com>

        WebKit should support building with clang ThreadSanitizer enabled
        <https://webkit.org/b/216318>
        <rdar://problem/31615729>

        Reviewed by Darin Adler.

        This patch doesn't attempt to resolve every potential false
        positive, but makes it easy to build WebKit with TSan enabled.

        * Scripts/set-webkit-configuration:
        - Add support for --[no-]tsan switches.
        * Scripts/webkitdirs.pm:
        (determineTSanIsEnabled):
        (tsanIsEnabled):
        (XcodeOptions):
        (generateBuildSystemFromCMakeProject):
        - Add support for building with TSan enabled.

        * asan/asan.xcconfig: Rename to sanitizer/asan.xcconfig.
        * sanitizer/asan.xcconfig: Rename from asan/asan.xcconfig.
        - Extract common variables to sanitizer.xcconfig.
        * sanitizer/sanitizer.xcconfig: Add.
        - Extract common variables from asan.xcconfig.
        * sanitizer/tsan.xcconfig: Add.
        - Add support for TSan.

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

        Move local storage sync SPI from WebProcessPool to WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=216581

        Reviewed by Geoffrey Garen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::clearLocalStorage):
        (WTR::TestController::syncLocalStorage):

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

        Move service worker testing timeout setting from WebProcessPool to WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=216578

        Reviewed by Geoffrey Garen.

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

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

        [TestRunnerShared] Add a new class UIScriptControllerCommon to implement UIScriptController::windowIsKey and UIScriptController::setWindowIsKey
        https://bugs.webkit.org/show_bug.cgi?id=216469

        Reviewed by Darin Adler.

        Even though UIScriptController class is defined in
        TestRunnerShared, UIScriptController::windowIsKey and
        UIScriptController::setWindowIsKey methods were defined in the
        client modules DRT and WTR. I'd like to make TestRunnerShared a
        stand-alone library which doesn't depend on DRT and WTR (Bug
        216465).

        Add a new class UIScriptControllerCommon to host the common
        methods by renaming UIScriptController.cpp.

        * DumpRenderTree/CMakeLists.txt:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::windowIsKey const):
        (WTR::UIScriptController::setWindowIsKey):
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/UIScriptControllerCommon.cpp: Renamed from Tools/WebKitTestRunner/UIScriptController.cpp.
        (WTR::UIScriptControllerCommon::windowIsKey const):
        (WTR::UIScriptControllerCommon::setWindowIsKey):
        * WebKitTestRunner/UIScriptControllerCommon.h: Added.
        (WTR::UIScriptControllerCommon::UIScriptControllerCommon):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::UIScriptControllerCocoa):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.h:
        (WTR::UIScriptControllerGtk::UIScriptControllerGtk):
        * WebKitTestRunner/win/UIScriptControllerWin.h:
        (WTR::UIScriptControllerWin::UIScriptControllerWin):
        * WebKitTestRunner/wpe/UIScriptControllerWPE.h:

2020-09-15  Sam Weinig  <weinig@apple.com>

        Remove runtime setting for enabling/disabling the fetch API
        https://bugs.webkit.org/show_bug.cgi?id=216519

        Reviewed by Alex Christensen.

        Remove runtime setting for enabling/disabling the fetch API. There is no
        reason one needs to disable it now and it has been on by default for
        a long enough time.

        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

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

        [webkitscmpy] Add Contributor object
        https://bugs.webkit.org/show_bug.cgi?id=216402
         <rdar://problem/68702680>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py: Added.
        (Contributor): Object mapping a contributor by name to their associated email addresses.
        (Contributor.clear): Clear the in-memory cache of Contributor objects.
        (Contributor.from_scm_log): Find or generate a Contributor object given a commit log line from
        an SCM tool.
        (Contributor.__init__):
        (Contributor.email): Return a single email for a Contributor.
        (Contributor.__repr__):
        (Contributor.__hash__):
        (Contributor.__cmp__):
        (Contributor.__eq__):
        (Contributor.__ne__):
        (Contributor.__lt__):
        (Contributor.__le__):
        (Contributor.__gt__):
        (Contributor.__ge__):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py: Added.
        (TestContributor):
        (TestContributor.test_git_log):
        (TestContributor.test_svn_log):
        (TestContributor.test_svn_patch_by_log):
        (TestContributor.test_author_mapping):
        (TestContributor.test_email_mapping):
        (TestContributor.test_invalid_log):
        (TestContributor.test_comparison):
        (TestContributor.test_string_comparison):
        (TestContributor.test_hash):
        (TestContributor.test_sorting):

2020-09-15  Sam Weinig  <weinig@apple.com>

        Remove runtime setting for enabling/disabling custom elements
        https://bugs.webkit.org/show_bug.cgi?id=216518

        Reviewed by Tim Horton.

        Remove runtime setting for enabling/disabling custom elements. There is no
        reason one need to disable it now, and it has been on by default for
        a long enough time.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

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

        [webkitscmpy] Add default_branch for local SCM repositories
        https://bugs.webkit.org/show_bug.cgi?id=216422
        <rdar://problem/68735897>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.default_branch): Query the local checkout for the default branch.
        (Git):
        (Git.branches): Strip "remotes/origin/" from branch names.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.default_branch):
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.default_branch): The default svn branch is always 'trunk'.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_branches):
        (TestGit.test_tags):
        (TestGit):
        (TestGit.test_default_branch):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn.test_tags):
        (TestSvn):
        (TestSvn.test_default_branch):

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

        Move WKContextClearCachedCredentials SPI to WKWebsiteDataStoreClearCachedCredentials
        https://bugs.webkit.org/show_bug.cgi?id=216513

        Reviewed by Chris Dumez.

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

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

        Remove unused plumbing for setting whether the storage access API is enabled
        https://bugs.webkit.org/show_bug.cgi?id=216516

        Reviewed by Youenn Fablet.

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

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

        Move WebSocket TLS bypass SPI from WebProcessPool to WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=216509

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAllowsAnySSLCertificate):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::setAllowsAnySSLCertificate):

2020-09-15  Rob Buis  <rbuis@igalia.com>

        Convert runtime flag to setting for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=215610

        Reviewed by Youenn Fablet.

        Remove lazy image loading runtime flag.

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

2020-09-15  Angelos Oikonomopoulos  <angelos@igalia.com>

        run-jsc-stress-tests: handle remotes that are down on startup
        https://bugs.webkit.org/show_bug.cgi?id=216357

        Reviewed by Yusuke Suzuki.

        Previously, the GNU parallel runner would needlessly fail to run if a
        remote host was down on startup, as it used forEachRemote for the
        preparatory steps (which would instafail on error).

        Change forEachRemote to (optionally) recover from failure by removing
        the remote host from the array. This also handles the case where a
        remote unexpectedly comes up during a test run (by not picking it up).

        * Scripts/run-jsc-stress-tests:

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

        End of media capture should not be reported before 3 seconds of the start of capture
        https://bugs.webkit.org/show_bug.cgi?id=216415

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[GetUserMediaUIDelegate _webView:mediaCaptureStateDidChange:]):
        Add a notCapturing boolean and wait for the notification before going back to the capturing page.
        Decrease delay to 1 second to make the test run faster.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        Make sure to set media capture state delay to zero.

2020-09-14  Sam Weinig  <weinig@apple.com>

        Remove runtime setting for enabling/disabling ShadowDOM
        https://bugs.webkit.org/show_bug.cgi?id=216511

        Reviewed by Ryosuke Niwa.

        Remove runtime setting for enabling/disabling ShadowDOM. There is no
        reason one need to disable it now, and it has been on by default for
        a long enough time.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

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

        [webkitcorepy] AutoInstaller should work with HomeBrew Python
        https://bugs.webkit.org/show_bug.cgi?id=216496
        <rdar://problem/68864294>

        Rubber-stamped by Brady Eidson.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Set prefix to empty for HomeBrew python installs.

2020-09-14  Aakash Jain  <aakash_jain@apple.com>

        Add unit-tests for triggered_by key in ews config
        https://bugs.webkit.org/show_bug.cgi?id=216487

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.get_config): Method to read config.json
        (ConfigDotJSONTest.test_schduler_contains_valid_builder_name): Ensure that scheduler references a valid builder.
        (ConfigDotJSONTest.test_single_builder_for_triggerable_scheduler): Ensure that every Triggerable scheduler references a single builder.
        (ConfigDotJSONTest.test_incorrect_triggered_by): Ensure that triggered_by key is correct. Verify by matching that
        the builder for the triggered_by scheduler actually triggers current builder.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_clean_tree_exceed_failure_limit_with_triggered_by):

2020-09-14  Alex Christensen  <achristensen@webkit.org>

        Move cookie flushing SPI from WKProcessPool to WKHTTPCookieStore
        https://bugs.webkit.org/show_bug.cgi?id=216493

        Reviewed by Chris Dumez.

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

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

        [webkitcorepy] Disable AutoInstaller with environment variable (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=216396
        <rdar://problem/68680933>

        Unreviewed follow-up fix.

        r267019 accidently landed without the support of r267019.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.enabled): Add False and No to the list of environment variables which resolve to 'False'.
        (AutoInstall.set_directory): Use AutoInstall.log instead of print(...).

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

        [WinCairo][MediaFoundation] r264188 introduced linker warning: LNK4199: /DELAYLOAD:mf.dll ignored; no imports found from mf.dll
        https://bugs.webkit.org/show_bug.cgi?id=214170

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake:

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

        [TestRunnerShared] Make UIScriptContext not directly call UIScriptController::create which are defined in DRT and WTR
        https://bugs.webkit.org/show_bug.cgi?id=216470

        Reviewed by Simon Fraser.

        UIScriptContext constructor directly called
        UIScriptController::create which are defined in DRT and WTR. I'd
        like to make TestRunnerShared as a stand alone library which
        doesn't depend on DRT and WTR (Bug 216465). Make UIScriptContext
        take a factory function to create UIScriptController.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::runUIScript):
        * DumpRenderTree/TestRunner.h:
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext):
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptControllerShared.cpp:
        (WTR::UIScriptController::create): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::runUISideScript):

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

        [webkitcorepy] Log autoinstall details even without a logger configured
        https://bugs.webkit.org/show_bug.cgi?id=216480

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Use AutoInstall.log instead of logging.
        (AutoInstall):
        (AutoInstall.log): Check log to see if a logger is configured, if one is not,
        output the message to stderr instead.

2020-09-14  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Layout testers can go in an infinite RETRY loop when there are 30+ failures on trunk
        https://bugs.webkit.org/show_bug.cgi?id=203698
        <rdar://problem/66157544>

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.__init__): Added triggerred_by key.
        (ConfigureBuild.start): Set triggers property only if it is not already set (by the build who triggerred this build).
        (Trigger.__init__):  Added include_revision parameter, it would be False while triggerring builder, so that builder
        can use ToT instead of the specific revision.
        Also added triggers, so that when the tester trigger the builder, it can explicitly specify only to trigger it back and
        nothing else.
        (Trigger.propertiesToPassToTriggers): Pass ews_revision and triggers properties to triggered builds appropriately.
        (AnalyzeLayoutTestsResults.retry_build): Trigger the parent build if triggered_by is specified.
        * BuildSlaveSupport/ews-build/config.json: Added triggered_by key.
        * BuildSlaveSupport/ews-build/factories.py: Updated to handle triggered_by key.
        * BuildSlaveSupport/ews-build/loadConfig.py: Ditto.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): If the build is retried, ensure that the status-bubble is orange.
        (StatusBubble._most_recent_failure_message): Display the retry message from analyze-layout-tests-results step in the status-bubble.

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

        [webkitcorepy] Disable AutoInstaller with environment variable
        https://bugs.webkit.org/show_bug.cgi?id=216396
        <rdar://problem/68680933>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall):
        (AutoInstall.enabled): Check DISABLE_WEBKITCOREPY_AUTOINSTALLER to see if the autoinstaller
        has been explicitly disabled.
        (AutoInstall.set_directory): Early exit if the autoinstaller is explicitly disabled.
        (AutoInstall.find_module):
        (AutoInstall.enable): Deleted.
        (AutoInstall.disable): Deleted.

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

        [Flatpak SDK] Migration to SDK 0.3 branch
        https://bugs.webkit.org/show_bug.cgi?id=216073

        Reviewed by Adrian Perez de Castro.

        As this new SDK branch is based on the FDO 20.08 SDK which breaks ABI, existing WebKit
        builds done with the 0.2 branch will no longer be usable. Developers are advised to remove
        their WebKitBuild/{GTK,WPE} local directories after updating to 0.3.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Since we now ship Mesa directly in the SDK we can easily
        configure the prefix where DRI modules are installed. This is now the same as in the JHBuild
        sysroot.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.__init__): Bump to 0.3 branch. Also un-hardcode host platform architecture so
        that we can more easily add aarch64 bots later.
        (WebkitFlatpak._get_packages): The GL extension is no longer needed because Mesa is shipped
        directly within our SDK now. Also install the rust extension, which is useful eg when doing
        development with gst-build.
        * flatpak/webkit-bwrap: Add rustc path in PATH.

2020-09-13  Alexey Proskuryakov  <ap@apple.com>

        Move block-spammers tool to python 3
        https://bugs.webkit.org/show_bug.cgi?id=216457

        Reviewed by Sam Weinig.

        * Scripts/block-spammers: Updated for new print() and translate() syntax, and
        moved from raw_input() to input().

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

        Add a key to the text manipulation userInfo dictionary indicating whether the translated item is on-screen
        https://bugs.webkit.org/show_bug.cgi?id=216452
        <rdar://problem/68785397>

        Reviewed by Darin Adler.

        Adjust an existing test so that it adds a fourth text paragraph with 2000px of top margin, and also
        programmatically scrolls after loading the page so that only this last paragraph is visible. We expect the
        metadata to indicate that none of the other tokens except this last one has a value of `YES` for
        `_WKTextManipulationTokenUserInfoVisibilityKey`.

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

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

        Send TestRendered event after running a test but before dumping
        https://bugs.webkit.org/show_bug.cgi?id=216428

        Reviewed by Sam Weinig.

        * DumpRenderTree/CMakeLists.txt: Added the new files and directories.
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Ditto.

        * DumpRenderTree/PlatformWin.cmake: Temporarily disable precompiled headers
        on WinCairo since they were not working properly with JSBasics.cpp.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate readyToDumpState]): Added. Calls sendTestRenderedEvent.
        (-[FrameLoadDelegate processWork:]): Call readyToDumpState.
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]): Ditto.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (readyToDumpState): Added. Calls sendTestRenderedEvent.
        (FrameLoadDelegate::processWork): Call readyToDumpState.
        (FrameLoadDelegate::locationChangeDone): Ditto.

        * TestRunnerShared/Bindings/JSBasics.cpp: Added.
        (WTR::JSValueMakeBooleanOrNull): Moved from JSWrappable.h.
        (WTR::JSValueToNullableBoolean): Ditto.
        (WTR::JSValueMakeStringOrNull): Ditto.
        (WTR::createJSString): Ditto.
        (WTR::makeValue): Ditto.
        (WTR::objectProperty): Ditto.
        (WTR::setProperty): Added. Sets a named property value to a boolean.
        (WTR::call): Moved from JSWrappable.h.
        (WTR::callConstructor): Added. Gets a global constructor and calls it.

        * TestRunnerShared/Bindings/JSBasics.h: Added. Declares the above functions.

        * TestRunnerShared/Bindings/JSWrappable.h:
        (WTR::JSValueMakeBooleanOrNull): Deleted.
        (WTR::JSValueToNullableBoolean): Deleted.
        (WTR::JSValueMakeStringOrNull): Deleted.
        (WTR::createJSString): Deleted.
        (WTR::makeValue): Deleted.
        (WTR::objectProperty): Deleted.
        (WTR::call): Deleted.
        (WTR::hasRefTestWaitAttribute): Deleted.

        * TestRunnerShared/Bindings/JSWrapper.h: Updated includes.

        * TestRunnerShared/ReftestFunctions.cpp: Added.
        (WTR::sendTestRenderedEvent): Added. Creates and dispatches a TestRendered event.
        (WTR::hasReftestWaitAttribute): Moved from JSWrappable.h and renamed to use a
        lowercase T since that's how web-platform-tests names things.

        * TestRunnerShared/ReftestFunctions.h: Added. Declares the above functions.

        * WebKitTestRunner/CMakeLists.txt: Added the new files and directories.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::frameDidChangeLocation): Call sendTestRenderedEvent
        before calling dumpAfterWaitAttributeIsRemoved.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityTextMarkerMac.mm: Added a
        missing include of "config.h" to fix build failures I was seeing.  An alternative,
        since this is a Cocoa-only source file, would be to put config.h into a
        precompiled prefix header.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityTextMarkerRangeMac.mm: Ditto.

        * WebKitTestRunner/PlatformWin.cmake: Temporarily disable precompiled headers
        on WinCairo since they were not working properly with JSBasics.cpp.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added the new
        files and directories.

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

        REGRESSION (r266817): ASSERTION FAILED: injectedBundle.isTestRunning() on imported/w3c/web-platform-tests/service-workers/service-worker/svg-target-reftest.https.html
        https://bugs.webkit.org/show_bug.cgi?id=216440

        [GTK] imported/w3c/web-platform-tests/service-workers/service-worker/svg-target-reftest.https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=210375

        Reviewed by Sam Weinig.

        Did some hardening of the reftest-wait mechanism in WebKitTestRunner.
        We can later do the same in DumpRenderTree if the same problem comes up there,
        but at this time I don't have a test that reproduces the issue there so not
        changing it for now. Don't want to add speculative code without testing it.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::hasRefTestWaitAttribute): Changed to take a WKBundlePageRef instead of
        a InjectedBundlePage&.
        (WTR::dumpAfterWaitAttributeIsRemoved): Changed to take a WKBundlePageRef.
        Added code to handle cases where an explicit dump occurs while we are waiting
        for the attribute to be removed. Identify the page with the WKBundlePageRef,
        which can be retained/released.
        (WTR::InjectedBundlePage::frameDidChangeLocation): Check page for null
        instead of indirectly checking by asking if the pageCount is 0. Also pass
        a WKBundlePageRef in to dumpAfterWaitAttributeIsRemoved.

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

        [GTK] REGRESSION(r266815): Several GTK API tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=216361

        Reviewed by Adrian Perez de Castro.

        Unskip tests that are now passing.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [GTK] Timeouts after reftest-wait class enablement in r266817
        https://bugs.webkit.org/show_bug.cgi?id=216397

        Reviewed by Adrian Perez de Castro.

        Tests are timing out because dumpAfterWaitAttributeIsRemoved() is called recursively from a WebCore timer, not
        allowing other sources with lower priority like display refresh monitor one to be run. This patch simply adds a
        1 millisecond delay between dumpAfterWaitAttributeIsRemoved tries to allow other sources to be run in the main
        loop.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpAfterWaitAttributeIsRemoved):

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

        Assertion Failed: m_currentScriptCallbackID in UIScriptContext::requestUIScriptCompletion
        https://bugs.webkit.org/show_bug.cgi?id=216376

        Reviewed by Tim Horton.

        After completing each task, we will end UIScript if there is no remaining task. We need to make sure task is
        completed asynchronously, otherwise it may finish before other tasks in the same script are scheduled as
        script ends early.

        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::completeTaskAsynchronouslyAfterActivityStateUpdate):
        (WTR::UIScriptControllerCocoa::removeViewFromWindow):
        (WTR::UIScriptControllerCocoa::addViewToWindow):

2020-09-11  Frank Yang  <guowei_yang@apple.com>

        Adding myself as committer
        https://bugs.webkit.org/show_bug.cgi?id=216419

        Reviewed by Myles C. Maxfield.

        Adding myself as a committer.

        * Scripts/webkitpy/common/config/contributors.json:
            adding committer status to my name.

2020-09-11  Aakash Jain  <aakash_jain@apple.com>

        Disable gtk-api queue temporarily
        https://bugs.webkit.org/show_bug.cgi?id=216411

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

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

        Move _setCookieAcceptPolicy to WKHTTPCookieStore
        https://bugs.webkit.org/show_bug.cgi?id=216375

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/CookieAcceptPolicy.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

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

        Strip Quotes for run-jsc-stress-tests --model arg
        https://bugs.webkit.org/show_bug.cgi?id=216417

        Reviewed by Jonathan Bedard.

        * Scripts/run-jsc-stress-tests:

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

        REGRESSION(r266634): WKThumbnailViewResetsViewStateWhenUnparented is flaky
        https://bugs.webkit.org/show_bug.cgi?id=216258
        <rdar://problem/68515242>

        Reviewed by Tim Horton.

        r266634 makes activity state changes dispatched after existing CA transaction is committed, which delays update 
        of page state in web process.

        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView waitUntilActivityStateUpdateDone]):

2020-09-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r266842 and r266883.

        Causes some assertions to be hit in debug builds

        Reverted changesets:

        "Some WebAudio tests give different output on different
        machines"
        https://bugs.webkit.org/show_bug.cgi?id=216371
        https://trac.webkit.org/changeset/266842

        "Unreviewed Windows build fix after r266842."
        https://trac.webkit.org/changeset/266883

2020-09-09  Brian Burg  <bburg@apple.com>

        Web Inspector: _WKInspectorDelegate should be attached to _WKInspector not WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=215961

        Reviewed by Devin Rousso.

        Refactor the test to set the _WKInspectorDelegate correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKInspectorDelegate.mm.
        (-[InspectorDelegate inspectorDidEnableBrowserDomain:]):
        (-[InspectorDelegate inspectorDidDisableBrowserDomain:]):
        (-[UIDelegate _webView:didAttachLocalInspector:]):
        (TEST):

2020-09-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: modernize generated backend protocol code
        https://bugs.webkit.org/show_bug.cgi?id=216302
        <rdar://problem/68547649>

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/WTF/JSONValue.cpp:

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

        REGRESSION (r266634): [macOS release] 4 layout tests became flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=216275
        <rdar://problem/68515242>

        Reviewed by Tim Horton.

        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::removeViewFromWindow):
        (WTR::UIScriptControllerCocoa::addViewToWindow):

2020-09-10  Chris Dumez  <cdumez@apple.com>

        Some WebAudio tests give different output on different machines
        https://bugs.webkit.org/show_bug.cgi?id=216371

        Reviewed by Alex Christensen.

        Update DRT / WRT to hardcode the hardware sample rate to 44100 so that Web Audio
        test have the same output on different hardware.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2020-09-10  Kate Cheney  <katherine_cheney@apple.com>

        Clean up App-Bound Domains code to only compile for iOS with its own macro
        https://bugs.webkit.org/show_bug.cgi?id=215027
        <rdar://problem/63688232>

        Reviewed by Darin Adler.

        Replace check for IOS_FAMILY with more aptly named APP_BOUND_DOMAINS
        macro.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

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

        [webkitscmpy] Add tags, branches queries on local repositories
        https://bugs.webkit.org/show_bug.cgi?id=216333
        <rdar://problem/68603047>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git):
        (Git.branches): List all branches associated with a local repository.
        (Git.tags): List all tags associated with a local repository.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm):
        (Scm.branches):
        (Scm.tags):
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn):
        (Svn.list):
        (Svn.branches): List all branches associated with a local repository.
        (Svn.tags): List all branches associated with a local repository.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add 'git branch -a' and 'git tag', change default branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__): Add 'svn list ^/*' commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_branch): Change default branch to main.
        (TestGit):
        (TestGit.test_branches):
        (TestGit.test_tags):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestSvn):
        (TestSvn.test_branches):
        (TestSvn.test_tags):

2020-09-10  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed test gardening. Add tests timing out after r266815.

        Also update test expectations to remove test passing after r266721.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-09-10  Darin Adler  <darin@apple.com>

        webkit-test-runner: Add support for the reftest-wait class name
        https://bugs.webkit.org/show_bug.cgi?id=186045

        Reviewed by Antti Koivisto.

        Rather than implement this in a JavaScript test running, built this
        support into the two test runner tools.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate dumpAfterWaitAttributeIsRemoved:]): Added. Use to keep
        polling until the reftest-wait attribute is gone.
        (-[FrameLoadDelegate processWork:]): Call dumpAfterWaitAttributeIsRemoved
        instead of calling dump directly.
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]): Ditto.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (dumpAfterWaitAttributeIsRemoved): Added. Use to keep polling until the
        reftest-wait attribute is gone.
        (FrameLoadDelegate::processWork): Call dumpAfterWaitAttributeIsRemoved
        intead of calling dump directly.
        (FrameLoadDelegate::locationChangeDone): Ditto.

        * TestRunnerShared/Bindings/JSWrappable.h: Added helper functions for
        dealing with JavaScript strings, values, properties, and function calls.
        Also added a hasRefTestWaitAttribute function. All of these could probably
        find a better home, but for now it was nice to not have to add a new source file.

        * TestRunnerShared/Bindings/JSWrapper.h:
        (WTR::setProperty): Use the new createJSString. A lot of other TestRunner code
        could be tightened up by using these functions, but didn't do that for now.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::hasRefTestWaitAttribute): Added. Calls the other overload of this.
        (WTR::dumpAfterWaitAttributeIsRemoved): Added. Use to keep polling until
        the reftest-wait attribute is gone.
        (WTR::InjectedBundlePage::frameDidChangeLocation): Call
        dumpAfterWaitAttributeIsRemoved instead of done.

2020-09-09  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify OptionSet::set
        https://bugs.webkit.org/show_bug.cgi?id=216335

        Reviewed by Said Abou-Hallawa.

        Added a unit test for OptionSet::set.

        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        (WTF_OptionSet.Set):

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

        Add Visual Studio debugger custom views for NeverDestroyed, LazyNeverDestroyed, VectorBufferBase, Optional, and StringView
        https://bugs.webkit.org/show_bug.cgi?id=216304

        Reviewed by Don Olmstead.

        * VisualStudio/WebKit.natvis:

2020-09-09  Lauro Moura  <lmoura@igalia.com>

        kill-old-processes: Avoid calling kill command with empty string with GNU xargs
        https://bugs.webkit.org/show_bug.cgi?id=216323

        Reviewed by Darin Adler.

        * BuildSlaveSupport/kill-old-processes:
        (main):

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

        ews might mark build as successful if tests fail to run
        https://bugs.webkit.org/show_bug.cgi?id=215944

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.retry_build):
        (AnalyzeLayoutTestsResults.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_test_fail_to_runs):

2020-09-09  Brady Eidson  <beidson@apple.com>

        Make sure WKWebsiteDataStore operations reuse existing process pools even when all WKWebViews have closed.
        <rdar://problem/62978295> and https://bugs.webkit.org/show_bug.cgi?id=216317

        Reviewed by Geoffrey Garen.

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

2020-09-09  Angelos Oikonomopoulos  <angelos@igalia.com>

        run-jsc-stress-test: fix escaping for --gnu-parallel-runner
        https://bugs.webkit.org/show_bug.cgi?id=215887

        Reviewed by Keith Miller.

        Change the GNU parallel invocation to use double quotes, to be consistent with
        the invocation of ssh by the make runner. This should unbreak
        --gnu-parallel-runner after the fix in r265204.

        * Scripts/run-jsc-stress-tests:

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

        Add Philippe Normand to EWS emails unsubscribe list

        Unreviewed.

        * BuildSlaveSupport/ews-build/emails.json:

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

        kill-old-processes: Remove stale Apache2 shm segments
        https://bugs.webkit.org/show_bug.cgi?id=216068

        Reviewed by Alexey Proskuryakov.

        Based on original patch by Diego Pino Garcia.

        When Apache2 terminates abruptely, it may not free up allocated shared
        memory segments.  When later Apache2 is started again, if its pid
        matches the pid of orphan shm segments it fails believing there's
        already an Apache2 instance running.  To avoid this situation, after
        killing Apache2 we check for potential orphaned shm segments and
        remove them.

        If any error happens during the cleanup, log the failure and continue
        the script, addressing the issue that caused the initial revert in
        r266536.

        * BuildSlaveSupport/kill-old-processes:
        (removeOrphanShmSegments):
        (orphanedShmSegmentsByUser):
        (main):

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

        [WinCairo] TestWTF.WTF.UniqueRef is crashing in Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=216303

        Reviewed by Ryosuke Niwa.

        The class A of UniqueRef.cpp and CompactUniquePtrTuple.cpp are
        conflicting. CRT heap threw an exception due to allocator
        mismatching while deleting class A object.

        * TestWebKitAPI/Tests/WTF/CompactUniquePtrTuple.cpp: Added a new namespace CompactUniquePtrTupleTest.
        * TestWebKitAPI/Tests/WTF/UniqueRef.cpp: Added a new namespace UniqueRefTest.
        (TestWebKitAPI::function): Deleted an unused function.

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

        [webkitcorepy] Register another package in the WebKit repository (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=216013
        <rdar://problem/68097461>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.register): Use pypiname instead of the package name.

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

        [Win] MiniBrowser URL bar can't insert a longer text than the window width
        https://bugs.webkit.org/show_bug.cgi?id=216252

        Reviewed by Per Arne Vollan.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::createToolbar): Set ES_AUTOHSCROLL and for the URL
        bar edit control. Removed ES_AUTOVSCROLL for it since it doesn't
        scroll vertically.

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

        iOS: <attachment>'s QuickLook thumbnails can appear squished
        https://bugs.webkit.org/show_bug.cgi?id=216209
        <rdar://problem/67817706>

        Reviewed by Wenson Hsieh.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::insertAttachmentForFilePath):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::currentTestURL const):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::insertAttachmentForFilePath):
        Make it possible to insert an attachment wrapping a file on disk
        via UIScriptController.

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

        EWS should set cq- flag when a patch fails to build or introduces layout-test failures
        https://bugs.webkit.org/show_bug.cgi?id=214194

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.start): Set cq- on patch when patch fails to build.
        (AnalyzeLayoutTestsResults.report_failure): Set cq- on patch when patch introduces layout-test failures.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        Use https urls instead of http in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=216276

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/config/urls_unittest.py: Changed few http urls to https, leaving a mix of http and https for testing.
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/style/checkers/cpp.py:

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

        [Flatpak SDK] Follow-up fixes for 0.3 branch
        https://bugs.webkit.org/show_bug.cgi?id=216239

        Reviewed by Žan Doberšek.

        * buildstream/elements/filtered.bst: Enable sccache on aarch64 too.
        * buildstream/elements/flatpak/sdk.bst: Enable the rust extension, can be useful eg, when
        using gst-build to have the Rust plugins enabled.
        * buildstream/elements/freedesktop-sdk.bst: Switch to tracking branch instead of tags.
        * buildstream/elements/sdk-build-depends/rapidjson.bst: Bump to current git master and add a
        patch fixing aarch64 build.
        * buildstream/elements/sdk-platform.bst: Add procps, needed at least for test-webkitpy
        * buildstream/elements/sdk/gst-plugin-dav1d.bst: Added.
        * buildstream/elements/sdk/gst-plugins-bad.bst: Fix build for aarch64.
        * buildstream/elements/sdk/sccache.bst: Disable dist server, we need the client only. The
        server builds only on x86_64 anyway.
        * buildstream/files/gst-plugin-dav1d/Cargo.lock: Added.
        * buildstream/patches/rapidjson-0001-Fix-build-warnings-emitted-by-GCC-10-on-Aarch64.patch: Added.

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

        [GTK] Unreviewed gardening. Mark several API-GTK tests as failures after r266697.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-09-06  Ryosuke Niwa  <rniwa@webkit.org>

        Make CompactUniquePtrTuple actually work with subclassing and custom deleter
        https://bugs.webkit.org/show_bug.cgi?id=216225

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/CompactUniquePtrTuple.cpp:
        (TestWebKitAPI::A::~A): Make this virtual.
        (TestWebKitAPI::B): Added.
        (TestWebKitAPI::B::B): Added.
        (TestWebKitAPI::B::~B): Added.
        (WTF_CompactUniquePtrTuple.Subclassing): Added. Tests subclassing.
        (TestWebKitAPI::ADeleter): Added.
        (TestWebKitAPI::ADeleter::operator() const):
        (WTF_CompactUniquePtrTuple.Deleter): Added. Tests a custom deleter.

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

        [WebIDL] Fix issues found by preprocess-idls.pl parser validation and enabled parser validation by default for the tests
        https://bugs.webkit.org/show_bug.cgi?id=216246

        Reviewed by Darin Adler.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        Enable the parser validation for preprocess-idls.pl to catch accidental differences between
        the fast regex based scanner in preprocess-idls.pl and the real IDL parser.

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

        Make TextCodecCJK and TextCodecSingleByte thread-safe and refactor a bit to share code
        https://bugs.webkit.org/show_bug.cgi?id=216229

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST): Removed an unused variable. At one point, with
        code that I wrote and now have rolled out, this was causing a build failure.

2020-09-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Make GlyphBufferAdvance and GlyphBufferOrigin more robust
        https://bugs.webkit.org/show_bug.cgi?id=215143

        Reviewed by Zalan Bujtas.

        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        (TestWebKitAPI::TEST_F):

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

        [WebIDL] Add mode to preprocess-idls.pl to validate fast regex based scanner with the normal IDL parser
        https://bugs.webkit.org/show_bug.cgi?id=216231

        Reviewed by Darin Adler.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        Update for rename from idlFilesList to idlFileNamesList and to pass the idlAttributesFile argument. 

2020-09-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Letter-spacing should disable ligatures
        https://bugs.webkit.org/show_bug.cgi?id=176215
        <rdar://problem/17044265>

        Reviewed by Antti Koivisto.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):

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

        Move PDF heads-up display to UI process on macOS
        https://bugs.webkit.org/show_bug.cgi?id=215780
        <rdar://problem/58715847>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        (pdfData):
        (TEST):
        (checkFrame):
        * TestWebKitAPI/cocoa/TestUIDelegate.h:
        * TestWebKitAPI/cocoa/TestUIDelegate.mm:
        (-[TestUIDelegate _webView:saveDataToFile:suggestedFilename:mimeType:originatingURL:]):

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

        [webkitcorepy] Add mock Response object
        https://bugs.webkit.org/show_bug.cgi?id=216150
        <rdar://problem/68307522>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests.py: Added.
        (Response): A response object similar to the one used by requests.

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

        run-webkit-tests rebuilds ImageDiff every time
        https://bugs.webkit.org/show_bug.cgi?id=204420
        <rdar://problem/68232690>

        Reviewed by Tim Horton.

        * Scripts/webkitpy/port/base.py:
        (Port.check_image_diff): Check the version of ImageDiff we actually intend to use.
        (Port): Use webkitcorepy's Memoize in _path_to_image_diff.
        (Port._build_image_diff): Clear the memoized cache after building ImageDiff.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort): Memoize _path_to_image_diff.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort): Memoize _path_to_image_diff.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort): Memoize _path_to_image_diff.

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

        [GTK] Unreviewed test gardening. Mark several GTK API tests as flaky.

        These tests were failing in EWS GTK-API tests bots, but I didn't
        manage to reproduce the failures in tip of master.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [ews] Notify bot watchers about pre-existing and flaky test failures for JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=215948

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeJSCTestsResults.start):
        (AnalyzeJSCTestsResults.send_email_for_flaky_failure):
        (AnalyzeJSCTestsResults):
        (AnalyzeJSCTestsResults.send_email_for_pre_existing_failure):

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

        [webkitscmpy] Add root, branch and remote for local SCM repositories
        https://bugs.webkit.org/show_bug.cgi?id=215960
        <rdar://problem/67968919>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py: Added.
        (Memoize): Add a memoize call that can cache a response for a set amount of time
        Or be explicitly cleared.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/decorators_unittest.py: Added.
        (TestMemoize):
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/__init__.py: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py: Added.
        (Git): Object representing a local git checkout.
        (Git.is_checkout): Check if a given path is a git checkout.
        (Git.__init__): Initialize a Git checkout.
        (Git.root_path): Return the path for the root of the local repository.
        (Git.branch): Return the current branch.
        (Git.remote): Return the url of the remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py: Added.
        (Scm): Base class for all local SCM checkouts.
        (Scm.Exception):
        (Scm.from_path): Given a path, return an instantiated SVN object from that
        path, if possible.
        (Scm.__init__):
        (Scm.root_path): Virtual function implemented by children.
        (Scm.branch): Ditto.
        (Scm.remote): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py: Added.
        (Svn): Object representing a local Svn checkout.
        (Svn.is_checkout): Check if a given path is a svn checkout.
        (Svn.__init__): Initialize a Svn checkout.
        (Svn.info): Return the contents of svn info as a dictionary.
        (Svn.root_path): Return the path for the root of the local repository.
        (Svn.branch): Return the current branch.
        (Svn.remote): Return the url of the remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/__init__.py: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/__init__.py: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Added.
        (Git): Mock a local Git repository.
        (Git.__init__):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py: Added.
        (Svn): Mock a local SVN repository.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/__init__.py: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py: Added.
        (TestGit):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/scm_unittest.py: Added.
        (TestScm):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py: Added.
        (TestSvn):

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

        [ews] Notify bot watchers about pre-existing and flaky test failures for API tests
        https://bugs.webkit.org/show_bug.cgi?id=215949

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults):
        (AnalyzeAPITestsResults.send_email_for_flaky_failure):
        (AnalyzeAPITestsResults):
        (AnalyzeAPITestsResults.send_email_for_pre_existing_failure):

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

        Binding generator is not always computing the right interface attributes
        https://bugs.webkit.org/show_bug.cgi?id=216173

        Reviewed by Alex Christensen.

        Add support to validate global constructor idl file generator.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

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

        [ews] Share bots between JSC builder and tester queues
        https://bugs.webkit.org/show_bug.cgi?id=215934

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/ews-build/config.json:

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

        [GLIB] Stop using firefox user agent quirk for google docs
        https://bugs.webkit.org/show_bug.cgi?id=215845

        Reviewed by Adrian Perez de Castro.

        Update API tests. Bring back UserAgentQuirks.cpp to the build that was removed in r244857.

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

2020-09-03  James Darpinian  <jdarpinian@chromium.org>

        Update James Darpinian's status to committer
        https://bugs.webkit.org/show_bug.cgi?id=216154

        Reviewed by Kenneth Russell.

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

2020-09-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Unexpected User-Agent on redirect
        https://bugs.webkit.org/show_bug.cgi?id=191858

        Reviewed by Youenn Fablet.

        Add unit tests to check the user agent is sent in headers and preserved after a redirect for both main resource
        and subresources.

        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (serverCallback):
        (testDownloadUserAgent):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testUserAgent):
        (serverCallback):
        (beforeAll):

2020-09-02  Ryosuke Niwa  <rniwa@webkit.org>

        Add CompactUniquePtrTuple
        https://bugs.webkit.org/show_bug.cgi?id=215936

        Reviewed by Darin Adler.

        Added basic unit tests for CompactUniquePtrTuple.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CompactUniquePtrTuple.cpp: Added.
        (TestWebKitAPI::A): Adde.
        (TestWebKitAPI::A::A):
        (TestWebKitAPI::A::~A):
        (WTF_CompactUniquePtrTuple.Basic):

2020-09-03  Lauro Moura  <lmoura@igalia.com>

        [GTK][WPE] generate-bundle: Remove the zip extension from the uploaded checksum filename
        https://bugs.webkit.org/show_bug.cgi?id=216137

        Reviewed by Jonathan Bedard.

        * Scripts/generate-bundle:

2020-09-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r266507.
        https://bugs.webkit.org/show_bug.cgi?id=216135

        Broke JSC EWS

        Reverted changeset:

        "kill-old-processes: Remove stale Apache2 shm segments"
        https://bugs.webkit.org/show_bug.cgi?id=216068
        https://trac.webkit.org/changeset/266507

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

        kill-old-processes: Remove stale Apache2 shm segments
        https://bugs.webkit.org/show_bug.cgi?id=216068

        Reviewed by Alexey Proskuryakov.

        When Apache2 terminates abruptely, it may not free up allocated shared
        memory segments.  When later Apache2 is started again, if its pid
        matches the pid of orphan shm segments it fails believing there's
        already an Apache2 instance running.  To avoid this situation, after
        killing Apache2 we check for potential conflicting shm segments and
        remove them.

        * BuildSlaveSupport/kill-old-processes:
        (listAllWebKitPrograms):
        (removeOrphanShmSegmentsOf):
        (removeShmSegments):
        (removeShmSegment):
        (cmd):
        (allShmSegments):
        (main):

2020-09-03  Ryosuke Niwa  <rniwa@webkit.org>

        Static assert the return type of compactMap
        https://bugs.webkit.org/show_bug.cgi?id=216119

        Reviewed by Darin Adler.

        Added static_assert for the return types of compactMap in varoius unit tests.

        (WTF_Vector.CompactMapStaticFunctionReturnOptional):
        (WTF_Vector.CompactMapStaticFunctionReturnRefPtr):
        (WTF_Vector.CompactMapStaticFunctionReturnOptionalRef):
        (WTF_Vector.CompactMapStaticFunctionReturnOptionalRefPtr):
        (WTF_Vector.CompactMapLambdaReturnOptional):
        (WTF_Vector.CompactMapLambdaCopyVectorReturnOptionalCountedObject):
        (WTF_Vector.CompactMapLambdaMoveVectorReturnOptionalCountedObject):
        (WTF_Vector.CompactMapLambdaReturnRefPtr):
        (WTF_Vector.CompactMapLambdaReturnRefPtrFromMovedRef):
        (WTF_Vector.CompactMapLambdaReturnOptionalRefPtr):

2020-09-02  Dean Jackson  <dino@apple.com>

        Update Kimmo's email.

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

2020-09-02  Ryosuke Niwa  <rniwa@webkit.org>

        Add a variant of map which filters items to Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=215879

        Reviewed by Darin Adler and Yusuke Suzuki.

        Added unit tests.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::evenMultipliedByFive):
        (WTF_Vector.CompactMapStaticFunctionReturnOptional):
        (TestWebKitAPI::RefCountedObject):
        (TestWebKitAPI::RefCountedObject::create):
        (TestWebKitAPI::RefCountedObject::ref):
        (TestWebKitAPI::RefCountedObject::RefCountedObject):
        (TestWebKitAPI::createRefCountedForOdd):
        (WTF_Vector.CompactMapStaticFunctionReturnRefPtr):
        (TestWebKitAPI::createRefCountedForEven):
        (WTF_Vector.CompactMapStaticFunctionReturnOptionalRef):
        (TestWebKitAPI::createRefCountedWhenDivisibleByThree):
        (WTF_Vector.CompactMapStaticFunctionReturnOptionalRefPtr):
        (WTF_Vector.CompactMapLambdaReturnOptional):
        (TestWebKitAPI::CountedObject):
        (TestWebKitAPI::CountedObject::CountedObject):
        (TestWebKitAPI::CountedObject::value):
        (TestWebKitAPI::CountedObject::count):
        (WTF_Vector.CompactMapLambdaCopyVectorReturnOptionalCountedObject):
        (WTF_Vector.CompactMapLambdaMoveVectorReturnOptionalCountedObject):
        (WTF_Vector.CompactMapLambdaReturnRefPtr):
        (WTF_Vector.CompactMapLambdaReturnRefPtrFromMovedRef):
        (WTF_Vector.CompactMapLambdaReturnOptionalRefPtr):

2020-09-02  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add NoAction class
        https://bugs.webkit.org/show_bug.cgi?id=216079
        <rdar://problem/68216301>

        Reviewed by Dewei Zhu.

        This is an argparse action we've duplicated in a few Internal scripts, it should
        be in a shared library.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/arguments.py: Added.
        (NoAction): argparse action supporting a binary flag.

2020-09-02  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Update date picker when the inner control is edited
        https://bugs.webkit.org/show_bug.cgi?id=216004

        Reviewed by Wenson Hsieh.

        Added dateTimePickerValue testing hook in order to enable testing the
        current value of the presented date picker. The returned value is a
        UTC timestamp is milliseconds, matching the date input's valueAsNumber.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::dateTimePickerValue const):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::dateTimePickerValue const):

2020-09-02  Per Arne Vollan  <pvollan@apple.com>

        [Win] The WPT server is not always starting when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=216035

        Reviewed by Youenn Fablet.

        The Web platform test server is not always starting when running layout tests using Cygwin. It seems that starting the WPT server
        takes longer time on Windows. Currently, the timeout is set to 20 seconds with polling every second. This patch addresses this
        issue by waiting up to 60 seconds with polling every 10th second.

        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.start):

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

        Unreviewed. Follow-up r266450, fix script due to missing variable.

        * Scripts/clean-webkit:
        (removeFiles): Add missing argument 'fs'.
        (main):

2020-09-02  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Update to FDO 20.08
        https://bugs.webkit.org/show_bug.cgi?id=215763

        Reviewed by Žan Doberšek.

        Highlights:

        - ICU 67 (see bug 215327)
        - gcc update from 9.3.0 to 10.0
        - clang update from 8.0 to 10.0
        - perf is now included
        - usable pipewire (host needs a working daemon and recent enough xdg-desktop-portal though)
        - Mesa is no longer loaded from the flathub GL extension, but included in our downstream SDK, with debug symbols

        This patch only includes the build definitions updates, bumping the SDK branch to 0.3. The
        actual migration will be landed in a follow-up patch.

        * buildstream/elements/flatpak-platform-extensions.bst:
        * buildstream/elements/flatpak-runtimes.bst:
        * buildstream/elements/flatpak/platform.bst:
        * buildstream/elements/flatpak/sdk.bst:
        * buildstream/elements/freedesktop-sdk.bst:
        * buildstream/elements/sdk-build-depends/swig.bst:
        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk.bst:
        * buildstream/elements/sdk/at-spi2-atk.bst: Removed.
        * buildstream/elements/sdk/at-spi2-core.bst: Removed.
        * buildstream/elements/sdk/atk.bst: Removed.
        * buildstream/elements/sdk/brotli.bst: Removed.
        * buildstream/elements/sdk/glib.bst:
        * buildstream/elements/sdk/gobject-introspection.bst: Removed.
        * buildstream/elements/sdk/graphene.bst:
        * buildstream/elements/sdk/gst-plugins-bad.bst:
        * buildstream/elements/sdk/gst-plugins-good.bst:
        * buildstream/elements/sdk/gstreamer.bst:
        * buildstream/elements/sdk/gtk+-3.bst:
        * buildstream/elements/sdk/gtk.bst:
        * buildstream/elements/sdk/libdrm.bst: Added.
        * buildstream/elements/sdk/libgcrypt.bst:
        * buildstream/elements/sdk/libsecret.bst:
        * buildstream/elements/sdk/libsoup.bst:
        * buildstream/elements/sdk/libsrtp2.bst: Removed.
        * buildstream/elements/sdk/mesa.bst: Added.
        * buildstream/elements/sdk/pygobject.bst:
        * buildstream/elements/sdk/python2-pygobject.bst:
        * buildstream/elements/sdk/rr.bst:
        * buildstream/elements/sdk/shared-mime-info.bst:
        * buildstream/elements/sdk/v4lutils.bst: Removed.
        * buildstream/elements/sdk/woff2.bst:
        * buildstream/elements/sdk/xorg-server.bst:
        * buildstream/elements/test-infra/httpd.bst:
        * buildstream/patches/fdo/0001-Pango-Bump-to-1.45-master.patch: Removed.
        * buildstream/patches/fdo/0001-dav1d-Bump-to-0.7.0.patch: Removed.
        * buildstream/patches/gtk-meson-Bump-to-latest-version-of-the-3.24-branch.patch: Removed.
        * buildstream/patches/libsecret-b53e9876f4611525b7a8f69a3110fbec51dcede0.patch: Removed.
        * buildstream/patches/mesa/mesa_libdrm_deps.patch: Added.
        * buildstream/patches/xserver-search-for-DRI-drivers-at-LIBGL_DRIVERS_PATH-environ.patch:
        Removed because a variant was landed upstream 2 years ago:
        https://gitlab.freedesktop.org/xorg/xserver/-/commit/319af6f471912160ab3eb6395ef50f9950063d43
        * buildstream/project.conf:
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): White-list a few Mesa environment variables.

2020-09-01  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak SDK] Adapt clean-webkit script to flatpak
        https://bugs.webkit.org/show_bug.cgi?id=216044

        Reviewed by Philippe Normand.

        Keep relevant directories in WebKitBuild/ when using flatpak.

        * Scripts/clean-webkit:
        (usesFlatpak):
        (listWebKitBuildFiles):
        (removeFiles):
        (main):

2020-09-01  Hector Lopez  <hector_i_lopez@apple.com>

        Unreviewed, reverting r266408.

        Revision caused constant crashes on iOS and macOS

        Reverted changeset:

        "Convert runtime flag to setting for lazy image loading"
        https://bugs.webkit.org/show_bug.cgi?id=215610
        https://trac.webkit.org/changeset/266408

2020-09-01  Rob Buis  <rbuis@igalia.com>

        Convert runtime flag to setting for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=215610

        Reviewed by Youenn Fablet.

        Remove lazy image loading runtime flag.

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

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

        Update URL fragment percent encode set
        https://bugs.webkit.org/show_bug.cgi?id=216022

        Reviewed by Youenn Fablet.

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

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

        [webkitcorepy] Register another package in the WebKit repository
        https://bugs.webkit.org/show_bug.cgi?id=216013
        <rdar://problem/68097461>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.register): If a package is also checked into the webkit repository,
        we prefer the checked in version to the auto-installed version.
        * Scripts/webkitpy/__init__.py: Add webkitscmpy dependency.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path): Handle case where the autoinstalled
        directory is no the first in the Python path.

2020-08-31  Hector Lopez  <hector_i_lopez@apple.com>

        Unreviewed, reverting r266350.

        Revision is causing a constant crash on both macOS and iOS

        Reverted changeset:

        "Convert runtime flag to setting for lazy image loading"
        https://bugs.webkit.org/show_bug.cgi?id=215610
        https://trac.webkit.org/changeset/266350

2020-08-31  Rob Buis  <rbuis@igalia.com>

        Convert runtime flag to setting for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=215610

        Reviewed by Youenn Fablet.

        Remove lazy image loading runtime flag.

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

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

        [Flatpak] SDK branch upgrade path is broken
        https://bugs.webkit.org/show_bug.cgi?id=215927

        Reviewed by Adrian Perez de Castro.

        The development environment (flatpak install) needs to be performed before attempting to
        rebuild toolchain archives. In most cases this wasn't an issue, but when the SDK needs to be
        upgraded to a new ABI/branch, the previous version needs to be removed, that triggers a new
        `flatpak install` and toolchain archives update, which need then to be done in the right
        order.

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

2020-08-30  Tim Horton  <timothy_horton@apple.com>

        Remove unused editable image code
        https://bugs.webkit.org/show_bug.cgi?id=215991

        Reviewed by Simon Fraser.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::drawSquareInEditableImage): Deleted.
        (WTR::UIScriptController::numberOfStrokesInEditableImage): Deleted.
        * TestRunnerShared/spi/PencilKitTestSPI.h: Removed.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (webViewForTestingAttachments):
        (TestWebKitAPI::forEachViewInHierarchy): Deleted.
        (TestWebKitAPI::findEditableImageCanvas): Deleted.
        (TestWebKitAPI::drawSquareInEditableImage): Deleted.
        * TestWebKitAPI/ios/PencilKitTestSPI.h: Removed.
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::findEditableImageCanvas const): Deleted.
        (WTR::UIScriptControllerIOS::drawSquareInEditableImage): Deleted.
        (WTR::UIScriptControllerIOS::numberOfStrokesInEditableImage): Deleted.

2020-08-28  Tim Horton  <timothy_horton@apple.com>

        Sites built with flambe.js don't work with trackpad on iPad
        https://bugs.webkit.org/show_bug.cgi?id=215954

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (-[WKTestingHoverEvent locationInView:]):
        (-[WKTestingTouch timestamp]):
        (TEST):

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

        [WebIDL] 'void' type is changing to 'undefined'
        https://bugs.webkit.org/show_bug.cgi?id=215514
        <rdar://problem/67566201>

        Reviewed by Darin Adler.

        Update IDLs and IDL parsing / code generation for the switch from 'void' to 'undefined'.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_generateImplementationFile):
        (_returnExpression):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateImplementationFile):
        (_returnExpression):
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/GCController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl:

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

        Remove almost all the remaining uses of live ranges
        https://bugs.webkit.org/show_bug.cgi?id=215755

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp:
        (TestWebKitAPI::TEST): Added test cases for node ordering involving non-user-agent
        shadow tree. Added test case that showed the old "use node order if offsets are equal"
        rule for boundary point ordering was wrong. Added tests for isPointInRange,
        intersects, and contains functions.

2020-08-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Vertical text's logical width calculation is stale from the previous height of the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=215910

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/OrthogonalFlowAvailableSize.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKit/orthogonal-flow-available-size.html: Added.

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

        [webkitcorepy] Move Timeout to webkitcorepy (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=215584
        <rdar://problem/67270713>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py: Use webkitcorepy's Timeout object.
        * Scripts/webkitpy/common/timeout_context.py: Removed.
        * Scripts/webkitpy/port/simulator_process.py: Use webkitcorepy's Timeout object.
        * Scripts/webkitpy/webdriver_plt/liveplt.py: Ditto.
        * Scripts/webkitpy/xcode/simulated_device.py: Ditto.

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

        REGRESSION(r266221) Layout tests step hanging due to slow WaveDiff comparison
        https://bugs.webkit.org/show_bug.cgi?id=215886

        Reviewed by Darin Adler.

        After r266221, a couple of webaudio tests generated WAV files with a
        small difference in a large number of samples. This caused the
        WaveDiff comparison to take too long.

        While it works fine for small diffs, this ends up creating repeatedly
        large strings for each concatenation, bringing the comparisons to a
        halt.

        Instead of relying on string concatenation, use a list to collect then
        and only concat when actually retrieving the full string.

        * Scripts/webkitpy/common/wavediff.py:
        (WaveDiff.__init__):
        (WaveDiff._diffParam):
        (WaveDiff._diffSample):
        (WaveDiff.diffText):

2020-08-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] repository svn version is incorrect when working on a branch
        https://bugs.webkit.org/show_bug.cgi?id=215863

        Reviewed by Jonathan Bedard.

        When working on a SVN branch, the information pointed in the Revision field
        doesn't reflect the last change on the branch, but the last change on trunk.
        Instead of picking that changeset, pick the "Last Changed Rev" one that should
        reflect the last change done in the current checkout (working directory).

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.svn_revision):

2020-08-27  Devin Rousso  <drousso@apple.com>

        [iOS] provide a way to get previously inserted alternatives for the selected text
        https://bugs.webkit.org/show_bug.cgi?id=215816
        <rdar://problem/66646042>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/InsertTextAlternatives.mm:
        (InsertTextAlternatives.Simple):

        * TestWebKitAPI/ios/UIKitSPI.h:

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

        Ensure that email notifications are not sent for obsolete and r- patches
        https://bugs.webkit.org/show_bug.cgi?id=215867

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin.should_send_email): Method to check if patch is obsolete/r-.
        (AnalyzeCompileWebKitResults): Inherit from BugzillaMixin.
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure): Check for patch state before sending email.
        (AnalyzeLayoutTestsResults): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures): Ditto.

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

        Send ews email notifications to myself
        https://bugs.webkit.org/show_bug.cgi?id=215815

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email_to_patch_author): Send a copy of email notification to myself.
        * BuildSlaveSupport/ews-build/master.cfg: Stop receiveing old style email notifications for build failures.

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

        [webkitscmpy] Initial commit
        https://bugs.webkit.org/show_bug.cgi?id=215864
        <rdar://problem/67827063>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy: Added.
        * Scripts/libraries/webkitscmpy/MANIFEST.in: Added.
        * Scripts/libraries/webkitscmpy/README.md: Added.
        * Scripts/libraries/webkitscmpy/setup.py: Added.
        (readme):
        * Scripts/libraries/webkitscmpy/webkitscmpy: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Added.
        (_maybe_add_webkitcorepy_path):
        * Scripts/webkitpy/test/main.py:
        (main): Add webkitscmpy to test-webkitpy.

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

        REGRESSION (r264790): IndexedDB may abort transactions of in-memory databases
        https://bugs.webkit.org/show_bug.cgi?id=215855
        <rdar://problem/67418574>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm:
        (postResult):
        (catch):

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

        Add support for TransformStream
        https://bugs.webkit.org/show_bug.cgi?id=215607

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWritableStreamAPIEnabled):
        (WTR::TestRunner::setTransformStreamAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        [webkitcorepy] Move Timeout to webkitcorepy (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=215584
        <rdar://problem/67270713>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/timeout.py:
        (Timeout.__enter__): Forward patch flag to disable context.
        (Timeout.__exit__): Ditto.
        * Scripts/webkitpy/common/timeout_context.py: Replace with webkitcorepy's Timeout object.
        (Timeout): Deleted.
        * Scripts/webkitpy/common/timeout_context_unittest.py: Removed.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Opt-out of patching time.sleep().
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.launch_app): Opt-out of patching time.sleep().
        * glib/api_test_runner.py:
        (TestRunner._run_google_test): Use specific Timeout exception.

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

        [GTK][WPE] Add bots for generating nightly bundle packages
        https://bugs.webkit.org/show_bug.cgi?id=215623

        Reviewed by Aakash Jain.

        This adds a new type of bots for GTK and WPE that runs nightly (once per day).
        The goal of this bots its to build WebKit for a specific distribution (Ubuntu LTS and LTS-1)
        and generate a bundle with the result of the build. The bundles are then uploaded to a
        server for consumption on other CIs like WPT.

        The MiniBrowser bundle targets a specific distribution, so each one of this new bots has to
        run the generate-minibrowser-bundle step. However, the JSC bundle is distro-agnostic because
        for JSC is possible to bundle all the system libraries (similar to a static build).
        That means that we only need to run the step generate-jsc-bundle in one of the bots.
        This step for generating the JSC bundle was previously executed in the bot
        'GTK Linux 64-bit Release (Build)'. This patch moves it to one of this new added bots.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (BuildFactory):
        (BuildFactory.__init__):
        (TestFactory):
        (TestFactory.__init__):
        (BuildAndGenerateMiniBrowserBundleFactory):
        (BuildAndGenerateMiniBrowserJSCBundleFactory):
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (GenerateJSCBundle):
        (GenerateMiniBrowserBundle):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

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

       [webkitcorepy] Standard Popen mocking API
        https://bugs.webkit.org/show_bug.cgi?id=215712
        <rdar://problem/67501911>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/README.md: Add mocks.Subprocess documentation.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py:  Export Subprocess, ProcessCompletion.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/popen.py: Added.
        (Popen): Mock Popen object (for both Python 2 and 3). This object extracts a ProcessCompletion object from the
        mocked Subprocess stack and behaives according to the content of that object.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/subprocess.py: Added.
        (PopenBase): Base class to share code between Python 2 and 3 constructor.
        (Popen): Mock Popen object (for both Python 2 and 3). This object extracts a ProcessCompletion object from the
        mocked Subprocess stack and behaives according to the content of that object.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/subprocess.py: Added.
        (ProcessCompletion): Class which captures the result of a mock Popen call.
        (Subprocess):
        (Subprocess.CommandRoute): Object which routes a set of subprocess arguments to a specific ProcessCompletion or callback which
        generates a ProcessCompletion.
        (Subprocess.completion_generator_for): Given a file, search through the mocked Subprocess stack to find the
        first completion for the provided file.
        (Subprocess.completion_for): Extract file name from arguments, find the completion generator, and call
        it with the provieded arguments, working directory and stdin.
        (Subprocess.__init__):
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/subprocess_unittest.py: Added.
        (MockSubprocess):
        (MockCheckOutput):
        (MockCheckCall):
        (MockRun):

2020-08-26  Eric Carlson  <eric.carlson@apple.com>

        TestWebKitAPI.AudioRoutingArbitration.Deletion is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=215856
        <rdar://problem/66950074>

        Reviewed by Jer Noble.

        This test deletes a video element by removing it from the DOM, and verifies that 
        arbitration status changes appropriately. Arbitration status isn't changed until
        the element's destructor runs, and that doesn't happen until it is garbage collected
        so force GC while waiting for the status to change.

        * TestWebKitAPI/Tests/WebKitCocoa/AudioRoutingArbitration.mm:
        (AudioRoutingArbitration::statusShouldBecomeEqualTo): Add optional parameter to force
        GC while waiting for status to change.
        (TEST_F):

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

        enumerateDevices should expose audiooutput devices that are tied to an audio input device
        https://bugs.webkit.org/show_bug.cgi?id=215806

        Reviewed by Eric Carlson.

        Enable experimental flag.

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

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

        [ews] Split JSC ARMv7 queue into separate builder and tester queue
        https://bugs.webkit.org/show_bug.cgi?id=215728

        Reviewed by Aakash Jain.

        This new bubble runs jscore-tests for JSC ARMv7 32-bit.  The former
        'jsc-armv7' bubble now reports about successful binary builds for the
        same architecture.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * BuildSlaveSupport/ews-build/config.json:

2020-08-25  Ryosuke Niwa  <rniwa@webkit.org>

        HashMap<Ref<T>>::take should return RefPtr<T>
        https://bugs.webkit.org/show_bug.cgi?id=215830

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):

2020-08-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Add a script for generating MiniBrowser bundles (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=215266

        Unreviewed follow-up fix.

        Ensure the install-dependencies script of the bundle calls apt-get update
        before trying to install the system packages when --autoinstall is passed.

        * Scripts/generate-bundle:

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

        Remove unneeded HAVE(NETWORK_FRAMEWORK) macro
        https://bugs.webkit.org/show_bug.cgi?id=215824

        Reviewed by Darin Adler.

        This used to be needed for High Sierra support, which was before Network.framework was introduced.
        Now, we can assume it is available on all Cocoa platforms.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        * TestWebKitAPI/config.h:

2020-08-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][Qt] Fix qt-wpe-minibrowser on Debian10
        https://bugs.webkit.org/show_bug.cgi?id=215730

        Reviewed by Philippe Normand.

        When not running in flatpak the path to the qml directory is different.

        * Scripts/run-qt-wpe-minibrowser:

2020-08-25  Devin Rousso  <drousso@apple.com>

        REGRESSION(r265601): invalid blame URL copied when `include_revision` is `false`
        https://bugs.webkit.org/show_bug.cgi?id=215796

        Reviewed by Daniel Bates.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:
        (CopyWebKitPermalinkCommand.permalink_for_path):
        Always add `?` to the URL before the revision and/or blame and have each have their own `&`.

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

        [Mac] REGRESSION(r262322): Focusable elements are focused when exiting from video fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=215660
        <rdar://problem/65263150>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/FullscreenFocus.mm: Added.
        (-[FullscreenFocusUIDelegate _webViewDidEnterFullscreen:]):
        (-[FullscreenFocusUIDelegate _webViewDidExitFullscreen:]):
        (TestWebKitAPI::TEST):

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

        Refresh ReadableStream.pipeTo implementation up to spec
        https://bugs.webkit.org/show_bug.cgi?id=215415

        Reviewed by Alex Christensen.

        Put console log in stderr as this makes some tests flaky otherwise.

        * DumpRenderTree/TestOptions.cpp:
        (shouldDumpJSConsoleLogInStdErr):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::shouldDumpJSConsoleLogInStdErr):

2020-08-25  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Update audio arbitration manager when audio transport changes
        https://bugs.webkit.org/show_bug.cgi?id=215781
        <rdar://problem/65920613>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/AudioRoutingArbitration.mm:
        (AudioRoutingArbitration::statusShouldBecomeEqualTo): Add message string to help
        debugging when the test fails.
        * TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html:

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

        Generated bindings for derived dictionaries are not regenerated when the base dictionary changes
        https://bugs.webkit.org/show_bug.cgi?id=181714

        Reviewed by Darin Adler.

        Add regression testing coverage for the generation of the makefile dependency file.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):
        (BindingsTests):
        (BindingsTests.detect_file_changes):
        (BindingsTests.main):

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

        Fix TLSVersion.DefaultBehavior on Mojave
        https://bugs.webkit.org/show_bug.cgi?id=215791

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        HTTPServer::Protocol::HttpsWithLegacyTLS uses tls_protocol_version_t, so this test times out on Mojave.
        Enable it for newer OSes.

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

        Make TLSVersion.DefaultBehavior more robust
        https://bugs.webkit.org/show_bug.cgi?id=215791

        Reviewed by Darin Adler.

        After r265573 sometimes it would assert, which is not a problem because it was failing the first connection
        then succeeding the second connection as intended and as happens in the real internet.
        Use HTTPServer which accepts a variable number of connections to keep the test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::respondWithChallengeThenOK):
        (TestWebKitAPI::HTTPServer::respondWithOK):

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

        Unreviewed, fix the internal iOS 13.4 build

        See Source/WebKit/ChangeLog.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::clipSelectionViewRectToContentView):

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

        [ews] enable email notifications to patch authors for build or layout test failures on their patch
        https://bugs.webkit.org/show_bug.cgi?id=215776

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.analyzeResults): Send email notification to patch authors for build failure due to their patch.
        (AnalyzeLayoutTestsResults.report_failure): Send email notification to patch authors for layout test failure.

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

        [ews] set references header in email so as to group similar emails together
        https://bugs.webkit.org/show_bug.cgi?id=215777

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email): Add support for setting references header.
        (send_email_to_patch_author):
        (send_email_to_bot_watchers):
        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure): Set references header appropriately.
        (ReRunWebKitTests.send_email_for_flaky_failure): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_flaky_failure): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_pre_existing_failure): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures): Ditto.

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

        [resultsdbpy] Fix pip package
        https://bugs.webkit.org/show_bug.cgi?id=215721
        <rdar://problem/67518275>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/MANIFEST.in: Add html and css.
        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Include submodules.
        * Scripts/libraries/resultsdbpy/setup.py: Version bump.

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

        Text manipulationshould not manipulate nodes out of paragraph range
        https://bugs.webkit.org/show_bug.cgi?id=215406

        Reviewed by Wenson Hsieh.

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

2020-08-24  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Show picker for date and datetime-local input types
        https://bugs.webkit.org/show_bug.cgi?id=214946

        Reviewed by Darin Adler and Wenson Hsieh.

        Added isShowingDateTimePicker testing hook in order to enable testing of the visibility of
        the picker.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::isShowingDateTimePicker const):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::isShowingDateTimePicker const):

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

        Unreviewed. Fix GTK4 build

        * MiniBrowser/gtk/BrowserSearchBox.c:
        * MiniBrowser/gtk/BrowserWindow.c:

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

        Programmatic selection of text in a text field causes the highlight overlay to spill out
        https://bugs.webkit.org/show_bug.cgi?id=215647
        <rdar://problem/67404979>

        Reviewed by Darin Adler.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::clipSelectionViewRectToContentView):

        Add a helper function to clip UIKit selection UI rects (for carets, selection grabbers, and ranged selection
        highlights) to the content view's (WKContentView's) bounds, as well as the selection clip rect if it is nonnull.

        (WTR::UIScriptControllerIOS::selectionStartGrabberViewRect const):
        (WTR::UIScriptControllerIOS::selectionEndGrabberViewRect const):
        (WTR::UIScriptControllerIOS::selectionCaretViewRect const):
        (WTR::UIScriptControllerIOS::selectionRangeViewRects const):

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

        Create documentOrder function, start refactoring to use it instead of Range::compare functions
        https://bugs.webkit.org/show_bug.cgi?id=215551

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added DocumentOrder.cpp.
        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp: Added.
        Relatively thorough test of three different documentOrder functions.
        Could still use even more test cases involving different types of shadow trees.

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

        [GTK][WPE] Compilation warnings with clang/gcc 10
        https://bugs.webkit.org/show_bug.cgi?id=215699

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp: Wrap m_geometry private field in GTK
        ifdefs, this is not used in WPE.
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::windowFrame): Return rect built with explicit initializers.
        * wpe/backends/WindowViewBackend.cpp: Supply additional touch client callbacks, mandated by the interface.

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

        Unreviewed, reverting r266012.

        Fix API tests after r266020

        Reverted changeset:

        "[GLIB] Update checked exception after r265942"
        https://bugs.webkit.org/show_bug.cgi?id=215738
        https://trac.webkit.org/changeset/266012

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, add slackId to my contributors.json entry

        Slack allows multiple users having the same name. How to identify one user in slack is using Slack member ID.
        Try setting a slackId and leverage it via WKR / WebKitBot.

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

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

        [macOS] Unable to copy text from the function browser panel in Numbers
        https://bugs.webkit.org/show_bug.cgi?id=215740
        <rdar://problem/65189303>

        Reviewed by Darin Adler.

        Add a new API test that serializes a WKWebView, then deserializes it, and then verifies that calling `-hitTest:`
        on the deserialized `WKWebView` grabs the `WKWebView` itself rather than the `WKFlippedView` underneath it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WKWebViewCoders.mm: Added.

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

        Regression (r265942): Layout-tests are hanging on iOS EWS
        https://bugs.webkit.org/show_bug.cgi?id=215742
        <rdar://problem/67584717>

        Unreviewed infrastructure fix.

        Partial revert of r265942, since EWS is raising objc exceptions after forking.

        * Scripts/webkitpy/common/timeout_context.py:
        (Timeout):
        * Scripts/webkitpy/common/timeout_context_unittest.py: Added.
        (TimeoutContextTests):

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

        Fix the Color/ExtendedColor lldb data provider
        https://bugs.webkit.org/show_bug.cgi?id=215735

        Reviewed by Darin Adler.

        Fix the data provider for Color after Color and ExtendedColor internals changed.

        * lldb/lldb_webkit.py:
        (WebCoreColorProvider._to_string_extended):
        (WebCoreColorProvider.to_string):

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

        [GLIB] Update checked exception after r265942
        https://bugs.webkit.org/show_bug.cgi?id=215738

        Reviewed by Carlos Alberto Lopez Perez.

        Avoid aborting the full script on a timeout due to unchecked
        exception.

        * glib/api_test_runner.py:
        (TestRunner._run_google_test): Use exception from new timeout module.

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

        [EWS] Add more workers to GTK-WK2-Tests-EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=215408

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json:

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

        [macOS] Web pages are not responding correctly to changes in "Reduce motion" setting
        https://bugs.webkit.org/show_bug.cgi?id=215664

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/AccessibilityReduceMotion.mm: Added.
        (TEST):

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

        [webkitcorepy] Fix pip package
        https://bugs.webkit.org/show_bug.cgi?id=215717
        <rdar://problem/67512294>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/MANIFEST.in: Add cacert.pem.
        * Scripts/libraries/webkitcorepy/setup.py: Include submodules.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Version bump.

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

        [ews] Handle bugs with unicode characters in title in ews emails
        https://bugs.webkit.org/show_bug.cgi?id=215627

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure): Ensure email_subject is unicode.
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Ditto.
        (ReRunWebKitTests.send_email_for_flaky_failure): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_flaky_failure): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_pre_existing_failure): Ditto.
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures): Ditto.

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

        [ews] Add 'jsc-mips-tests' bubble
        https://bugs.webkit.org/show_bug.cgi?id=215697

        This new bubble runs jscore-tests for JSC MIPS 32-bit.  The former
        'jsc-mips' bubble now reports about successful binary builds for the
        same architecture.

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):

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

        [ews] Split JSC MIPS queue into separate builder and tester queue
        https://bugs.webkit.org/show_bug.cgi?id=212009

        Reviewed by Aakash Jain.

        Currently there are two EWS JSC MIPS configured, one that runs as
        buildAndTest and another one that runs as buildOnly.

        This patch changes the buildAndTest bot to test, and makes the
        bot fetch the binary product produced by the buildOnly bot.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory):
        (JSCTestsFactory.__init__):
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestLayoutTestsFactory.test_gtk_factory):
        (TestJSCBuildFactory):
        (TestJSCBuildFactory.test_jsc_mipsel_factory):
        (TestJSCBuildFactory.test_jsc_armv7_factory):
        (TestJSCBuildAndTestsFactory):
        (TestJSCBuildAndTestsFactory.test_jsc_mipsel_factory):
        (TestJSCBuildAndTestsFactory.test_jsc_armv7_factory):
        (TestJSCTestsFactory):
        (TestJSCTestsFactory.test_jsc_mipsel_factory):
        (TestJSCTestsFactory.test_jsc_armv7_factory):
        * BuildSlaveSupport/ews-build/loadConfig.py:

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

        [webkitcorepy] Add subprocess_utils.run
        https://bugs.webkit.org/show_bug.cgi?id=215702
        <rdar://problem/67487751>

        Reviewed by Dewei Zhu.

        Python 3's subprocess.run API is much better than the multiple subprocess APIs that Python 2 provides. Rather than
        requiring new scripts and libraries to be fully Python 3, we should provide a Python 2 API identical to subprocess.run.

        * Scripts/libraries/webkitcorepy/README.md: Document usage of subprocess_utils.run.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Export subprocess_utils, bump minor version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py: Added.
        (run): Declare Python 2 version of Python 3's subprocess.run API.
        (TimeoutExpired): Ditto.
        (CompletedProcess): Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/subprocess_utils_unittest.py: Added.
        (SubprocessUtils):
        (SubprocessUtils.test_run):
        (SubprocessUtils.test_run_exit):
        (SubprocessUtils.test_run_timeout):
        (SubprocessUtils.test_run_timeout_context):

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

        [webkitcorepy] Move Timeout to webkitcorepy (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=215584
        <rdar://problem/67270713>

        Reviewed by Darin Adler and Dewei Zhu.

        The Timeout class is a generally useful Python utility, it should not live inside webkitpy.

        * Scripts/libraries/webkitcorepy/README.md: Document Timeout object.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Expose Timeout object API, increment version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/time_.py:
        (_MetaTime.__enter__): Replace timeout.py's ORIGINAL_SLEEP variable to speed up testing.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/timeout_unittest.py: Added.
        (TimeoutTests): Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/timeout.py: Added.
        (Timeout): Class representing a stackable Timeout context.
        (Timeout.Data): Class containing information about a specific deadline.
        (Timeout.Exception): Exception belonging to the Timeout object.
        (Timeout.DisableAlarm): For some block of code, disable Timeout alarms. This is useful because many APIs (such as
        subprocess.run) define their own timeouts which do better cleanup than an interrupt would.
        (Timeout.default_handler): Default Timeout handler which raises an exception.
        (Timeout.current): Return the current Timeout.Data class, if one exists.
        (Timeout.deadline): Return the closest deadline, if one exists.
        (Timeout.difference): Return the number of seconds between the current time and the closest deadline.
        (Timeout.check): Check if we have surpassed the closest deadline., raise an exception if we have.
        (Timeout.bind): Create a signal based on the closest deadline.
        (Timeout.sleep): Override the sleep function because if we ever request a sleep that is greater than the closest deadline,
        we should imiediately trigger the timeout logic without waiting for the timeout to actually expire.
        (Timeout.__init__): Create a Timeout context, 1 second by default.
        (Timeout.__enter__):
        (Timeout.__exit__):
        * Scripts/webkitpy/common/timeout_context.py:
        (Timeout): Moved to webkitcorepy.

2020-08-19  Kate Cheney  <katherine_cheney@apple.com>

        Third party domains are not stored in the case of back/forward navigations
        https://bugs.webkit.org/show_bug.cgi?id=215595
        <rdar://problem/66642893>

        Reviewed by Chris Dumez.

        API test coverage, including a new scheme handler to load third party
        domains. Also this patch changes the function name from
        loadedThirdPartyDomains to loadedSubresourceDomains based on the
        conversation from https://bugs.webkit.org/show_bug.cgi?id=215595.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (-[ResourceLoadStatisticsSchemeHandler webView:startURLSchemeTask:]):
        (-[ResourceLoadStatisticsSchemeHandler webView:stopURLSchemeTask:]):
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::loadedSubresourceDomains):
        (WTR::TestRunner::callDidReceiveLoadedSubresourceDomainsCallback):
        (WTR::TestRunner::loadedThirdPartyDomains): Deleted.
        (WTR::TestRunner::callDidReceiveLoadedThirdPartyDomainsCallback): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::LoadedSubresourceDomainsCallbackContext::LoadedSubresourceDomainsCallbackContext):
        (WTR::loadedSubresourceDomainsCallback):
        (WTR::TestController::loadedSubresourceDomains):
        (WTR::TestController::clearLoadedSubresourceDomains):
        (WTR::LoadedThirdPartyDomainsCallbackContext::LoadedThirdPartyDomainsCallbackContext): Deleted.
        (WTR::loadedThirdPartyDomainsCallback): Deleted.
        (WTR::TestController::loadedThirdPartyDomains): Deleted.
        (WTR::TestController::clearLoadedThirdPartyDomains): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveLoadedSubresourceDomains):
        (WTR::TestInvocation::didReceiveLoadedThirdPartyDomains): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::loadedSubresourceDomains):
        (WTR::TestController::clearLoadedSubresourceDomains):
        (WTR::TestController::loadedThirdPartyDomains): Deleted.
        (WTR::TestController::clearLoadedThirdPartyDomains): Deleted.

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

        [webkitcorepy] Failure to set index should not be fatal
        https://bugs.webkit.org/show_bug.cgi?id=215653
        <rdar://problem/67410416>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.set_index): By default, log an error instead of raising an exception if an index is unreachable.

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

        [webkitpy] Adopt webkitcorepy's OutputCapture
        https://bugs.webkit.org/show_bug.cgi?id=215628
        <rdar://problem/67353710>

        Reviewed by Dewei Zhu.

        Remove webkitpy's OutputCapture in favor of webkitcorepy's. The refactor retains the orginal
        functionality of the old OutputCapture, but deletes some now unused code.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/net/ewsserver_unittest.py:
        * Scripts/webkitpy/common/net/irc/ircproxy_unittest.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/common/system/outputcapture.py: Removed.
        * Scripts/webkitpy/common/system/outputcapture_unittest.py: Removed.
        * Scripts/webkitpy/common/system/stack_utils_unittest.py:
        * Scripts/webkitpy/common/system/user_unittest.py:
        * Scripts/webkitpy/common/system/workspace_unittest.py:
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        * Scripts/webkitpy/port/base_unittest.py:
        * Scripts/webkitpy/port/config_unittest.py:
        * Scripts/webkitpy/port/darwin_testcase.py:
        * Scripts/webkitpy/port/gtk_unittest.py:
        * Scripts/webkitpy/port/ios_device_unittest.py:
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py:
        * Scripts/webkitpy/port/mac_unittest.py:
        * Scripts/webkitpy/port/port_testcase.py:
        * Scripts/webkitpy/port/server_process_unittest.py:
        * Scripts/webkitpy/port/watch_simulator_unittest.py:
        * Scripts/webkitpy/port/westondriver_unittest.py:
        * Scripts/webkitpy/port/win_unittest.py:
        * Scripts/webkitpy/port/wpe_unittest.py:
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        * Scripts/webkitpy/style/checkers/python.py:
        * Scripts/webkitpy/style/main_unittest.py:
        * Scripts/webkitpy/test/finder_unittest.py:
        * Scripts/webkitpy/test/main_unittest.py:
        * Scripts/webkitpy/test/printer.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        * Scripts/webkitpy/tool/bot/layouttestresultsreader_unittest.py:
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py:
        * Scripts/webkitpy/tool/commands/commandtest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        * Scripts/webkitpy/tool/commands/perfalizer_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py:
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py:
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        * Scripts/webkitpy/tool/steps/suggestreviewers_unittest.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreview_unittest.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

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

        [webkitcorepy] Don't overwrite foreign packages by default
        https://bugs.webkit.org/show_bug.cgi?id=215654
        <rdar://problem/67411393>

        Reviewed by Darin Adler.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.is_cached): Consider a package cached if it is foreign and overwrite_foreign_packages is false.
        (AutoInstall): Add overwrite_foreign_packages flag.

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

        [webkitcorepy] Correct autoinstaller logging
        https://bugs.webkit.org/show_bug.cgi?id=215650
        <rdar://problem/67408049>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Log "Downloading" insteading of "Installing" before downloading a package.

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

        [webkitpy] Use webkitcorepy's auto installer for selenium
        https://bugs.webkit.org/show_bug.cgi?id=215648
        <rdar://problem/67405967>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/__init__.py:
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py:
        (LinuxChromeDriver.launch_driver): Implicitly use webkitcorepy's auto-installer.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py:
        (LinuxFirefoxDriver.launch_driver): Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_driver): Ditto.
        (OSXChromeCanaryDriver.launch_driver): Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_driver): Ditto.
        (OSXFirefoxNightlyDriver.launch_driver): Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_driver): Ditto.
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        (WebDriverBenchmarkRunner._run_one_test): Ditto.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove selenium.
        (AutoinstallImportHook._install_selenium): Deleted.
        * Scripts/webkitpy/webdriver_plt/liveplt.py: Implicitly use webkitcorepy's auto-installer.

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

        [Catalina/iOS 13] TestWebKitAPI.TLSVersion.LegacySubresources is failing
        https://bugs.webkit.org/show_bug.cgi?id=215640

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        This tests behavior using CFNetwork functionality which is only available to Big Sur, iOS 14, and updated versions of Catalina.

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

        [run-webkit-tests] Rosetta specific test expectations
        https://bugs.webkit.org/show_bug.cgi?id=215633
        <rdar://problem/67353771>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.expectations_dict): Add special case for Rosetta expectations.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_rosetta_expectations):

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

        Unreviewed, contributors.json is broken

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

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

        WKWebViews using fastServerTrustEvaluationEnabled should only allow legacy TLS for main resource loads
        https://bugs.webkit.org/show_bug.cgi?id=215626
        <rdar://problem/67268892>

        Reviewed by Darin Adler.

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

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

        Develop a mechanism to unsubscribe from ews emails
        https://bugs.webkit.org/show_bug.cgi?id=215585

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/emails.json: Added.
        * BuildSlaveSupport/ews-build/send_email.py:
        (get_email_ids):
        (send_email_to_patch_author): Do not email patch authors whose email is in unsubscribe list.
        (send_email_to_bot_watchers):
        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure):
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):
        * BuildSlaveSupport/ews-build/email_unittest.py: Added unit-tests.
        (EmailsDotJSONTest.test_valid_emails_json):
        (EmailsDotJSONTest.test_emails_json_required_categories_present):

2020-08-17  Saagar Jha  <saagar@saagarjha.com>

        Stop webkitpy from warning about not having a 64-bit git on Apple silicon
        https://bugs.webkit.org/show_bug.cgi?id=214718

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git._executable_is_64bit): Loosen 64-bit check to succeed on systems that aren't x86_64.

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

        [WTF] HashTable<Ref<K>, V>::HashTable(const HashTable& other) can't compile
        https://bugs.webkit.org/show_bug.cgi?id=215550

        Reviewed by Darin Adler.

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

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

        [resultsdbpy]: Depend on webkitcorepy
        https://bugs.webkit.org/show_bug.cgi?id=215573
        <rdar://problem/67250272>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py:
        (_maybe_add_webkitcorepy_path): Attempt to add. webkitcorepy to the. Python path.
        * Scripts/libraries/resultsdbpy/setup.py: Add webkitcorepy, remove webkitcorepy's dependencies.
        * Scripts/libraries/webkitcorepy/setup.py: Add six as a dependency.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Include. package name, bump version.

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

        [webkitcorepy] Add OutputCapture to webkitcorepy
        https://bugs.webkit.org/show_bug.cgi?id=215380
        <rdar://problem/66846384>

        Reviewed by Dewei Zhu.

        Although webkitpy has an OutputCapture class, that class does not separate logging from
        stdout and stderr, which makes the API less useful. This version of the OutputCapture class
        is inspired by the one in webkitpy, but with a cleaner interface.

        * Scripts/libraries/webkitcorepy/README.md: Document usage of OutputCapture.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Export LoggerCapture, OutputCapture and
        OutputDuplicate as API, bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/output_capture.py: Added.
        (LoggerCapture): Capture logs at some level for the duration of the interface.
        (OutputCapture): Capture stdout, stderr and all logging channels for the duration of the interface.
        (OutputCapture.ReplaceSysStream): Replace sys.stdout or sys.stderr for a block.
        (OutputDuplicate): Context which can duplicate all output for a block of code. This is useful to both print and
        capture logs.
        (OutputDuplicate.Stream): File-like object that routes output to multiple file-like objects.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/output_capture_unittest.py: Added.
        (LoggerCaptureTest):
        (OutputCaptureTest):
        (OutputOutputDuplicateTest):

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

        [TestWebKitAPI] Some WTF_HashMap tests are failing if TestWTF is executed directly
        https://bugs.webkit.org/show_bug.cgi?id=215556

        Reviewed by Darin Adler.

        Some tests using RefLogger were failing if TestWTF is executed
        directly without run-api-tests test driver script. Subsequent
        tests were failing due to extra "deref(a) " which is a leftover of
        the previous tests. Because run-api-tests is spawning a TestWTF
        process for each test, it hides this issue.

        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Added blocks or calling clear() method to destroy local variables and added more
        EXPECT_STREQ("deref(a) ", takeLogStr().c_str()).

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

        [WPE] Fix file url in WPEQt api test
        https://bugs.webkit.org/show_bug.cgi?id=215577

        Reviewed by Philippe Normand.

        The test expects the load to fail, so avoid file://foo.html resolving
        to file:///.

        * TestWebKitAPI/Tests/WPEQt/TestLoadRequest.cpp:
        (TestLoadRequest::main):

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

        [webkitcorepy] Autoinstaller is very slow in git-svn checkouts
        https://bugs.webkit.org/show_bug.cgi?id=215534
        <rdar://problem/67120623>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Download packages to a temporary directory so that setup.py runs faster.

2020-08-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Remove support for NPAPI plugins
        https://bugs.webkit.org/show_bug.cgi?id=215503

        Reviewed by Darin Adler.

        * PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (beforeAll):

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

        Update W3C test exporter to use Authorisation header instead of query parameter to validate GitHub account
        https://bugs.webkit.org/show_bug.cgi?id=215548

        Reviewed by Darin Adler.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter._validate_and_save_token):
        access_token query parameter is dbeing deprecated in favor of Authorization header.
        Update script accordingly.

2020-08-15  Tim Horton  <timothy_horton@apple.com>

        Live Web Content processes do not respect accent color if dynamically changed to "multicolor"
        https://bugs.webkit.org/show_bug.cgi?id=215523
        <rdar://problem/63941133>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        (deleteTestDefaults):
        (TEST):
        Fix some minor style issues with these tests.
        Fix a bug where these tests would leak state between themselves by leaving defaults behind.
        Change the NSUserDefaults key name so that it is abundantly obvious where it comes from when you see it in your defaults.
        Leave a FIXME for the future that these tests should probably not be writing to the real persistent defaults.
        Add a test that ensures that the observer correctly respects deletion of a default.

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

        [webkitcorepy] Add a NullHandler to logger
        https://bugs.webkit.org/show_bug.cgi?id=215524
        <rdar://problem/67102367>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Add default logging handler to webkitcorepy.log.

2020-08-14  Brady Eidson  <beidson@apple.com>

        Gamepad.GCFVersusHID fails on Big Sur.
        <rdar://problem/66948608> and https://bugs.webkit.org/show_bug.cgi?id=215520

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/mac/HIDGamepads.mm: Accept two different names for the virtual Xbox One controller

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

        Move WebGL bot from debug to release builds
        https://bugs.webkit.org/show_bug.cgi?id=215509

        Rubber-stamped by Darin Adler.

        Make the switch to release builds since many of the tests are already slow, and running in debug configuration makes them even slower

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

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

        Unreviewed, revert r265213 and r265441
        https://bugs.webkit.org/show_bug.cgi?id=215089

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::keyDown):

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

        [Flatpak SK] Enable GNOME keyring support in subversion
        https://bugs.webkit.org/show_bug.cgi?id=215498

        Reviewed by Sergio Villar Senin.

        * buildstream/elements/sdk/subversion.bst: Enable GNOME Keyring support, which pulls into libsecret.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Allow session dbus access to the host secret service.

2020-08-13  Brady Eidson  <beidson@apple.com>

        (WK2 only) gamepad mapping stops being reported as “standard” in new tabs.
        rdar://problem/66946505 and https://bugs.webkit.org/show_bug.cgi?id=215486

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/mac/HIDGamepads.mm:

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

        Regression(r265580): apply-watchlist is broken
        https://bugs.webkit.org/show_bug.cgi?id=215457

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/common/config/watchlist:

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

        [ews] email notifications should include Bugzilla link to the patch
        https://bugs.webkit.org/show_bug.cgi?id=215455

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (Bugzilla):
        (Bugzilla.patch_url): Method to generate patch url.
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure): Added link to the patch id.
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures): Ditto.
        (ConfigureBuild.add_patch_id_url):
        (ConfigureBuild.getPatchURL): Deleted.

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

        [ews] test names in ews notification email should be in sorted order
        https://bugs.webkit.org/show_bug.cgi?id=215446

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):

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

        [ews] Improve wording for test failure email
        https://bugs.webkit.org/show_bug.cgi?id=215449

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures): Pluralize 'test failure' accordingly.
        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email): Drive-by fix.

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

        [webkitpy] Use webkitcorepy's auto installer for coverage
        https://bugs.webkit.org/show_bug.cgi?id=215419
        <rdar://problem/66922400>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/__init__.py: Add coverage and it's dependencies.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Stop relying on webkitpy's autoinstaller.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Remove _install_coverage, _install_toml.
        (AutoinstallImportHook._install_coverage): Deleted.
        (AutoinstallImportHook._install_toml): Deleted.
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports): Remove coverage.
        * flatpak/flatpakutils.py: Stop relying on webkitpy's autoinstaller.

2020-08-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Add a script for generating MiniBrowser bundles
        https://bugs.webkit.org/show_bug.cgi?id=215266

        Reviewed by Carlos Garcia Campos.

        This converts the previous generate-jsc-bundle into a new script
        that is now able to do the following:
         - generate a jsc bundle
         - generate a MiniBrowse bundle
         - generate an all bundle (jsc+MiniBrowser)
        The bundle can include all the system-libraries from the system,
        so that way (in theory) the bundle would run on any other distribution
        or it can generate an install-dependencies script so it generates
        a lightweight bundle with only the minimum libraries included that
        would run only on the distribution where it has been created
        (after running the install-dependencies script)

        We already have a bot generating the jsc bundle and we plan to also
        have bots for generating the MiniBrowser bundles as well.

        * BuildSlaveSupport/build.webkit.org-config/steps.py: Update the step for the new command.
        (GenerateJSCBundle):
        * Scripts/generate-bundle: Added.
        * Scripts/generate-jsc-bundle: Removed.
        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available): Unicode argument not longer available on python3's gettext.install()

2020-08-12  Keith Rollin  <krollin@apple.com>

        Remove the need for defining USE_NEW_BUILD_SYSTEM
        https://bugs.webkit.org/show_bug.cgi?id=215439

        Reviewed by Darin Adler.

        When building WebKit for XCBuild, we currently require that the
        external build system (such as the Makefile, build-webkit, etc.)
        defines the USE_NEW_BUILD_SYSTEM=YES build setting. This build setting
        controls parts of our build instructions that are sensitive to when
        XCBuild or the Legacy build system are being used. Notably, we need to
        know when to use our custom “copy and modify” scripts with copying
        certain header files (used with the Legacy build system) vs. using the
        enhanced Copy Headers build phase that’s enabled with
        APPLY_RULES_IN_COPY_HEADERS=YES (introduced with and used by XCBuild).
        The choice of which method to copy headers is used is controlled by
        USE_NEW_BUILD_SYSTEM.

        There is no built-in build setting that we can probe to help us
        determine which approach to take when copying and modifying headers,
        which is why we need to define USE_NEW_BUILD_SYSTEM ourselves. But it
        turns out that we can *detect* which build system is being used by
        taking advantage of a subtle difference between the two systems. As
        noted in:

            https://developer.apple.com/documentation/xcode-release-notes/build-system-release-notes-for-xcode-10

            “When an .xcconfig file contains multiple assignments of the same
             build setting, later assignments using $(inherited) or
             $(<setting_name>) will inherit from earlier assignments in the
             .xcconfig. The legacy build system caused every use of
             $(inherited) or $(<setting_name>) skip any other values defined
             within the .xcconfig.”

        This difference can be exploited as follows:

            WK_WHICH_BUILD_SYSTEM = not_
            WK_WHICH_BUILD_SYSTEM = $(inherited)legacy
            WK_USE_NEW_BUILD_SYSTEM = $(WK_USE_NEW_BUILD_SYSTEM_$(WK_WHICH_BUILD_SYSTEM))
            WK_USE_NEW_BUILD_SYSTEM_legacy = NO
            WK_USE_NEW_BUILD_SYSTEM_not_legacy = YES

        We can then use WK_USE_NEW_BUILD_SYSTEM where we used to use the
        externally-defined USE_NEW_BUILD_SYSTEM.

        * Scripts/build-webkit:

2020-08-12  Devin Rousso  <drousso@apple.com>

        Add settings for Copy WebKit Permalink
        https://bugs.webkit.org/show_bug.cgi?id=215440

        Reviewed by Daniel Bates.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-settings: Added.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:
        (plugin_loaded): Added.
        (plugin_unloaded): Added.
        (Settings): Added.
        (Settings.__init__): Added.
        (Settings.unload): Added.
        (Settings.include_revision): Added.
        (Settings._get): Added.
        (Settings._set): Added.
        Helper class for caching settings values.

        (CopyWebKitPermalinkCommand.run):
        (CopyWebKitPermalinkCommand.revision_info_for_path):
        (CopyWebKitPermalinkCommand.permalink_for_path):
        Only include the current revision in the URL if the `include_revision` setting is true.
        Turning this off is desirable as getting the current revision often takes a few seconds.

        * CopyPermalink/Sublime Text/INSTALL:

2020-08-12  Devin Rousso  <drousso@apple.com>

        Update my watchlist entries and add some additional Web Inspector definitions

        * Scripts/webkitpy/common/config/watchlist:

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

        [webkitpy] Use webkitcorepy's auto installer for requests
        https://bugs.webkit.org/show_bug.cgi?id=214951
        <rdar://problem/66308049>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater.py: Use webkitcorepy's auto installer.
        * Scripts/webkitpy/results/upload.py: Ditto.
        * Scripts/webkitpy/results/upload_unittest.py: Ditto.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path): Make sure webkitcorepy takes precedence
        over webkitpy.
        (AutoinstallImportHook.find_module): Delete _install_requests.
        (AutoinstallImportHook._install_pytest): Ditto.
        (AutoinstallImportHook._install_beautifulsoup): Ditto.
        (AutoinstallImportHook._install_selenium): Ditto.
        (AutoinstallImportHook._install_requests): Deleted.

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

        Fail preconnect requests to deprecated TLS instead of allowing application to show warning
        https://bugs.webkit.org/show_bug.cgi?id=215424
        <rdar://problem/66784116>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::webViewWithNavigationDelegate):

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

        [ews] email notifications should include link to corresponding bug
        https://bugs.webkit.org/show_bug.cgi?id=215425

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure):
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):

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

        Broken formatting in price table on yandex.ru after translating to English
        https://bugs.webkit.org/show_bug.cgi?id=215416
        <rdar://problem/66354018>

        Reviewed by Tim Horton.

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

2020-08-12  Devin Rousso  <drousso@apple.com>

        Add Copy WebKit Permalink items to Sublime Text command palette
        https://bugs.webkit.org/show_bug.cgi?id=215418

        Reviewed by Keith Miller.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-commands: Added.
        * CopyPermalink/Sublime Text/INSTALL:

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

        [ews] emails for test failures should include link to test history
        https://bugs.webkit.org/show_bug.cgi?id=215337

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):

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

        [ews-build] Add another Big Sur bot
        https://bugs.webkit.org/show_bug.cgi?id=215193

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json: Move ews169 from tvOS -> Big Sir.

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

        [ews] send emails as html instead of plain-text
        https://bugs.webkit.org/show_bug.cgi?id=215331

        Reviewed by Darin Adler.

        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email): Send email as html instead of plain-text.
        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure): Encode few characters like <,>,& for html. Also format the logs in <code> block.
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Ditto.

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

        [resultsdbpy] Move to Tools/Scripts/libraries
        https://bugs.webkit.org/show_bug.cgi?id=215401
        <rdar://problem/66868387>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Changed resultsdbpy location.
        (RunResultsdbpyTests): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunResultsdbpyTests.test_success):
        (TestRunResultsdbpyTests.test_failure):
        * Scripts/libraries/resultsdbpy: Copied from Tools/resultsdbpy.
        * resultsdbpy: Removed.

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

        Refresh WritableStream up to spec
        https://bugs.webkit.org/show_bug.cgi?id=215267

        Reviewed by Geoff Garen.

        Put console log in stderr as this makes some tests flaky otherwise.

        * DumpRenderTree/TestOptions.cpp:
        (shouldDumpJSConsoleLogInStdErr):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::shouldDumpJSConsoleLogInStdErr):

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

        Enable HTTP/2 ping API tests
        https://bugs.webkit.org/show_bug.cgi?id=215402

        Reviewed by Darin Adler.

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

2020-08-11  Brian Burg  <bburg@apple.com>

        REGRESSION(r?): build-webkit --inspector-frontend always builds ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=215393
        <rdar://problem/66862975>

        Reviewed by Darin Adler.

        * Scripts/build-webkit: exit after building projects if --inspector-frontend is passed.
        This flag is for desk builds only and not used by build infrastructure. We don't need to build ImageDiff
        when iterating on the Web Inspector frontend.

2020-08-11  Keith Rollin  <krollin@apple.com>

        Update filter-build-webkit for unknown/unhandled messages
        https://bugs.webkit.org/show_bug.cgi?id=215395
        <rdar://problem/63819507>

        Reviewed by Alexey Proskuryakov.

        Teach filter-build-webkit about XCBuild build output that needs to be
        reformatted.

        At the same time, address other red messages that have crept in over
        time, either reformatting or squelching them.

        Some red messages are still emitted under both XCBuild and the Legacy
        build system, but those either need to be addressed at the source or
        be investigated first in order to determine the correct remediation.

        * Scripts/filter-build-webkit:
        (shouldShowSubsequentLine):
        (shouldIgnoreLine):

2020-08-11  Brady Eidson  <beidson@apple.com>

        Add a "use stored credentials" setting to WKWebView.
        <rdar://problem/63308019> and https://bugs.webkit.org/show_bug.cgi?id=215388

        Reviewed by Geoff Garen.

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

2020-08-11  Kenneth Russell  <kbr@chromium.org>

        Update contributors.json with reinstated reviewer status
        https://bugs.webkit.org/show_bug.cgi?id=215390

        Reviewed by Alexey Proskuryakov.

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

2020-08-11  Tim Horton  <timothy_horton@apple.com>

        iOS: Scrolling and touch events sporadically stop working after navigating
        https://bugs.webkit.org/show_bug.cgi?id=215368
        <rdar://problem/65801531>

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::runUIScriptImmediately):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::runUISideScriptImmediately):
        (WTR::TestInvocation::runUISideScriptAfterUpdateCallback):
        * WebKitTestRunner/TestInvocation.h:
        Add a variant of runUISideScript that runs the script without
        waiting for a rendering update.

        It makes sense for the default runUISideScript to wait for a rendering
        update -- nearly every test is either unaffected or improved by this --
        but for the test for this bug, since we have hung the Web Content process
        main thread intentionally, we will not see a rendering update, and so
        the UI-side script will never run.

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

        LayoutTest accessibility/mac/select-element-selection-with-optgroups.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=175341

        Reviewed by Chris Fleizach.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_output_with_reference): Removed unhelpful log message that tells
        about ref tests where the hash optimization for comparing images does not work, but the
        test passes. We don't want to get this kind of log message for passing tests.

2020-08-11  Timothy Hatcher  <timothy@apple.com>

        Deferred WKUserScripts are exponentially injected on preloaded pages with frames.
        https://bugs.webkit.org/show_bug.cgi?id=215382
        rdar://problem/66837802

        Reviewed by Sam Weinig.

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

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

        Text manipulation crashes when replacing element with img role
        https://bugs.webkit.org/show_bug.cgi?id=215344

        Reviewed by Wenson Hsieh.

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

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

        [GTK][WPE] Add MiniBrowser wrapper env vars and white-list MESA env vars in flatpak
        https://bugs.webkit.org/show_bug.cgi?id=215361

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.run_minibrowser): Add support for the $WEBKIT_MINI_BROWSER_PREFIX env var which can
        be useful when debugging MiniBrowser with gdb or rr.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.run_minibrowser): Ditto.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): White-list MESA environment variables in the sandbox.

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

        [GStreamer] gst-full standalone library support
        https://bugs.webkit.org/show_bug.cgi?id=215262

        Reviewed by Xabier Rodriguez-Calvar.

        Somehow unrelated with the gst-full support, disable GStreamer options command-line support
        in MiniBrowsers. This isn't very useful and pulls GStreamer in the MiniBrowser for no much
        gain. Use GST_* env variables instead.

        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/gtk/main.c:
        (main):
        * MiniBrowser/wpe/CMakeLists.txt:
        * MiniBrowser/wpe/main.cpp:
        (main):

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

        AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
        https://bugs.webkit.org/show_bug.cgi?id=215341
        <rdar://problem/59344091>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
        (overrideCurrentEvent):
        (TEST):

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

        Add Sam Sneddon to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=215334

        Reviewed by Simon Fraser.

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

2020-08-10  Patrick Angle  <pangle@apple.com>

        Add myself (Patrick Angle) to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=215328

        Reviewed by Brian Burg.

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

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

        [ews] Handle logs with unicode characters in ews emails
        https://bugs.webkit.org/show_bug.cgi?id=215330

        Reviewed by Darin Adler.

        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email): Encode email content as utf-8.
        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure):
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure):

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

        Add more logging to diagnose editing/selection/ios/select-all-non-editable-text-using-keyboard.html
        https://bugs.webkit.org/show_bug.cgi?id=215089
        <rdar://problem/66282806>

        Reviewed by Tim Horton.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::keyDown):
        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp handleKeyHIDEvent:]): Deleted.

2020-08-10  Brian Burg  <bburg@apple.com>

        Unreviewed, fix ordering of contributors.

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

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

        REGRESSION (r260831): Web process crashes under Editor::setComposition() after navigating with marked text
        https://bugs.webkit.org/show_bug.cgi?id=215315
        <rdar://problem/64740092>

        Reviewed by Darin Adler.

        Add a new API that exercises the crash by:
        - Enabling PSON.
        - Navigating to page A and inserting some marked text.
        - Navigating to page B with a process swap (without confirming the marked text).
        - Navigating back to page A, and verifying that the previoulsy marked text is now committed.

        * TestWebKitAPI/Tests/mac/WKWebViewMacEditingTests.mm:

2020-08-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] REGRESSION(r265408): Unreviewed layout test script fix
        https://bugs.webkit.org/show_bug.cgi?id=215292
        <rdar://problem/66698141>

        os.getuid() is available only for Unix.

        > AttributeError: 'module' object has no attribute 'getuid'

        * Scripts/webkitpy/__init__.py: Don't use os.getuid() unless sys.platform == 'darwin'.

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

        [webkitpy] Pick a reasonable auto-install location on NFS mounts
        https://bugs.webkit.org/show_bug.cgi?id=215292
        <rdar://problem/66698141>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/__init__.py: On MacOS, when the current user does not own the checkout, use ~/Libraries/webkitpy.

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

        Add a quota delegate test for miniaturized/deminiaturized pages
        https://bugs.webkit.org/show_bug.cgi?id=215166

        Reviewed by Alex Christensen.

        Add a Mac specific test for testing quota delegate in case page is miniaturized or not.
        Update testing code to show more meaningful error reports.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        (-[QuotaMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[QuotaMessageHandler receivedMessage]):

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

        [macOS] It should be possible to override spellchecking results in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=215290

        Reviewed by Devin Rousso.

        Refactor `setSpellCheckerResults` so that it is on `UIScriptController` instead of `TestRunner`, such that it
        can be triggered asynchronously from a layout test. This allows the testing hook to work in WebKit2, where the
        swizzled spell checker is in the UI process.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setSpellCheckerResultsCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/ios/UIScriptControllerIOS.h:

        Add a method implementation stub for iOS.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setSpellCheckerResults): Deleted.
        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::setSpellCheckerResults):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setSpellCheckerLoggingEnabled):
        (TestRunner::setSpellCheckerResults): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setSpellCheckerResults):
        * TestRunnerShared/cocoa/LayoutTestSpellChecker.h:
        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (-[LayoutTestSpellChecker setResultsFromJSValue:inContext:]):
        (-[LayoutTestSpellChecker setResultsFromJSObject:inContext:]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Make sure that we uninstall the swizzled `LayoutTestSpellChecker` between tests.

        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::setSpellCheckerResults):

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

        Windows EWS should filter build logs to show errors
        https://bugs.webkit.org/show_bug.cgi?id=211344

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BuildLogLineObserver.__init__): Added searchString and includeRelatedLines arguments.
        (BuildLogLineObserver.outLineReceived): Added support for generic searchString and enabling/disabling inclusion of related lines.
        (CompileWebKit.start): Enabled log filtering for windows and wincairo.
        (AnalyzeCompileWebKitResults.filter_logs_containing_error): Made it accept any generic searchString.
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure):  Pass different searchString for windows and wincairo.
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Ditto.

2020-08-07  John Wilander  <wilander@apple.com>

        Experimental: Cap the expiry of persistent cookies set in 3rd-party CNAME cloaked HTTP responses
        https://bugs.webkit.org/show_bug.cgi?id=215201
        <rdar://problem/57454633>

        Reviewed by Brent Fulgham. Also reviewed and commented on by Chris Dumez, Jiten Mehta, Sam Weinig, and Alex Christensen.

        This patch adds two TestRunner functions which allows for testing
        with data that would otherwise come from DNS resolution:
        - statisticsSetFirstPartyHostCNAMEDomain()
        - statisticsSetThirdPartyCNAMEDomain()

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsSetFirstPartyHostCNAMEDomain):
        (WTR::TestRunner::statisticsCallDidSetFirstPartyHostCNAMEDomainCallback):
        (WTR::TestRunner::statisticsSetThirdPartyCNAMEDomain):
        (WTR::TestRunner::statisticsCallDidSetThirdPartyCNAMEDomainCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsFirstPartyHostCNAMEDomain):
        (WTR::TestController::setStatisticsThirdPartyCNAMEDomain):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetFirstPartyHostCNAMEDomain):
        (WTR::TestInvocation::didSetThirdPartyCNAMEDomain):
        * WebKitTestRunner/TestInvocation.h:

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

        [webkitcorepy] Add mocks.Time
        https://bugs.webkit.org/show_bug.cgi?id=214475

        Reviewed by Dewei Zhu.

        Provide a mock construct which allows basic time utilities to be used without
        actually waiting.

        * Scripts/libraries/webkitcorepy/README.md: Add documentation of mocks.Time.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/time_.py: Added.
        (_MetaTime): Meta-class for Time object.
        (add_metaclass): Python 2/3 compatible function to add meta-class to class.
        (Time): Mock Time decorator.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/__init__.py: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/time_unittest.py: Added.
        (MockTime): Verify the functionality of mocks.Time.

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

        [webkitcorepy] Add aliases to Autoinstall packages
        https://bugs.webkit.org/show_bug.cgi?id=215276
        <rdar://problem/66688543>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.__init__): Add import aliases.
        (AutoInstall.register): When given an alias, a package will be automatically installed when that alias is imported.

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

        [webkitcorepy] Support wheels in the autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=215230
        <rdar://problem/66636527>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, include packaging and it's dependencies.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.Archive.unpack): .whl files are zip files.
        (Package.__init__): Allow programs to request packages as wheels.
        (Package.archives): Search for compatible .whl files.
        (Package.install): Ensure that .egg-info directories are appropriately chowned, unpack wheels, format manifest.json.
        (AutoInstall.tags): List the packaging tags associated with this distribution, but with a work-around for Big Sur.

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

        Do not email bot watcher when first run of layout tests exceeds failure limit
        https://bugs.webkit.org/show_bug.cgi?id=215274

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand): Do not send emails for flaky tests when first_results_did_exceed_test_failure_limit.

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

        Remove UIScriptController.removeAllDynamicDictionaries()
        https://bugs.webkit.org/show_bug.cgi?id=215207

        Reviewed by Sam Weinig.

        Instead of clearing out learned words from the spellchecking dictionary between every test, simply disable
        correction learning during each test.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::replaceTextAtRange):
        (WTR::UIScriptController::removeAllDynamicDictionaries): Deleted.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::removeAllDynamicDictionaries): Deleted.

2020-08-07  Robin Morisset  <rmorisset@apple.com>

        IndexSparseSet::sort() should update m_map
        https://bugs.webkit.org/show_bug.cgi?id=215100

        Reviewed by Yusuke Suzuki and Mark Lam.

        TestWTF was not testing IndexSparseSet at all. It now does.

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

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

        EWS emails about build failure should include last few relevant error logs
        https://bugs.webkit.org/show_bug.cgi?id=215264

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.filter_logs_containing_error):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeCompileWebKitResults.test_filter_logs_containing_error_with_too_many_errors):

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

        Introduce a Vector::isolatedCopy() &&
        https://bugs.webkit.org/show_bug.cgi?id=215160

        Reviewed by Alex Christensen.

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

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

        [ews] Add method to send email notifications to patch author for layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=215231

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):

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

        Text manipulation: leading and trailing spaces should be ignored when comparing content
        https://bugs.webkit.org/show_bug.cgi?id=214878
        <rdar://problem/63735024>

        Reviewed by Ryosuke Niwa.

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

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

        [webkitcorepy] Standardize setuptools version
        https://bugs.webkit.org/show_bug.cgi?id=215234
        <rdar://problem/66638187>

        Reviewed by Darin Adler.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Use the same setuptools version
        for Python 2 and 3.

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

        Unreviewed, reverting r265325.

        Caused several tests in fast/forms and editing/pasteboard to
        time out

        Reverted changeset:

        "Remove UIScriptController.removeAllDynamicDictionaries()"
        https://bugs.webkit.org/show_bug.cgi?id=215207
        https://trac.webkit.org/changeset/265325

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

        WTF::makeString() should handle enum values
        <https://webkit.org/b/214906>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST):
        - Update tests for renamed functions.
        - Add test for enum values.

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

        check-webkit-style: better algorithm to check for acronym capitalization in an identifier
        <https://webkit.org/b/215026>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_split_identifier_into_words): Add.
        - This method splits a identifier into individual words.
        (_check_identifier_name_for_acronyms):
        - Update to use _split_identifier_into_words(), which makes it
          possible to check for improperly capitalized acronyms in the
          middle of identifiers.
        - Also add support for exceptions, which are valid words that
          include acronyms (like "Curl").
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        - Fix a typo in a method name in another test.
        (WebKitStyleTest.test_split_identifier_into_words): Add.
        - Add tests for _split_identifier_into_words().
        (WebKitStyleTest.test_identifier_names_with_acronyms):
        - Add tests for cases that weren't possible with the previous
          algorithm.

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

        [ews] Add method to send email notifications to patch author for build failure
        https://bugs.webkit.org/show_bug.cgi?id=215219

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure): Method to send the email for build failure by the patch.
        (BugzillaMixin._is_bug_closed): Set bug_title as a build property so that it can be used later.

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

        Remove UIScriptController.removeAllDynamicDictionaries()
        https://bugs.webkit.org/show_bug.cgi?id=215207

        Reviewed by Tim Horton.

        This script controller hook was added to help reset dictionaries to a consistent state prior to running the test
        `contenteditable-autocorrect.html`, which verifies that `autocorrect="no"` on a contenteditable element works as
        intended by typing "ti" and expecting it to not be autocorrected to anything else (i.e. "to").

        Instead of requiring each test that involves autocorrection to call this, move this reset step into
        TestController::platformResetStateToConsistentValues and remove the testing hook.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::replaceTextAtRange):
        (WTR::UIScriptController::removeAllDynamicDictionaries): Deleted.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::removeAllDynamicDictionaries): Deleted.

2020-08-06  Rob Buis  <rbuis@igalia.com>

        build-webkit script tries to execute command xcodebuild on Linux
        https://bugs.webkit.org/show_bug.cgi?id=214353

        Reviewed by Carlos Alberto Lopez Perez.

        Only call the function determineXcodeSDK() when
        building for an Apple/Cocoa platform.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

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

        Rename BigSur EWS to AppleSilicon EWS
        https://bugs.webkit.org/show_bug.cgi?id=215205

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/config.json:

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

        Remove all references to non-existent 10.16
        https://bugs.webkit.org/show_bug.cgi?id=215202

        Reviewed by Wenson Hsieh.

        * 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:
        * TestWebKitAPI/Configurations/WebKitTargetConditionals.xcconfig:
        * TestWebKitAPI/config.h:
        * 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-08-05  Caio Lima  <ticaiolima@gmail.com>

        r264813 breaks Make runner on remote devices
        https://bugs.webkit.org/show_bug.cgi?id=215179

        Reviewed by Saam Barati.

        This patch is setting up the proper `LD_LIBRARY_PATH` value to run JSC
        stress tests on remote devices.

        * Scripts/run-jsc-stress-tests:

2020-08-05  Brady Eidson  <beidson@apple.com>

        Add a createWebArchiveData from a custom scheme API test
        https://bugs.webkit.org/show_bug.cgi?id=215187

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CreateWebArchive.mm: Added.

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

        results.webkit.org: Return worker status to caller
        https://bugs.webkit.org/show_bug.cgi?id=215086
        <rdar://problem/66476525>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.do_work): Return if process has successfully processed results.
        * resultsdbpy/resultsdbpy/model/model_unittest.py:
        (ModelTest.test_no_work):
        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext._do_job_for_key): Return if the job was successful.
        (UploadContext.do_processing_work): Return true if any processed jobs were successful.
        * resultsdbpy/resultsdbpy/model/upload_context_unittest.py:
        (UploadContextTest.test_async_callback):

2020-08-05  Beth Dakin  <bdakin@apple.com>

        Make report-non-inclusive-language ignore files within .svn and .git
        https://bugs.webkit.org/show_bug.cgi?id=215156

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language:

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

        EWS emails about build failure should include relevant error logs
        https://bugs.webkit.org/show_bug.cgi?id=215174

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.start):
        (AnalyzeCompileWebKitResults):
        (AnalyzeCompileWebKitResults.getResults): Method to read the logs from previous build step.
        (AnalyzeCompileWebKitResults.analyzeResults): Made a separate method called using deferred after reading the logs from previous steps.
        (AnalyzeCompileWebKitResults.getBuildStepByName): Method to get step object from step name.
        (AnalyzeCompileWebKitResults.filter_logs_containing_error): Filter the logs to include in email.
        (AnalyzeCompileWebKitResults.send_email_for_preexisting_build_failure): Renamed from send_email_for_build_failure. Added 
        relevant error logs in email.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2020-08-05  Sihui Liu  <sihui_liu@appe.com>

        TextManipulationController should observe newly inserted or displayed text
        https://bugs.webkit.org/show_bug.cgi?id=215157

        Reviewed by Wenson Hsieh.

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

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

        [iOS] Keyboard shortcuts and arrow key scrolling stop working after navigating via swipe gesture
        https://bugs.webkit.org/show_bug.cgi?id=215137
        <rdar://problem/65082979>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/NavigationSwipeTests.mm: Added.
        (-[TestNavigationInteractiveTransition startInteractiveTransition:]):

        Add an API test that exercises the bug by resigning first responder underneath `-startInteractiveTransition:`,
        and checking that we have become first responder once again after completing the transition.

        * TestWebKitAPI/ios/UIKitSPI.h:

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

        [webkitcorepy] Add mocks.ContextStack
        https://bugs.webkit.org/show_bug.cgi?id=214484

        Reviewed by Dewei Zhu.

        Add a class which allows a context leveraging mock to stack. This is useful when
        mocking requests or subprocess, where a single function (or class of functions)
        is handling calls that are destined for different for different mock handlers.

        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/context_stack.py: Added.
        (ContextStack): Class which stacks mock handlers.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/__init__.py: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/context_stack_unittest.py: Added.
        (to_be_replaced): Function to be mocked
        (ExampleStack): Example mock handler.
        (ContextStack): Test suite.

2020-08-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [webkitcorepy] REGRESSION(r265254): autoinstaller is failing to execute setup.py on win32 Python
        https://bugs.webkit.org/show_bug.cgi?id=215152

        Reviewed by Jonathan Bedard.

        There were two problems. Win32 Python needs SYSTEMROOT environment
        variable to run setup.py. win-inet-pton is using `_` for the
        directory name (win_inet_pton-1.1.0).

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Add a new candidate directory by replacing '-'
        with '_'. Pass through SYSTEMROOT env var.

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

        Move poseAsClass() into the TestRunnerShared directory
        https://bugs.webkit.org/show_bug.cgi?id=215147

        Reviewed by Tim Horton.

        Move the duplicated implementations of `poseAsClass()` out of WebKitTestRunner and DumpRenderTree,
        and into helper files in TestRunnerShared instead.

        No change in behavior.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (poseAsClass): Deleted.
        (setPersistentUserStyleSheetLocation): Deleted.
        * TestRunnerShared/cocoa/PoseAsClass.h: Renamed from Tools/WebKitTestRunner/mac/PoseAsClass.h.
        * TestRunnerShared/cocoa/PoseAsClass.mm: Renamed from Tools/WebKitTestRunner/mac/PoseAsClass.mm.
        (swizzleAllMethods):
        (poseAsClass):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

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

        [iOS] Check that Accessibility is enabled when receiving the enable Accessibility notification
        https://bugs.webkit.org/show_bug.cgi?id=215112

        Reviewed by Youenn Fablet.

        Added test WebKit.AccessibilityHasNoPreferencesServiceAccessWhenPostingNotification.

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

2020-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver needs access to font styling at insertion point
        https://bugs.webkit.org/show_bug.cgi?id=215129

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::attributeValueAsync):

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

        Add test coverage for handling redirects with App-Bound Domains
        https://bugs.webkit.org/show_bug.cgi?id=215128
        <rdar://problem/66528515>

        Reviewed by Brady Eidson.

        We should always make a new WebView if the test options indicate an
        app-bound view, because we need a new configuration.

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

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

        [webkitcorepy] Use setup.py for the autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=215067
        <rdar://problem/66432719>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Add all requests dependencies.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.Archive__init__): Add extension, tar.gz by default.
        (Package.Archive.path): Support multiple file types.
        (Package.Archive.unpack): Support .zip files.
        (Package.__init__): Add slow_install flag.
        (Package.archives): Handle case were a library does not have a tiny version.
        (Package.install): Call setup.py instead of just moving the library out of the package.

2020-08-04  Hector Lopez  <hector_i_lopez@apple.com>

        Add myself to contributors.json

        Unreviewed.

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

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

        Add the ability of comparing the accessibility tree with isolated tree mode on and off.
        https://bugs.webkit.org/show_bug.cgi?id=215000

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::setIsolatedTreeMode):
        (WTR::AccessibilityController::setAccessibilityIsolatedTreeMode): Renamed setIsolatedTreeMode.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        Exposes setIsolatedTreeMode to JavaScript code so that it can be turned
        on and off in a layout tests.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        Exposes isIsolatedObject to JavaScript code so that layout tests can
        check whether the underlying accessibility object is an AXIsolatedObject
        or an AXObject.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Rename.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isIsolatedObject const):

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

        [ews] Apple Silicon builder should skip non-relevant patches
        https://bugs.webkit.org/show_bug.cgi?id=215111

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.__init__): Added the checkRelevance parameter.
        (macOSBuildOnlyFactory.__init__):
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestBuildFactory.test_macos_build_only_factory): Updated unit-test.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Added patch relevance info for Big Sur.
        (CheckPatchRelevance._patch_is_relevant):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCheckPatchRelevance.test_relevant_bigsur_builder_patch): Drive-by fix to make the comparision more robust.
        (TestCheckPatchRelevance.test_non_relevant_patch_on_various_queues): Made the unit-test generic to cover multiple queues.
        (TestCheckPatchRelevance.test_non_relevant_patch): Deleted.

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

        Allow -accessoryDone to blur the focused element on iPad when AutoFilling strong passwords
        https://bugs.webkit.org/show_bug.cgi?id=215105
        <rdar://problem/65143984>

        Reviewed by Tim Horton.

        Add an API test that exercises the behavior change when run on iPad simulator.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

2020-08-03  Tim Horton  <timothy_horton@apple.com>

        Occasional crashes when running nested runloops while using UIWebView
        https://bugs.webkit.org/show_bug.cgi?id=213067
        <rdar://problem/64239727>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebThreadLock.mm: Added.
        Add a API test that fails before this change.

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

        Remove the ENABLE_DATA_INTERACTION feature flag
        https://bugs.webkit.org/show_bug.cgi?id=215091

        Reviewed by Megan Gardner.

        * Scripts/webkitperl/FeatureList.pm:

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

        [iOS 14] editing/selection/ios/select-all-non-editable-text-using-keyboard.html sometimes times out
        https://bugs.webkit.org/show_bug.cgi?id=215089
        <rdar://problem/66282806>

        Reviewed by Tim Horton.

        Add some logging to try and diagnose this flaky test failure. The timeout only happens on iOS 14, and also does
        not reproduce on my local machine. This patch tests a couple of hypotheses which may explain why the test times
        out:

        -   The test may be starting in a state where the content view is not first responder, or the view's window is
            not the key window.

        -   Synthesizing the modifier keydown HID event may be failing to change the live modifier flags on the
            application's `GSKeyboardRef` (e.g. the issue that was fixed in <https://trac.webkit.org/r264907>).

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::keyDown):
        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp handleKeyHIDEvent:]):

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

        Disable gtk-wk2 queue temporarily
        https://bugs.webkit.org/show_bug.cgi?id=215098

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/config.json:

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

        REGRESSION (r264170): fast/events/touch/ios/long-press-on-image.html times out
        https://bugs.webkit.org/show_bug.cgi?id=215075
        <rdar://problem/66294637>

        Reviewed by Megan Gardner.

        This test started timing out after r264170, due to the `if (self.showingContextMenu)` early return added inside
        `-[TestRunnerWKWebView _didShowContextMenu]`. If this test is run after another test that attempts to show a
        context menu but does not dismiss it, we will begin the test in a state where `showingContextMenu` is already
        set to `YES`, which means that `didShowContextMenuCallback` will never be invoked.

        To address this, force any context menu interactions on `WKContentView` to dismiss between tests. See below for
        more details.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView immediatelyDismissContextMenuIfNeeded]):

        When resetting state between tests, forcibly dismiss any context menus that were shown while running the
        previous test and reset `showingContextMenu` back to `NO`.

        (-[TestRunnerWKWebView contentView]):

        Drive-by refactoring: add a readonly helper property to grab the WKWebView's content view for testing purposes,
        and use this property instead of directly calling `-valueForKeyPath:` in a few places (see below).

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::platformContentView const):
        (WTR::UIScriptControllerIOS::calendarType const):

2020-08-03  Devin Rousso  <drousso@apple.com>

        should be able to request an editing context for a given region of a given input
        https://bugs.webkit.org/show_bug.cgi?id=215042
        <rdar://problem/65561491>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST.DocumentEditingContext.SpatialRequest_RectEncompassingInput): Added.
        (TEST.DocumentEditingContext.SpatialRequest_RectBeforeInput): Added.
        (TEST.DocumentEditingContext.SpatialRequest_RectInsideInput): Added.
        (TEST.DocumentEditingContext.SpatialRequest_RectAfterInput): Added.
        (TEST.DocumentEditingContext.SpatialAndCurrentSelectionRequest_RectEncompassingInputWithSelection): Added.
        (TEST.DocumentEditingContext.SpatialAndCurrentSelectionRequest_RectBeforeInputWithSelection): Added.
        (TEST.DocumentEditingContext.SpatialAndCurrentSelectionRequest_RectBeforeSelectionInInput): Added.
        (TEST.DocumentEditingContext.SpatialAndCurrentSelectionRequest_RectAfterSelectionInInput): Added.
        (TEST.DocumentEditingContext.SpatialAndCurrentSelectionRequest_RectAfterInputWithSelection): Added.

2020-08-03  Zhifei Fang  <zhifei_fang@apple.com>

        run-jsc-stress-test: Set DYLD_FRAMEWORK_PATH to "$(cd ../.vm; pwd)" because it escape shell words
        https://bugs.webkit.org/show_bug.cgi?id=215077

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

2020-08-03  Brian Burg  <bburg@apple.com>

        REGRESSION(r264766) webkitpy: newly added --suite flag conflicts with other --suite flags in safaripy
        https://bugs.webkit.org/show_bug.cgi?id=215038

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/results/options.py:
        (upload_options):
        For compatibility, make it possible to create the option with a differently-named flag.

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

        [WPE][GTK] run-minibrowser no longer assumes release configuration by default
        https://bugs.webkit.org/show_bug.cgi?id=214961

        Reviewed by Adrian Perez de Castro.

        * Scripts/webkitpy/port/base.py:
        (Port.set_option_default): Ensure default value is set on optparsed options. In the case of
        the default build configuration being set from the Port constructor, this wasn't done
        properly. After fixing this, the WPE and GTK ports are correctly implicitely reusing the
        build configuration option through the _build_path() method.

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

        REGRESSION(r264096): [flatpak] Clean gst-build within build-webkit fails
        https://bugs.webkit.org/show_bug.cgi?id=214080

        Reviewed by Adrian Perez de Castro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Don't attempt to configure the gst-env when starting sccache-dist.

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

        Improve the check-for-duplicated-platform-test-results script
        https://bugs.webkit.org/show_bug.cgi?id=215072

        Reviewed by Darin Adler.
        
        check-for-duplicated-platform-test-results had some problems.
        
        First, it defaulted to -wk1 results directories, and didn't check -wk2 directories, so
        run the logic twice, with options.webkit_test_runner True and False.
        Second, it only looked for results in the most specific fallback directory, so
        with a fallback path like 'mac-mojave-wk1 -> mac-mojave -> mac-wk1 -> mac -> generic'
        it would only remove results in mac-mojave-wk1, not in 'mac-mojave'.
        Also add some logging to the script.

        * Scripts/check-for-duplicated-platform-test-results:
        (remove_layout_test_path_prefix):
        (check_duplicate.sha1):
        (check_duplicate):
        (platform_list):
        (find_duplicates_in_path):
        (find_duplicates_in_path.find_duplicates):
        (check_platform):
        (main):
        * Scripts/webkitpy/port/base.py:
        (Port.supports_layout_tests): Some ports (iOS and watch device ports) don't support
        testing with no associated device. Need to fix errors thrown from default_baseline_search_path().
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.supports_layout_tests):
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.supports_layout_tests):
        * Scripts/webkitpy/port/win.py: self._os_version is None when run on another platform.
        (WinPort.default_baseline_search_path):
        (WinCairoPort._search_paths):

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

        Table data is incorrectly translated in some articles on en.wikipedia.org
        https://bugs.webkit.org/show_bug.cgi?id=215071
        <rdar://problem/66354013>

        Reviewed by Darin Adler.

        Add a new API test to exercise the change.

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

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

        Write a script to find duplicate files and delete some duplicate tests in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=215073

        Reviewed by Anders Carlsson.

        * Scripts/find-duplicate-files: Added. Basic script that uses MD5 digests
        to find duplicate files.

        * Scripts/report-non-inclusive-language: Tweaked a tiny bit; use a variable.

2020-08-01  Brady Eidson  <beidson@apple.com>

        Special HID mapping for the Logitech F310/F710 controllers.
        https://bugs.webkit.org/show_bug.cgi?id=215050

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/mac/HIDGamepads.mm:

        * TestWebKitAPI/mac/GamepadMappings/LogitechF310.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::logitechF310Mapping):

        * TestWebKitAPI/mac/GamepadMappings/LogitechF710.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::logitechF710Mapping):

        * TestWebKitAPI/mac/VirtualGamepad.h:

2020-08-01  Brady Eidson  <beidson@apple.com>

        Special HID mapping for the Google Stadia controller
        https://bugs.webkit.org/show_bug.cgi?id=215061

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/HIDGamepads.mm:

        * TestWebKitAPI/mac/GamepadMappings/GoogleStadia.mm: Added.
        (TestWebKitAPI::publishReportCallback):

        (TestWebKitAPI::VirtualGamepad::googleStadiaMapping):
        * TestWebKitAPI/mac/VirtualGamepad.h:

2020-07-31  Alex Christensen  <achristensen@webkit.org>

        Use more inclusive terminology in Tools
        https://bugs.webkit.org/show_bug.cgi?id=214971

        Reviewed by Sam Weinig.

        * DumpRenderTree/TestRunner.cpp:
        (addOriginAccessAllowListEntryCallback):
        (removeOriginAccessAllowListEntryCallback):
        (TestRunner::staticFunctions):
        (addOriginAccessWhitelistEntryCallback): Deleted.
        (removeOriginAccessWhitelistEntryCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addOriginAccessAllowListEntry):
        (TestRunner::removeOriginAccessAllowListEntry):
        (TestRunner::addOriginAccessWhitelistEntry): Deleted.
        (TestRunner::removeOriginAccessWhitelistEntry): Deleted.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::addOriginAccessAllowListEntry):
        (TestRunner::removeOriginAccessAllowListEntry):
        (TestRunner::addOriginAccessWhitelistEntry): Deleted.
        (TestRunner::removeOriginAccessWhitelistEntry): Deleted.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (removeOldInjectedContentAndResetLists):
        (testUserContentManagerInjectedStyleSheet):
        (testUserContentManagerInjectedScript):
        (testUserContentManagerContentFilter):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::addOriginAccessAllowListEntry):
        (WTR::TestRunner::removeOriginAccessAllowListEntry):
        (WTR::TestRunner::addOriginAccessWhitelistEntry): Deleted.
        (WTR::TestRunner::removeOriginAccessWhitelistEntry): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        [test-webkitpy] Have CI use verbose logging
        https://bugs.webkit.org/show_bug.cgi?id=215019
        <rdar://problem/66383986>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPyPython2Tests): Add --verbose flag.
        (RunWebKitPyPython3Tests): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_success): Add --verbose flag to test-webkitpy command.
        (test_unexpected_failure): Ditto.
        (test_failure): Ditto.
        (test_errors): Ditto.

2020-07-31  Brady Eidson  <beidson@apple.com>

        Special HID mapping for the Dualshock 3 controller
        <rdar://problem/66255198> and https://bugs.webkit.org/show_bug.cgi?id=214911

        Reviewed by Tim Horton.

        Add a virtual Dualshock3 and verify a few attributes about it.
        
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/HIDGamepads.mm:
        * TestWebKitAPI/mac/GamepadMappings/SonyDualShock3.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::sonyDualshock3Mapping):
        * TestWebKitAPI/mac/VirtualGamepad.h:

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

        Update service worker if certificate info does not match when soft updating
        https://bugs.webkit.org/show_bug.cgi?id=214988

        Reviewed by Alex Christensen.

        Update HTTPServer to pass two optional parameters:
        - A port number to listen to if provided
        - A custom server identity to use if provided

        The API test is loading an URL on a first server.
        This triggers registration of a service worker.
        It then stops this server and launches a second server on the same port with a different certificate.
        A second page is loaded on the same URL.
        This triggers the case of updating a service worker certificate info.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (createTestIdentity):
        (testIdentity):
        (testIdentity2):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::listenerParameters):
        (TestWebKitAPI::HTTPServer::HTTPServer):

2020-07-31  Sihui Liu  <sihui_liu@appe.com>

        -[WKWebsiteDataStore _renameOrigin:] needs to support IndexedDB renames
        https://bugs.webkit.org/show_bug.cgi?id=214905
        <rdar://problem/66247978>

        Reviewed by Alex Christensen.

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

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

        [webkitcorepy] Changes to Tools/Scripts/libraries should trigger EWS
        https://bugs.webkit.org/show_bug.cgi?id=214998
        <rdar://problem/66355658>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Add Tools/Scripts/libraries.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCheckPatchRelevance.test_relevant_webkitpy_patch):
        (TestCheckPatchRelevance.test_relevant_libraries_patch):

2020-07-31  Keith Miller  <keith_miller@apple.com>

        Fix build around broken internal SDK for iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=215009

        Reviewed by Mark Lam.

        We need to manually include the private headers because the system tries to hide them from us even on internal builds...

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPILibrary.xcconfig:

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

        [ews] Add unit-tests for various builder factories
        https://bugs.webkit.org/show_bug.cgi?id=214969

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories_unittest.py: Added unit-tests.
        (TestBuildFactory.test_generic_build_factory):
        (TestBuildFactory.test_gtk_build_factory):
        (TestBuildFactory.test_wpe_factory):
        (TestBuildFactory.test_wincairo_factory):

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

        [webkitcorepy] Add an auto-installer (Unreviewed follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=214606

        Unreviewed development nit.

        * .gitignore: Add Scripts/libraries/autoinstalled to .gitignore.

2020-07-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        webkitpy: If LC_ALL is set to a empty string, svn doesn't use the password store
        https://bugs.webkit.org/show_bug.cgi?id=214983

        Reviewed by Darin Adler.

        If LC_ALL is set to a empty string, svn doesn't use the password
        store in my environment. I'm using svn with gpg-agent on Ubuntu
        20.04 (svn version 1.13.0, gpg-agent 2.2.19).

        r101274 (Bug 68691) has set LC_ALL to a empty string.

        If I invoke 'svn ci' on my terminal, svn askes gpg-agent my
        password as expected, but if I invoke 'LC_ALL= svn ci', svn askes
        my password by itself.

        * Scripts/webkitpy/common/host.py:
        (Host._engage_awesome_locale_hacks): Set the env var LC_ALL to 'en_US.UTF-8'.

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

        [webkitcorepy] Make scripts called with sudo use a userspace autoinstall
        https://bugs.webkit.org/show_bug.cgi?id=214981
        <rdar://problem/66342996>

        Reviewed by Dewei Zhu.

        Sudo can bring havoc to the autoinstaller, because the directories it creates will belong
        to the root user. We should ensure that the directories created by a sudo script call
        are owned by the user that called sudo, when possible.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Ensure that installed packages are not owned by root, if possible.
        (AutoInstall.userspace_should_own): Ensure that a directory or file is not owned by root, if possible.
        (AutoInstall.set_directory): Ensure that the directories containing auto-installed packages are not
        owned by root, if possible.

2020-07-30  Dean Jackson  <dino@apple.com>

        [WebGL] Safari snapshots of WebGL content in the tab picker don't work
        https://bugs.webkit.org/show_bug.cgi?id=214452
        <rdar://problem/21243082>

        Test for snapshotting. Marked as PLATFORM(MAC) for now.

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

2020-07-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Adopt -[AVContentKeyRequest willOutputBeObscuredDueToInsufficientExternalProtectionForDisplays:]
        https://bugs.webkit.org/show_bug.cgi?id=214659
        <rdar://problem/63555006>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Observer.cpp: Added.
        (TestWebKitAPI::TEST):

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

        check-webkit-style should enforce acronym capitalization at start/end of an identifier
        <https://webkit.org/b/214954>

        Reviewed by Jonathan Bedard.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldIgnoreWebCoreNodeLeaks):
        (changeWindowScaleIfNeeded):
        - Fix case issues in variables using URL acronym.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_check_identifier_name_for_acronyms): Add.
        - This contains the logic to report acronyms with invalid case
          at the start and at the end of an identifer.
        (check_identifier_name_in_declaration):
        - Keep track of whether the identifer came from a class,
          namespace or struct.
        - Fix bug where `auto` variables would not be checked because
          `auto` was removed with other non-type keywords like `inline`,
          leaving no type for the variable.  Add a comment to describe
          what this line is doing.
        - Fix bug when removing "new" that changed an identifier named
          "newURL" to "URL".
        - Add call to _check_identifier_name_for_acronyms() to implement
          the check.
        (CppChecker):
        - Add 'readability/naming/acronym' to the list of active
          checkers.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_identifier_names_with_acronyms):
        - Add tests.  About half of the tests were taken from actual
          code that initially caused false positives during development.

2020-07-30  Beth Dakin  <bdakin@apple.com>

        Make report-non-inclusive-language ignore xcuserstate
        https://bugs.webkit.org/show_bug.cgi?id=214985

        Reviewed by Darin Adler.

        Ignore xcuserstate since it introduces random noise.
        * Scripts/report-non-inclusive-language:

2020-07-30  Tim Horton  <timothy_horton@apple.com>

        Web content gets stuck in an inactive state (no cursor updates or text insertion caret) when activating a tab with a thumbnail visible
        https://bugs.webkit.org/show_bug.cgi?id=214962
        <rdar://problem/65670984>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        Add a test ensuring that we go back to the active-window state after
        unparenting a WKThumbnailView that was installed in an inactive window.

        (-[WKThumbnailViewDelegate webView:didFinishNavigation:]): Deleted.
        * TestWebKitAPI/mac/OffscreenWindow.h:
        * TestWebKitAPI/mac/OffscreenWindow.mm:
        (-[OffscreenWindow initWithSize:]):
        (-[OffscreenWindow initWithSize:isKeyWindow:]):
        (-[OffscreenWindow isKeyWindow]):

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

        [Big Sur] Add limited Seed 3 support to EWS
        https://bugs.webkit.org/show_bug.cgi?id=214874
        <rdar://problem/66216190>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Add AppleSilicon bubbles.
        * BuildSlaveSupport/ews-build/config.json: Add AppleSilicon device.
        * BuildSlaveSupport/ews-build/factories.py:
        (macOSBuildOnlyFactory): Skip uploading to S3.
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestBuildFactory.test_macos_build_only_factory):
        * BuildSlaveSupport/ews-build/loadConfig.py: Import macOSBuildOnlyFactory.

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

        Remove non-inclusive terminology from WebKit variable names and test-only SPI
        https://bugs.webkit.org/show_bug.cgi?id=214941

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::addOriginAccessWhitelistEntry):
        (WTR::TestRunner::removeOriginAccessWhitelistEntry):

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

        [GTK4] Enable API tests
        https://bugs.webkit.org/show_bug.cgi?id=214344

        Reviewed by Adrian Perez de Castro.

        Port API tests to GTK4. Context menu and option menu tests are still disabled for GTK4 because we plan to change
        the API for GTK4 in those cases.

        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (webkitInputMethodContextMockFilterKeyEvent):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestOptionMenu.cpp:
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (checkMimeTypeForFilter):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionInputElementIsUserEdited):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/InspectorTestServer.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (testContextMenuPopulateMenu):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (Clipboard::Clipboard):
        (Clipboard::clear):
        (Clipboard::containsText const):
        (Clipboard::waitForText):
        (Clipboard::readText):
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        (loadContentsAndTryToCutSelection):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::platformDestroy):
        (WebViewTest::showInWindow):
        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp:
        (TestWebKitAPI::Util::isKeyDown):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::initialize):

2020-07-30  Brady Eidson  <beidson@apple.com>

        Refactor HID gamepad code to be much less fragile and much easier to hack on.
        https://bugs.webkit.org/show_bug.cgi?id=214910

        Reviewed by Darin Adler.

        Add a test that verifies connect, basic button/axis changes, and disconnect of a HID gamepad.
        
        * TestWebKitAPI/Tests/mac/HIDGamepads.mm:

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

        Replace 'http://svn.webkit.org' with 'https://svn.webkit.org' in webkitpy scripts
        https://bugs.webkit.org/show_bug.cgi?id=214957

        Reviewed by Daniel Bates.

        SVNRepository.has_authorization_for_realm failed to find the realm
        string.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry): Removed a unused variable 'svn_id_regexp'.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (AbstractCommitLogCommand): Changed _revision_regexp to use 'https?' to accept 'https'.
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:

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

        Add script to help us count uses of non-inclusive terms
        https://bugs.webkit.org/show_bug.cgi?id=214942

        Reviewed by Beth Dakin.

        * Scripts/report-non-inclusive-language: Added.

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

        Migrate App-Bound Domains code from WebKit Additions
        https://bugs.webkit.org/show_bug.cgi?id=214889
        <rdar://problem/66075857>

        Reviewed by Brent Fulgham.

        Replace WebKit Additions macros with code to set a different bundle
        identifier indicating that we want to run an App-Bound Domains test.

        Remove #if USE(APPLE_INTERNAL_SDK) check so we run these tests on EWS.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (cleanUpInAppBrowserPrivacyTestSettings):
        (initializeInAppBrowserPrivacyTestSettings):

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

        Make the lock icon update correctly in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=214933

        Reviewed by Alex Christensen.

        Various fixes to the MiniBrowser lock icon. Set the initial state to unlocked in the XIB.
        Dim the icon when there is no certificate to display. Dim it and show unlocked for WK1 windows.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController showCertificate:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateUserInterfaceItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):

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

        [webkitcorepy] Add an auto-installer (Unreviewed follow-up fix 2)
        https://bugs.webkit.org/show_bug.cgi?id=214606

        Unreviewed infrastructure fix.

        webkit-patch just ignores svn:ignore, and lands the patch with only a changelog.

        * Scripts/libraries: Added property svn:ignore.

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

        [macOS] Inspector bar in Mail compose shows incorrect text alignment style for ranged selections
        https://bugs.webkit.org/show_bug.cgi?id=214930
        <rdar://problem/66185224>

        Reviewed by Tim Horton.

        Add a new API test and adjust an existing test to verify the codechange.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html:
        * TestWebKitAPI/Tests/mac/AttributedSubstringForProposedRange.mm: Added.
        (TEST):

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

        [webkitcorepy] Add an auto-installer (Unreviewed follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=214606

        Unreviewed infrastructure fix.

        svn:ignore was not correctly set when the patch was landed.

        * Scripts/libraries: Added property svn:ignore.

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

        [ews.webkit.org] Skip build upload for embedded iOS builds
        https://bugs.webkit.org/show_bug.cgi?id=214923

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json: Skip upload for iOS Embedded builds.
        * BuildSlaveSupport/ews-build/factories.py:
        (iOSEmbeddedBuildFactory): Skip building and uploading product archive.

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

        [webkitcorepy] Add an auto-installer
        https://bugs.webkit.org/show_bug.cgi?id=214606

        Reviewed by Darin Adler.

        Add an autoinstaller to webkitcorepy. This is eventually intended to replace the
        autoinstaller in webkitpy.

        * Scripts/libraries: Added property svn:ignore.
        * Scripts/libraries/webkitcorepy/README.md:
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py: Added.
        (Package): Class representing a single Python module.
        (Package.Archive): Class representing a zip file containing a package.
        (Package.Archive.__init__): Construct representation with a name, version and
        downloadable link.
        (Package.Archive.__repr__): Archives are named based on their package name
        and version.
        (Package.Archive.path): The location of  a downloaded archive on disk.
        (Package.Archive.download): Download archive and write contents to disk.
        (Package.Archive.unpack): Unpack archive on disk into package.
        (Package.__init__): Packages are constructed with a name, version and name on
        PyPi, which is assumed to be the package name unless specified.
        (Package.location): Location of the package on disk.
        (Package.do_post_install): Some packages have post-install actions, execute
        those.
        (Package.archives): Return a list of archives which match the specified
        package parameters.
        (Package.is_cached): Check the AutoInstall manifest to see if a package has
        already been installed.
        (Package.install): If needed, find a compatible archive for the specified
        package, download and install it.
        (AutoInstall): Namespace for auto-install functionality.
        (AutoInstall._request): Make a request to the package index specified.
        (AutoInstall.enable): Enable the auto-installer.
        (AutoInstall.disable): Disable the auto-installer.
        (AutoInstall.set_directory): Set the directory to save auto-installed libraries to.
        (AutoInstall.set_index): Use a different package index.
        (AutoInstall.set_timeout): Set the default timeout.
        (AutoInstall.register): Add a package to the list of packages to be installed
        when encountered.
        (AutoInstall.install): Given a package, register and install that package.
        (AutoInstall.install_everything): Install all registered packages if they are not
        already.
        (AutoInstall.find_module): Check and see if a requested module has been registered,
        if it has, install that module if needed.
        * Scripts/libraries/webkitcorepy/webkitcorepy/cacert.pem: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/rootcerts.p7b: Added.
        * Scripts/webkitpy/__init__.py: Add logger, autoinstalled requests and certifi.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Include webkitcorepy.AutoInstall when installing everything.

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

        [build.webkit.org] Add Big Sur builder (Follow-up Fix)
        https://bugs.webkit.org/show_bug.cgi?id=214879
        <rdar://problem/66221071>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build): Add Big Sur.

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

        Unreviewed, reverting r265018.
        https://bugs.webkit.org/show_bug.cgi?id=214917

        Broke various ios-wk2 tests.

        Reverted changeset:

        "Migrate App-Bound Domains code from WebKit Additions"
        https://bugs.webkit.org/show_bug.cgi?id=214889
        https://trac.webkit.org/changeset/265018

2020-07-29  Youenn Fablet  <youenn@apple.com>

        TestWebKitAPI.WebKit.QuotaDelegate flaky times out
        https://bugs.webkit.org/show_bug.cgi?id=214842

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        In case the page is not visible, quota increase delegate will be denied.
        Delay the cache storage hence the quota increase until the page is visible.

2020-07-28  Dean Jackson  <dino@apple.com>

        run-minibrowser doesn't respect webkit configuration
        https://bugs.webkit.org/show_bug.cgi?id=214857
        <rdar://problem/66187636>

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/minibrowser/run_webkit_app.py:
        (main): Don't force a Release configuration if none was given.
        * Scripts/webkitpy/port/config.py:
        (Config.flag_for_configuration): Look at the default configuration if we didn't
        pass one in.

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

        Migrate App-Bound Domains code from WebKit Additions
        https://bugs.webkit.org/show_bug.cgi?id=214889
        <rdar://problem/66075857>

        Reviewed by Brent Fulgham.

        Replace WebKit Additions macros with code to set a different bundle
        identifier indicating that we want to run an App-Bound Domains test.

        Remove #if USE(APPLE_INTERNAL_SDK) check so we run these tests on EWS.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (cleanUpInAppBrowserPrivacyTestSettings):
        (initializeInAppBrowserPrivacyTestSettings):

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

        [ews] Add macOS Big Sur support in PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=214903

        Reviewed by Darin Adler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration.convert_build_to_os_name):

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

        [build.webkit.org] Add Big Sur builder
        https://bugs.webkit.org/show_bug.cgi?id=214879
        <rdar://problem/66221071>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add Big Sur release builder.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Add new builder to bot watcher's dashboard.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Add BigSur.

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

        [Big Sur] Add Seed 3 to bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=214863
        <rdar://problem/66198642>

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/BigSur.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/BigSur@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Add Big Sur.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css: Ditto.

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

        [webkitcorepy] Add string_utils (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=214405

        Reviewed by Aakash Jain.

        * Scripts/webkit-patch:
        (ForgivingUTF8Writer.write): Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/unicode_compatibility.py: Removed.

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

        [iOS] Drag and drop does not preserve file names that contain periods
        https://bugs.webkit.org/show_bug.cgi?id=214701
        <rdar://problem/66014009>

        Reviewed by Tim Horton.

        Add an API test to exercise both scenarios where the suggested name does and does not contain the extension.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

        Rebaseline an existing API test.

        * TestWebKitAPI/Tests/WebKitCocoa/gif-and-file-input.html:

        Adjust this test case to support handling multiple uploaded files.

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

2020-07-27  Chris Dumez  <cdumez@apple.com>

        Update release*() functions on ExceptionOr() to always release the member
        https://bugs.webkit.org/show_bug.cgi?id=214835

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/LoggedInStatus.cpp:
        (TestWebKitAPI::TEST):
        Fix unsafe code in API test which was storing a raw pointer to something held inside an ExpectedOr,
        after calling releaseReturnValue().

2020-07-27  David Kilzer  <ddkilzer@apple.com>

        WebKit::setCrashReportApplicationSpecificInformation() should also log to WTFLogAlways()
        <https://webkit.org/b/214756>
        <rdar://problem/66085705>

        Reviewed by Darin Adler.

        This also makes the following changes:
        - Replaces _WKSetCrashReportApplicationSpecificInformation()
          with WebKit::setCrashReportApplicationSpecificInformation().
        - Calls WTF::setCrashLogMessage() in DumpRenderTree and
          WebKitTestRunner to avoid new WTFLogAlways() calls, which
          broke internal tests and caused the first patch to be rolled
          out.
        - Changes WebKit::setCrashReportApplicationSpecificInformation()
          to take a const char* argument instead of CFStringRef.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (changeWindowScaleIfNeeded):
        - Drive-by fix for misspelling in parameter name.
        (runTest):
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        (WTR::setCrashReportApplicationSpecificInformationToURL):
        - Switch from calling
          WebKit::setCrashReportApplicationSpecificInformation() to
          calling WTF::setCrashLogMessage() directly.

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

        Add test expectations and baselines for iOS 14
        https://bugs.webkit.org/show_bug.cgi?id=214709

        Reviewed by Jonathan Bedard.

        Change current version to 14 and update unit tests.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        * Scripts/webkitpy/port/ios_device_unittest.py:
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.make_port):
        (IOSSimulatorTest.test_layout_test_searchpath_with_apple_additions):
        (IOSSimulatorTest.test_layout_test_searchpath_without_apple_additions):
        (IOSSimulatorTest.test_layout_searchpath_wih_device_type):
        * Scripts/webkitpy/port/ios_testcase.py:
        (IOSTest.make_port):

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

        [webkitcorepy] Add string_utils (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=214405

        Reviewed by Dewei Zhu.

        Use webkitcorepy.string_utils instead of unicode_compatibility for unicode conversions.

        * Scripts/webkitpy/api_tests/runner.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/bindings/main.py: Replace unicode_compatibility with string_utils,
        remove unused imports.
        * Scripts/webkitpy/common/checkout/changelog.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Make imports explicit.
        * Scripts/webkitpy/common/checkout/checkout.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Replace unicode_compatibility with
        string_utils, remove unused imports
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/checkout/scm/git.py: Replace unicode_compatibility with string_utils,
        remove unused imports.
        * Scripts/webkitpy/common/checkout/scm/scm.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Replace unicode_compatibility with string_utils,
        remove unused imports.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/config/committers.py: Replace unicode_compatibility with string_utils,
        remove unused imports.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Replace unicode_compatibility with
        string_utils, remove unused imports.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Ditto.
        * Scripts/webkitpy/common/net/ewsserver.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/net/web_mock.py: Ditto.
        * Scripts/webkitpy/common/prettypatch.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/read_checksum_from_png.py: Ditto.
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py: Ditto
        * Scripts/webkitpy/common/system/abstractexecutive.py: Ditto.
        * Scripts/webkitpy/common/system/crashlogs.py: Ditto.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py: Ditto.
        * Scripts/webkitpy/common/system/executive.py: Ditto.
        * Scripts/webkitpy/common/system/executive_mock.py: Ditto.
        * Scripts/webkitpy/common/system/executive_unittest.py: Replace unicode_compatibility with string_utils,
        remove unused imports.
        * Scripts/webkitpy/common/system/filesystem.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/system/filesystem_mock.py: Replace unicode_compatibility with string_utils,
        remove unused imports.
        * Scripts/webkitpy/common/system/outputcapture.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/common/system/outputtee_unittest.py: Ditto.
        * Scripts/webkitpy/common/wavediff.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py: Replace unicode_compatibility with
        string_utils, remove unused imports.
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py: Replace unicode_compatibility with
        string_utils.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Ditto.
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py: Replace unicode_compatibility with
        string_utils, remove unused imports.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py: Replace unicode_compatibility with
        string_utils.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py: Replace unicode_compatibility with
        string_utils, remove unused imports.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py: Remove unused imports.
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py: Ditto.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Replace unicode_compatibility with
        string_utils, remove unused imports.
        * Scripts/webkitpy/port/base.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/port/driver.py: Replace unicode_compatibility with string_utils, remove unused imports.
        * Scripts/webkitpy/port/image_diff.py: Ditto.
        * Scripts/webkitpy/port/leakdetector.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/port/leakdetector_valgrind.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py: Ditto.
        * Scripts/webkitpy/port/linux_get_crash_log.py: Ditto.
        * Scripts/webkitpy/port/mock_drt.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/port/mock_drt_unittest.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/port/server_process.py: Ditto.
        * Scripts/webkitpy/port/server_process_mock.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/port/test.py: Ditto.
        * Scripts/webkitpy/results/upload_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/cpp.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/style/checkers/python.py: Ditto.
        * Scripts/webkitpy/style/patchreader.py: Ditto.
        * Scripts/webkitpy/test/main.py: Replace unicode_compatibility with string_utils, remove unused imports.
        * Scripts/webkitpy/test/main_unittest.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/test/printer.py: Ditto.
        * Scripts/webkitpy/test/runner_unittest.py: Ditto.
        * Scripts/webkitpy/test/skip_unittest.py: Ditto.
        * Scripts/webkitpy/tool/bot/irc_command.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py: Ditto.
        * Scripts/webkitpy/tool/commands/queues.py: Remove unused imports.
        * Scripts/webkitpy/tool/commands/queues_unittest.py: Ditto.
        * Scripts/webkitpy/tool/steps/haslanded.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/w3c/test_exporter.py: Replace unicode_compatibility with string_utils, remove unused
        imports.
        * Scripts/webkitpy/w3c/wpt_github.py: Replace unicode_compatibility with string_utils.
        * Scripts/webkitpy/w3c/wpt_github_unittest.py: Replace unicode_compatibility with string_utils, remove
        unused imports.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py: Replace unicode_compatibility with string_utils.

2020-07-27  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation should not extract non-breaking spaces
        https://bugs.webkit.org/show_bug.cgi?id=214839
        <rdar://problem/64113531>

        Reviewed by Wenson Hsieh.

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

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

        ews email notification should include bot name and link to results database
        https://bugs.webkit.org/show_bug.cgi?id=214841

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_build_failure):
        (ReRunWebKitTests.send_email_for_flaky_failure):
        (AnalyzeLayoutTestsResults.send_email_for_flaky_failure):
        (AnalyzeLayoutTestsResults.send_email_for_pre_existing_failure):

2020-07-27  Mark Lam  <mark.lam@apple.com>

        DisallowVMEntry needs a copy assignment operator, detected by gcc's -Wdeprecated-copy warning
        https://bugs.webkit.org/show_bug.cgi?id=214809

        Reviewed by Yusuke Suzuki.

        Added test case for JSC's DisallowVMEntry and PropertySlot mainly for the copy
        assignment operation used in JSDOMWindow::getOwnPropertySlot().

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/JavaScriptCore/DisallowVMEntry.cpp: Added.
        (TestWebKitAPI::enterScope):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/JavaScriptCore/PropertySlot.cpp: Added.
        (TestWebKitAPI::TEST):

2020-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with GLib < 2.62

        Do not use g_date_time_format_iso8601(), use g_date_time_format() instead with a format string.

        * MiniBrowser/gtk/main.c:
        (gotITPSummaryCallback):

2020-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] Add API to support "Privacy Report"
        https://bugs.webkit.org/show_bug.cgi?id=213493

        Reviewed by Adrian Perez de Castro.

        Add about:itp to show the ITP summary.

        * MiniBrowser/gtk/main.c:
        (aboutITPRequestNew):
        (aboutITPRequestFree):
        (gotITPSummaryCallback):
        (aboutITPHandleRequest):
        (aboutURISchemeRequestCallback):

2020-07-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264690): [ iOS wk2 ] editing/selection/shift-click-includes-existing-selection.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=214688
        <rdar://problem/65993683>

        Reviewed by Darin Adler.

        Attempt another speculative fix for this flaky test, motivated by logging introduced in r264896. This recently
        introduced telemetry would suggest that this test fails when the act of handling a synthetic modifier keydown
        fails to update `GSKeyboardRef`'s live modifier flags if the keyboard layout changes mid-event, forcing the
        existing `GSKeyboardRef` to be destroyed and rebuilt.

        In this case, the keyboard layout changes from "Hebrew" to "US" when this test fails. There is only one (sane)
        explanation for this, which is that one of the `editing/input/ios/rtl-keyboard-input-*.html` tests switch to an
        RTL keyboard ("he_IL" in both cases) by swizzling out `-currentInputMode` and `-currentInputModeInPreference` on
        `UIKeyboardInputModeController`. While the swizzling is torn down in between test runs via logic in
        `TestController::platformResetStateToConsistentValues`, it's possible that this change hasn't propagated to
        the UIKit or GraphicsServices layers -- in other words, `UIApplication`'s `GSKeyboardRef` remains stuck in the
        Hebrew layout until the next time `-GSKeyboardForHWLayout:forceRebuild:createIfNeeded:` forces the keyboard to
        be rebuilt, which (in this case) seems to happen while running `shift-click-includes-existing-selection.html`.

        For reasons that are still unclear, this lazy regeneration of the `GSKeyboardRef` causes GraphicsServices' live
        modifier state to not update when handling a shift key down HID event. However, we might be able to fix this by
        forcing UIKit to sync the default (unswizzled) keyboard layout back to its `GSKeyboardRef` immediately when we
        stop swizzling `UIKeyboardInputModeController` after running a test that attempts to simulate changing keyboard
        input modes.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Call `-prepareKeyboardInputModeFromPreferences:` to force the UIApp to update its hardware keyboard state (i.e.
        `GSKeyboardRef`).

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):

        Also, restore this method to how it was prior to r264890, as it doesn't seem like waiting for the HID marker
        event after synthesizing a keydown had any effect.

        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp handleKeyHIDEvent:]): Deleted.

2020-07-26  Diego Pino Garcia  <dpino@igalia.com>

        [WPE] Unreviewed test gardening. Update API test expectations.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-07-26  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed test gardening. Update API tests expectations.

        * TestWebKitAPI/glib/TestExpectations.json:

2020-07-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, partially revert r264896.
        https://bugs.webkit.org/show_bug.cgi?id=214688

        This logging is no longer needed.

        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp GSKeyboardForHWLayout:forceRebuild:createIfNeeded:]): Deleted.

2020-07-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, add even more logging to try and diagnose a flaky test
        https://bugs.webkit.org/show_bug.cgi?id=214688
        <rdar://problem/65993683>

        Evidence so far suggests that this test fails when the process of dispatching a keydown event for a modifier
        (in this case, the shift key) causes the UIApplication's hardware keyboard (`GSKeyboardRef`) to be regenerated.
        This may happen in one of two ways: either a rebuild is forced by logic in `-[UIApplication handleKeyHIDEvent:]`,
        or `forceRebuild` is `NO`, but the keyboard is rebuilt anyways due to a mismatched layout and/or keyboard type.

        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp GSKeyboardForHWLayout:forceRebuild:createIfNeeded:]):
        (-[WebKitTestRunnerApp handleKeyHIDEvent:]):

2020-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Crash under ValidationBubble::setAnchorRect when showing form validation UI in unparented view
        https://bugs.webkit.org/show_bug.cgi?id=214789
        <rdar://problem/66104012>

        Reviewed by Tim Horton.

        Add an API test that reproduces the crash.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FormValidation.mm: Added.

2020-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264690): [ iOS wk2 ] editing/selection/shift-click-includes-existing-selection.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=214688
        <rdar://problem/65993683>

        Reviewed by Tim Horton.

        Continue to add logging in an attempt to debug this flaky test.

        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp handleKeyHIDEvent:]):
        (-[WebKitTestRunnerApp _handleHIDEvent:]): Drive-by fix: add a missing call to the superclass method.

2020-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264690): [ iOS wk2 ] editing/selection/shift-click-includes-existing-selection.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=214688
        <rdar://problem/65993683>

        Reviewed by Tim Horton.

        Attempt a second speculative fix that waits for the keydown HID event to be dequeued and handled by
        `UIApplication` when simulating a shift-tap, to guarantee that the synthetic click gesture recognizer has
        up-to-date modifier flags upon dispatching the synthetic HID events on tap.

        It's unclear how or why the current implementation might result in the gesture recognizer not being updated with
        the right modifier flags, since events in the HID event queue should be handled in order.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):

2020-07-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264690): [ iOS wk2 ] editing/selection/shift-click-includes-existing-selection.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=214688
        <rdar://problem/65993683>

        Reviewed by Megan Gardner.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):

2020-07-24  Beth Dakin  <bdakin@apple.com>

        Adopt inclusive WKBrowsingContextGroup SPI in the API tests
        https://bugs.webkit.org/show_bug.cgi?id=214766

        Reviewed by Darin Adler.

        Adopt the newer version of this SPI, added in https://trac.webkit.org/changeset/263099/webkit
        * TestWebKitAPI/Tests/WebKitObjC/UserContentTest.mm:
        (TEST_F):

2020-07-24  Brady Eidson  <beidson@apple.com>

        Hard code some MFi controller devices instead of dynamically managing HID vs GameController.framework.
        rdar://problem/65961406 and https://bugs.webkit.org/show_bug.cgi?id=214664

        Reviewed by Tim Horton.

        Now that we have more than 1 kind of virtual gamepad (5 to be precise), refactor the VirtualGamepad
        mechanism to support easily configurable gamepad mappings.
        
        Each gamepad mapping has its own descriptor and a report derived from it.
        
        The virtual devices trigger the correct "HID vs GCF" behavior via their complete descriptors.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/mac/HIDGamepads.mm:
        (-[GamepadMessageHandler userContentController:didReceiveScriptMessage:]):

        * TestWebKitAPI/mac/GamepadMappings/MicrosoftXboxOne.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::microsoftXboxOneMapping):

        * TestWebKitAPI/mac/GamepadMappings/ShenzhenLongshengweiTechnologyGamepad.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::shenzhenLongshengweiTechnologyGamepadMapping):

        * TestWebKitAPI/mac/GamepadMappings/SonyDualShock4.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::sonyDualshock4Mapping):

        * TestWebKitAPI/mac/GamepadMappings/SteelSeriesNimbus.mm: Copied from Tools/TestWebKitAPI/mac/VirtualGamepad.mm.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::steelSeriesNimbusMapping):

        * TestWebKitAPI/mac/GamepadMappings/SunLightApplicationGenericNES.mm: Added.
        (TestWebKitAPI::publishReportCallback):
        (TestWebKitAPI::VirtualGamepad::sunLightApplicationGenericNESMapping):

        * TestWebKitAPI/mac/VirtualGamepad.h:
        * TestWebKitAPI/mac/VirtualGamepad.mm:
        (TestWebKitAPI::VirtualGamepad::VirtualGamepad):
        (TestWebKitAPI::VirtualGamepad::publishReport):
        (TestWebKitAPI::VirtualGamepad::makeVirtualNimbus): Deleted.

2020-07-24  Jonathan Bedard  <jbedard@apple.com>

        pep8.py:110: FutureWarning: Possible nested set at position 1 (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=214531

        Unreviewed test fix.

        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports): Auto-import of pep8 has been removed.

2020-07-24  Tadeu Zagallo  <tzagallo@apple.com>

        WKStringGetMaximumUTF8CStringSize should cast before arithmetic
        https://bugs.webkit.org/show_bug.cgi?id=214750
        <rdar://problem/65884455>

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::dumpToStdErr):
        (WTR::InjectedBundle::outputText):

2020-07-24  Youenn Fablet  <youenn@apple.com>

        Add some logging to debug WebKit.QuotaDelegate test that times out on a Debug bot
        https://bugs.webkit.org/show_bug.cgi?id=214725

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        (doTest):

2020-07-24  Chris Dumez  <cdumez@apple.com>

        [ iOS wk2 ] imported/w3c/web-platform-tests/web-share/share-without-user-gesture.https.html is a constant timeout
        https://bugs.webkit.org/show_bug.cgi?id=214694
        <rdar://problem/66001110>

        Reviewed by Tim Horton.

        The test was failing because there was a share sheet still being presented from a previous Web Share test.
        TestController::platformResetStateToConsistentValues() would wait for that share sheet to get dismiss and
        would eventually give up and report the test as timing out. The issue is that WebKit layout test were
        relying on a UIScriptController function to dismiss the share sheet but Web Platform Tests did not.
        To address the issue, we now always promptly dismiss the share sheet in WebKitTestRunner, without the need
        for a UIScriptController function call. The Share Sheet now gets dismissed promptly in both WebKit tests
        and WPT tests.

        For robustness, I also added code in WebKitTestRunner to dismiss any remaining presented view controller
        after waiting, to avoid failing on the next test in such cases.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setShareSheetCompletesImmediatelyWithResolution): Deleted.
        Delete UIScriptController.setShareSheetCompletesImmediatelyWithResolution() utility function for tests now
        that it is the default in WebKit TestRunner.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        - Call _setShareSheetCompletesImmediatelyWithResolutionForTesting:YES on the test WKWebView instead of relying
          on individual tests to do that.
        - For robustness, if there is still a presented view controller after waiting, we now dismiss it ourselves
          instead of failing. This otherwise leads to next test to be reported as failing (or timing out) because there
          is a presented view controller that remains from the previous test. Note that this is not needed to fix the
          layout test in question since we now properly dismiss the share UI in WPT tests but I still think it is a good
          thing to do for robustness and avoid test flakiness.

2020-07-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] Disable email sending on testing instances of ews
        https://bugs.webkit.org/show_bug.cgi?id=214738

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/send_email.py:
        (send_email):

2020-07-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] Notify bot watchers about build being broken
        https://bugs.webkit.org/show_bug.cgi?id=214727

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.start):
        (AnalyzeCompileWebKitResults.send_email_for_build_failure):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeCompileWebKitResults.setUp):
        (TestReRunWebKitTests.configureStep):
        (TestAnalyzeLayoutTestsResults.configureStep):

2020-07-24  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)' failed
        https://bugs.webkit.org/show_bug.cgi?id=213364

        Reviewed by Philippe Normand.

        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:
        (TestWebKitAPI::TEST_F): Added
        GStreamerTest::mappedOwnedBufferDestruction and
        GStreamerTest::mappedBufferValidityUnmapEarly tests.

2020-07-24  Angelos Oikonomopoulos  <angelos@igalia.com>

        Add a GNU parallel runner
        https://bugs.webkit.org/show_bug.cgi?id=214356

        Reviewed by Keith Miller.

        At the moment, run-jsc-stress-tests uses make as a (local) job scheduling
        engine (i.e. doesn't make use of the dependency tracking at all). However,
        this causes problems for the distributed job scheduling we want to do when
        using --remote.

        If a remote is down, the tests will fail.
        If a remote goes down during testing, the tests will fail.

        There is no reason not to ignore remotes that are unavailable. What's more,
        we should be able to reschedule jobs that were in the middle of execution when
        a remote host goes down.

        This patch tries to leverage GNU parallel as the execution engine to
        hopefully transparently handle some of those failure scenarios.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:

2020-07-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Tapping QuickType suggestions for a misspelled word does nothing in Mail compose
        https://bugs.webkit.org/show_bug.cgi?id=214705
        <rdar://problem/58320785>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/ios/SelectionByWord.mm:

        Add a unit test to exercise the changes in behavior when calling UITextInput API.

        (-[SelectionChangeListener setSelectionWillChangeHandler:]):
        (-[SelectionChangeListener setSelectionDidChangeHandler:]):
        (-[SelectionChangeListener selectionWillChangeHandler]):
        (-[SelectionChangeListener selectionDidChangeHandler]):
        (-[SelectionChangeListener selectionWillChange:]):
        (-[SelectionChangeListener selectionDidChange:]):
        (-[SelectionChangeListener textWillChange:]):
        (-[SelectionChangeListener textDidChange:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2020-07-23  Aakash Jain  <aakash_jain@apple.com>

        [ews] Notify bot watchers about pre-existing and flaky test failures found on ews bots
        https://bugs.webkit.org/show_bug.cgi?id=207475

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand):
        (ReRunWebKitTests.send_email_for_flaky_failure): Method to send email for flaky failure.
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):
        (AnalyzeLayoutTestsResults.send_email_for_flaky_failure): Method to send email for flaky failure.
        (AnalyzeLayoutTestsResults.send_email_for_pre_existing_failure): Method to send email for pre-existing failure.
        * BuildSlaveSupport/ews-build/steps.py: Updated unit-tests accordingly.
        * BuildSlaveSupport/ews-build/send_email.py: Added error handling.

2020-07-23  Sihui Liu  <sihui_liu@appe.com>

        Allow IndexedDB in third-party frames
        https://bugs.webkit.org/show_bug.cgi?id=214583
        <rdar://problem/61278487>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (postResult):
        (catch):

2020-07-23  Ryan Haddad  <ryanhaddad@apple.com>

        [ews] Update bot watcher email address
        https://bugs.webkit.org/show_bug.cgi?id=214693

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/send_email.py:

2020-07-23  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-tests] Override suite name for results database reporting
        https://bugs.webkit.org/show_bug.cgi?id=214686
        <rdar://problem/65997324>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager.run): Allow options to override suite name.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Allow options to override suite name.
        * Scripts/webkitpy/results/options.py:
        (upload_options): Add --suite flag to override suite name.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Allow options to override suite name.

2020-07-23  Brady Eidson  <beidson@apple.com>

        Add Gamepad tests that exercise the native frameworks
        <rdar://problem/65343674> and https://bugs.webkit.org/show_bug.cgi?id=214188

        Reviewed by Tim Horton.

        For Internal builds, we can create HID devices that exercise the native gamepad providers.
        E.g. Actually exercise the IOHID gamepad provider codepath.

        Give the Internal TestWebKitAPI build some entitlements:        
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        Add a very basic test that connects a device, presses a button, and verifies the web page sees it:
        * TestWebKitAPI/Tests/mac/HIDGamepads.mm: Added.
        (-[GamepadMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::handleGamepadConnect):

        Add the beginnings of a VirtualGamepad device that reads in a HID descriptor (just like real gamepads):
        * TestWebKitAPI/mac/VirtualGamepad.h: Added.
        * TestWebKitAPI/mac/VirtualGamepad.mm: Added.
        (TestWebKitAPI::VirtualGamepad::makeVirtualNimbus):
        (TestWebKitAPI::VirtualGamepad::VirtualGamepad):
        (TestWebKitAPI::VirtualGamepad::~VirtualGamepad):
        (TestWebKitAPI::VirtualGamepad::setButtonValue):
        (TestWebKitAPI::VirtualGamepad::setAxisValue):
        (TestWebKitAPI::VirtualGamepad::publishReport):

2020-07-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)' failed
        https://bugs.webkit.org/show_bug.cgi?id=213364

        Reviewed by Philippe Normand.

        Reworked tests for GstMappedBuffer and added tests for
        GstMappedOwnedBuffer.

        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:
        (TestWebKitAPI::TEST_F):

2020-07-23  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add support to send emails in ews
        https://bugs.webkit.org/show_bug.cgi?id=214670

        Reviewed by Darin Adler.

        * BuildSlaveSupport/ews-build/send_email.py: Added script to send emails.
        (send_email):
        (send_email_to_bot_watchers):

2020-07-22  Conrad Shultz  <conrad_shultz@apple.com>

        Update macOS Version macros
        https://bugs.webkit.org/show_bug.cgi?id=214653

        Reviewed by Tim Horton.

        * 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:
        * TestWebKitAPI/Configurations/WebKitTargetConditionals.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-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Article headlines are split across multiple lines after translating tagesschau.de
        https://bugs.webkit.org/show_bug.cgi?id=214652
        <rdar://problem/63995571>

        Reviewed by Tim Horton.

        Adds a new API test (a reduced version of article headlines from the front page of tagesschau.de).

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-07-22  Alex Christensen  <achristensen@webkit.org>

        Safari does not present CertificateInfo for service-worker served documents
        https://bugs.webkit.org/show_bug.cgi?id=206403
        <rdar://problem/65410875>

        Reviewed by Darin Adler and Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2020-07-22  Yusuke Suzuki  <ysuzuki@apple.com>

        TestWTF.WTF_Packed.PackedAlignedPtr should be adjusted because ARM macOS is using 48 bits for effective address width
        https://bugs.webkit.org/show_bug.cgi?id=214633

        Reviewed by Mark Lam.

        While PlatformOS.h's condition is updated, the test is not changed. This patch just aligns the condition used in this test
        to the one in PlatformOS.h.

        * TestWebKitAPI/Tests/WTF/Packed.cpp:
        (TestWebKitAPI::TEST):

2020-07-22  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add string_utils (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=214405

        Reviewed by Dewei Zhu.

        Centralize handling of unicode encoding/decoding along with various tools
        for printing strings.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/string_utils.py: Added.
        (encode): Encode a string as bytes.
        (decode): Decode a bytes as a string.
        (ordinal): Convert a number to 1st, 2nd, 3rd, 4th, ect.
        (pluralize): Convert a string to it's plurlarized version, if provided number indicates
        it should be.
        (join): Join a list of elements in a human-readable form.
        (out_of): Create a fraction which takes up a constant amount of characters.
        (elapsed): Describe the amount of time elapsed as a human-readable string.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/string_utils_unittest.py: Added.
        (StringUtils): Test string_utils.
        * Scripts/webkitpy/common/unicode_compatibility.py: Replaced with webkitcorepy.string_utils.

2020-07-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Pass api key in more secure manner
        https://bugs.webkit.org/show_bug.cgi?id=214639

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla.get_bugzilla_api_key): Method to read api key from file instead of environment variable.
        (Bugzilla.fetch_data_from_bugzilla_with_authentication): Method to fetch data from bugzilla using api key.
        (Bugzilla._fetch_attachment_json): Do not append api key in the url, use new method instead.
        (Bugzilla._get_bug_json): Ditto.
        (Bugzilla._get_commit_queue_patches_from_bug): Ditto.
        * BuildSlaveSupport/ews-app/ews/common/util.py:
        (fetch_data_from_url): Log the url to help in debugging any possible issues.

2020-07-22  Jer Noble  <jer.noble@apple.com>

        [macOS] Adopt AVPlayer.videoRangeOverride
        https://bugs.webkit.org/show_bug.cgi?id=213902
        <rdar://problem/63953509>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2020-07-22  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Remove version.py
        https://bugs.webkit.org/show_bug.cgi?id=214580

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/version.py: Removed.

2020-07-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] ITP: use the database store unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=214590

        Reviewed by Adrian Perez de Castro.

        Update the unit test to monitor the database file instead of the old log file.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataITP):

2020-07-19  Darin Adler  <darin@apple.com>

        Remove live ranges from Editor.h and EditorClient.h
        https://bugs.webkit.org/show_bug.cgi?id=214261

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Removed duplicate install of Ahem.ttf that was leading new versions
        of Xcode to fail when trying to build this.

2020-07-21  Alex Christensen  <achristensen@webkit.org>

        Safari does not present CertificateInfo for service-worker served documents
        https://bugs.webkit.org/show_bug.cgi?id=206403

        Reviewed by Brady Eidson.

        This is actually just a failing test that reproduces the issue 100% of the time.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::cancel):
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::m_protocol):
        (TestWebKitAPI::HTTPServer::totalRequests const):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        (TestWebKitAPI::Connection::terminate):
        (TestWebKitAPI::Connection::cancel):
        (TestWebKitAPI::Connection::terminate const): Deleted.

2020-07-21  Jonathan Bedard  <jbedard@apple.com>

        ImageDiff: Set ALWAYS_SEARCH_USER_PATHS to NO
        https://bugs.webkit.org/show_bug.cgi?id=214613
        <rdar://problem/65883815>

        Reviewed by Dan Bernstein.

        * ImageDiff/cg/Configurations/Base.xcconfig:

2020-07-21  Youenn Fablet  <youenn@apple.com>

        Fetch/XHR loads done by extensions should opt out of response sanitisation done in network process
        https://bugs.webkit.org/show_bug.cgi?id=214588

        Reviewed by Alex Christensen.

        Update test to check for header. Minor modernization of the JS script to impriove readability.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-07-21  Eric Carlson  <eric.carlson@apple.com>

        Use AVRoutePickerView when available for choosing AirPlay devices
        https://bugs.webkit.org/show_bug.cgi?id=213497
        <rdar://problem/58610662>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST): Test AVOutputContextOutputDevicesDidChangeNotification.
        Don't check AVRouteDetectorMultipleRoutesDetectedDidChangeNotification on watchOS,
        we don't use it there.

2020-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Fix ITP data summary when using the memory store and blocking all third-party cookies
        https://bugs.webkit.org/show_bug.cgi?id=214401

        Reviewed by Michael Catanzaro.

        Fix GetResourceLoadStatisticsDataSummary test to actually use the memory store.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):

2020-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Prepare unit tests for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=214251

        Reviewed by Adrian Perez de Castro.

        In GTK4 there isn't GTK_WINDOW_POPUP and we can't create GdkEvents, so we need to use toplevel windows
        everywhere and use the new internal api to synthesize events.

        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (testContextMenuDownloadActions):
        (testBlobDownload):
        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestOptionMenu.cpp:
        (testOptionMenuSimple):
        (testOptionMenuGroups):
        (testOptionMenuActivate):
        (testOptionMenuSelect):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):
        (testWebViewJavaScriptDialogs):
        (testWebViewOpenWindowNoDefaultSize):
        (testWebViewMouseTarget):
        (testWebViewGeolocationPermissionRequests):
        (testWebViewUserMediaEnumerateDevicesPermissionCheck):
        (testWebViewUserMediaPermissionRequests):
        (testWebViewAudioOnlyUserMediaPermissionRequests):
        (testWebViewPointerLockPermissionRequest):
        (testWebViewFileChooserRequest):
        (testWebViewColorChooserRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionInputElementIsUserEdited):
        (testInstallMissingPluginsPermissionRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp:
        (testFindControllerHide):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
        (testAutoplayPolicy):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFullScreen):
        (testWebViewSubmitForm):
        (testWebViewSnapshot):
        (testWebViewIsPlayingAudio):
        (testWebViewPreferredSize):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (testContextMenuDefaultMenu):
        (testPopupEventSignal):
        (testContextMenuKey):
        (testContextMenuPopulateMenu):
        (testContextMenuCustomMenu):
        (testContextMenuSubMenu):
        (testContextMenuDismissed):
        (testContextMenuWebExtensionMenu):
        (testContextMenuWebExtensionNode):
        (testContextMenuLiveStream):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMDOMWindow.cpp:
        (signalsNotifyCallback):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        (testInspectorCustomContainerDestroyed):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:
        (testInspectorServerPageList):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        (testPrintCustomWidget):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::quitMainLoopAfterProcessingPendingEvents):
        (WebViewTest::showInWindow):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::clickMouseButton):
        (WebViewTest::keyStroke):
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::toWebKitGLibAPI):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):

2020-07-20  Aakash Jain  <aakash_jain@apple.com>

        [ews] Use -q while unzipping layout-test-results.zip
        https://bugs.webkit.org/show_bug.cgi?id=214571

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2020-07-20  Keith Miller  <keith_miller@apple.com>

        [JSC] update test262 (July 2020 edition)
        https://bugs.webkit.org/show_bug.cgi?id=214575

        Reviewed by Ross Kirsling.

        test262 is now using 'main' as the default branch. Fix our import script to reflect that.

        * Scripts/test262/Import.pm:
        (processCLI):

2020-07-20  Philippe Normand  <pnormand@igalia.com>

        [jhbuild] GStreamer broken in minimal environment
        https://bugs.webkit.org/show_bug.cgi?id=214552

        Reviewed by Carlos Alberto Lopez Perez.

        * jhbuild/jhbuildrc_common.py:
        (init): Don't set GST_PLUGIN_SYSTEM_PATH when using the minimal moduleset, because in this
        case we actually have to rely on the host GStreamer installation. GStreamer is not part of
        the minimal moduleset.

2020-07-20  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Update reference to webkit-test-results in TestFailures
        https://bugs.webkit.org/show_bug.cgi?id=214499

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

2020-07-20  Aakash Jain  <aakash_jain@apple.com>

        Reduce logging in ews django app
        https://bugs.webkit.org/show_bug.cgi?id=214562

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build.update_build):
        * BuildSlaveSupport/ews-app/ews/models/step.py:
        (Step.save_step):
        (Step.update_step):

2020-07-20  Kate Cheney  <katherine_cheney@apple.com>

        [ iOS macOS ] http/tests/resourceLoadStatistics/grandfathering-database.html is a rare flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=213553
        <rdar://problem/64696432>

        Reviewed by Darin Adler.

        Registering to receive an ITP statistics processing callback should be
        synchronous, otherwise processing could happen before ITP has
        registered that it should be reported to the test runner.

        To avoid this mistake in the future, this patch removes the
        async version of this call from TestInvocation.cpp, because it should
        never be used.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
       (WTR::TestRunner::installStatisticsDidModifyDataRecordsCallback):
        Update this function to look like
        installStatisticsDidScanDataRecordsCallback. It is simpler to let ITP
        know to send the callback response when installing the callback
        instead of requiring a separate function call.

        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback):
        Register for a callback synchronously.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Remove setStatisticsNotifyPagesWhenDataRecordsWereScanned from the idl
        file so it does not accidentally get called in a layout test in the
        future.

2020-07-20  Dean Jackson  <dino@apple.com>

        Adding James Darpinian to contributors.

        * Scripts/webkitpy/common/config/contributors.json:

2020-07-20  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Build with arm64e when on Apple Internal
        https://bugs.webkit.org/show_bug.cgi?id=214553
        <rdar://problem/65745597>

        Reviewed by Tim Horton.

        * Scripts/webkitpy/port/mac.py:
        (MacPort._build_driver_flags): Use arm64e instead of arm64 for Internal builds.

2020-07-20  Alex Christensen  <achristensen@webkit.org>

        Add lock icon to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=214438

        Reviewed by Darin Adler.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController showCertificate:]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
        (-[WK2BrowserWindowController updateLockButtonIcon:]):

2020-07-20  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Update to FDO 19.08.12 release
        https://bugs.webkit.org/show_bug.cgi?id=214184

        Reviewed by Žan Doberšek.

        Bump to the latest 19.08 release, which ships GCC 9.3.0. Hence we can remove the
        corresponding downstream patch. And the Bluez patch which was left around but not longer
        applied in the FDO junction. Also integrate a non-related WPEBackend-FDO git master ref bump.

        * buildstream/elements/freedesktop-sdk.bst:
        * buildstream/patches/fdo-0001-Update-gcc-to-9.3.0.patch: Removed.
        * buildstream/patches/fdo/0003-Add-Bluez.patch: Removed.
        * buildstream/elements/sdk/wpebackend-fdo.bst:

2020-07-19  Sam Weinig  <weinig@apple.com>

        Rename Color::transparent to Color::transparentBlack to more clearly state what it is
        https://bugs.webkit.org/show_bug.cgi?id=214522

        Reviewed by Darin Adler.

        * TestWebKitAPI/cocoa/TestPDFDocument.mm:
        (TestWebKitAPI::TestPDFPage::colorAtPoint const):
        Update for rename from Color::transparent to Color::transparentBlack.

2020-07-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        cpp.py:3688: FutureWarning: Possible nested set at position 101
        https://bugs.webkit.org/show_bug.cgi?id=214536

        Reviewed by Darin Adler.

        The warning was added in https://bugs.python.org/issue30349. We need to escape [ when used
        inside a set. That is, we have to change "[[" to "[\[".

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2020-07-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix -Wdeprecated-declarations under Tools
        https://bugs.webkit.org/show_bug.cgi?id=214534

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::didCrashCheckFrames):
        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:

2020-07-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        pep8.py:110: FutureWarning: Possible nested set at position 1
        https://bugs.webkit.org/show_bug.cgi?id=214531

        Reviewed by Darin Adler.
        
        Update from pep8 to pycodestyle.

        * Scripts/webkitpy/style/checkers/python.py:
        (PythonChecker.check):
        (PythonChecker._check_pycodestyle):
        (PythonChecker._check_pycodestyle._pycodestyle_handle_error):
        (PythonChecker._check_pep8): Deleted.
        (PythonChecker._check_pep8._pep8_handle_error): Deleted.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_keyring):
        (AutoinstallImportHook._install_pep8): Deleted.

2020-07-17  Sam Weinig  <weinig@apple.com>

        Remove final vestigates of SimpleColor
        https://bugs.webkit.org/show_bug.cgi?id=214439

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        * TestWebKitAPI/cocoa/TestPDFDocument.mm:
        Replace remaining makeSimpleColor() uses.

2020-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r264531
        https://bugs.webkit.org/show_bug.cgi?id=214488
        <rdar://problem/64531754>

        Reviewed by Darin Adler.

        See WebCore ChangeLog for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-07-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Cache the PIN to improve NFC user experience
        https://bugs.webkit.org/show_bug.cgi?id=213900
        <rdar://problem/60073622>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc-pin-disconnect.html: Added.

2020-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Recommended article titles on csdn.net are clipped after translating to English
        https://bugs.webkit.org/show_bug.cgi?id=214488
        <rdar://problem/64531754>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-07-17  Aakash Jain  <aakash_jain@apple.com>

        Delete code for old flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=214492

        Reviewed by Jonathan Bedard.

        * TestResultServer: Removed.

2020-07-17  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Simulators should opt out of emulation
        https://bugs.webkit.org/show_bug.cgi?id=214486
        <rdar://problem/65644439>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Caller may request that emulation be disabled.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.__init__): Disable emulation.

2020-07-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r264477.

        Broke the internal build

        Reverted changeset:

        "Use AVRoutePickerView when available for choosing AirPlay
        devices"
        https://bugs.webkit.org/show_bug.cgi?id=213497
        https://trac.webkit.org/changeset/264477

2020-07-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Rename createBoxPtr into adoptBoxPtr
        https://bugs.webkit.org/show_bug.cgi?id=214171

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/BoxPtr.cpp:
        (TestWebKitAPI::TEST): Used the renamed function.

2020-07-15  Jer Noble  <jer.noble@apple.com>

        Unreviwed test gardening; disable the SleepDisabler.NavigateBack
        test, as it is flaky on the bots.

        * TestWebKitAPI/Tests/WebKit/SleepDisabler.mm:
        (TEST_F):

2020-07-16  Jonathan Bedard  <jbedard@apple.com>

        [configure-xcode-for-embedded-development] Support TBD version 4
        https://bugs.webkit.org/show_bug.cgi?id=214431
        <rdar://problem/65695728>

        Reviewed by Alexey Proskuryakov.

        * Scripts/configure-xcode-for-embedded-development: Match both archs and targets.

2020-07-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTF] Remove the unnecessary inner class DefaultHash<T>::Hash
        https://bugs.webkit.org/show_bug.cgi?id=214389

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/DeletedAddressOfOperator.h:
        (WTF::DefaultHash<DeletedAddressOfOperator>::hash):
        (WTF::DefaultHash<DeletedAddressOfOperator>::equal):
        (WTF::DefaultHash<DeletedAddressOfOperator>::Hash::hash): Deleted.
        (WTF::DefaultHash<DeletedAddressOfOperator>::Hash::equal): Deleted.
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::bucketForKey):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::bucketForKey):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::testInitialCapacity):
        * TestWebKitAPI/Tests/WTF/MoveOnly.h:
        (WTF::DefaultHash<MoveOnly>::hash):
        (WTF::DefaultHash<MoveOnly>::equal):
        (WTF::DefaultHash<MoveOnly>::Hash::hash): Deleted.
        (WTF::DefaultHash<MoveOnly>::Hash::equal): Deleted.

2020-07-16  Jonathan Bedard  <jbedard@apple.com>

        [configure-xcode-for-embedded-development] Support Xcode 12
        https://bugs.webkit.org/show_bug.cgi?id=214420
        <rdar://problem/65687153>

        Reviewed by Alexey Proskuryakov.

        * Scripts/configure-xcode-for-embedded-development: Mac xcspec files are in a different
        spot in Xcode 12.

2020-07-16  Eric Carlson  <eric.carlson@apple.com>

        Use AVRoutePickerView when available for choosing AirPlay devices
        https://bugs.webkit.org/show_bug.cgi?id=213497
        <rdar://problem/58610662>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST): Test AVOutputContextOutputDevicesDidChangeNotification.
        Don't check AVRouteDetectorMultipleRoutesDetectedDidChangeNotification on watchOS,
        we don't use it there.

2020-07-16  W.D. Xiong  <w_xiong@apple.com>

        [webkitpy] Remove unused imports from benchmark_runner
        https://bugs.webkit.org/show_bug.cgi?id=214395

        Reviewed by Jonathan Bedard.

        Removed a bunch of unused import statements in webkitpy.benchmark_runner

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        * Scripts/webkitpy/benchmark_runner/generic_factory.py:
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server_driver_factory.py:
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:

2020-07-16  Aakash Jain  <aakash_jain@apple.com>

        Improve handling of invalid ChangeLog by webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=214365

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog._ensure_bug_url):

2020-07-16  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Correct url in setup.py
        https://bugs.webkit.org/show_bug.cgi?id=214399

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py:

2020-07-16  Philippe Normand  <pnormand@igalia.com>

        run-minibrowser --debug runs the release build on macOS
        https://bugs.webkit.org/show_bug.cgi?id=214397

        Reviewed by Žan Doberšek.

        Pass-through port configuration and platform options to old-run-minibrowser. GTK and WPE
        ports are not affected by this because they build the path to MiniBrowser for the given
        configuration already.

        Also set ignore_errors to True when invoking the Executive, to prevent useless and confusing
        tracebacks raised when old-run-minibrowser exits with a positive exit code, eg, when it's
        being called with the --help argument.

        * Scripts/webkitpy/port/base.py:
        (Port.run_minibrowser):

2020-07-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r264272) [GTK][WPE] css3/color/composited-solid-backgrounds.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=214260

        Reviewed by Darin Adler.

        Add a test case.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):

2020-07-15  Dean Jackson  <dino@apple.com>

        MiniBrowser toolbar is ugly with default macOS Big Sur style
        https://bugs.webkit.org/show_bug.cgi?id=214390
        rdar://65637420

        Reviewed by Tim Horton.

        Rather than using the Big Sur default "unified" style, explicitly
        ask for the "expanded" style.

        While here, use symbols for the toolbar buttons, and move the
        progress indicator to the end of the toolbar. I hope this
        change to the xib file won't break the Catalina version.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController updateTitle:]):

2020-07-15  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Spin off general webkitpy tools into a pip module
        https://bugs.webkit.org/show_bug.cgi?id=214309

        Reviewed by Dewei Zhu.

        * Scripts/libraries: Added.
        * Scripts/libraries/webkitcorepy: Added.
        * Scripts/libraries/webkitcorepy/MANIFEST.in: Added.
        * Scripts/libraries/webkitcorepy/README.md: Added.
        * Scripts/libraries/webkitcorepy/setup.py: Added.
        (readme):
        * Scripts/libraries/webkitcorepy/webkitcorepy: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/__init__.py: Added.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/version_unittest.py: Moved from
        webkitpy/common/version_unittest.py.
        * Scripts/libraries/webkitcorepy/webkitcorepy/version.py: Added.
        (Version): Moved from webkitpy/common/version.py.
        * Scripts/webkitpy/__init__.py: Include webkitcorepy on import path.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Use Version from webkitcorepy.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Ditto.
        * Scripts/webkitpy/common/system/platforminfo.py: Ditto.
        * Scripts/webkitpy/common/system/platforminfo_mock.py: Ditto.
        * Scripts/webkitpy/common/version.py: Ditto.
        (Version): Moved to webkitcorepy.
        * Scripts/webkitpy/common/version_name_map.py: Use Version from webkitcorepy.
        * Scripts/webkitpy/common/version_name_map_unittest.py: Ditto.
        * Scripts/webkitpy/common/version_unittest.py: Moved to webkitcorepy.
        * Scripts/webkitpy/port/factory_unittest.py: Use Version from webkitcorepy.
        * Scripts/webkitpy/port/ios.py: Use Version from webkitcorepy, remove unneeded imports.
        * Scripts/webkitpy/port/ios_device.py: se Version from webkitcorepy.
        * Scripts/webkitpy/port/ios_device_unittest.py: Ditto.
        * Scripts/webkitpy/port/ios_simulator.py: Ditto.
        * Scripts/webkitpy/port/ios_simulator_unittest.py: Ditto.
        * Scripts/webkitpy/port/ios_testcase.py: Ditto.
        * Scripts/webkitpy/port/mac.py: Ditto.
        * Scripts/webkitpy/port/mac_unittest.py: Ditto.
        * Scripts/webkitpy/port/watch.py: Use Version from webkitcorepy, remove unneeded imports.
        * Scripts/webkitpy/port/watch_device.py: Use Version from webkitcorepy.
        * Scripts/webkitpy/port/watch_simulator.py: Ditto.
        * Scripts/webkitpy/port/watch_simulator_unittest.py: Ditto.
        * Scripts/webkitpy/port/watch_testcase.py: Ditto.
        * Scripts/webkitpy/port/win.py: Use Version from webkitcorepy, remove unneeded imports.
        * Scripts/webkitpy/port/win_unittest.py: Use Version from webkitcorepy.
        * Scripts/webkitpy/test/main.py:
        (main): Include webkitcorepy tests.
        * Scripts/webkitpy/xcode/device_type_unittest.py: Use Version from webkitcorepy.
        * Scripts/webkitpy/xcode/simulated_device.py: Ditto.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py: Use Version from webkitcorepy, fix style for imports.

2020-07-15  Aakash Jain  <aakash_jain@apple.com>

        [ews] clicking submit for EWS analysis button for patches on closed bug should display error
        https://bugs.webkit.org/show_bug.cgi?id=214372

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla._get_bug_json): Method to get bug json.
        (Bugzilla.is_bug_closed): Method to check if bug is closed.
        * BuildSlaveSupport/ews-app/ews/config.py:
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.send_patches_to_buildbot):
        * BuildSlaveSupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS.post): Display error message on submit for EWS analysis button click for closed bugs.

2020-07-15  Devin Rousso  <drousso@apple.com>

        should represent `TextPlaceholderElement` as an `NSTextAttachmentCharacter` instead of a `\n`
        https://bugs.webkit.org/show_bug.cgi?id=214331
        <rdar://problem/64779558>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/ios/UIKitSPI.h:
        Add missing SPI declarations.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[TestWKWebView synchronouslyInsertTextPlaceholderWithSize:]): Added.
        (-[TestWKWebView synchronouslyRemoveTextPlaceholder:willInsertText:]): Added.
        (TEST.DocumentEditingContext.RequestBeforeInlinePlaceholder): Added.
        (TEST.DocumentEditingContext.RequestAfterInlinePlaceholder): Added.
        (TEST.DocumentEditingContext.RequestBeforeBlockPlaceholder): Added.
        (TEST.DocumentEditingContext.RequestAfterBlockPlaceholder): Added.

2020-07-15  Jonathan Bedard  <jbedard@apple.com>

        [run-javascriptcore-tests] nativeArchitecture should never be arm64e
        https://bugs.webkit.org/show_bug.cgi?id=214369
        <rdar://problem/65364995>

        Reviewed by Tim Horton.

        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture):
        (determineArchitecture):

2020-07-15  Ryan Haddad  <ryanhaddad@apple.com>

        Flaky API Test: TestWebKitAPI.SleepDisabler.NavigateBack
        https://bugs.webkit.org/show_bug.cgi?id=213513#c9

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit/SleepDisabler.mm:
        (TEST_F): Disable the test to speed up EWS.

2020-07-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        build-webkit script tries to execute command xcodebuild on Linux
        https://bugs.webkit.org/show_bug.cgi?id=214353

        Reviewed by Jonathan Bedard.

        Recently, when running the script build-webkit on Linux the following warning is printed:
        Can't exec "xcodebuild": No such file or directory at Tools/Scripts/webkitdirs.pm line 602

        To fix this, change the code to only call the function determineXcodeSDK() when
        building for an Apple/Cocoa platform.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2020-07-15  Jim Mason  <jmason@ibinx.com>

        [WTF] Fix PackedAlignedPtr for X86_64 canonical addresses
        https://bugs.webkit.org/show_bug.cgi?id=214142

        Reviewed by Mark Lam

        Revised test cases in TEST(WTF_Packed, AssignAndGet)

        * TestWebKitAPI/Tests/WTF/Packed.cpp:

2020-07-15  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add timeout to network requests
        https://bugs.webkit.org/show_bug.cgi?id=214355

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/util.py:
        (fetch_data_from_url): Add tiemout as recommended in https://requests.readthedocs.io/en/master/user/quickstart/#timeouts

2020-07-15  Aakash Jain  <aakash_jain@apple.com>

        Make ews django app robust against network issues
        https://bugs.webkit.org/show_bug.cgi?id=214351

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.fetch_pending_and_inprogress_builds): Re-fetch builder_name_to_id_mapping if required.

2020-07-15  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Support Rosetta testing
        https://bugs.webkit.org/show_bug.cgi?id=214016
        <rdar://problem/65153804>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Emulate architecture if native and specified architectures do not match.
        * Scripts/webkitpy/port/server_process_unittest.py:
        (TrivialMockPort.architecture):

2020-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Introduce JSCTEST_hardTimeout
        https://bugs.webkit.org/show_bug.cgi?id=214343

        Reviewed by Mark Lam.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2020-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] API test /webkit/WebKitWebInspectorServer/test-page-list is flaky
        https://bugs.webkit.org/show_bug.cgi?id=188115

        Reviewed by Michael Catanzaro.

        Stop using DBus to connect to the remote inspector and reload the page until we see the inspectable target.

        * TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:
        (connectToInspectorServer):
        * TestWebKitAPI/glib/TestExpectations.json:

2020-07-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264101): Sharing a link attaches an image instead of the URL
        https://bugs.webkit.org/show_bug.cgi?id=214329
        <rdar://problem/65513607>

        Reviewed by Tim Horton and Devin Rousso.

        Add a new API test to verify that the "share action" for a link shares the URL, rather than a snapshot of the
        anchor element.

        * TestWebKitAPI/Tests/ios/ShareSheetTests.mm:

2020-07-14  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r262341) URL::createCFURL should produce a CFURL that uses UTF-8 to decode its percent-encoded sequences
        https://bugs.webkit.org/show_bug.cgi?id=214314
        <rdar://problem/65079249>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        Add a direct test and update the Mojave test expectations for the test introduced in r262341 with the change that introduced this regression.
        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        Update a test from r263475 which fixed another regression from r262341.
        The test verified that nothing crashed or timed out, and that is still the case even with this intentional change in behavior.

2020-07-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] The completion handler in -handleKeyWebEvent:withCompletionHandler: is sometimes never called
        https://bugs.webkit.org/show_bug.cgi?id=214295
        <rdar://problem/60539389>

        Reviewed by Devin Rousso.

        Add API tests to exercise the corner cases described in the WebKit ChangeLog.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2020-07-14  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] watchos should build both arm64_32 and armv7k architectures
        https://bugs.webkit.org/show_bug.cgi?id=214310

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2020-07-14  Aakash Jain  <aakash_jain@apple.com>

        [ews] watchos should build both arm64_32 and armv7k architectures
        https://bugs.webkit.org/show_bug.cgi?id=214279

        Reviewed by Darin Adler.

        * BuildSlaveSupport/ews-build/config.json:

2020-07-14  Kate Cheney  <katherine_cheney@apple.com>

        [ macOS iOS ] http/tests/resourceLoadStatistics/telemetry-generation-basic-functionality-database.html is a rare flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=212165
        <rdar://problem/63462045>

        Reviewed by Brent Fulgham.

        Remove unnecessary call to
        testRunner.setStatisticsNotifyPagesWhenTelemetryWasCaptured now that
        telemetry reports from the testing SPI will always notify the test
        runner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsNotifyPagesWhenTelemetryWasCaptured): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsNotifyPagesWhenTelemetryWasCaptured): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-07-14  Aakash Jain  <aakash_jain@apple.com>

        [ews] Do not upload archives for tvOS and watchOS
        https://bugs.webkit.org/show_bug.cgi?id=214305

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory):
        (BuildFactory.__init__):
        (watchOSBuildFactory):
        (tvOSBuildFactory):

2020-07-14  Karl Rackler  <rackler@apple.com>

        Add myself to contributors.json.

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2020-07-14  Aakash Jain  <aakash_jain@apple.com>

        Add tvOS and watchOS support to built-product-archive
        https://bugs.webkit.org/show_bug.cgi?id=214214

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/built-product-archive:
        (webkitBuildDirectoryForConfigurationAndPlatform):
        (determineWebKitBuildDirectories):
        (minifyDirectory):
        (archiveBuiltProduct):
        (extractBuiltProduct):

2020-07-13  Aakash Jain  <aakash_jain@apple.com>

        Add EWS queues for tvOS and watchOS builders (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=214147
        <rdar://problem/65290635>

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.start): Added tvos and watchos.

2020-07-13  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, re-landing r264242 with crash fixed.

        Re-landed changeset:

        "JSRunLoopTimer should use WTF::RunLoop rather than custom CF
        code"
        https://bugs.webkit.org/show_bug.cgi?id=214102
        https://trac.webkit.org/changeset/264242

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/JavaScriptCore/JSRunLoopTimer.mm: Added.
        (-[TestObject dealloc]):
        (TestWebKitAPI::TEST):

2020-07-13  Sam Weinig  <weinig@apple.com>

        Replace single argument makeSimpleColor uses with their implementation
        https://bugs.webkit.org/show_bug.cgi?id=214240

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Replace makeSimpleColor with convertToComponentBytes.

2020-07-13  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation does not observe manipulated text after update
        https://bugs.webkit.org/show_bug.cgi?id=213318
        <rdar://problem/63766703>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-07-13  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Stick to default Glib source priorities in HeadlessViewBackend, WindowViewBackend
        https://bugs.webkit.org/show_bug.cgi?id=214249

        Reviewed by Carlos Garcia Campos.

        The -70 GLib source priority was a magic baseline used to align other
        GLib source priorities throughout the WPE stack. We moved to the
        G_PRIORITY_DEFAULT value since then, so that's the value that should
        be used in the two in-tree view backend implementations as well.

        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):

2020-07-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS]: A HEIF image, selected from the OpenPanel, should be converted to an accepted MIME type
        https://bugs.webkit.org/show_bug.cgi?id=213347
        <rdar://problem/57258464>

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::runOpenPanel):

2020-07-11  Sam Weinig  <weinig@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>

        Relanding "Make hasher work with tuple-like classes"
        https://bugs.webkit.org/show_bug.cgi?id=214224

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Hasher.cpp:
        (TestWebKitAPI::get):
        (TestWebKitAPI::HasherAddTupleLikeClass3::get const):
        (TestWebKitAPI::TEST):
        Update using new Color constructor for extended colors.

2020-07-12  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up after r264210
        https://bugs.webkit.org/show_bug.cgi?id=211707

        Missing package.json and package-lock.json in the landed patch (while reviewed patch included them).

        * WebKitBot/package-lock.json: Added.
        * WebKitBot/package.json: Added.

2020-07-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r264270.
        https://bugs.webkit.org/show_bug.cgi?id=214228

        Broke the build

        Reverted changeset:

        "Make hasher work with tuple-like classes"
        https://bugs.webkit.org/show_bug.cgi?id=214224
        https://trac.webkit.org/changeset/264270

2020-07-11  Sam Weinig  <weinig@apple.com>

        Reduce surface area of the ExtendedColor class to a bare minimum
        https://bugs.webkit.org/show_bug.cgi?id=214204

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::makeColor):
        Update using new Color constructor for extended colors.

2020-07-11  Sam Weinig  <weinig@apple.com>

        Make hasher work with tuple-like classes
        https://bugs.webkit.org/show_bug.cgi?id=214224

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Hasher.cpp:
        Enable and extend tests for using computeHash() with user defined tuple-like classes, supporting
        both the get function as a member and as a ADL-able free function.

2020-07-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r264242.

        Caused many crashes on iOS bots

        Reverted changeset:

        "JSRunLoopTimer should use WTF::RunLoop rather than custom CF
        code"
        https://bugs.webkit.org/show_bug.cgi?id=214102
        https://trac.webkit.org/changeset/264242

2020-07-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [TestWebKitAPI][Win] Remove WEBCORE_EXPORT and WEBCORE_TESTSUPPORT_EXPORT definitions in PlatformWin.cmake
        https://bugs.webkit.org/show_bug.cgi?id=214212

        Reviewed by Don Olmstead.

        Those macros should be defined only by WebCore/platform/PlatformExportMacros.h.

        * TestWebKitAPI/PlatformWin.cmake: Removed WEBCORE_EXPORT and WEBCORE_TESTSUPPORT_EXPORT.
        Added STATICALLY_LINKED_WITH_WebCore=1 to TestWebCore_DEFINITIONS.

2020-07-10  Aakash Jain  <aakash_jain@apple.com>

        Add tvOS and watchOS support to built-product-archive
        https://bugs.webkit.org/show_bug.cgi?id=214214

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):

2020-07-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Prevent SPI clients from making the minimum layout height or width negative
        https://bugs.webkit.org/show_bug.cgi?id=214199
        <rdar://problem/64109242>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/FixedLayoutSize.mm:

2020-07-10  Geoffrey Garen  <ggaren@apple.com>

        Add some testing for JSRunLoopTimer
        https://bugs.webkit.org/show_bug.cgi?id=214193

        Reviewed by Darin Adler.

        Add some test coverage to JSRunLoopTimer since I'm changing it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/JavaScriptCore/JSRunLoopTimer.mm: Added.
        (-[TestObject dealloc]):
        (TestWebKitAPI::TEST):

2020-07-10  Aakash Jain  <aakash_jain@apple.com>

        [EWS] layout-test results shouldn't be hosted on ews server
        https://bugs.webkit.org/show_bug.cgi?id=201937

        Rubber-stamped by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (ExtractTestResults.resultDirectoryURL):
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2020-07-10  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME][OpenCDM] Implement OpenCDM support
        https://bugs.webkit.org/show_bug.cgi?id=213550

        Reviewed by Philippe Normand.

        Added support to build OpenCDM and its dependencies. There is an
        opt in env var to get JHBuild building Thunder its Widevine
        dependencies. We also include a couple of GStreamer patches needed
        to get key IDs in the decryptors.

        Widevine is obviously proprietary and as you need to be licensed
        to access it, you need credentials to build it.

        * Scripts/webkitperl/FeatureList.pm:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0006-mssdemux-parse-protection-data.patch: Added.
        * gstreamer/patches/gst-plugins-good-0002-Check-if-an-upstream-demuxer-provided-a-default-kid.patch: Added.
        * gtk/install-dependencies:
        * jhbuild/jhbuildrc_common.py:
        (init):
        * wpe/install-dependencies:

2020-07-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: title of back-forward menu items needs to be truncated when it's too large
        https://bugs.webkit.org/show_bug.cgi?id=214180

        Reviewed by Adrian Perez de Castro.

        The popover menu doesn't set ellipsize on the inner label, so we need to do it manually. In the case of GTK4 we
        also need to markup escape it.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowCreateBackForwardMenu):

2020-07-09  Yusuke Suzuki  <ysuzuki@apple.com>

        Add Slack-aware WebKitBot implementation
        https://bugs.webkit.org/show_bug.cgi?id=211707

        Reviewed by Devin Rousso and Brian Burg.

        This patch adds Slack-aware WebKitBot implementation which supports "ping", "revert", and the other commands.
        I decided to implement this feature in chat-bot because of the following reasons.

            1. It is the previous way we are familiar with.
            2. Creating a revert-patch sometimes takes long time because it involves working-copy clean-up, creating a revert, generating a patch...
               So asynchronous request-response is better for developers who do not want to watch whether the patch is created until it is done.
               Chat-bot can tell us when it is ready.
            3. Requesting a revert-patch in public channel can easily tell the other developers that reverting is going on now.

        We reuse python's `webkit-patch create-revert` command as it was in the old webkitbot. We enhance WKR bot to support webkitbot feature.
        Once webkitbot app is installed into a channel, it monitors messages in the channel and works when the mention to this bot's user happens.

        We use Real Time Message Slack API instead of Event API, because Event API requires public facing HTTPS server which accepts incoming webhook.
        Real Time Message Slack API just requires a server app which connects to Slack via WebSocket, so it is easier to deploy for now.

        The implementation of webkitbot is client-server model inside one process. There is one AsyncTaskQueue, and there is one async main loop which
        takes the task from the queue and replies when it is done. Every time we noticed the request, this request queues the task to this task queue.
        This design ensures that only one task is using the working-copy WebKit repository at a time, this is required to make a revert-patch without
        conflict.

        * WKR/ReadMe.md: Removed.
        * WKR/WKR.mjs: Removed.
        * WKR/package-lock.json: Removed.
        * WKR/package.json: Removed.
        * WebKitBot/.eslintrc: Added.
        * WebKitBot/.gitignore: Renamed from Tools/WKR/.gitignore.
        * WebKitBot/ReadMe.md: Added.
        * WebKitBot/data/.gitignore: Renamed from Tools/WKR/data/.gitignore.
        * WebKitBot/package-lock.json: Added.
        * WebKitBot/package.json: Added.
        * WebKitBot/src/AsyncTaskQueue.mjs: Added.
        * WebKitBot/src/Commit.mjs: Added.
        * WebKitBot/src/Contributors.mjs: Added.
        * WebKitBot/src/Utility.mjs: Added.
        * WebKitBot/src/WKR.mjs: Added.
        * WebKitBot/src/WebKitBot.mjs: Added.
        * WebKitBot/src/index.mjs: Added.
        * WebKitBot/tests/Commit.test.mjs: Added.
        * WebKitBot/tests/WebKitBot.test.mjs: Added.
        * WebKitBot/tests/resources/.gitattributes: Added.
        * WebKitBot/tests/resources/HaveRadarAndBugzilla.json: Added.
        * WebKitBot/tests/resources/HavingBugzilla.json: Added.
        * WebKitBot/tests/resources/NoRadarAndBugzilla.json: Added.

2020-07-09  Andres Gonzalez  <andresg_22@apple.com>

        Make accessibility/Mac/selected-visible-position-range.html time-deterministic.
        https://bugs.webkit.org/show_bug.cgi?id=214154

        Reviewed by Chris Fleizach.


        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        Check passed parameter for null.

        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        Use attributeValue to run on secondary AX thread.

2020-07-09  Per Arne Vollan  <pvollan@apple.com>

        Move XPCEndpoint and XPCEndpointClient classes from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=214099

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit/XPCEndpoint.mm:

2020-07-09  Aakash Jain  <aakash_jain@apple.com>

        Add EWS queues for tvOS and watchOS builders
        https://bugs.webkit.org/show_bug.cgi?id=214147

        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added status-bubbles for tvos and watchos queues.
        * BuildSlaveSupport/ews-build/config.json: Added watchos and tvos builders.
        * BuildSlaveSupport/ews-build/factories.py:
        (watchOSBuildFactory):
        (tvOSBuildFactory):
        * BuildSlaveSupport/ews-build/factories_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/steps.py:
        (appendCustomBuildFlags): Added support for tvos and watchos.
        (CompileWebKit.start): Ditto.
        (PrintConfiguration.run): Ditto.

2020-07-09  Tim Horton  <timothy_horton@apple.com>

        Local internal builds fail on Apple Silicon (building yasm)
        https://bugs.webkit.org/show_bug.cgi?id=214129

        Reviewed by Dan Bernstein.

        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture):
        Build for arm64e when building with the internal SDK.
        Importantly, this matches the ARCHS_STANDARD_* build settings, so this way we
        won't set an ARCH that isn't in VALID_ARCHS for projects who use ARCHS_STANDARD_*.

        (determineXcodeSDK):
        Fall back to "macosx", so that other code can correctly identify that we're building for macOS.
        This logic needs to be here, instead of in the caller (who could assume undefined means macOS),
        because we want the ".internal" search to take place as well.

2020-07-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Occasional crash under -[UIView _setViewDelegate:] when presenting date and time pickers
        https://bugs.webkit.org/show_bug.cgi?id=214120
        <rdar://problem/65246918>

        Reviewed by Darin Adler.

        Implement additional support for testing date and time pickers presented using context menus on iOS 14. 

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::isShowingContextMenu const):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didShowContextMenu]):
        (-[TestRunnerWKWebView _didDismissContextMenu]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::setDidDismissContextMenuCallback):

        Call the completion callback with `CallbackTypeDidDismissContextMenu`, rather than
        `CallbackTypeDidEndFormControlInteraction`.

        (WTR::UIScriptControllerIOS::isShowingContextMenu const):

        Add a new script controller to ask whether we're currently presenting a context menu. This is useful in the case
        where we want to wait until we're no longer showing a context menu, since we'll either immediately invoke script
        completion, or stash a completion callback on `didDismissContextMenuCallback` to invoke script completion after
        the context menu is finished dismissing.

2020-07-09  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Unable to build without Internet connection
        https://bugs.webkit.org/show_bug.cgi?id=213920

        Reviewed by Sergio Villar Senin.

        Set the flathub ostree repo url explicitely in order to avoid retrieving it from the
        flatpakrepo remote file. This is unlikely to change.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak._get_packages):

2020-07-09  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [WTF] Implement new BoxPtr alias
        https://bugs.webkit.org/show_bug.cgi?id=212379

        Reviewed by Darin Adler.

        Tests for BoxPtr.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/BoxPtr.cpp: Added.
        (TestWebKitAPI::BoxPtrLogger::create):
        (TestWebKitAPI::BoxPtrLogger::BoxPtrLogger):
        (TestWebKitAPI::boxPtrLoggerDeleter):
        (TestWebKitAPI::TEST):

2020-07-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add support for HTTPCookieAcceptPolicy::OnlyFromMainDocumentDomain
        https://bugs.webkit.org/show_bug.cgi?id=213954

        Reviewed by Michael Catanzaro.

        Update libsoup to version 2.71.0.

        * buildstream/elements/sdk/libsoup.bst:
        * gtk/jhbuild.modules:

2020-07-08  Stephan Szabo  <stephan.szabo@sony.com>

        [Windows] Fix errors from calls to uname when not available
        https://bugs.webkit.org/show_bug.cgi?id=214101

        Reviewed by Darin Adler.

        As bare windows doesn't default to having uname, avoid calls
        to it for architecture determination.

        * Scripts/webkitdirs.pm:
          Do not call uname on windows (non-cygwin) perl
        * Scripts/webkitpy/common/system/platforminfo.py:
          Do not call uname for windows (non-cygwin) python,
          os.uname() also doesn't necessarily exist there, 
          so use platform.uname() instead.

2020-07-08  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILURE: Completion handlers not invalidated when WebPage::~WebPage() invoked navigating to docs.google.com and signing in
        https://bugs.webkit.org/show_bug.cgi?id=214098
        <rdar://problem/64848288>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspension.mm:
        (TEST):

2020-07-08  Sam Weinig  <weinig@apple.com>

        Part 3 of SimpleColor and SRGBA<uint8_t> are essentially the same - let's converge them
        https://bugs.webkit.org/show_bug.cgi?id=214082

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update to account for makeSimpleColor no longer returning an object that has a
        asSRGBA<uint8_t>() function (it is already a SRGBA<uint8_t>).

2020-07-08  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Make it possible to establish direct XPC connections between WebKit processes
        https://bugs.webkit.org/show_bug.cgi?id=214079

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/XPCEndpoint.mm: Added.
        (TEST):

2020-07-08  Aakash Jain  <aakash_jain@apple.com>

        [ews] Limit layout tests failures to display in the status-bubble tooltip and buildbot summary
        https://bugs.webkit.org/show_bug.cgi?id=214085

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py: Limit NUM_FAILURES_TO_DISPLAY to 10.
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_clean_tree_has_some_failures): Updated as per new behavior.
        (TestAnalyzeLayoutTestsResults.test_failure_on_clean_tree): Updated to also test for build_summary.
        (TestAnalyzeLayoutTestsResults.test_flaky_and_inconsistent_failures_with_clean_tree_failures): Ditto.
        (TestAnalyzeLayoutTestsResults.test_mildly_flaky_patch_with_some_tree_redness_and_flakiness): Ditto.
        (TestAnalyzeLayoutTestsResults.test_flaky_failures_in_first_run): Added unit-test.
        (TestAnalyzeLayoutTestsResults.test_clean_tree_has_lot_of_failures_and_no_new_failure): Added unit-test.
        (TestAnalyzeLayoutTestsResults.test_patch_introduces_lot_of_failures): Added unit-test.

2020-07-08  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation should ignore white spaces between nodes
        https://bugs.webkit.org/show_bug.cgi?id=213907

        Reviewed by Wenson Hsieh. 

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-07-08  Andy Estes  <aestes@apple.com>

        REGRESSION (r207558): [Mac] Context clicks on links sometimes result in navigations
        https://bugs.webkit.org/show_bug.cgi?id=213793
        <rdar://problem/64294015>

        Reviewed by Tim Horton.

        Added API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme:
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuMouseEvents.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit/mac/ContextMenuControlClick.mm.
        (TestWebKitAPI::runTest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:modifierFlags:mouseEventType:]):
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:clickCount:modifierFlags:eventType:]):
        (-[TestWKWebView mouseDownAtPoint:simulatePressure:]):
        (-[TestWKWebView mouseDownAtPoint:simulatePressure:withFlags:eventType:]):
        (-[TestWKWebView mouseUpAtPoint:]):
        (-[TestWKWebView mouseUpAtPoint:withFlags:eventType:]):
        (-[TestWKWebView sendClicksAtPoint:numberOfClicks:]):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:modifierFlags:]): Deleted.
        (-[TestWKWebViewHostWindow _mouseUpAtPoint:clickCount:modifierFlags:]): Deleted.
        (-[TestWKWebView mouseDownAtPoint:simulatePressure:withFlags:]): Deleted.
        (-[TestWKWebView mouseUpAtPoint:withFlags:]): Deleted.

2020-07-08  Jer Noble  <jer.noble@apple.com>

        Flaky API Test: TestWebKitAPI.SleepDisabler.NavigateBack
        https://bugs.webkit.org/show_bug.cgi?id=213513
        <rdar://problem/64642715>

        Reviewed by Eric Carlson.

        Make the test less dependent on the specific behavior of restoring the history state by adding code within
        the source HTML itself to explicitly play the contained video after state restoration.

        * TestWebKitAPI/Tests/WebKit/SleepDisabler.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html:

2020-07-07  Antoine Quint  <graouts@webkit.org>

        [iOS] Sharing an <img> element with a base64-encoded URL shares the URL as raw text instead of an image
        https://bugs.webkit.org/show_bug.cgi?id=214042
        <rdar://problem/56669102>

        Reviewed by Wenson Hsieh.

        Add a test that loads a page with an <img> with its data encoded as a base64 URL, brings up the share sheet for it
        and checks a single NSURL object is made available in the activity items.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ShareSheetTests.mm: Added.
        (-[ShareSheetObserver _webView:actionsForElement:defaultActions:]):
        (-[ShareSheetObserver _webView:willShareActivityItems:]):
        (TestWebKitAPI::showShareSheet):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/img-with-base64-url.html: Added.

2020-07-08  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Pre-start sccache server
        https://bugs.webkit.org/show_bug.cgi?id=213973

        Reviewed by Žan Doberšek.

        Pre-start the sccache-dist server when the flatpak sandbox is being invoked for a build.
        Usually the first sccache client process would do it but it seems to be racy when a large
        number of clients is being started simultaneously.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-07-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] install-dependencies should install the gstreamer plugins
        https://bugs.webkit.org/show_bug.cgi?id=214045

        Reviewed by Adrian Perez de Castro.

        When building webkit against system libraries (without flatpak/jhbuild)
        its needed to have installed the webkit plugins to play media files.
        The install-dependencies script should install them.

        gstreamer-plugins-ugly its likely not needed for the majority of the cases,
        but it can be required by some ugly media files that require an ugly decoder.
        Since we are installing it on the flatpak, let's add it here as well.

        * gtk/install-dependencies:
        * wpe/install-dependencies:

2020-07-08  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] run-minibrowser doesn't handle unicode urls
        https://bugs.webkit.org/show_bug.cgi?id=214036

        Reviewed by Žan Doberšek.

        Convert unregistered command-line arguments to utf-8 and append parsed URL. Previously
        unrelated arguments (like the platform arg) were passed to the final MiniBrowser app, this
        is no longer the case.

        * Scripts/webkitpy/minibrowser/run_webkit_app.py:
        (main):

2020-07-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JHBuild] Add support for using a minimal moduleset
        https://bugs.webkit.org/show_bug.cgi?id=213614

        Reviewed by Carlos Garcia Campos.

        This patch introduces a way of specifying a moduleset other than the default
        via the environment variable WEBKIT_JHBUILD_MODULESET and adds a minimal moduleset
        that allows building WebKit with it. This minimal moduleset includes the libraries
        needed for building WebKit on Ubuntu-18.04, and those libraries are only build if
        needed since they include the <pkg-config> entries that tells JHBuild to not build
        them if those are already installed system wide. So this minimal moduleset should
        work also on newer versions of Ubuntu or even other distributions.

        Currently a recipe for newer libsoup than the one shipped by Ubuntu-18.04 is included
        since we need this to have support for SameSite cookie support.
        The minimal moduleset is shared between WPE and GTK to reduce code duplication.

        To use this, you have to export on the build environment:
        WEBKIT_JHBUILD=1
        WEBKIT_JHBUILD_MODULESET=minimal

        * Scripts/update-webkit-libs-jhbuild:
        (getJhbuildIncludedFilePaths):
        (jhbuildModulesetNameChanged):
        (jhbuildConfigurationChanged):
        (saveJhbuildMd5):
        (saveJhbuildModulesetName):
        (saveJhbuildConfig):
        (deleteJhbuildMd5):
        (deleteJhbuildModulesetName):
        (deleteJhbuildConfig):
        * Scripts/webkitdirs.pm:
        (getJhbuildModulesetName):
        * gtk/jhbuild-minimal.modules: Added.
        * jhbuild/jhbuild-minimal.modules: Added.
        * jhbuild/jhbuildrc_common.py:
        (init):
        * jhbuild/patches/libsoup-lower-glib-dependency-to-2.38.patch: Added.
        * wpe/jhbuild-minimal.modules: Added.

2020-07-08  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] run-minibrowser doesn't default to mac and stdout/stderr are not displayed
        https://bugs.webkit.org/show_bug.cgi?id=214072

        Reviewed by Adrian Perez de Castro.

        * Scripts/webkitpy/minibrowser/run_webkit_app.py:
        (main): Default to mac platform, like in old-run-minibrowser.
        * Scripts/webkitpy/port/base.py:
        (Port.run_minibrowser): Display MiniBrowser stdout and stderr on the terminal output.

2020-07-08  Diego Pino Garcia  <dpino@igalia.com>

        [Flatpak] Avoid error message 'error: org.webkit.Sdk/*unspecified*/*unspecified*' not installed
        https://bugs.webkit.org/show_bug.cgi?id=213871

        Reviewed by Philippe Normand.

        The error message happens when requesting a Flatpak SDK version but there's no Flatpak SDK installed yet.
        In that case, ignore stderr to filter out the message.

        * flatpak/flatpakutils.py:
        (run_sanitized):
        (FlatpakObject.flatpak):
        (FlatpakObject.version):

2020-07-08  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Initial installation with IceCC enabled fails
        https://bugs.webkit.org/show_bug.cgi?id=213833

        Reviewed by Adrian Perez de Castro.

        Avoid attempting to use the IceCC environment during the toolchain
        archive update. The initial SDK installation triggers this when
        IceCC is enabled on the command-line or via CCACHE_PREFIX, after
        resetting the internal toolchain mapping. So the solution is to
        opt-out of this runtime configuration setup, which is useless
        anyway when the toolchain archive is being generated.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.pack_toolchain):

2020-07-07  Sam Weinig  <weinig@apple.com>

        Enabled testing of date/time input types for WebKit2 macOS
        https://bugs.webkit.org/show_bug.cgi?id=214044

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Enable the date/time input types unconditionally for testing when support is compiled in. 

2020-07-07  Alex Christensen  <achristensen@webkit.org>

        Add WebCoreNSURLSession SPI to send HTTP/2 ping
        https://bugs.webkit.org/show_bug.cgi?id=214030
        <rdar://problem/64495827>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm:
        (TestWebKitAPI::TEST):
        Add a disabled test I used to verify this works correctly.

2020-07-07  Geoffrey Garen  <ggaren@apple.com>

        Added a test for callOnMainThread
        https://bugs.webkit.org/show_bug.cgi?id=214025

        Reviewed by Sam Weinig.

        This test failed prior to https://trac.webkit.org/changeset/263981.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST): Added a test demonstrating why a simple "is the
        queue empty?" check doesn't work when you support both re-entrancy and
        threads. While the main thread is sleeping in a nested RunLoop, a
        secondary thread can see a non-empty queue.

2020-07-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] OGV/VP8 video not playing on minibrowser (neither epiphany)
        https://bugs.webkit.org/show_bug.cgi?id=205916

        Reviewed by Xabier Rodriguez-Calvar.

        * buildstream/elements/sdk/gst-plugins-base.bst: Vendor upstreamed GStreamer patch. It is
        merged in the 1.16 branch and scheduled for 1.16.3 release but we don't know when/if it will
        happen.
        * buildstream/patches/gst-plugins-base-0001-oggstream-Workaround-for-broken-PAR-in-VP8-BOS.patch: Added.

2020-07-07  Yury Semikhatsky  <yurys@chromium.org>

        [GTK][MiniBrowser] occasional crashes when closing while download in progress
        https://bugs.webkit.org/show_bug.cgi?id=214007

        Reviewed by Carlos Garcia Campos.

        Remove signal handlers from WebKitDownload when BrowserDownload is finalized,
        WebKitDownload may emit a signal after the UI item has been destroyed which leads
        to a crash.

        * MiniBrowser/gtk/BrowserDownloadsBar.c:
        (browserDownloadFinalize):

2020-07-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web process sometimes crashes when translating an article on spiegel.de
        https://bugs.webkit.org/show_bug.cgi?id=214014
        <rdar://problem/65099253>

        Reviewed by Tim Horton.

        Add a test case that dynamically adds an `object` element, immediately removes it, and then adds a chunk of text
        and verifies that the text manipulation delegate method for new content is invoked.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2020-07-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        svn-apply should use verbose mode when adding files to git
        https://bugs.webkit.org/show_bug.cgi?id=214022

        Reviewed by Darin Adler.

        If a patch contains several copy or add operations it can happen that there is
        no output for more than 600 seconds meanwhile the tool is applying the patch.
        This can cause a fatal error on the EWS. Pass the verbose flag to git,
        so it outputs the name of the file after adding it to the index.
        This is consequent how "svn add" works by default (it outputs the name of the file),
        or how "git rm" works (it also outputs the name of the file by default as well).

        * Scripts/svn-apply:
        (scmCopy):
        (scmAdd):
        (scmCommitQueueAdded):

2020-07-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement user action spec for Escape action
        https://bugs.webkit.org/show_bug.cgi?id=213875
        <rdar://problem/65022980>

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (dismissCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::dismiss):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::dismiss):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        (WTR::AccessibilityUIElement::dismiss):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::dismiss):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::dismiss):

2020-07-06  Jonathan Bedard  <jbedard@apple.com>

        [test-webkitpy] Use platform architecture
        https://bugs.webkit.org/show_bug.cgi?id=214002
        <rdar://problem/65144773>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests):

2020-07-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Unable to change focus between Google Docs windows by tapping
        https://bugs.webkit.org/show_bug.cgi?id=213985
        <rdar://problem/57083267>

        Reviewed by Darin Adler.

        Add WebKitTestRunner support for being able to verify that a web view's window has become the key window.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/UIScriptController.cpp: Added.
        (WTR::UIScriptController::setWindowIsKey):
        (WTR::UIScriptController::windowIsKey const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/UIScriptContext/UIScriptControllerShared.cpp: Renamed from Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp.

        Rename `UIScriptController.cpp` (in TestRunnerShared) to `UIScriptControllerShared.cpp`, and introduce new
        DumpRenderTree and WebKitTestRunner versions of `UIScriptController.cpp` to house DumpRenderTree and
        WebKitTestRunner-specific UIScriptController method implementations.

        For now, these are just `windowIsKey` and `setWindowIsKey` below, which plumb into their respective platform-
        agnostic `PlatformWebView` methods in WebKitTestRunner.

        * WebKitTestRunner/UIScriptController.cpp: Added.
        (WTR::UIScriptController::windowIsKey const):
        (WTR::UIScriptController::setWindowIsKey):
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[WebKitTestRunnerWindow becomeKeyWindow]):
        (-[WebKitTestRunnerWindow resignKeyWindow]):

        Update these two methods to update `m_windowIsKey` when the test runner's `UIWindow` becomes the key window (or
        stops being the key window). This is invoked when `-[UIWindow makeKeyWindow]` is called (e.g. from within WebKit
        code when tapping on an editable element).

        (WTR::PlatformWebView::setWindowIsKey):

        Avoid infinitely looping when setting windowIsKey to `true`, due to `-becomeKeyWindow` calling back into
        `setWindowIsKey`.

2020-07-06  Zhifei Fang  <zhifei_fang@apple.com>

        [result database] Empty search will return too many tests to display
        https://bugs.webkit.org/show_bug.cgi?id=213898

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/search.js: Trim the search string before fetching the tests, ingore empty string on paste event

2020-07-06  Geoffrey Garen  <ggaren@apple.com>

        RunLoop::dispatch should only call wakeUp when needed
        https://bugs.webkit.org/show_bug.cgi?id=213705

        Reviewed by Brady Eidson.

        Added some tests for interesting edge cases.

        Now that we have tests, we don't need so many comments.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST): Test that re-entry maintiains ordering. Test that
        re-entry does not deadlock with cross-thread posting. (This deadlock is
        why we can't just use a naive check for an empty queue.)

        * TestWebKitAPI/glib/UtilitiesGLib.cpp:
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::spinRunLoop):
        (TestWebKitAPI::Util::sleep): Try to fix the GLib RunLoop testing code.
        GLib fails my two new tests, and seems to fail other RunLoop-y tests.
        I think this is because g_idle_add is defined not to work in nested
        RunLoops. Let's see if using WTF's RunLoop API instead can help.

2020-07-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable storageAccess tests
        https://bugs.webkit.org/show_bug.cgi?id=213881

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::getAllStorageAccessEntries): Use the right website data store.

2020-07-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Change the cookies accept policy when ITP is enabled
        https://bugs.webkit.org/show_bug.cgi?id=213502

        Reviewed by Michael Catanzaro.

        Add tests to check the policy is changed and restored correctly when ITP is enabled and disabled.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerAcceptPolicy):

2020-07-06  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Misc updates
        https://bugs.webkit.org/show_bug.cgi?id=213968

        Reviewed by Sergio Villar Senin.

        * buildstream/README.rst: ReST format fixes and doc additions.
        * buildstream/elements/sdk/perl-term-readkey.bst: Remove perllocal.pod as it can clash with other recipes.
        * flatpak/flatpakutils.py:
        (run_in_sandbox_if_available): Add --flatpak- option pass-through support. This was lost
        after the migration of run-minibrowser to python.

2020-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263960.
        https://bugs.webkit.org/show_bug.cgi?id=213980

        Re-land, because r263959 somehow fixed the build issue caused
        by r263953

        Reverted changeset:

        "Unreviewed, reverting r263953 and r263959."
        https://bugs.webkit.org/show_bug.cgi?id=213979
        https://trac.webkit.org/changeset/263960

2020-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263953 and r263959.
        https://bugs.webkit.org/show_bug.cgi?id=213979

        Broke internal build

        Reverted changesets:

        "[Cocoa] Move almost all features from FeatureDefines.xcconfig
        to PlatformEnableCocoa.h"
        https://bugs.webkit.org/show_bug.cgi?id=212542
        https://trac.webkit.org/changeset/263953

        "[Cocoa] Remove FEATURE_DEFINES from the Cocoa/Xcode build
        system"
        https://bugs.webkit.org/show_bug.cgi?id=213976
        https://trac.webkit.org/changeset/263959

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] Remove FEATURE_DEFINES from the Cocoa/Xcode build system
        https://bugs.webkit.org/show_bug.cgi?id=213976

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/style/checkers/featuredefines.py: Removed all FeatureDefines.xcconfig
        files except for the two that remain, WebCore and WebKit.

        * TestWebKitAPI/Configurations/Base.xcconfig: Removed FEATURE_DEFINES.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Removed.
        * TestWebKitAPI/Configurations/TestWTF.xcconfig: Removed include of FeatureDefines.xcconfig.
        * TestWebKitAPI/Configurations/TestWTFLibrary.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/TestWebKitAPILibrary.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/WebProcessPlugIn.xcconfig: Ditto.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Removed FeatureDefines.xcconfig.

2020-07-05  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation: add a new heuristic to decide paragraph boundary
        https://bugs.webkit.org/show_bug.cgi?id=213918

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] Move almost all features from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212542

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Delete everything except
        ENABLE_EXPERIMENTAL_FEATURES and ENABLE_WEBRTC.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Added include of
        WebKitTargetConditionals.xcconfig.

2020-07-05  Philippe Normand  <pnormand@igalia.com>

        [WPE] run-wpe-tests Python3 compatibility
        https://bugs.webkit.org/show_bug.cgi?id=213969

        Reviewed by Sam Weinig.

        * Scripts/run-wpe-tests:

2020-07-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS] Allow selecting HEIF images if the 'accept' attribute includes an image MIME type that the platform can transcode the HEIF to
        https://bugs.webkit.org/show_bug.cgi?id=212489

        Reviewed by Darin Adler.

        The scope of this enhancement will be scaled down. No UI change will be
        done for now. Only allow HEIF/HEIC images to be selected if the 'accept'
        attribute include a mime type which CG supports transcoding the HEIF/HEIC
        images to.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (-[FileExtensionsPopupTarget initWithOpenPanel:allowedFileExtensions:]): Deleted.
        (-[FileExtensionsPopupTarget popupAction:]): Deleted.
        (-[FileExtensionsPopupTarget dealloc]): Deleted.
        (-[WK2BrowserWindowController createFilterView:popupTarget:]): Deleted.

2020-07-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove all features from FeatureDefines.xcconfig that are already mentioned in PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=213962

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Removed all features that were mentioned
        in PlatformEnableCocoa.h; the rules in that file now define whether they are enabled.

2020-07-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove unconditional features from FeatureDefines.xcconfig, making sure they are covered in PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Removed features that are either unconditionally not enabled,
        or unconditionally enabled. Double checked that all the enabled ones are either in PlatformEnable.h or
        PlatformEnableCocoa.h.

2020-07-04  Sam Weinig  <weinig@apple.com>

        Part 1 of SimpleColor and SRGBA<uint8_t> are essentially the same - let's converge them
        https://bugs.webkit.org/show_bug.cgi?id=213948

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Adapt tests to use templatized toSRGBALossy<float/uint8_t>.

2020-07-04  Sergio Villar Senin  <svillar@igalia.com>

        [Flatpak SDK] Require OpenXR 1.0.9
        https://bugs.webkit.org/show_bug.cgi?id=213930

        Reviewed by Philippe Normand.

        * buildstream/elements/sdk/openxr.bst:

2020-07-04  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

        * Scripts/generate-unified-sources.sh: Removed --feature-flags from the
        arguments passed to generate-unified-source-bundles.rb. Also removed many
        unneeded quotes.

2020-07-04  Lauro Moura  <lmoura@igalia.com>

        [WebDriver][WPE] Allow running Selenium tests with the WPE WebDriver
        https://bugs.webkit.org/show_bug.cgi?id=213500

        Reviewed by Carlos Garcia Campos.

        Add missing method used to discover the selenium name of
        the WPE webdriver.

        Proper gardening/triaging of failures will come in following commits.

        * Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py:
        (WebDriverWPE.selenium_name):

2020-07-04  Darin Adler  <darin@apple.com>

        Update comment in FeatureDefines.xcconfig since PlatformEnableCocoa.h should be used instead
        https://bugs.webkit.org/show_bug.cgi?id=213952

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Updated comment.

2020-07-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Tests that show system menu popups may fail when run concurrently
        https://bugs.webkit.org/show_bug.cgi?id=213950
        <rdar://problem/64551566>

        Reviewed by Darin Adler.

        Make it possible to run tests that present system modal popups simultaneously, without the possibility of these
        tests interfering with each other. Examples include context menus, select menus, and the DOM paste popup. To do
        this, we swizzle out codepaths for showing and dimissing popups, and instead dispatch notifications and the
        appropriate NSMenuDelegate methods ourselves.

        This change has the side effect of fixing several layout tests that are currently timing out only on arm64e
        macOS, due to reasons detailed in <rdar://problem/65084503>.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::setSwizzledPopUpMenu):
        (WTR::swizzledPopUpContextMenu):
        (WTR::swizzledPopUpMenu):
        (WTR::swizzledCancelTracking):
        (WTR::TestController::platformInitialize):

2020-07-03  Sam Weinig  <weinig@apple.com>

        Remove support for ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE
        https://bugs.webkit.org/show_bug.cgi?id=213932

        Reviewed by Darin Adler.

        Removes support for non-standard <input type="datetime">, currently being 
        guarded by the macro ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE. This macro, was
        added back in 2013 as a temporary measure to support some engines who shipped
        support for <input type="datetime">. It is currently not enabled for any
        ports so now seems like as good a time as any to remove it.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-07-03  Sam Weinig  <weinig@apple.com>

        Split color conversion functions out of ColorUtilities.h/cpp into their own file.
        https://bugs.webkit.org/show_bug.cgi?id=213803

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        Update to include ColorConversion.h and ColorTypes.h rather than ColorUtilities.h

2020-07-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][webkitpy] Use headless driver instead of wayland driver
        https://bugs.webkit.org/show_bug.cgi?id=213914

        Reviewed by Philippe Normand.

        WPE now supports running tests completely headless, but we are
        still using the webkitpy WaylandDriver to run the tests.
        This causes an error if the environment doesn't have defined the
        WAYLAND_DISPLAY or WAYLAND_SOCKET environment variables.
        Switch the driver to HeadlessDriver.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._driver_class):

2020-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r261779): [GTK][WPE] http/tests/resourceLoadStatistics/third-party-cookie-blocking-ephemeral.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=212017

        Reviewed by Michael Catanzaro.

        Use the ephemeral data store when useEphemeralSession option is enabled.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformInitializeDataStore):

2020-07-02  Alex Christensen  <achristensen@webkit.org>

        Update Mac CMake build

        * DumpRenderTree/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2020-07-02  Alex Christensen  <achristensen@webkit.org>

        Add testing infrastructure and SPI declaration for HTTP/2 ping
        https://bugs.webkit.org/show_bug.cgi?id=213913

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm:
        (-[SessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (TestWebKitAPI::pingPong):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::H2::Frame::Frame):
        (TestWebKitAPI::H2::Frame::type const):
        (TestWebKitAPI::H2::Frame::flags const):
        (TestWebKitAPI::H2::Frame::streamID const):
        (TestWebKitAPI::H2::Frame::payload const):
        (TestWebKitAPI::H2::Connection::create):
        (TestWebKitAPI::H2::Connection::Connection):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::listenerParameters):
        (TestWebKitAPI::dataFromVector):
        (TestWebKitAPI::vectorFromData):
        (TestWebKitAPI::HTTPServer::request const):
        (TestWebKitAPI::Connection::receiveBytes const):
        (TestWebKitAPI::Connection::receiveHTTPRequest const):
        (TestWebKitAPI::Connection::send const):
        (TestWebKitAPI::H2::Connection::send const):
        (TestWebKitAPI::H2::Connection::receive const):

2020-07-02  Kate Cheney  <katherine_cheney@apple.com>

        Custom URL schemes should be treated as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=213889
        <rdar://problem/64804671>

        Reviewed by Brent Fulgham.

        Added custom schemes to TestWebKitAPI's Info.plist for testing
        duplicate values and the max of 10 domains/schemes. Added
        two API tests to check that schemes are properly read from the
        Info.plist and that content loaded using a specified app-bound scheme
        has restricted API use.

        * TestWebKitAPI/Info.plist:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):

2020-07-02  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r263625): run-minibrowser fails on mac
        https://bugs.webkit.org/show_bug.cgi?id=213876

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/base.py:
        (Port.run_minibrowser): _run_script() expects a string as first argument. Command-line args
        are passed through a keyword.

2020-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build

        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (browser_settings_dialog_init):

2020-07-02  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Add perl-term-readkey
        https://bugs.webkit.org/show_bug.cgi?id=213787

        Reviewed by Adrian Perez de Castro.

        This is yet another git-svn runtime dependency.

        * buildstream/elements/sdk-platform.bst:
        * buildstream/elements/sdk/perl-term-readkey.bst: Added.

2020-07-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix the WebKit build after <rdar://problem/64288191>
        https://bugs.webkit.org/show_bug.cgi?id=213832

        Reviewed by Tim Horton.

        Additionally, fix a naming conflict that will result from `WebArchivePboardType` being declared in both
        `<WebKitLegacy/WebArchive.h>` and DumpRenderTree, by making the latter a local variable instead.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::imageCountInGeneralPasteboard const):

2020-07-01  Daniel Bates  <dabates@apple.com>

        [iOS] Implement support for UIWKDocumentRequestSpatialAndCurrentSelection
        https://bugs.webkit.org/show_bug.cgi?id=213704
        <rdar://problem/59738878>

        Reviewed by Wenson Hsieh.

        Add some tests.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        * TestWebKitAPI/ios/UIKitSPI.h: Define the enumerator using a macro just like what was done for
        UIWKDocumentRequestMarkedTextRects. The reason for the macro instead of modifying the enumeration
        definition in this file is to 1) avoid breaking the build for Apple engineers that haven't picked
        up <rdar://problem/64867540> and to 2) avoid breaking the OpenSource build.

2020-07-01  Kate Cheney  <katherine_cheney@apple.com>

        WKUserScripts injecting into all frames seem to violate app-bound domains
        https://bugs.webkit.org/show_bug.cgi?id=213816
        <rdar://problem/64872296>

        Reviewed by Brady Eidson.

        Added API test coverage. Sets up a tree like so: [app-bound domain,
        non-app-bound domain, app-bound domain]. Script injection should only
        be successful in the top frame. Since message handlers are disabled for non-
        app-bound domains, this test injects script which loads an image using a
        custom url scheme. If the load succeeds, we increment a counter, and
        expect only one successful script load (the main frame).

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):

2020-06-30  Sam Weinig  <weinig@apple.com>

        Split Color serialization out of Color classes
        https://bugs.webkit.org/show_bug.cgi?id=213820

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ExtendedColorTests.cpp:
        (TestWebKitAPI::TEST):
        Update tests to use ColorSerialization.h

2020-06-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        Several key event tests in fast/events/ios are failing after <rdar://problem/62197116>
        https://bugs.webkit.org/show_bug.cgi?id=213821
        <rdar://problem/64821309>

        Reviewed by Megan Gardner.

        After the UIKit changes in <rdar://problem/62197116>, double tapping the Option key now enters dictation mode
        by default, and additionally displays a modal popup prompting the user to set up dictation. Both of these
        behaviors interfere with layout tests that attempt to press the option key twice in rapid succession, causing
        them to time out or fail.

        Fix this by setting the default that determines the modifier key to use as the dictation shortcut to -1, which
        disables the dictation keyboard shortcut altogether.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2020-06-30  Geoffrey Garen  <ggaren@apple.com>

        [Cocoa] [GTK] RunLoop::Timer::isActive() is incorrect for timers while they are firing
        https://bugs.webkit.org/show_bug.cgi?id=213771

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::DerivedOneShotTimer::fired):
        (TestWebKitAPI::DerivedRepeatingTimer::fired):

2020-06-30  Brady Eidson  <beidson@apple.com>

        App-bound JavaScript and Navigation failures should have specific error codes.
        <rdar://problem/64940268> and https://bugs.webkit.org/show_bug.cgi?id=213808

        Reviewed by Tim Hatcher.
        (Informally by Kate Cheney)

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):

2020-06-30  Peng Liu  <peng.liu6@apple.com>

        Enable the support of FULLSCREEN_API in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=213774

        Reviewed by Youenn Fablet.

        Replace the definition of ENABLE_FULLSCREEN_API in FeatureDefines.xcconfig with
        the one in PlatformEnableCocoa.h. We have to do that because WebKitTestRunner
        does not have a FeatureDefines.xcconfig but it uses "ENABLE(FULLSCREEN_API)"
        to conditionally compile code to test the element fullscreen API.
        WebKitTestRunner can use the macro defined in PlatformEnableCocoa.h.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-06-30  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::MD5
        https://bugs.webkit.org/show_bug.cgi?id=213766

        Reviewed by Youenn Fablet.

        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MD5.cpp: Removed.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::computeSHA1HashStringForContext):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        (WTR::computeMD5HashStringForContext): Deleted.

2020-06-30  Jonathan Bedard  <jbedard@apple.com>

        [TestExpectations] Add architecture for Apple's ports
        https://bugs.webkit.org/show_bug.cgi?id=213769
        <rdar://problem/64920013>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser): Add architectures for Apple's ports.

2020-06-30  Andy Estes  <aestes@apple.com>

        [Xcode] Enable the "My Mac (Mac Catalyst)" destination in WebKit Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=213740

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig: Set SUPPORTS_MACCATALYST to YES to tell
        Xcode that these projects support building for Mac Catalyst.

        * MiniBrowser/Configurations/MiniBrowser.xcconfig: Excluded all source files on Mac Catalyst
        so that schemes that include MiniBrowser can build for Mac Catalyst.

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 ==
