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