2022-01-25  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029

        Reviewed by Jer Noble and Youenn Fablet.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMediaWindowAndScreen.mm: Added.
        (-[WindowAndScreenCaptureTestView haveStream:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewUnderPageBackgroundColor.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessTerminate.mm:
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h:
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm:
        (-[UserMediaCaptureUIDelegate init]):
        (-[UserMediaCaptureUIDelegate setGetDisplayMediaDecision:]):
        (-[UserMediaCaptureUIDelegate _webView:requestDisplayCapturePermissionForOrigin:initiatedByFrame:decisionHandler:]):

2022-01-25  Aditya Keerthi  <akeerthi@apple.com>

        Disable input-security CSS property
        https://bugs.webkit.org/show_bug.cgi?id=235557
        rdar://87984277

        Reviewed by Dean Jackson.

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

        Add default for WebKitLegacy on Windows.

2022-01-25  Simon Fraser  <simon.fraser@apple.com>

        Fix the lldb Color formatter
        https://bugs.webkit.org/show_bug.cgi?id=235613

        Reviewed by Darin Adler.
        
        Copy the list of color spaces from ColorSpace.h

        * lldb/lldb_webkit.py:
        (WebCoreColorProvider._to_string_out_of_line):

2022-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        UIWKDocumentRequestSpatialAndCurrentSelection should limit context to the editable root of the current selection
        https://bugs.webkit.org/show_bug.cgi?id=235595
        rdar://87835602

        Reviewed by Aditya Keerthi.

        Add a new API test to exercise the change.

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

2022-01-25  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Use cwd as default path
        https://bugs.webkit.org/show_bug.cgi?id=235048
        <rdar://problem/87360213>

        Reviewed by Aakash Jain.

        Re-landing, infrastructure now handles git-webkit calls appropriately.

        * Scripts/git-webkit: Use default path behavior.

2022-01-25  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Support pull requests in Trigger (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=235545
        <rdar://problem/87992990>

        Unreviewed follow-up fix.

        * CISupport/ews-build/steps.py:
        (Trigger.propertiesToPassToTriggers): Pass ews_revision for patch workflows.

2022-01-24  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Support pull requests in Trigger
        https://bugs.webkit.org/show_bug.cgi?id=235545
        <rdar://problem/87992990>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (Trigger.__init__): Pass flags for patch and pull requests.
        (Trigger.propertiesToPassToTriggers): Pass different properties if Triggered by a
        pull request verse a patch.
        (CompileWebKit.evaluateCommand): Pass flags for patch and pull request to Trigger.
        (AnalyzeLayoutTestsResults.retry_build): Ditto.

2022-01-24  Mark Lam  <mark.lam@apple.com>

        Rename Vector and FixedVector::findMatching to findIf to match stl naming.
        https://bugs.webkit.org/show_bug.cgi?id=234864
        rdar://87424746

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/FixedVector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm:
        (TestWebKitAPI::parseUserAgent):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::closeOtherPage):

2022-01-24  Alex Christensen  <achristensen@webkit.org>

        Re-enable CustomDisplayName and DefaultDisplayName API tests on Monterey
        https://bugs.webkit.org/show_bug.cgi?id=234613

        Reviewed by Brady Eidson.

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

2022-01-20  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Support pull request in AnaylzePatch
        https://bugs.webkit.org/show_bug.cgi?id=235411
        <rdar://problem/87839638>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/factories.py:
        (Factory.__init__): Rename AnalyzePatch to AnalyzeChange.
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps): Rename AnalyzePatch to AnalyzeChange.
        * CISupport/ews-build/steps.py:
        (AnalyzeChange): Renamed from AnalyzePatch.
        (AnalyzeChange._get_patch): Create a parseable string including the files changed.
        (CheckChangeRelevance): Renamed from CheckPatchRelevance.
        (FindModifiedLayoutTests): Inherit from AnalyzeChange.
        (AnalyzePatch): Renamed to AnalyzeChange.
        (CheckPatchRelevance): Renamed to CheckChangeRelevance.
        * CISupport/ews-build/steps_unittest.py:

2022-01-24  Sihui Liu  <sihui_liu@apple.com>

        Regression (r286936): SessionStorage data is not cleared when deleting website data by modification time
        https://bugs.webkit.org/show_bug.cgi?id=235542

        Reviewed by Chris Dumez.

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

2022-01-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Update Pasteboard::read to prioritize native representations over TIFF
        https://bugs.webkit.org/show_bug.cgi?id=190101
        rdar://44879244

        Reviewed by Ryosuke Niwa.

        Add a cross-platform API test to verify that when using the client-side attachments, pasted image data of
        varying formats (PDF, JPEG, PNG) are read in their original form. See WebCore/ChangeLog for more details. This
        test currently passes on iOS but fails on macOS, where both the PNG and JPEG images are transcoded and read as
        TIFF.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (testJPEGFileURL):
        (testJPEGData):
        (platformCopyPDF):
        (platformCopyJPEG):
        (TestWebKitAPI::TEST):

        Drive-by fix: also remove a JavaScript evaluation in a nearby test that could only result in an exception (and
        was probably accidentally left there while writing the test).

2022-01-24  Jonathan Bedard  <JonWBedard@gmail.com>

        [EWS] Use github.head.sha instead of revision
        https://bugs.webkit.org/show_bug.cgi?id=235521
        <rdar://problem/87970427>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/events.py:
        (Events.buildFinishedGitHub): Use github.head.sha instead of revision.
        (Events.stepStartedGitHub): Ditto.
        * CISupport/ews-build/master.cfg: Extract github.head.sha from hook.
        * CISupport/ews-build/steps.py:
        (GitHubMixin._is_pr_obsolete): Use github.head.sha instead of revision.
        (ConfigureBuild.add_pr_details): Ditto.
        (ValidateChange.validate_github): Ditto.
        * CISupport/ews-build/steps_unittest.py:

2022-01-24  Mark Lam  <mark.lam@apple.com>

        Add FixedVector::clear(), contains(), find(), and findMatching().
        https://bugs.webkit.org/show_bug.cgi?id=234855

        Reviewed by Yusuke Suzuki.

        Added new tests for FixedVector.  Also added the ClearContainsAndFind test to
        Vector since it is missing these tests.

        * TestWebKitAPI/Tests/WTF/FixedVector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):

2022-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Test accessibility/url-test.html fails with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235486

        Reviewed by Darin Adler.

        Ensure we don't remove the fragment id of URL when removing the base path.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::url):

2022-01-24  Aakash Jain  <aakash_jain@apple.com>

        Allow configuring multiple user credentials on ews
        https://bugs.webkit.org/show_bug.cgi?id=235301

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/master.cfg:

2022-01-24  Joseph Griego  <jgriego@igalia.com>

        [Shadow Realms] Use WebCore module loaders for shadow realm importValue
        https://bugs.webkit.org/show_bug.cgi?id=234155

        Reviewed by Darin Adler.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2022-01-23  Antoine Quint  <graouts@webkit.org>

        [Model] Add load and error events to distinguish resource load from model readiness
        https://bugs.webkit.org/show_bug.cgi?id=233706
        rdar://85922697

        Reviewed by Chris Dumez and Dean Jackson.

        Use the "load" event instead of the "ready" promise for this test which only requires monitoring
        the <model> resource being loaded.

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

2022-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Stop registering the tree when clients are connected with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235313

        Reviewed by Adrian Perez de Castro.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testDocumentLoadEvents): Now we don't get the initial event from previous document web because it happens
        before the first client is connected.

2022-01-21  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Support pull-requests in ValidateChange (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=234861
        <rdar://problem/87114299>

        Unreviewed follow-up fix.

        * CISupport/ews-build/steps.py:
        (GitHubMixin.fetch_data_from_url_with_authentication): Fix authentication call.

2022-01-20  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Avoid extra network request from buildbot to github
        https://bugs.webkit.org/show_bug.cgi?id=235417
        <rdar://problem/87846222>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/events.py:
        (GitHubEventHandlerNoEdits._get_commit_msg): Return empty string.

2022-01-21  Mike Gorse  <mgorse@suse.com>

        Build failure with g++ 12: std::exchange undefined
        https://bugs.webkit.org/show_bug.cgi?id=235445

        Reviewed by Michael Catanzaro.

        * ImageDiff/ImageDiff.cpp: Include <utility>

2022-01-19  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Use token when processing hook
        https://bugs.webkit.org/show_bug.cgi?id=235383
        <rdar://problem/87791577>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/master.cfg:

2022-01-20  Jonathan Bedard  <jbedard@apple.com>

        [EWS] ConfigureBuild should display PR information instead of ValidateChange
        https://bugs.webkit.org/show_bug.cgi?id=235377
        <rdar://problem/87853245>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (GitHub):
        (GitHub.commit_url): Convert a sha and repository to clickable commit url.
        (ConfigureBuild._addToLog): Added.
        (ConfigureBuild.add_pr_details): Print link to pull request, commit being
        tested and author of change.
        (ValidateChange.validate_github): Move links to ConfigureBuild.

2022-01-21  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Stop killing finished processes
        https://bugs.webkit.org/show_bug.cgi?id=235427
        <rdar://problem/87887233>

        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.Cache.populate): Check if process has finished before killing it.
        (Git.commits): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.Cache.populate): Check if process has finished before killing it.
        (Svn.commits): Ditto.

2022-01-21  Lauro Moura  <lmoura@igalia.com>

        [CMake] Cannot link libTestRunnerInjectedBundle.so in non unified build
        https://bugs.webkit.org/show_bug.cgi?id=226088

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/CMakeLists.txt: Pull WebCore as dependency for
        WTR/WTRInjectedBundle

2022-01-20  Lauro Moura  <lmoura@igalia.com>

        [GTK] API test /webkit/WebKitWebsiteData/cache is flaky
        https://bugs.webkit.org/show_bug.cgi?id=188113

        Unreviewed test gardening.

        It has been passing consistently for a long time. Sometimes failing
        consistently too, but when there are regressions.

        * TestWebKitAPI/glib/TestExpectations.json:

2022-01-20  Devin Rousso  <drousso@apple.com>

        Add SPI for passing around and getting details about `WebCore::CSSStyleDeclaration` in injected bundle code
        https://bugs.webkit.org/show_bug.cgi?id=235386
        <rdar://problem/87566737>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleCSSStyleDeclarationHandleProtocol.h: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/BundleCSSStyleDeclarationHandle.mm: Added.
        (-[BundleCSSStyleDeclarationHandleRemoteObject verifyStyle:]):
        (TEST.WebKit.WKWebProcessPlugInCSSStyleDeclarationHandle):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleCSSStyleDeclarationHandlePlugIn.mm: Added.
        (-[BundleCSSStyleDeclarationHandlePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleCSSStyleDeclarationHandlePlugIn webProcessPlugInBrowserContextController:didFinishDocumentLoadForFrame:]):

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WebKitCocoa/CookiePrivateBrowsing.mm:
        (-[CookiePrivateBrowsingDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST.WebKit.CookiePrivateBrowsing):
        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RestoreSessionStateWithoutNavigation.mm:
        (-[SessionStateDelegate webView:didFinishNavigation:]):
        (TestWebKitAPI::createSessionStateData):
        Drive-by: Unified sources fixes.

2022-01-20  Jonathan Bedard  <jbedard@apple.com>

        [ews] Load credentials from passwords.json in master.cfg (Follow-up)
        https://bugs.webkit.org/show_bug.cgi?id=235296

        Reviewed by Aakash Jain.

        * CISupport/ews-build/master.cfg:
        (load_password): Define default value.

2022-01-20  Elliott Williams  <emw@apple.com>

        [XCBuild] Build via the workspace with USE_WORKSPACE=YES
        https://bugs.webkit.org/show_bug.cgi?id=235385
        rdar://87489695

        Reviewed by Alexey Proskuryakov.

        * Makefile: Use workspace logic and set custom SCHEME name

2022-01-20  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Add CheckOutPullRequest step
        https://bugs.webkit.org/show_bug.cgi?id=235157
        <rdar://problem/87487209 >

        Reviewed by Aakash Jain.

        * CISupport/ews-build/factories.py:
        (Factory.__init__): Add CheckOutPullRequest step.
        (StyleFactory.__init__): Ditto.
        (WatchListFactory.__init__): Ditto.
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps): Add CheckOutPullRequest step.
        * CISupport/ews-build/steps.py:
        (ApplyPatch.doStepIf): Only run step if a patch is provided.
        (ApplyPatch.hideStepIf): Only display step if a patch was provided.
        (ApplyPatch.getResultSummary): Add SKIPPED description.
        (CheckOutPullRequest):
        (CheckOutPullRequest.__init__):
        (CheckOutPullRequest.doStepIf): Only run step if a pull request is provided.
        (CheckOutPullRequest.hideStepIf): Only display step if a pul request was provided.
        (CheckOutPullRequest.run): Configure new remote, fetch remote and checkout pull request
        branch from the newly configured remote.
        (CheckOutPullRequest.getResultSummary):
        * CISupport/ews-build/steps_unittest.py:

2022-01-19  Jonathan Bedard  <jbedard@apple.com>

        [webkitbugspy] Support automated comments
        https://bugs.webkit.org/show_bug.cgi?id=235371
        <rdar://problem/87783426>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitbugspy/setup.py: Bump version.
        * Scripts/libraries/webkitbugspy/webkitbugspy/__init__.py: Ditto.
        * Scripts/libraries/webkitbugspy/webkitbugspy/bugzilla.py:
        (Tracker.user): Add potential credentials to requests.
        (Tracker.credentials): Explicitly call credentials from webkitcorepy. 
        (Tracker._login_arguments): Create login query from credentials.
        (Tracker.me): Return user based on credentials.
        (Tracker.populate): Add potential credentials to requests.
        (Tracker.add_comment): Add comment to bugzilla issue.
        * Scripts/libraries/webkitbugspy/webkitbugspy/github.py:
        (Tracker.me): Return user based on credentials.
        (Tracker.add_comment): Add comment to GitHub issue.
        * Scripts/libraries/webkitbugspy/webkitbugspy/issue.py:
        (Issue.add_comment): Base class.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/base.py:
        (Base.add): We don't want to edit the original list of comments.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/bugzilla.py:
        (Bugzilla.__init__): Add optional Environment mock.
        (Bugzilla.__enter__): Enter Environment mock.
        (Bugzilla.__exit__): Exit Environment mock.
        (Bugzilla._user): Use jsonlib instead of json.
        (Bugzilla._user_for_credentials): Convert a credential string into
        a User object.
        (Bugzilla._issue): Use jsonlib instead of json.
        (Bugzilla._see_also): Ditto.
        (Bugzilla._comments): Ditto.
        (Bugzilla._post_comment): Update mock issue database with posted comment.
        (Bugzilla.request): Add credentials to each request, handle comment POST request.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/github.py:
        (GitHub.__init__): Add optional Environment mock.
        (GitHub.__enter__): Enter Environment mock.
        (GitHub.__exit__): Exit Environment mock.
        (GitHub._post_comment): Update mock issue database with posted comment.
        (GitHub.request): Handle comment POST request.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/radar.py:
        (AppleDirectoryQuery.user_entry_for_attribute_value): Map AppleConnect username
        to user.
        (RadarModel.CollectionProperty.__init__): Pass parent model in.
        (RadarModel.CollectionProperty.add): Add an element to the collection.
        (RadarModel.__init__): Pass self into CollectionProperty.
        (RadarModel.commit_changes): Update mock issue database with issue contents.
        (RadarClient.__init__): Accept authentication_strategy.
        (Radar.AuthenticationStrategySystemAccount.__init__): Save username.
        (Radar.AuthenticationStrategySystemAccount.username): Return username.
        (Radar.AuthenticationStrategySPNego.username): Assume username from environment.
        (Radar.DiagnosisEntry): Moved from RadarModel.DiagnosisEntry.
        (Radar.transform_user): Add AppleConnect email.
        (Radar.__init__): Pass authentication_strategy to RadarClient.
        (RadarModel.DiagnosisEntry): Moved to Radar.DiagnosisEntry.
        * Scripts/libraries/webkitbugspy/webkitbugspy/radar.py:
        (Tracker.user): Support queries by AppleConnect username.
        (Tracker.me): Use authentication to determine the logged in user.
        (Tracker.add_comment): Add comment to Radar.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/bugzilla_unittest.py:
        (TestBugzilla.test_reference_parse): Use add_comment.
        (TestBugzilla.test_me): Added.
        (TestBugzilla.test_add_comment): Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/github_unittest.py:
        (TestGitHub.test_watcher_parse): Use add_comment.
        (TestGitHub.test_reference_parse): Ditto.
        (TestGitHub.test_me): Added.
        (TestGitHub.test_add_comment): Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/radar_unittest.py:
        (TestRadar): Renamed from TestGitHub.
        (TestRadar.test_reference_parse): Use add_comment.
        (TestRadar.test_me): Added.
        (TestRadar.test_add_comment): Added.
        (TestGitHub): Renamed TestRadar.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tracker.py:
        (Tracker.me): Added.
        (Tracker.add_comment): Added.
        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py: Export mock environment, bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/environment.py: Added.
        (Environment): Mock os.environ and reset credential cache.

2022-01-20  Alex Christensen  <achristensen@webkit.org>

        [ iOS15 ] TestWebKitAPI.WebKit.ServerTrust and TestWebKitAPI.WebKit.FastServerTrust tests timing out
        https://bugs.webkit.org/show_bug.cgi?id=231320
        <rdar://80352256>

        Reviewed by Chris Dumez.

        SecTrustCopyCertificateChain returns a CFArrayRef of SecCertificateRef, not CFData.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (verifyCertificateAndPublicKey):
        (TestWebKitAPI::TEST):

2022-01-20  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Further unification in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=234343

        Reviewed by Jonathan Bedard.

        Extend defaultRunCfg to be able to omit a subset of the test
        modes and change defaultNoNoLLIntRun, defaultNoEagerRun and
        defaultNoSamplingProfilerRun to call into it.

        When defaultNoNoLLIntRun was added in https://commits.webkit.org/176404@main,
        it was a verbatim copy of defaultRun, except for the NoLLInt test
        modes. It hasn't diverged further, so after this patch, the set of
        tests executed remains the same.

        When defaultNoEagerRun was added in https://commits.webkit.org/150033@main,
        it was intended to be the same as defaultRun, minus the eager modes. It
        hasn't been kept in sync, so this change results in few more testing modes for
        the tests explicitly using defaultNoEagerRun.

        defaultNoSamplingProfilerRun was ignoring quick mode and was dropping
        runFTLNoCJITValidate when added in https://commits.webkit.org/171769@main.
        This patch enables more test modes for the handful of tests that use
        defaultNoSamplingProfilerRun.

        * Scripts/run-jsc-stress-tests:

2022-01-19  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] pull-request command should print the pr url
        https://bugs.webkit.org/show_bug.cgi?id=235358
        <rdar://problem/87793470>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Make created
        and modified commits in tests have more issue-friendly titles.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): Print out PullRequest URL.
        * Scripts/libraries/webkitscmpy/webkitscmpy/pull_request.py:
        (PullRequest.__init__): Constructor may define printable URL.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.PullRequest): Set printable URL.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.PullRequest): Set printable URL.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

2022-01-19  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Report basic statuses to GitHub
        https://bugs.webkit.org/show_bug.cgi?id=235210
        <rdar://problem/87576183>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/events.py:
        (Events.sendDataToEWS): Renamed from sendData.
        (Events.sendDataToGitHub): Post status for a commit to GitHub.
        (Events.extractProperty): We need to extract more than patchID from
        build properties.
        (Events.buildFinishedGitHub): Report the pass/failed state of a build to GitHub.
        (Events.buildFinished): Every time a build finishes, send data to GitHub.
        (Events.stepStartedGitHub): Update GitHub with the current step being run,
        and a failure status if that's already known.
        (Events.stepStarted): Every time a new step starts, send data to GitHub.
        (Events.stepFinished):
        (Events.sendData): Deleted.
        (Events.getPatchID): Deleted.
        * CISupport/ews-build/steps.py:
        (GitHub.commit_status_url): Construct a status url for a commit in a repository.

2022-01-10  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Improve setup usability
        https://bugs.webkit.org/show_bug.cgi?id=235051
        <rdar://problem/87367948>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitbugspy/setup.py: Bump version.
        * Scripts/libraries/webkitbugspy/webkitbugspy/__init__.py: Ditto.
        * Scripts/libraries/webkitbugspy/webkitbugspy/github.py:
        (Tracker.credentials): Retry credential prompt if the user provides an email.
        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
        (credentials): Use Terminal's choosing function.
        (delete_credentials): Delete credentials for a service.
        * Scripts/libraries/webkitcorepy/webkitcorepy/editor.py:
        (Editor.vi): Add.
        (Editor.programs): Add vi.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.git): SSH replacement applies to http and https remotes.
        (Setup.main): Include explicit conclusion messages.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.credentials): Retry credential prompt if the user provides an email.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py:

2022-01-19  Jon Lee  <jonlee554@gmail.com>

        Swap accelerated drawing flag between the two GPU Process iOS simulator bots
        https://bugs.webkit.org/show_bug.cgi?id=235366

        Reviewed by Alex Christensen.

        * CISupport/build-webkit-org/config.json: Turn the accelerated-drawing flag on the arm64 bot, since that
        represents the configuration closest to actual hardware. Turn it off on the Intel bot for now so that we
        can see differences in results with accelerated drawing off as we fix bugs in tests.

2022-01-19  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Improve pr push error message
        https://bugs.webkit.org/show_bug.cgi?id=235299
        <rdar://problem/87721181>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): If `git push` fails, provide the user with options
        for resolution.

2022-01-19  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r288147.
        <rdar://87776311>

        broke clean command line builds

        Reverted changeset:

        "Build WebKitSwift when building with make or build-webkit"
        https://bugs.webkit.org/show_bug.cgi?id=235093
        https://commits.webkit.org/r288147

2022-01-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r264352): Mail compose body field does not avoid the keyboard when scrolling after focus
        https://bugs.webkit.org/show_bug.cgi?id=235331
        rdar://79296770

        Reviewed by Tim Horton.

        Add support for a UIScriptController hook to override `firstResponderKeyboardAvoidanceEnabled` on WKScrollView.
        See LayoutTests for more details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setScrollViewKeyboardAvoidanceEnabled):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::setScrollViewKeyboardAvoidanceEnabled):

2022-01-18  Don Olmstead  <don.olmstead@sony.com>

        Replace all uses of HAVE_ACCESSIBILITY with ENABLE_ACCESSIBILITY
        https://bugs.webkit.org/show_bug.cgi?id=235335

        Reviewed by Ross Kirsling.

        Does a find/replace in Tools to move from HAVE_ACCESSIBILITY to ENABLE_ACCESSIBILITY. The
        same is done with HAVE(ACCESSIBILITY) with instances replaced by ENABLE(ACCESSIBILITY).

        * DumpRenderTree/AccessibilityController.cpp:
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        * MiniBrowser/wpe/main.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityNotificationHandler.cpp:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityNotificationHandler.h:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp:
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        * wpe/backends/PlatformWPE.cmake:
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::dispatchInputKeyboardEvent):
        * wpe/backends/ViewBackend.h:
        * wpe/backends/atk/ViewBackendAtk.cpp:
        * wpe/backends/atk/WebKitAccessibleApplication.cpp:
        * wpe/backends/atk/WebKitAccessibleApplication.h:

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Build WebKitSwift when building with make or build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=235093

        Reviewed by Alexey Proskuryakov.

        * Scripts/build-webkit:

2022-01-18  Alex Christensen  <achristensen@webkit.org>

        Use c++2a instead of gnu++2a for Cocoa builds
        https://bugs.webkit.org/show_bug.cgi?id=234936

        Reviewed by Sam Weinig.

        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/DerivedSources.make:

2022-01-18  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070
        <rdar://problem/87673540>

        Reviewed by Darin Adler and Chris Dumez.
        * TestWebKitAPI/Tests/WTF/UUID.cpp:
        Improve test coverage.

2022-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        ImageAnalysisQueue should analyze image elements that are loaded after the call to enqueueAllImages()
        https://bugs.webkit.org/show_bug.cgi?id=233266
        rdar://85731875

        Reviewed by Darin Adler.

        Add new API tests to check that image elements that are created and inserted after kicking off the image
        analysis queue are successfully added to the queue, and result in platform image analysis requests, and to also
        verify that the image analysis queue is reset after navigation.

        * TestWebKitAPI/Tests/WebKitCocoa/ImageAnalysisTests.mm:
        (TestWebKitAPI::processRequestWithResults):
        (TestWebKitAPI::makeImageAnalysisRequestSwizzler):
        (TestWebKitAPI::processRequestWithError):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::swizzledProcessRequestWithResults): Deleted.
        (TestWebKitAPI::swizzledProcessRequestWithError): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/multiple-images.html:

2022-01-17  Sihui Liu  <sihui_liu@apple.com>

        Add an API test to ensure indexedDB.databases() does not create files on disk
        https://bugs.webkit.org/show_bug.cgi?id=235289

        Reviewed by Darin Adler.

        Add test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:

2022-01-17  Youenn Fablet  <youenn@apple.com>

        Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=235070

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/UUID.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:

2022-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Stop using isolated tree for the ATSPI implementation
        https://bugs.webkit.org/show_bug.cgi?id=235229

        Reviewed by Adrian Perez de Castro.

        Update WTR to not use the ax thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::findAccessibleObjectById):
        (WTR::AccessibilityController::updateIsolatedTreeMode): Deleted.
        (WTR::AccessibilityController::axRunLoop): Deleted.
        (WTR::AccessibilityController::executeOnAXThreadAndWait): Deleted.
        (WTR::AccessibilityController::executeOnAXThread): Deleted.
        (WTR::AccessibilityController::executeOnMainThread): Deleted.
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::elementForRelationAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::currentStateValue const):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::isChecked const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::clearSelectedChildren const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isVisible const):
        (WTR::AccessibilityUIElement::isOffScreen const):
        (WTR::AccessibilityUIElement::isCollapsed const):
        (WTR::AccessibilityUIElement::isSingleLine const):
        (WTR::AccessibilityUIElement::isMultiLine const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::isIsolatedObject const): Deleted.

2022-01-16  Youenn Fablet  <youenn@apple.com>

        Enforce focus check for getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=235026

        Reviewed by Eric Carlson.

        Disable focus flag for testing to not require to focus the window.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::initializeMediaCaptureConfiguration):
        (TestWebKitAPI::doCaptureMuteTest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (TestWebKitAPI::initializeMediaCaptureConfiguration):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (TestWebKitAPI::initializeMediaCaptureConfiguration):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/AudioBufferSize.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::GetDisplayMediaTest::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (MediaCaptureDisabledTest::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (MediaCaptureSimulateFailedSandbox::SetUp):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewUserMediaEnumerateDevicesPermissionCheck):
        (testWebViewUserMediaPermissionRequests):
        (testWebViewAudioOnlyUserMediaPermissionRequests):

2022-01-15  Sam Weinig  <weinig@apple.com>

        CSS Gradients: interpolation mode should default to OKLab if any non-legacy color syntax colors are used in the stops
        https://bugs.webkit.org/show_bug.cgi?id=235071

        Reviewed by Darin Adler.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Add default for Windows WebKitLegacy testing which still requires it.

2022-01-15  David Kilzer  <ddkilzer@apple.com>

        Only use `diff --binary` switch on Windows
        <https://webkit.org/b/235268>
        <rdar://problem/87490487>

        Reviewed by Alexey Proskuryakov.

        * Scripts/VCSUtils.pm:
        (mergeChangeLogs):
        - Only pass `--binary` switch on Windows.

2022-01-15  Frédéric Wang  <fwang@igalia.com>

        Bug 234910 - jsc_fuz/wktr: crash with exotic settings
        https://bugs.webkit.org/show_bug.cgi?id=234910

        Reviewed by Michael Saboff.

        ASAN release build of WebKitTestRunner and DumpRenderTree may crash when loading the file
        with content "<script>'a'+Math.floor()+'a';</script>" when the ASAN option
        detect_stack_use_after_return=1 is set and when the JSC option slowPathAllocsBetweenGCs takes
        to specific values. This is because the 'TestRendered' string of WTR::sendTestRenderedEvent
        can be garbage collected. This patch fixes that issue by protecting that string. The fix has
        been verified for all slowPathAllocsBetweenGCs values from 1 to 100.

        * TestRunnerShared/ReftestFunctions.cpp:
        (WTR::sendTestRenderedEvent): Protect "TestRendered" JSString from garbage collection until
        the event is dispatched.

2022-01-15  Tyler Wilcock  <tyler_w@apple.com>

        AX: Fix disabled-controls-not-focusable.html in isolated tree mode by updating AXPropertyName::CanSetFocusAttribute when the disabled attribute changes
        https://bugs.webkit.org/show_bug.cgi?id=235246

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isAttributeSettable):
        Use new isAttributeSettable(NSString *attribute) helper function.
        (WTR::AccessibilityUIElement::isAttributeSettable const):
        Added. Dispatches call to accessibilityIsAttributeSettable on the AX thread.

        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        Use new isAttributeSettable to reduce repetition.

2022-01-14  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Only trigger builds for open and synchronize events
        https://bugs.webkit.org/show_bug.cgi?id=235249
        <rdar://problem/87615392>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/events.py:
        (Events.stopService):
        (GitHubEventHandlerNoEdits):
        (GitHubEventHandlerNoEdits.handle_pull_request):
        * CISupport/ews-build/master.cfg:

2022-01-14  Jonathan Bedard  <jbedard@apple.com>

        [EWS] ShowIdentifier should support pull-requests
        https://bugs.webkit.org/show_bug.cgi?id=235252
        <rdar://problem/87618736>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (ShowIdentifier.start): Extract revision from diverse set of properties.
        (ShowIdentifier.evaluateCommand):
        * CISupport/ews-build/steps_unittest.py:

2022-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Occasional crash under -[UITargetedPreview initWithView:parameters:target:] when focusing form controls
        https://bugs.webkit.org/show_bug.cgi?id=235248
        rdar://79220540

        Reviewed by Tim Horton and Aditya Keerthi.

        Add an API test that exercises the crash by forcing `-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:`
        to return nil via swizzling.

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

2022-01-07  Jonathan Bedard  <jbedard@apple.com>

        [webkitbugspy] Support radar as issue tracker type
        https://bugs.webkit.org/show_bug.cgi?id=234993
        <rdar://problem/87276178>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitbugspy/setup.py: Bump version.
        * Scripts/libraries/webkitbugspy/webkitbugspy/__init__.py: Ditto.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/__init__.py:
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/base.py:
        (Base): Radar mock should not inherit from mocks.Requests.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/bugzilla.py:
        (Bugzilla): Inherit from both Base and mocks.Requests.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/github.py:
        (GitHub): Inherit from both Base and mocks.Requests.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/radar.py: Added.
        (AppleDirectoryUserEntry): Mock AppleDirectoryUserEntry from radarclient.
        (AppleDirectoryQuery): Mock AppleDirectoryQuery from radarclient.
        (RadarModel): Mock various Model objects from radarclient.
        (RadarClient): Mock RadarClient from radarclient.
        (Radar): Mock radarclient library.
        (NoRadar): Mock unavailable radarclient library.
        * Scripts/libraries/webkitbugspy/webkitbugspy/radar.py: Added.
        (Tracker):
        (Tracker.radarclient): Optionally import radarclient.
        (Tracker.__init__):
        (Tracker.authentication): Determine which authentication strategy to use.
        (Tracker.from_string): Construct issue given Radar string
        (Tracker.user): Find user given name, DSID or email.
        (Tracker.issue): Construct issue given Radar ID.
        (Tracker.populate): Populate Issue arguments.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/radar_unittest.py: Added.
        (TestGitHub):
        (TestGitHub.test_no_radar):
        (TestGitHub.test_users):
        (TestGitHub.test_link):
        (TestGitHub.test_title):
        (TestGitHub.test_timestamp):
        (TestGitHub.test_creator):
        (TestGitHub.test_description):
        (TestGitHub.test_assignee):
        (TestGitHub.test_comments):
        (TestGitHub.test_watchers):
        (TestGitHub.test_references):
        (TestGitHub.test_reference_parse):
        * Scripts/libraries/webkitbugspy/webkitbugspy/tracker.py:
        (Tracker): Match single integer issue URLs.

2022-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Avoid redundant text analysis requests when long pressing inside an image that contains Live Text
        https://bugs.webkit.org/show_bug.cgi?id=235129
        rdar://87366539

        Reviewed by Tim Horton.

        Add a new API test and refactor some existing tests.

        * TestWebKitAPI/Tests/WebKitCocoa/ImageAnalysisTests.mm:
        (swizzledLocationInView):
        (-[TestWKWebView simulateImageAnalysisGesture:]):

        Add a helper method to simulate the image analysis gesture recognizer being activated on iOS, and wait for image
        analysis to finish.

        (TestWebKitAPI::swizzledProcessRequestWithResults):
        (TestWebKitAPI::TEST):

        Add a new API test to verify that we make at most one extra VKImageAnalyzer request when invoking a non-Live-
        Text part of the image a second time. Additionally, adjust an existing test (HandleImageAnalyzerErrors) to
        verify that we invoke VKImageAnalyzer a total of two times during the course of one image analysis gesture (once
        for Live Text recognition, and another for visual look up). This test currently passes with only a single check
        because it ends too early (i.e. after only one round trip to the web process and back).

        (TestWebKitAPI::swizzledLocationInView): Deleted.
        * TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.mm:
        (-[TestVKImageAnalysis hasResultsForAnalysisTypes:]):

        Implement this method stub to avoid an unrecognized selector crash.

2022-01-13  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Support pull-requests in ValidateChange
        https://bugs.webkit.org/show_bug.cgi?id=234861
        <rdar://problem/87114299>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/factories.py:
        (Factory.__init__): Rename ValidatePatch to ValidateChange.
        (StyleFactory.__init__): Ditto.
        (WatchListFactory.__init__): Ditto.
        (WindowsFactory.__init__): Ditto.
        (CommitQueueFactory.__init__): Ditto.
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps): Step name changed from validate-patch to validate-change.
        * CISupport/ews-build/steps.py:
        (GitHub.pr_url): Add missing /.
        (GitHub.api_url): Convert a repository URL to the API url for that repository.
        (GitHub.credentials): Access GitHub credentials from passwords.json.
        (GitHubMixin):
        (GitHubMixin.fetch_data_from_url_with_authentication):
        (GitHubMixin.get_pr_json):
        (GitHubMixin._is_pr_closed): Check if a pull-request is closed.
        (GitHubMixin._is_pr_obsolete): Check if a pull-request is obsolete.
        (ValidateChange): Renamed from ValidatePatch.
        (ValidateChange.getResultSummary):
        (ValidateChange.start): Invoke validate_bugzilla or validate_github.
        (ValidateChange.validate_bugzilla): Check a bugzilla patch.
        (ValidateChange.validate_github): Check a GitHub pull-request.
        (CompileWebKit.evaluateCommand): Rename ValidatePatch to ValidateChange.
        (RunJavaScriptCoreTests.evaluateCommand): Ditto.
        (RunWebKitTests.evaluateCommand): Ditto.
        (ReRunWebKitTests.evaluateCommand): Ditto.
        (RunWebKitTestsRedTree.evaluateCommand): Ditto.
        (RunWebKitTestsRepeatFailuresRedTree.evaluateCommand): Ditto.
        (RunAPITests.evaluateCommand): Ditto.
        (ReRunAPITests.evaluateCommand): Ditto.
        (ValidatePatch): Renamed to ValidateChange.
        * CISupport/ews-build/steps_unittest.py:

2022-01-14  J Pascoe  <j_pascoe@apple.com>

        Expose way to encode CTAP commands with only the hash of ClientDataJSON
        https://bugs.webkit.org/show_bug.cgi?id=235191
        <rdar://problem/87557846>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        Tests for new SPIs.

2022-01-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Crash in Document::updateStyleIfNeeded() when removing a node containing the drag caret
        https://bugs.webkit.org/show_bug.cgi?id=235184
        rdar://74845918

        Reviewed by Darin Adler.

        Add a test to exercise the crash using drag and drop in WebKit2, on both iOS and macOS.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/remove-node-on-drop.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        (TEST):

2022-01-13  Ross Kirsling  <ross.kirsling@sony.com>

        PlayStation MiniBrowser should accept a command-line URL argument
        https://bugs.webkit.org/show_bug.cgi?id=235193

        Reviewed by Don Olmstead.

        Windows MiniBrowser can be launched from the command line with a URL argument for the initial page to load;
        this patch allows PlayStation MiniBrowser to do similarly.

        * MiniBrowser/playstation/MainWindow.cpp:
        (MainWindow::MainWindow):
        * MiniBrowser/playstation/MainWindow.h:
        * MiniBrowser/playstation/main.cpp:
        (main):

2022-01-13  Patrick Angle  <pangle@apple.com>

        Web Inspector: Implement `frameURL` option for `devtools.inspectedWindow.eval` command
        https://bugs.webkit.org/show_bug.cgi?id=222568

        Reviewed by Devin Rousso.

        Add test coverage for evaluating script on an inspected page from an extension, including evaluating on an inner
        frame.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionEvaluateScriptOnPage.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionEvaluateScriptOnPageInnerFrame.html: Added.

2022-01-12  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Load contributors from stand-alone class
        https://bugs.webkit.org/show_bug.cgi?id=235161
        <rdar://problem/87491516>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (Contributors): Moved from ValidateCommiterAndReviewer.
        (ValidateCommiterAndReviewer.load_contributors_from_disk): Moved to Contributors.
        (ValidateCommiterAndReviewer.load_contributors_from_github): Ditto.
        (ValidateCommiterAndReviewer.load_contributors): Ditto.
        * CISupport/ews-build/steps_unittest.py:

2022-01-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r287944.

        Breaks Monterey build.

        Reverted changeset:

        "Build WebKitSwift when building with make or build-webkit"
        https://bugs.webkit.org/show_bug.cgi?id=235093
        https://commits.webkit.org/r287944

2022-01-12  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Fix freebie call without user gesture not being given
        https://bugs.webkit.org/show_bug.cgi?id=235078
        rdar://87327557

        Reviewed by Brent Fulgham.

        Updated API test to reflect user gesture freebie.

        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la-no-mock.html:

2022-01-12  Elliott Williams  <emw@apple.com>

        [Xcode] Configure each project for the legacy build system
        https://bugs.webkit.org/show_bug.cgi?id=235091

        Reviewed by Darin Adler.

        * ContentExtensionTester/ContentExtensionTester.xcodeproj/project.pbxproj:
        * EditingHistory/EditingHistory.xcodeproj/project.pbxproj:
        * FontWithFeatures/FontWithFeatures.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowserSwiftUI/MiniBrowserSwiftUI.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:

2022-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] NSFontPanel UI (font color, text decorations, font shadow) doesn't update on selection change
        https://bugs.webkit.org/show_bug.cgi?id=190120
        rdar://44897405

        Reviewed by Darin Adler.

        Augment and adjust some existing API tests. See WebKit/ChangeLog for more information.

        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:

        Augment an existing API test, FontAttributes.FontAttributesAfterChangingSelection, to additionally check shared
        NSFontManager state (foreground/background color, shadow color and radius, etc.) on macOS.

        (TestWebKitAPI::webViewForTestingFontAttributes):

        On macOS, additionally make the font panel visible so that we can test font panel state.

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

        Relax some constraints on FontManagerTests.ChangeFontWithPanel, so that it verifies that the platform font in
        the NSFontManager has all of the same attributes as the expectation, rather than being equal to the exact same
        font object.

        Adjust an existing API test, FontManagerTests.ChangeAttributesWithFontEffectsBox, to also vary the length of
        font shadows. Updating font attributes on the font manager exposed an issue with this API test where, because
        the font panel's attributes are never updated, the value of the shadow length slider remains at the default
        value of 0.125, producing a shadow length of 1.25px. However, now that the selection moves to non-shadowed text
        before moving to shadowed text again, we need to explicitly set the shadow length slider's value when testing
        the second shadowed text selection.

        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/NSFontPanelTesting.h:
        * TestWebKitAPI/mac/NSFontPanelTesting.mm:

        Add some additional testing helpers to query the state of controls in the font panel (e.g. font shadow sliders,
        foreground color well, and strike-through/underline popup menu state).

        (-[NSFontPanel underlineToolbarButton]):
        (-[NSFontPanel strikeThroughToolbarButton]):
        (-[NSFontPanel foregroundColorToolbarColorWell]):
        (-[NSFontPanel chooseUnderlineMenuItemWithTitle:]):
        (-[NSFontPanel chooseStrikeThroughMenuItemWithTitle:]):
        (-[NSFontPanel shadowLengthSlider]):
        (-[NSFontPanel hasShadow]):
        (-[NSFontPanel shadowLength]):
        (-[NSFontPanel setShadowLength:]):
        (-[NSFontPanel hasUnderline]):
        (-[NSFontPanel hasStrikeThrough]):
        (-[NSFontPanel foregroundColor]):

2022-01-12  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Accept GitHub hooks (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=235033
        <rdar://problem/87345269>

        Reviewed by Aakash Jain.

        Trigger a subset of queues for incoming GitHub pull-requests.

        * CISupport/ews-build/config.json: Enable webkitperl, webkitpy, services and style checks.
        * CISupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest):
        (ConfigDotJSONTest.test_multiple_scheduers_for_builder):
        * CISupport/ews-build/master.cfg: Accept GitHub hooks, specify variables
        to extract from incoming request.
        * CISupport/ews-build/steps.py:
        (GitHub):
        (GitHub.repository_urls): Concatenate all valid projects with the base URL.
        (GitHub.pr_url): Given a repository and pull-request number, return the URL
        for that pull-request.
        (ConfigureBuild.add_pr_details):
        (GitHubMixin): Deleted.

2022-01-12  Alex Christensen  <achristensen@webkit.org>

        Build WebKitSwift when building with make or build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=235093

        Reviewed by Alexey Proskuryakov.

        * Scripts/build-webkit:

2022-01-11  Geoffrey Garen  <ggaren@apple.com>

        WebPageProxy destruction should not launch a network process
        https://bugs.webkit.org/show_bug.cgi?id=235086

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST): Include WebView destruction in the test. Also do a little
        run loop spinning, to give the test a better chance of failing when
        async behavior does launch the Network process.

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Web process crashes in some sites having SVG images
        https://bugs.webkit.org/show_bug.cgi?id=234737

        Reviewed by Adrian Perez de Castro.

        Use AccessibilityAtspi::singleton().

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::AccessibilityController::axRunLoop):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityNotificationHandler.cpp:
        (WTR::AccessibilityNotificationHandler::AccessibilityNotificationHandler):
        (WTR::AccessibilityNotificationHandler::~AccessibilityNotificationHandler):

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] WTR: do not immediately process main thread events while waiting for ax thread task
        https://bugs.webkit.org/show_bug.cgi?id=234950

        Reviewed by Adrian Perez de Castro.

        We want to process the main thread events while waiting for ax thread to avoid blocking in case the ax thread
        needs to get any value from the main thread. This might have side effects causing things to happen earlier than
        expected. This patch only process main thread events after 125 milliseconds waiting for the ax thread, because
        that probably means the ax thread is waiting for the main thread. This made most of the test to pass in isolated
        tree mode with ATSPI.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::AccessibilityController::executeOnAXThreadAndWait):

2022-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Set active state when element is the selected option active or aria-current isn't false with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=235029

        Reviewed by Adrian Perez de Castro.

        Add a unit test to check acive state and implement AccessibilityUIElement::currentStateValue().

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testAccessibleState):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::domIdentifier const):
        (WTR::AccessibilityUIElement::currentStateValue const): Deleted.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::currentStateValue const):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::currentStateValue const):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::currentStateValue const):

2022-01-10  Dewei Zhu  <dewei_zhu@apple.com>

        Revert r287861.
        https://bugs.webkit.org/show_bug.cgi?id=235048
        <rdar://problem/87360213>

        Unreviewed revert.

        Temporarily revert r287861(245905@main) which breaks git-webkit script when
        invoked outside of a checkout directory.

        * Scripts/git-webkit:

2022-01-10  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Use cwd as default path
        https://bugs.webkit.org/show_bug.cgi?id=235048
        <rdar://problem/87360213>

        Reviewed by Aakash Jain.

        * Scripts/git-webkit: Use default path behavior.

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container observer should classify elements that are styled like clickable controls
        https://bugs.webkit.org/show_bug.cgi?id=235022

        Reviewed by Tim Horton.

        Add a new API test to exercise the change, and adjust the test harness to allow tests using the harness to
        additionally add an event listener on the modal container.

        * TestWebKitAPI/Tests/WebKit/modal-container-custom.html:
        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm:
        (TestWebKitAPI::TEST):

2022-01-10  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Retain old commits in pull-request (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=234453
        <rdar://problem/86654956>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitscmpy/webkitscmpy/program/land.py:
        (Land.main):

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

        [EWS] Always invoke CleanGitRepo before CheckOutSource
        https://bugs.webkit.org/show_bug.cgi?id=234882
        <rdar://problem/87145396>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/factories.py:
        (Factory.__init__): Add CleanGitRepo step.
        (StyleFactory.__init__): Ditto.
        (WatchListFactory.__init__): Ditto.
        (CommitQueueFactory.__init__): Specify default branch as 'master.'
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps):
        * CISupport/ews-build/steps.py:
        (CleanGitRepo.__init__): Accept default_branch and remote.
        (CleanGitRepo.run): Construct commands with awareness of branch and remote,
        check to see if a basename is specified.
        * CISupport/ews-build/steps_unittest.py:

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

        [git-webkit] Retain old commits in pull-request
        https://bugs.webkit.org/show_bug.cgi?id=234453
        <rdar://problem/86654956>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/land.py:
        (Land.main): Find all numbered branches for landing pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.parser): Add history option.
        (PullRequest.main): Add a numbered branch which persists through the life of the pull-request.

2022-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container observer fails detection when rendered text is inserted after the container
        https://bugs.webkit.org/show_bug.cgi?id=234752
        rdar://87200177

        Reviewed by Tim Horton.

        Add a new API test to exercise the change.

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

2022-01-10  Alex Christensen  <achristensen@webkit.org>

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::NonCopyable::NonCopyable):
        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/DerivedSources.make:
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:

2022-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] WTR: do not show html-id and toolkit attributes in test results
        https://bugs.webkit.org/show_bug.cgi?id=235024

        Reviewed by Adrian Perez de Castro.

        The html-id attribute is an internal one used by WTR to get the accessible of an element by its id. The toolkit
        attribute will make the results different for every platform. Also sort the attributes to ensure same results
        even if the order is different among platforms.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::attributesOfElement):

2022-01-09  Sam Weinig  <weinig@apple.com>

        Remove support for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=234999

        Reviewed by Darin Adler.

        Direct2D and FTW have not been building for over a year. It is
        time to remove them.

        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/PixelDumpSupportDirect2D.cpp: Removed.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.h: Removed.
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * PlatformFTW.cmake: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        * WebKitTestRunner/PlatformFTW.cmake: Removed.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/win/TestInvocationDirect2D.cpp: Removed.

2022-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Null pointer crash when calling into `-[WebView close]` in `-webView:didCommitLoadForFrame:`
        https://bugs.webkit.org/show_bug.cgi?id=234994
        rdar://86845512

        Reviewed by Chris Dumez and Geoff Garen.

        Add a new API test to exercise the fix.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWhileCommittingLoad.mm: Added.
        (-[CloseWhileCommittingLoadDelegate webView:didCommitLoadForFrame:]):
        (TestWebKitAPI::TEST):

2022-01-08  Tyler Wilcock  <tyler_w@apple.com>

        AX: AccessibilityObject::setFocused(true) should make the webpage focused, and make web content the first responder
        https://bugs.webkit.org/show_bug.cgi?id=234885

        Reviewed by Darin Adler.

        Add testing functionality necessary to check that web content is the
        first responder in the UI process.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::isWebContentFirstResponder const):
        Added.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::takeFocus):
        Implement this method.

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

2022-01-07  Tim Horton  <timothy_horton@apple.com>

        A/B comparison tests fail trying to look up fuzzy match tolerance
        https://bugs.webkit.org/show_bug.cgi?id=234974

        Reviewed by Aditya Keerthi.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_self_comparison_test):
        (SingleTestRunner._compare_output_with_reference):
        Disable fuzzy matching for A/B tests, because A) we don't really want it
        and B) it crashes run-webkit-tests because there is no actual reference file
        in which to find the tolerance value.

2022-01-07  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: add checker for unexpected fall through after ASSERT_NOT_REACHED() statements
        <https://webkit.org/b/234932>
        <rdar://87213520>

        Reviewed by Brent Fulgham.

        This checker only returns a confidence level of 4 (out of 5)
        since there are too many different code patterns to check them
        all perfectly using regular expressions.

        Run new checker tests like this:
        $ test-webkitpy webkitpy.style.checkers.cpp_unittest.CppStyleTest.test_debug_not_reached_assertion

        Run this checker against a file or folder like this:
        $ check-webkit-style --filter "-,+security/assertion_fallthrough" (file|folder)

        * Scripts/webkitpy/style/checkers/cpp.py:
        (SingleLineView.__init__):
        - Expose `trimmed_lines` as a property on SingleLineView.
        (_FunctionState.body_view): Add.
        - Add method to return a SingleLineView object containing the
          body of the function.
        (check_function_body): Add.
        - New function to check for fall through after
          ASSERT_NOT_REACHED() statements.
        (process_line):
        - Call check_function_body() to implement the new check.
        (CppChecker.categories):
        - Add 'security/assertion_fallthrough' to the list of known
          checkers.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.perform_function_body_check): Add.
        - Add method to call check_function_body() for testing.
        (CppStyleTest.test_debug_not_reached_assertion): Add.
        - Add tests for the new checker.

2022-01-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Teach modal container observer to make the body element scrollable if necessary
        https://bugs.webkit.org/show_bug.cgi?id=234708
        rdar://86960677

        Reviewed by Tim Horton.

        Adjust an existing API test to exercise the change.

        * TestWebKitAPI/Tests/WebKit/modal-container-with-overlay.html:
        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm:
        (TestWebKitAPI::TEST):

2022-01-07  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION: TestWebKitAPI.PublicSuffix.IsPublicSuffix is failing on some bots
        https://bugs.webkit.org/show_bug.cgi?id=234609

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        (TestWebKitAPI::TEST_F): Disable failing subtest.

2022-01-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287698.

        Broke an internal build

        Reverted changeset:

        "Start using C++20"
        https://bugs.webkit.org/show_bug.cgi?id=233963
        https://commits.webkit.org/r287698

2022-01-06  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Make API test initialize localstorage to ensure the database file is created
        https://bugs.webkit.org/show_bug.cgi?id=234891

        Reviewed by Michael Catanzaro.

        Changes needed after 245553@main/r287418 changed the localstorage
        behavior to avoid creating an empty database file when reading empty
        databases.

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

2022-01-04  Jonathan Bedard  <jbedard@apple.com>

        [EWS] Support pull-requests in ConfigureBuild
        https://bugs.webkit.org/show_bug.cgi?id=234848
        <rdar://problem/87094989>

        Reviewed by Dewei Zhu.

        * CISupport/ews-build/steps.py:
        (GitHubMixin.pr_url): Map pull-request number to URL.
        (GitHubMixin.get_pull_request_number): Check if the event triggering
        this was a pull_request, and the specified branch can be mapped to a
        pull-request.
        (ConfigureBuild.start): Add pull-request details.
        (ConfigureBuild.add_pr_details): Ditto.

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

        Start using C++20
        https://bugs.webkit.org/show_bug.cgi?id=233963

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::NonCopyable::NonCopyable):
        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/DerivedSources.make:
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:

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

        [webkitbugspy] Initial library commit
        https://bugs.webkit.org/show_bug.cgi?id=234400
        <rdar://problem/86585683>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitbugspy/MANIFEST.in: Added.
        * Scripts/libraries/webkitbugspy/README.md: Added.
        * Scripts/libraries/webkitbugspy/setup.py: Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/__init__.py: Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/bugzilla.py: Added.
        (Tracker): Bugzilla implementation of generic isssue tracker.
        * Scripts/libraries/webkitbugspy/webkitbugspy/github.py: Added.
        (Tracker): GitHub implementation of generic isssue tracker.
        * Scripts/libraries/webkitbugspy/webkitbugspy/issue.py: Added.
        (Issue): Dynamically fetched generic Issue object referencing parent Tracker.
        (Issue.Comment): Issue comment including author and timestamp.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/__init__.py: Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/base.py: Added.
        (Base): Base class for mocking http based issue trackers.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/bugzilla.py: Added.
        (Bugzilla): Partial mock of Bugzilla webserver.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/data.py: Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/mocks/github.py: Added.
        (GitHub): Partial mock of GitHub webserver.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/__init__.py: Added.
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/bugzilla_unittest.py: Added.
        (TestBugzilla):
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/github_unittest.py: Added.
        (TestGitHub):
        * Scripts/libraries/webkitbugspy/webkitbugspy/tests/user_unittest.py: Added.
        (TestUser):
        * Scripts/libraries/webkitbugspy/webkitbugspy/tracker.py: Added.
        (Tracker): Generic base of all issue trackers.
        * Scripts/libraries/webkitbugspy/webkitbugspy/user.py: Added.
        (User): User object tied to specific tracker.
        (User.Encoder): User JSON encoder.
        (User.Mapping): Mapping of user alias to User object.
        * Scripts/webkitpy/test/main.py:
        (main): Add webkitbugspy to subdirectories to be tested.

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

        Modal container observer should detect and suppress elements that prevent user interaction
        https://bugs.webkit.org/show_bug.cgi?id=234695

        Reviewed by Tim Horton.

        Add an API test (as well as a new test page) to exercise the fix.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/modal-container-with-overlay.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm:
        (TestWebKitAPI::TEST):

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

        Running layout tests sometimes throws an AssertionError in python2.7/multiprocessing
        https://bugs.webkit.org/show_bug.cgi?id=234487

        Reviewed by Simon Fraser.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (_BiDirectionalQueue.send): Log failed queue put.

2022-01-05  Youenn Fablet  <youenn@apple.com>

        Tighten ServiceWorkerRegistrationKey::fromDatabaseKey
        https://bugs.webkit.org/show_bug.cgi?id=234838

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ServiceWorkerRoutines.cpp: Added.

2022-01-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][DumpRenderTree] dumpHistoryItem leaks a SafeArray
        https://bugs.webkit.org/show_bug.cgi?id=234870

        Reviewed by Darin Adler.

        r23462 added the following code.
        > if (arrPtr && SUCCEEDED(::SafeArrayUnlock(arrPtr)))
        >     ::SafeArrayDestroy(arrPtr);
        However, the array wasn't locked. SafeArrayUnlock always failed.
        Thus, SafeArrayDestroy wasn't called.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem): Don't use SafeArrayUnlock. Fixed a typo 'arrary'.

2022-01-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r287374.

        Caused assertion failures on Monterey

        Reverted changeset:

        "Re-enable CustomDisplayName and DefaultDisplayName API tests
        on Monterey"
        https://bugs.webkit.org/show_bug.cgi?id=234613
        https://commits.webkit.org/r287374

2022-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use ICU instead of relying on hard-coded string equality checks in ModalContainerControlClassifier
        https://bugs.webkit.org/show_bug.cgi?id=234677

        Reviewed by Tim Horton.

        Augment the existing API test so that it additionally tests a symbol ("small roman numeral ten") that would not
        have been covered as one of the three hard-coded symbol strings in the earlier fix.

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

2022-01-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        ModalContainerObserver should search for text in subframes
        https://bugs.webkit.org/show_bug.cgi?id=234446
        rdar://86897770

        Reviewed by Tim Horton.

        Add an API test to exercise the change. See WebCore/ChangLog for more details.

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

2022-01-04  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Open closed pull-request when running pr (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=232765
        <rdar://problem/85084318>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): Log found pull-request instead of undefined candidates.

2022-01-04  Alex Christensen  <achristensen@webkit.org>

        Re-disable WKInspectorExtensionDelegate.ExtensionTabNavigatedCallbacks API test in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=232857

        I enabled it with an unrelated change and it is timing out, so re-disable it.

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

2022-01-04  Alex Christensen  <achristensen@webkit.org>

        Re-enable URLSchemeHandler.Leaks1 API test
        https://bugs.webkit.org/show_bug.cgi?id=234625

        Reviewed by Darin Adler.

        The test seems to not time out any more.  I think it has been fixed without re-enabling the test.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        (TEST):

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

        Add resolved/unresolved color type accessors to require users to be explicit about whether they will handle missing/none color components
        https://bugs.webkit.org/show_bug.cgi?id=234798

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
        (TestWebKitAPI::TEST):
        Replace uses of Color::toSRGBALossy<>() with Color::toColorTypeLossy<SRGBA<>>() and add
        calls to resolved() to access color components. Also update to new name of colorSpaceAndComponents(),
        colorSpaceAndResolvedColorComponents().

        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLCocoa.mm:
        (TestWebKitAPI::changeContextContents):
        Replace unnecessary use of colorSpaceAndComponents() with the more common toColorTypeLossy<WebCore::SRGBA<float>>().resolved().

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

        Undownloaded iCloud Photos are inserted as broken images when attachment element is enabled
        https://bugs.webkit.org/show_bug.cgi?id=234803
        rdar://82318259

        Reviewed by Darin Adler.

        Add a new API test to exercise the change. See WebCore/ChangeLog for more information.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (nonexistentFilePath):
        (TestWebKitAPI::TEST):

2022-01-03  Martin Robinson  <mrobinson@webkit.org>

        A manual test was imported with the WPT css-transforms test suite
        https://bugs.webkit.org/show_bug.cgi?id=234245

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test): Manual tests may also be reference tests and these
        should not be imported.
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        (test_analyze_manual_reference_wpt_test): Add a test for this situation.

2022-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Camera continuity is disabled in richly editable content
        https://bugs.webkit.org/show_bug.cgi?id=234773
        rdar://46323417

        Reviewed by Darin Adler.

        Add an API test to verify that the result of `-validRequestorForSendType:returnType:` isn't always `nil` in the
        case where there is no send type.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/NSResponderTests.mm: Added.
        (TestWebKitAPI::TEST):

2022-01-01  Jean-Yves Avenard  <jya@apple.com>

        make SharedBuffer::copy() return a contiguous SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=234622
        rdar://problem/86829527

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):

2022-01-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal containers are incorrectly detected in navigation elements and fixed document elements
        https://bugs.webkit.org/show_bug.cgi?id=234669
        rdar://87030613

        Reviewed by Darin Adler.

        Add several new API tests to exercise the changes.

        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm:
        (-[ModalContainerWebView initWithFrame:configuration:]):
        (-[ModalContainerWebView loadHTML:]):
        (-[ModalContainerWebView _webView:decidePolicyForModalContainer:decisionHandler:]):
        (TestWebKitAPI::TEST):

2022-01-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Simplify some FontAttributes API tests
        https://bugs.webkit.org/show_bug.cgi?id=234770

        Reviewed by Darin Adler.

        Simplify some of the logic around FontAttributes.FontAttributesAfterChangingSelection:
        1.  Instead of defining PlatformColor/PlatformFont, use CocoaColor/CocoaFont from WebCore.
        2.  Remove the `Nullity` flag in ShadowExpectation and ColorExpectation (and use `std::optional` instead to
            indicate that the shadow or font attribute should be null).
        3.  Change a several rvalue references to be plain values instead (when passinng expectation structs that only
            contain a handful of scalar values).

        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:
        (TestWebKitAPI::checkColor):
        (TestWebKitAPI::checkShadow):
        (TestWebKitAPI::checkFont):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::ColorExpectation::ColorExpectation): Deleted.
        (TestWebKitAPI::ShadowExpectation::ShadowExpectation): Deleted.

2021-12-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Include a few more tag names to search when running modal container detection
        https://bugs.webkit.org/show_bug.cgi?id=234652

        Reviewed by Darin Adler.

        Add an API test that's representative of the website where modal container observation failed (due to the search
        term being inside a `b` element).

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

2021-12-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Updating the file name of attachment-backed images should automatically set the `alt` attribute
        https://bugs.webkit.org/show_bug.cgi?id=234747
        rdar://85899879

        Reviewed by Darin Adler.

        Add a new API test to exercise this scenario -- i.e. copying an attachment-backed image in one web view, pasting
        it into another web view, and confirming that the pasted attachment preserves the _WKAttachment file name.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView ensureAttachmentForImageElement]):
        (TestWebKitAPI::TEST):

2021-12-30  Jean-Yves Avenard  <jya@apple.com>

        SharedBuffer::takeData() is still dangerous
        https://bugs.webkit.org/show_bug.cgi?id=234724
        rdar://problem/86957233

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):

2021-12-28  Sam Weinig  <weinig@apple.com>

        Enhance Vector::map to allow specifying what kind of Vector to return (e.g. inline capacity, overflow, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=234683

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        Add test for new Vector::map overload.

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

        [GTK][a11y] Stop setting manages-descendants on web process root object with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234663

        Reviewed by Adrian Perez de Castro.

        Update the unit test to remove the ATSPI ifdef.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testAccessibleBasicHierarchy):

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

        [GTK][a11y] WTR: handle xml-roles attributes to return the right role for landmark with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234638

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::xmlRoleValueString):
        (WTR::AccessibilityUIElement::role):

2021-12-26  Sam Weinig  <weinig@apple.com>

        Replace WebKit/CocoaColor.h with WebCore/ColorCocoa.h, not confusing at all
        https://bugs.webkit.org/show_bug.cgi?id=234693

        Reviewed by Simon Fraser.

        Use WebCore/ColorCocoa.h instead.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewThemeColor.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewUnderPageBackgroundColor.mm:

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

        [GTK][a11y] Expose live region attributes with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234637

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSupported):

2021-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Modal container control classifier fails on some neutral controls that contain multiplication symbols
        https://bugs.webkit.org/show_bug.cgi?id=234651

        Reviewed by Tim Horton.

        Add a new API test to exercise the change.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/modal-container-custom.html: Added.

        Add an alternate version of `modal-container.html` that allows each API test to present custom markup (as
        innerHTML) inside a fixed position modal container; use this test page in the new API test.

        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm:
        (-[ModalContainerWebView loadBundlePage:andDecidePolicy:]):
        (-[ModalContainerWebView evaluate:andDecidePolicy:]):
        (-[ModalContainerWebView loadBundlePage:]):
        (-[ModalContainerWebView _webView:decidePolicyForModalContainer:decisionHandler:]):
        (-[ModalContainerWebView lastModalContainerInfo]):

        Add a property to keep track of the most recent _WKModalContainerInfo we recieved via the modal container
        decision handler, and use this to test for which types of controls are available, in both the new test as well
        as existing tests.

        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TestModalContainerControls.mlmodelc/analytics/coremldata.bin:
        * TestWebKitAPI/Tests/WebKitCocoa/TestModalContainerControls.mlmodelc/coremldata.bin:

        Adjust the test CoreML model to classify "x" as the neutral control type.

2021-12-23  Sihui Liu  <sihui_liu@apple.com>

        Don't create LocalStorage database for read if it does not exist
        https://bugs.webkit.org/show_bug.cgi?id=234569

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:
        (-[LocalStorageUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2021-12-23  Matt Woodrow  <mattwoodrow@apple.com>

        Check allowed network hosts list when we schedule the load in the network process
        https://bugs.webkit.org/show_bug.cgi?id=234543
        <rdar://83501315>

        Reviewed by Alex Christensen.

        The check for WKWebViewConfiguration._allowedNetworkHost previously happened before the check to see if
        the given ResourceRequest would directly from an archive.
        This moves to the allowed network host list check to happen when we schedule the network request, and thus
        allows subresources cached within an archive to load, even if their original URL would be blocked.

        New test LoadWebArchive.DisallowedNetworkHosts added.

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

2021-12-23  Brady Eidson  <beidson@apple.com>

        Add WTF::UUID class which is natively a 128-bit integer
        https://bugs.webkit.org/show_bug.cgi?id=234571

        Reviewed by Alex Christensen.

        Notifications - which are UUID identified - are now addressed by a UUID object instead of a v4 UUID string.

        The way our C-API vends that UUID object is through a data object, so change WKTR to account for that.
        
        * WebKitTestRunner/DataFunctions.h: Copied from Source/WebKit/UIProcess/Notifications/WebNotificationManagerMessageHandler.h.
        (WTR::dataValue):
        (WTR::dataToUUID):
        (WTR::uuidToData):

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSimulateWebNotificationClick):
        (WTR::postPageMessage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::simulateWebNotificationClick):
        * WebKitTestRunner/TestController.h:

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

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::showWebNotification):
        (WTR::WebNotificationProvider::closeWebNotification):
        (WTR::WebNotificationProvider::removeNotificationManager):
        (WTR::WebNotificationProvider::simulateWebNotificationClick):
        (WTR::WebNotificationProvider::reset):
        * WebKitTestRunner/WebNotificationProvider.h:

2021-12-23  Sam Weinig  <weinig@apple.com>

        Encapsulate gradient color stops into a self contained class
        https://bugs.webkit.org/show_bug.cgi?id=234583

        Reviewed by Simon Fraser.

        * TestRunnerShared/PlatformGTK.cmake: Added.
        * TestRunnerShared/PlatformWPE.cmake: Added.
        Keep GTK and WPE ports building by propogating glib.h header to the test runnner. Change
        by Fujii Hironori.

2021-12-23  Patrick Griffis  <pgriffis@igalia.com>

        [Flatpak] Revert filesystem permission change in r287396
        https://bugs.webkit.org/show_bug.cgi?id=234612

        Reviewed by Michael Catanzaro.

        This causes a regression where some important contents of
        XDG_RUNTIME_DIR are overriden and causes issues like TLS failures.

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

2021-12-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add API testing support for modal container observation
        https://bugs.webkit.org/show_bug.cgi?id=234610

        Reviewed by Megan Gardner.

        Add support for new API tests that exercise the modal container observation policy in webpage preferences, as
        well as the UI delegate SPI method for deciding policies in detected modal containers.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/modal-container.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm:

        Non-unified-source build fix (see below).

        * TestWebKitAPI/Tests/WebKitCocoa/ModalContainerObservation.mm: Added.
        (-[NSBundle swizzled_URLForResource:withExtension:]):
        (TestWebKitAPI::ClassifierModelSwizzler::ClassifierModelSwizzler):
        (TestWebKitAPI::ClassifierModelSwizzler::~ClassifierModelSwizzler):
        (-[ModalContainerWebView initWithFrame:configuration:]):
        (-[ModalContainerWebView loadBundlePage:andDecidePolicy:]):
        (-[ModalContainerWebView _webView:decidePolicyForModalContainer:decisionHandler:]):
        (TestWebKitAPI::createModalContainerWebView):
        (TestWebKitAPI::TEST):

        Add API tests to exercise each of the 4 modal container policy decisions in a simple modal container. Two key
        pieces are needed in order to simulate the end-to-end flow for detecting and deciding policies for modal
        containers:

        1.      Add `internals.overrideModalContainerSearchTermForTesting()`, which allows script (through the
                `internals` testing plugin) to set ModalContainerObserver's search term.

        2.      Swizzle out `-[NSBundle URLForResource:withExtension:]` to return the file URL to TestWebKitAPI's
                `TestModalContainerControls.mlmodelc`, instead of the real CoreML model.

        * TestWebKitAPI/Tests/WebKitCocoa/TestModalContainerControls.mlmodelc/analytics/coremldata.bin: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/TestModalContainerControls.mlmodelc/coremldata.bin: Copied from Source/WebCore/page/ModalContainerObserver.h.
        * TestWebKitAPI/Tests/WebKitCocoa/TestModalContainerControls.mlmodelc/metadata.json: Added.

        Add a mock CoreML model that's used to simulate classifier results in WebKit::ModalContainerControlClassifier.
        See above for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewThemeColor.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewUnderPageBackgroundColor.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessTerminate.mm:

        More non-unified-source build fixes: hoist the definitions of `redColorComponents` and `blueColorComponents`
        into the `USE(CG)` part of TestCocoa.h, and then import TestCocoa.h in these files. This avoids build failures
        due to symbol redefinition when we add the new test file above.

        * TestWebKitAPI/cocoa/TestCocoa.h:

2021-12-23  Patrick Griffis  <pgriffis@igalia.com>

        [Flatpak] Fix a11y tests on some distros including Fedora
        https://bugs.webkit.org/show_bug.cgi?id=234612

        Reviewed by Michael Catanzaro.

        Using --no-a11y-bus fixes a11y working in Fedora, as well
        as just being the intended behavior it always had since we
        granted direct org.a11y.Bus access.

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

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

        [GTK][a11y] WTR: handle heading level as special case in intValue with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234603

        Reviewed by Adrian Perez de Castro.

        Tests expect intValue to return the heading level.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::intValue const):

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

        [GTK][a11y] WTR: handle missing cases in isAttributeSettable with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234601

        Reviewed by Adrian Perez de Castro.

        We need to handle aria-readonly attribute and the combobox and listbox elements.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::isAttributeSettable):

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

        [GTK][a11y] WTR: add missing bool and string attribute values with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234599

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::checkElementState):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):

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

        [GTK][a11y] WTR: ensure the root object is created before getting the focused element with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234597

        Reviewed by Adrian Perez de Castro.

        This is causing some tests to fail when executed in the same web process after another test.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::AccessibilityController::focusedElement):

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

        [GTK][a11y] WTR: add support for notifications when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234550

        Reviewed by Adrian Perez de Castro.

        Add AccessibilityNotificationHandler class to handle the ATSPI notifications.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::AccessibilityController::resetToConsistentState): Remove the global event listener if there's one active.
        (WTR::AccessibilityController::addNotificationListener): Create a global event listener.
        (WTR::AccessibilityController::removeNotificationListener): Remove the global event listener.
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityNotificationHandler.cpp: Added.
        (WTR::AccessibilityNotificationHandler::AccessibilityNotificationHandler):
        (WTR::AccessibilityNotificationHandler::~AccessibilityNotificationHandler):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityNotificationHandler.h: Added.
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::addNotificationListener): Create the element event listener.
        (WTR::AccessibilityUIElement::removeNotificationListener): Remove the element event listener.
        * WebKitTestRunner/PlatformGTK.cmake:

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

        Re-enable WebPushD.HandleInjectedPush API test
        https://bugs.webkit.org/show_bug.cgi?id=234627

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:

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

        Disable WKInspectorExtensionDelegate.ShowAndHideTabCallbacks API test
        webkit.org/b/231847

        It seems to be timing out a lot everywhere.

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

2021-12-22  Sihui Liu  <sihui_liu@apple.com>

        WebsiteDataStore::excludeDirectoryFromBackup should set attribute for existing directories
        https://bugs.webkit.org/show_bug.cgi?id=234404

        Reviewed by Youenn Fablet.

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

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

        Re-enable CustomDisplayName and DefaultDisplayName API tests on Monterey
        https://bugs.webkit.org/show_bug.cgi?id=234613

        Reviewed by Brady Eidson.

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

2021-12-22  Kate Cheney  <katherine_cheney@apple.com>

        PCM tests crashing with 'unlink' errors
        https://bugs.webkit.org/show_bug.cgi?id=234565
        <rdar://problem/86771766>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (cleanUp):
        Close the databases before removing the files.

        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::simulatePrivateClickMeasurementSessionRestart):
        (WTR::TestRunner::simulateResourceLoadStatisticsSessionRestart): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::simulatePrivateClickMeasurementSessionRestart):
        (WTR::TestController::simulateResourceLoadStatisticsSessionRestart): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Rename.

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

        Fix compiling with pickier compiler
        https://bugs.webkit.org/show_bug.cgi?id=234593

        Reviewed by Brady Eidson.

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

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

        Re-enable WebpagePreferences.WebsitePoliciesDuringRedirect API test on Monterey
        https://bugs.webkit.org/show_bug.cgi?id=234607

        Reviewed by Brady Eidson.

        This is the same as r285057 where we were responding with one byte short of the ranges requested,
        which used to give a playing event but since Monterey it doesn't.  The fix is to respond with all
        the bytes requested.  If the request is for bytes 0-1, we need to respond with two bytes, for example.

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

2021-12-22  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Set Web Authentication experimental feature flag as default true
        https://bugs.webkit.org/show_bug.cgi?id=234533
        <rdar://problem/86743595>

        Reviewed by Brent Fulgham.

        The Web Authentication feature has been shipping for a while. Default value for
        experimental feature flag should be true.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::WebCore::webAuthenticationExperimentalFeature): Deleted.

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

        Re-enable PrivateClickMeasurement.EphemeralWithAttributedBundleIdentifier API test
        https://bugs.webkit.org/show_bug.cgi?id=226548

        It was fixed with r287275

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

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

        Remove failing API test check added in r287342
        https://bugs.webkit.org/show_bug.cgi?id=234576

        I added a check that has failed on some bots.  No need to add it.

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

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        Fix some API tests after r287341
        https://bugs.webkit.org/show_bug.cgi?id=232857

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

2021-12-21  Simon Fraser  <simon.fraser@apple.com>

        Fuzzy pixel data need to be computed in terms of CSS pixels
        https://bugs.webkit.org/show_bug.cgi?id=232525

        Reviewed by Tim Horton.

        Pixel tolerance is computed in CSS pixels, so have ImageDiff divide the total number of
        differing pixels by the square of the scale factor (a single different pixel at 1x becomes 4
        different pixels at 2x).

        * ImageDiff/ImageDiff.cpp:
        (processImages):
        * ImageDiff/PlatformImage.cpp:
        (ImageDiff::PlatformImage::isCompatible const):
        (ImageDiff::PlatformImage::difference):

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        Re-enable ContextMenu API tests
        https://bugs.webkit.org/show_bug.cgi?id=234585

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h:
        * TestWebKitAPI/cocoa/TestContextMenuDriver.mm:
        (+[TestContextMenuDriver prefersCancelsTouchesInView]):
        (-[TestContextMenuDriver cancelsTouchesInView]):
        (-[TestContextMenuDriver setCancelsTouchesInView:]):

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        Enable Fullscreen.LayoutConstraints API test
        https://bugs.webkit.org/show_bug.cgi?id=234576

        Reviewed by Tim Horton.

        Added in bug 159900 and not compiled until bug 232768, now it's giving us some useful test coverage.

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

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        Fix some API tests after r287316
        https://bugs.webkit.org/show_bug.cgi?id=232857

        I saw the test behavior difference on my Monterey arm64 Mac and assumed it was because it was Monterey,
        but actually it's because it's an arm64 Mac.  Fix the test expectations.

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

2021-12-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (12/21/2021): [iOS] TestWebKitAPI.WebKit.AddAndRemoveDataDetectors is consistently failing
        https://bugs.webkit.org/show_bug.cgi?id=234574
        rdar://86782559

        Reviewed by Tim Horton.

        This test began failing today due to DataDetectors no longer recognizing "December 21, 2021" as a valid date in
        the future. Avoid this problem (at least, until the next century) by adjusting this date to be much later.

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/data-detectors.html:

2021-12-21  Brady Eidson  <beidson@apple.com>

        Make Notification identifiers be a UUID string instead of a uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=234534

        Reviewed by Alex Christensen.
        
        Where possible, use the String UUID identifier.
        This gets rid of lots of weird maps and cleans up flaky situations that could occasionally occur.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSimulateWebNotificationClick):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::simulateWebNotificationClick):

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::simulateWebNotificationClick):
        * WebKitTestRunner/TestController.h:

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

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::~WebNotificationProvider):
        (WTR::WebNotificationProvider::showWebNotification):
        (WTR::WebNotificationProvider::closeWebNotification):
        (WTR::WebNotificationProvider::addNotificationManager):
        (WTR::WebNotificationProvider::removeNotificationManager):
        (WTR::WebNotificationProvider::simulateWebNotificationClick):
        (WTR::WebNotificationProvider::reset):
        (WTR::removeGlobalIDFromIDMap): Deleted.
        * WebKitTestRunner/WebNotificationProvider.h:

2021-12-21  Simon Fraser  <simon.fraser@apple.com>

        Allow a way to specify a custom pixel tolerance in a ref test
        https://bugs.webkit.org/show_bug.cgi?id=149828

        Reviewed by Martin Robinson.

        When determining if a ref test failed, look for <meta name=fuzzy> in the test file,
        and if present, compare the actual pixel differences with the range allowed by the
        fuzzy metadata. This may cause a failing reference to match, or a passing reference
        (based on ImageDiff internal tolerance) to fail.

        In the case of mismatch ref tests, the fuzziness is taken into account to determine
        if the mismatch still occurs. If not, then the mismatch test fails.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._fuzzy_tolerance_for_reference):
        (SingleTestRunner._compare_output_with_reference):

2021-12-21  Alex Christensen  <achristensen@webkit.org>

        ASSERT NOT REACHED under WebKit::Daemon::ConnectionToMachService seen with TestWebKitAPI.WebPushD.BasicCommunication and PermissionManagement
        https://bugs.webkit.org/show_bug.cgi?id=232857

        Reviewed by Darin Adler.

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

2021-12-21  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Authenticator is not falling back to clientPIN after internal verification fails and is blocked.
        https://bugs.webkit.org/show_bug.cgi?id=232501
        <rdar://problem/84913636>

        Reviewed by Darin Adler.

        Whenever internal uv gets blocked, the user agent should fall back to using a pin for user verification. This
        adds an API test to verify this behavior.

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

2021-12-21  Sam Weinig  <weinig@apple.com>

        Add support for premultiplied alpha interpolated gradients and defaulted off option to use them for CSS Gradients
        https://bugs.webkit.org/show_bug.cgi?id=234492

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Add default for Windows WebKitLegacy testing which still requires it.

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

        [GTK][a11y] Implement list markers when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234485

        Reviewed by Adrian Perez de Castro.

        Add test cases to check list item markers.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testAccessibleListMarkers):
        (testTextListMarkers):
        (testHyperlinkBasic):
        (testHypertextBasic):
        (beforeAll):

2021-12-20  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: [ iOS ] 5 TestWebKitAPI.WebpagePreferences.* api tests are flaky timing out
        https://bugs.webkit.org/show_bug.cgi?id=229094

        Reviewed by Darin Adler.

        The tests don't seem to time out any more.  Let's try re-enabling them.

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

2021-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MSVC reports "DumpRenderTree.cpp(633): error C2362: initialization of 'length' is skipped by 'goto exit'" with /std:c++20
        https://bugs.webkit.org/show_bug.cgi?id=234503

        Reviewed by Don Olmstead.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem): Removed goto statements. Use std::unique_ptr for SAFEARRAY.

2021-12-20  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to enable log channels in WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=234525

        Reviewed by Wenson Hsieh.

        Support a "--WebCoreLogging" argument to DumpRenderTree to enable the WebCore
        log channels.

        Support "--WebCoreLogging" and "--WebKitLogging" arguments to WebKitTestRunner to enable the WebCore
        and WebKit log channels.

        DRT requires the double dash format, so I chose to have both use double dashes
        for consistency (although this is inconsistent with the single dash format used
        by AppKit and UIKit apps).

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (prepareConsistentTestingEnvironment):
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionLogChannels):
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformInitialize):

2021-12-20  Dewei Zhu  <dewei_zhu@apple.com>

        'run-benchmark' should launch browsers in a relative clean state.
        https://bugs.webkit.org/show_bug.cgi?id=234107

        Reviewed by Stephanie Lewis.

        Add code to ensure Chrome and Firefox launches in a relative clean state.
        Refactor browser drivers for macOS Chrome and Firefox to share more code.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        Added '--no-first-run', '--no-default-browser-check', '--disable-extensions' flags.
        (OSXChromeDriverBase):
        (OSXChromeDriverBase.launch_url):
        (OSXChromeDriverBase.launch_driver):
        (OSXChromeDriverBase._create_chrome_options):
        (OSXChromeDriverBase._window_size_arg):
        (OSXChromeDriverBase._set_chrome_binary_location):
        (OSXChromeDriver):
        (OSXChromeDriver._set_chrome_binary_location):
        (OSXChromeCanaryDriver._set_chrome_binary_location):
        (OSXChromeDriver.launch_url): Deleted.
        (OSXChromeDriver.launch_driver): Deleted.
        (OSXChromeCanaryDriver.launch_url): Deleted.
        (OSXChromeCanaryDriver.launch_driver): Deleted.
        (create_args): Deleted.
        (create_chrome_options): Deleted.
        (create_window_size_arg): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        Added code to use profiles to suppress default browser check and privacy notice tab.
        (OSXFirefoxDriverBase):
        (OSXFirefoxDriverBase.__init__):
        (OSXFirefoxDriverBase.prepare_env):
        (OSXFirefoxDriverBase.restore_env):
        (OSXFirefoxDriverBase.launch_url):
        (OSXFirefoxDriverBase.launch_driver):
        (OSXFirefoxDriverBase._setup_temporary_profile_directory):
        (OSXFirefoxDriverBase._teardown_temporary_profile_directory):
        (OSXFirefoxDriverBase._set_firefox_binary_location):
        (OSXFirefoxDriver):
        (OSXFirefoxDriver._set_firefox_binary_location):
        (OSXFirefoxNightlyDriver):
        (OSXFirefoxNightlyDriver._set_firefox_binary_location):
        (OSXFirefoxDriver.launch_url): Deleted.
        (OSXFirefoxDriver.launch_driver): Deleted.
        (OSXFirefoxNightlyDriver.launch_url): Deleted.
        (OSXFirefoxNightlyDriver.launch_driver): Deleted.
        (create_args): Deleted.
        * Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js: Added user preferences
        so that Firefox can be launched without checking default browser and privacy notice.

2021-12-20  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Add option to change requestWebAuthenticationNoGesture delegate for api tests.
        https://bugs.webkit.org/show_bug.cgi?id=234444
        rdar://86644642

        Reviewed by Brent Fulgham.

        These test a lack of user gesture in local authenticator. Recently we made a change to
        change user gesture behavior, causing these tests to call out to an agent that cannot be called
        from TWAPI. To restore test behavior, we add an option to change the return value of the
        requestWebAuthenticationNoGesture delegate in tests.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate _webView:requestWebAuthenticationNoGestureForOrigin:completionHandler:]):
        (TestWebKitAPI::WebCore::reset):
        (TestWebKitAPI::TEST):

2021-12-20  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Only run WebAuthn test process on platform it is used
        https://bugs.webkit.org/show_bug.cgi?id=234445
        rdar://86646638

        Reviewed by Brent Fulgham.

        Add PLATFORM(IOS) macro around webauthn process test.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:

2021-12-20  Alex Christensen  <achristensen@webkit.org>

        Prevent test functionality in AdAttributionDaemon when not running tests
        https://bugs.webkit.org/show_bug.cgi?id=231258

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements:
        * WebKitTestRunner/Configurations/WebKitTestRunner.entitlements:

2021-12-20  Alex Christensen  <achristensen@webkit.org>

        [ Monterey ] TestWebKitAPI.WebSocket.PageWithAttributedBundleIdentifierDestroyed (API-test) is a constant timeout
        https://bugs.webkit.org/show_bug.cgi?id=233224

        Reviewed by Darin Adler.

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

2021-12-20  Tim Nguyen  <ntim@apple.com>

        Stop assuming WPT is a reftest based on existence of -ref.html file
        https://bugs.webkit.org/show_bug.cgi?id=234510

        Reviewed by Sam Sneddon & Darin Adler.

        Only the presence of <link rel="match">/<link rel="mismatch"> indicates a test is a reftest. The script
        should not assume that the existence of a similarly named file with a `-ref.html` suffix means that the
        original test file is reftest.

        Here's how upstream WPT detects reftests:
        https://github.com/web-platform-tests/wpt/blob/22f29564bb82b407aeaf6507c8efffdbd51b9974/tools/manifest/sourcefile.py#L1065

        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test):
        (TestParser.fuzzy_metadata):
        (TestParser.is_reference_filename):
        (TestParser.potential_ref_filename): Deleted.
        (TestParser.is_wpt_reftest): Deleted.
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2021-12-20  Lauro Moura  <lmoura@igalia.com>

        [webkitcorepy] Require cryptography while on Linux with Py3
        https://bugs.webkit.org/show_bug.cgi?id=234499

        Reviewed by Philippe Normand.

        cryptography is required by secretstorage.util. When not installed,
        the import fails and the keyring backend initialization fails silently,
        just removing the SecretService keyring backend from the list of
        viable backends. This can happen when running the scripts from a fresh
        virtualenv, for example.

        * Scripts/libraries/webkitcorepy/setup.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:

2021-12-20  Tim Nguyen  <ntim@apple.com>

        Fix Tools/Scripts/webkitpy/w3c/test_importer.py
        https://bugs.webkit.org/show_bug.cgi?id=234480

        Reviewed by Manuel Rego Casasnovas.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests):

2021-12-20  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r286936) [GLIB] WebsiteData configuration API test is failing with non-created localstorage dir
        https://bugs.webkit.org/show_bug.cgi?id=234497

        Reviewed by Adrian Perez de Castro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataConfiguration): Ensure localStorage is created before
        trying to query it.

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

        [Monterey] TestWebKitAPI.PrivateClickMeasurement.Daemon* tests timing out: Failed to connect to mach service org.webkit.pcmtestdaemon.service
        https://bugs.webkit.org/show_bug.cgi?id=232890

        Reviewed by Brady Eidson.

        Using OSLaunchdJob on macOS works, but it requires a private entitlement which the public SDK can't sign with.
        Just continue using launchctl instead.  Also, do the NSDictionary -> xpc dictionary conversion at runtime to reduce duplicate code.

        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::testDaemonPList):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::testWebPushDaemonPList):
        (TestWebKitAPI::setUpTestWebPushD):
        * TestWebKitAPI/cocoa/DaemonTestUtilities.h:
        * TestWebKitAPI/cocoa/DaemonTestUtilities.mm:
        (TestWebKitAPI::convertArrayToXPC):
        (TestWebKitAPI::convertDictionaryToXPC):
        (TestWebKitAPI::registerPlistWithLaunchD):

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Read the default value of the ScrollAnimatorEnabled setting from NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=234456

        Reviewed by Tim Horton.

        It's impossible for a test to run with an animated keyboard scroll because platformAllowsScrollAnimation(),
        which reads from NSUserDefaults, always trumps the Setting.

        Fix by initializing the setting from NSUserDefaults and removing the platformAllowsScrollAnimation()
        check. This allows for a WebKitTestRunner test override the setting.

        Unfortunately in WebKitLegacy AppKit code consults the @"NSScrollAnimationEnabled" key, so
        DumpRenderTree has to continue to initialize this NSUserDefault to @NO and tests that
        try to change the Setting will fail.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

2021-12-17  Simon Fraser  <simon.fraser@apple.com>

        Rename MockScrollAnimatorEnabled to MockScrollbarsControllerEnabled
        https://bugs.webkit.org/show_bug.cgi?id=234452

        Reviewed by Anders Carlsson.

        The class formerly known as MockScrollAnimatorEnabled is used for logging when scrollbars
        get events, so fix the name. It's a subclass of ScrollbarsController.

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

2021-12-18  Chris Dumez  <cdumez@apple.com>

        Drop ServiceWorkerTCPServer and use HTTPServer instead
        https://bugs.webkit.org/show_bug.cgi?id=234443
        <rdar://86646140>

        Reviewed by Alex Christensen.

        Drop ServiceWorkerTCPServer and use HTTPServer instead. ServiceWorkerTCPServer relies on TCPServer which is
        known to cause flakiness and sometimes hang in its destruction.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h: Removed.
        (): Deleted.
        (ServiceWorkerTCPServer::ServiceWorkerTCPServer): Deleted.
        (ServiceWorkerTCPServer::request): Deleted.
        (ServiceWorkerTCPServer::requestWithLocalhost): Deleted.
        (ServiceWorkerTCPServer::requestWithFragment): Deleted.
        (ServiceWorkerTCPServer::userAgentsChecked const): Deleted.
        (ServiceWorkerTCPServer::respondToRequests): Deleted.
        (ServiceWorkerTCPServer::requestWithURLString): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::scheme const):
        (TestWebKitAPI::HTTPServer::request const):
        (TestWebKitAPI::HTTPServer::requestWithLocalhost const):

2021-12-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce TrailingArray
        https://bugs.webkit.org/show_bug.cgi?id=234201

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/EmbeddedFixedVector.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::DestructorObserver::DestructorObserver):
        (TestWebKitAPI::DestructorObserver::~DestructorObserver):
        (TestWebKitAPI::DestructorObserver::operator=):
        * TestWebKitAPI/Tests/WTF/FixedVector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefCountedFixedVector.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::DestructorObserver::DestructorObserver):
        (TestWebKitAPI::DestructorObserver::~DestructorObserver):
        (TestWebKitAPI::DestructorObserver::operator=):

2021-12-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix runscript's standalone ability to run
        https://bugs.webkit.org/show_bug.cgi?id=234166

        Reviewed by Mark Lam.

        r286109 broke the ability to run `runscript` as a standalone script to test JSC stress test package on the device.
        This patch reverts the ability back.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh:

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

        Remove API::Object::Type::BundlePageGroup
        https://bugs.webkit.org/show_bug.cgi?id=225611

        Reviewed by Brady Eidson.

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

2021-12-17  Alexey Shvayka  <ashvayka@apple.com>

        Tools/Scripts/run-perf-tests is failing on Speedometer2
        https://bugs.webkit.org/show_bug.cgi?id=234426

        Reviewed by Carlos Alberto Lopez Perez.

        r282357 added a debug console warning regarding 'dppx' units, which is being emitted
        for TodoMVC's stylesheets, thus failing metrics parsing in PerfTest. To fix the execution
        of Speedometer2 suite, this particular warning has now been added to the ignore list.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):

2021-12-17  Alexey Shvayka  <ashvayka@apple.com>

        Fix deprecation warning in Tools/Scripts/run-jsc-benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=234425

        Reviewed by Alex Christensen.

        Ruby 2.4 unified Fixnum and Bignum classes into Integer [1], deprecating them as
        implementation details. To get rid of the deprecation console message, this patch replaces
        Fixnum type checks with Integer, which is unobservable and backwards-compatible.

        [1] https://bugs.ruby-lang.org/issues/12005

        * Scripts/run-jsc-benchmarks:

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

        [reporelaypy] Accept pull-request hooks
        https://bugs.webkit.org/show_bug.cgi?id=234406
        <rdar://problem/86598451>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Bump version.
        * Scripts/libraries/reporelaypy/reporelaypy/hooks.py:
        (HookProcessor):
        (HookProcessor.is_valid): Check 'pull_request' hook format.
        * Scripts/libraries/reporelaypy/reporelaypy/tests/hooks_unittest.py:
        (HooksUnittest.test_pull_request):
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

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

        [GTK][WPE] Don't ignore stderr when calling flatpak in update-webkitgtk-libs
        https://bugs.webkit.org/show_bug.cgi?id=234407

        Reviewed by Michael Catanzaro.

        Print stderr when calling flatpak, is useful to debug problems when it fails.

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

2021-12-16  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r287056.
        <rdar://86519800>

        Caused performance regression...again

        Reverted changeset:

        "Remove properties set by NSURLProtocol on NSURLRequest before
        serializing"
        https://bugs.webkit.org/show_bug.cgi?id=232332
        https://commits.webkit.org/r287056

2021-12-15  Darin Adler  <darin@apple.com>

        Many call sites use makeNeverDestroyed, but could instead take advantage of the NeverDestroyed deduction guide
        https://bugs.webkit.org/show_bug.cgi?id=234350

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (fontAllowList): Use deduction.

        * TestWebKitAPI/Tests/WTF/NeverDestroyed.cpp:
        (TestWebKitAPI::TEST): Remove tests of makeNeverDestroyed.
        (TestWebKitAPI::list): Use deduction.

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

        [GTK] Add gtk-wk2 to EWS bubbles
        https://bugs.webkit.org/show_bug.cgi?id=209104

        Reviewed by Jonathan Bedard.

        A new queue was added in 286405 which runs GTK LayoutTests.
        This patch adds the queue to the EWS bubbles.

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

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

        [GTK][WPE] Apply optimizations to speed up the layout-test EWS and add a few more workers to the build ones.
        https://bugs.webkit.org/show_bug.cgi?id=234378

        Reviewed by Jonathan Bedard.

        This applies two optimizations to speed up the testing on the layout-tests EWS added in r286405

        1. Pass --fully-parallel to the retry steps. This makes the tool to utilize all the available workers for running
        the tests instead of running them in serial. That makes the time needed to complete the retry steps to be considerable less,
        In this example https://ews-build.webkit.org/#/builders/35/builds/1757 it reduces the timing from 43 mins to 12 mins.

        2. When the first run fails without giving a list of failures and we have not reached the maximum retry count
        we are going to end retring the whole testing anyway, so there is no point in running the tests without patch
        in that case, we can skip doing that to save time. See: https://ews-build.webkit.org/#/builders/35/builds/1763

        On top of that this patch adds an extra worker to the EWS build queues of GTK and WPE
        because I detected that this queues sometimes are not fast enough.

        * CISupport/ews-build/config.json:
        * CISupport/ews-build/steps.py:
        (BugzillaMixin.send_email_for_infrastructure_issue):
        (RunWebKitTestsRedTree.evaluateCommand):
        (RunWebKitTestsRepeatFailuresRedTree.setLayoutTestCommand):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree.setLayoutTestCommand):
        * CISupport/ews-build/steps_unittest.py:

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

        TestWebKitAPI.PrivateClickMeasurement.MigrateWithDestinationToken is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=234335
        <rdar://problem/86505218>

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (cleanUp):
            Made the function sleep-wait until the file is indeed deleted.

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

        [reporelaypy] Forward branches to alternate remote
        https://bugs.webkit.org/show_bug.cgi?id=234347
        <rdar://problem/86526293>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Bump version.
        * Scripts/libraries/reporelaypy/reporelaypy/checkout.py:
        (Checkout.Encoder.default): Add remotes.
        (Checkout.clone): After cloning a repository, add required remotes.
        (Checkout.add_remotes): Track remotes in repository.
        (Checkout.__init__): Allow caller to specify set of remotes to be tracked.
        (Checkout.push_update): Push update for specified remote.
        (Checkout.update_for): Return 'True' and 'False.'
        (Checkout.update_all): If a branch is being updated, we should forward that
        update to any tracked remotes.
        * Scripts/libraries/reporelaypy/reporelaypy/hooks.py:
        (HookProcessor.process_worker_hook): After updating a branch, forward that
        update to any tracked remotes.
        * Scripts/libraries/reporelaypy/reporelaypy/tests/checkout_unittest.py:
        (CheckoutUnittest.test_constructor_no_sentinal): Capture debug logging.
        * Scripts/libraries/reporelaypy/reporelaypy/tests/checkoutroute_unittest.py:
        (CheckoutRouteUnittest.test_landing): Capture debug logging.
        (CheckoutRouteUnittest.test_invoked_redirect): Ditto.
        (CheckoutRouteUnittest.test_trac): Ditto.
        * Scripts/libraries/reporelaypy/reporelaypy/tests/hooks_unittest.py:
        (HooksUnittest.test_process): Test for any error logging.
        (HooksUnittest.test_process_branch): Ditto.
        * Scripts/libraries/reporelaypy/run: Allow caller to specify remote to be tracked.
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

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

        Split ATK specific code in WPEViewBackends
        https://bugs.webkit.org/show_bug.cgi?id=234310

        Reviewed by Adrian Perez de Castro.

        Move ATK specific code in WPEViewBackends into the atk directory. This splits
        ViewBackend's implementation into two files with ATK specific code migrated to
        atk/ViewBackendAtk.cpp. The code in WebKitAccessibleApplication is all ATK specific so
        its completely moved into the atk directory.

        * wpe/backends/CMakeLists.txt:
        * wpe/backends/PlatformWPE.cmake:
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::initializeAccessibility):
        (WPEToolingBackends::ViewBackend::updateAccessibilityState):
        (WPEToolingBackends::addKeyEventListener): Deleted.
        (WPEToolingBackends::removeKeyEventListener): Deleted.
        (WPEToolingBackends::notifyAccessibilityKeyEventListeners): Deleted.
        (WPEToolingBackends::ViewBackend::setAccessibleChild): Deleted.
        * wpe/backends/ViewBackend.h:
        * wpe/backends/atk/ViewBackendAtk.cpp: Copied from Tools/wpe/backends/ViewBackend.cpp.
        (WPEToolingBackends::addKeyEventListener):
        (WPEToolingBackends::removeKeyEventListener):
        (WPEToolingBackends::ViewBackend::notifyAccessibilityKeyEventListeners):
        (WPEToolingBackends::ViewBackend::initializeAccessibility):
        (WPEToolingBackends::ViewBackend::updateAccessibilityState):
        (WPEToolingBackends::ViewBackend::setAccessibleChild):
        * wpe/backends/atk/WebKitAccessibleApplication.cpp: Renamed from Tools/wpe/backends/WebKitAccessibleApplication.cpp.
        * wpe/backends/atk/WebKitAccessibleApplication.h: Renamed from Tools/wpe/backends/WebKitAccessibleApplication.h.

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

        Avoid unnecessary allocation and UTF-8 conversion when calling DFABytecodeInterpreter::interpret
        https://bugs.webkit.org/show_bug.cgi?id=234351

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):

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

        [GTK][a11y] Add support for loading events when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=234344

        Reviewed by Joanmarie Diggs.

        Add a test case to check loading events.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::shouldProcessEvent): Helper to make the filters conditions easier to read.
        (AccessibilityTest::startEventMonitor): Make it possible to use the monitor without filtering events.
        (testDocumentLoadEvents):
        (beforeAll):

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

        [GTK][a11y] Register the wrappers tree when there's an event listener registered
        https://bugs.webkit.org/show_bug.cgi?id=234338

        Reviewed by Joanmarie Diggs.

        Add unit test to check the tree is created when there's a listener connected.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::findTestApplication): Iterate the applications list backwards since the test program is
        usually the last one in the list.
        (AccessibilityTest::accessibleApplicationIsTestProgram): Helper to check if a given accessible belongs to the
        test program.
        (AccessibilityTest::startEventMonitor): Support for listening to events associated to the test program, not to a
        particular accessible.
        (testAccessibleEventListener):
        (beforeAll):

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

        [CMake] Modernize WPEToolingBackend
        https://bugs.webkit.org/show_bug.cgi?id=234307

        Reviewed by Adrian Perez de Castro.

        Use WEBKIT_FRAMEWORK to build WPEToolingBackend and follow its conventions. Also support
        different platform definitions so other ports using libwpe can also use this library.

        Update includes to use <WPEToolingBackend/*.h>.

        * MiniBrowser/wpe/CMakeLists.txt:
        * MiniBrowser/wpe/main.cpp:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/glib/PlatformWPE.cmake:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        * TestWebKitAPI/wpe/PlatformWebViewWPE.cpp:
        * WebKitTestRunner/PlatformWPE.cmake:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        * wpe/backends/CMakeLists.txt:
        * wpe/backends/PlatformWPE.cmake: Added.

2021-12-14  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up another iOS GPU Processes tester
        https://bugs.webkit.org/show_bug.cgi?id=234016

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/config.json: Put the Catalina GPUP bot back and
        use a different machine for the new iOS tester.
        * CISupport/build-webkit-org/factories_unittest.py: Update unit tests.
        (TestExpectedBuildSteps):

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Remove properties set by NSURLProtocol on NSURLRequest before serializing
        https://bugs.webkit.org/show_bug.cgi?id=232332
        <rdar://79227845>

        Reviewed by Geoff Garen.

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

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

        [reporelaypy] Update checkout with hook instead of polling (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=234243
        <rdar://problem/86413065>

        Unreviewed follow-up fix.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Bump version.
        * Scripts/libraries/reporelaypy/reporelaypy/checkout.py:
        (Checkout.update_for): `main` is not a recognized production branch, so handle
        default branch first.
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Revert r284816
        https://bugs.webkit.org/show_bug.cgi?id=234308

        Reviewed by Eric Carlson.

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

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

        [reporelaypy] Update checkout with hook instead of polling
        https://bugs.webkit.org/show_bug.cgi?id=234243
        <rdar://problem/86413065>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Bump version,
        export HookProcessor and HookReceiver.
        * Scripts/libraries/reporelaypy/reporelaypy/checkout.py:
        (Checkout.update_for): If a branch is new, we need to track it.
        * Scripts/libraries/reporelaypy/reporelaypy/database.py:
        (Database.__init__): Use self.host and self.password.
        * Scripts/libraries/reporelaypy/reporelaypy/hooks.py: Added.
        (HookProcessor): Class to process received hooks.
        (HookReceiver): Class to receive hooks and queue them for processing.
        * Scripts/libraries/reporelaypy/reporelaypy/tests/hooks_unittest.py: Added.
        (HooksUnittest):
        (HooksUnittest.setUp):
        (HooksUnittest.test_receive):
        (HooksUnittest.test_invalid):
        (HooksUnittest.test_process):
        (HooksUnittest.test_hmac):
        (HooksUnittest.test_invalid_hmac):
        * Scripts/libraries/reporelaypy/reporelaypy/webserver.py: Add hook routes,
        if hooks are enabled.
        * Scripts/libraries/reporelaypy/run: Allow caller to enable hooks.
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Add _WKContentRuleListAction.redirected and .modifiedHeaders
        https://bugs.webkit.org/show_bug.cgi?id=234289

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (checkURLs):
        (TEST_F):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate _webView:contentRuleListWithIdentifier:performedAction:forURL:]):

2021-12-14  Alex Christensen  <achristensen@webkit.org>

        Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
        https://bugs.webkit.org/show_bug.cgi?id=234280

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

2021-12-11  Dean Jackson  <dino@apple.com>

        Allow override of system's preferred color scheme
        https://bugs.webkit.org/show_bug.cgi?id=234199
        <rdar://problem/86366044>

        Reviewed by Tim Horton.

        New API test that checks the color-scheme after
        explicitly setting it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/color-scheme.html: Added. Note: Xcode was
        being difficult and wouldn't let me put this file in the right order
        for the Copy Build Phase :(
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2021-12-14  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Fix LocalJumpError in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=234295

        Reviewed by Michael Catanzaro.

        Ruby code cannot return from a Proc; use an if/else instead. This fixes
        the LocalJumpError reported in https://bugs.webkit.org/show_bug.cgi?id=233926.

        * Scripts/run-jsc-stress-tests:

2021-12-14  Jean-Yves Avenard  <jya@apple.com>

        Rename SharedBuffer classes.
        https://bugs.webkit.org/show_bug.cgi?id=233677
        rdar://problem/85963900

        Reviewed by Youenn Fablet.

        SharedBuffer are renamed FragmentedSharedBuffer and
        ContiguousSharedBuffer to SharedBuffer to better reflect their actual
        types.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.h:
        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        * TestWebKitAPI/win/TestWebCoreStubs.cpp:

2021-12-13  John Wilander  <wilander@apple.com>

        PCM: Remove old DB update and migration code, and add a unit test for destination token DB columns
        https://bugs.webkit.org/show_bug.cgi?id=234281
        <rdar://86347439>

        Reviewed by Alex Christensen and Kate Cheney.

        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (addAttributedPCMv5):
        (pollUntilPCMIsMigrated):
            Now takes a parameter UsingDestinationToken and handles its expectation
            accordingly.
        (TEST):
            New test PrivateClickMeasurement.MigrateWithDestinationToken.

2021-12-13  Alex Christensen  <achristensen@webkit.org>

        Allow WKContentRuleList to run regexes on current frame's URL, not just top frame's URL
        https://bugs.webkit.org/show_bug.cgi?id=233889

        Reviewed by Timothy Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::mainDocumentRequest):
        (TestWebKitAPI::subResourceRequest):
        (TestWebKitAPI::TEST_F):

2021-12-13  Brady Eidson  <beidson@apple.com>

        Teach webpushtool to register and "host" the daemon.
        https://bugs.webkit.org/show_bug.cgi?id=234265

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::shouldSetupWebPushD): Add a command line argument to skip the "install the daemon" step,
          so an engineer can handle that part themselves.
        (TestWebKitAPI::setUpTestWebPushD):
        (TestWebKitAPI::cleanUpTestWebPushD):

2021-12-13  Christopher Reid  <chris.reid@sony.com>

        [Curl] Improve curl's cookie conformance in WPT
        https://bugs.webkit.org/show_bug.cgi?id=232722

        Reviewed by Fujii Hironori.

        * WebKitTestRunner/TestController.cpp: Use a unique cookie file for each test on windows

2021-12-13  Jean-Yves Avenard  <jya@apple.com>

        Add SharedBufferBuilder class
        https://bugs.webkit.org/show_bug.cgi?id=233442
        rdar://85693939

        Reviewed by Youenn Fablet.

        Update API tests.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        (TestWebKitAPI::TEST_F):

2021-12-13  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Unify default/noisy tests definition
        https://bugs.webkit.org/show_bug.cgi?id=233926

        Reviewed by Yusuke Suzuki.

        Currently, changing a test to be noisy (i.e. using
        defaultRunNoisyTest) results in only a subset of the tests being
        run.

        Instead of manually changing the noisy test test handler, this
        patch makes the mode definitions table-driven. However, for
        compatibility with the existing code, it uses the table to define
        the ruby methods that the testcase definitions (//@ comments,
        yaml) and other callers in run-jsc-stress-tests (e.g. all
        default*Run methods) expect.

        Note that this slightly increases the number of tests executed (as
        more test modes are enabled for the noisy tests).

        This is an exploratory first step; other callers in
        run-jsc-stress-tests could be simplified in the same way.

        * Scripts/run-jsc-stress-tests:

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

        Start websocket server for tests in http/tests that have websocket in their name
        https://bugs.webkit.org/show_bug.cgi?id=234075

        Reviewed by Jonathan Bedard.

        Allows to run the websocket server for tests like LayoutTests/http/tests/workers/service/serviceworker-websocket.https.html.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy.py:

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

        Fix ServiceWorker downloads
        https://bugs.webkit.org/show_bug.cgi?id=202142
        <rdar://problem/55721934>

        Reviewed by Alex Christensen.

        Add test runner API to log the total download size.
        This helps ensuring that service worker loads are correctly downloaded and do not rely on networking.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:

2021-12-13  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa WebGL should support UI side compositing
        https://bugs.webkit.org/show_bug.cgi?id=231009
        <rdar://83437059>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLOpenGLCocoa.mm:
        Add a dummy override of the new member function layerContentsDisplayDelegate.

2021-12-13  Jean-Yves Avenard  <jya@apple.com>

        Distinguish contiguous SharedBuffer from non-contiguous one and guarantee immutability
        https://bugs.webkit.org/show_bug.cgi?id=233030
        rdar://85333814

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        (TestWebKitAPI::TEST_F):

2021-12-12  Sam Weinig  <weinig@apple.com>

        Pipe ColorInterpolationMethod into Gradient
        https://bugs.webkit.org/show_bug.cgi?id=234205

        Reviewed by Antti Koivisto.

        Update calls to Gradient::create() to pass the now required ColorInterpolationMethod.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::createGradient):
        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp:
        (TestWebKitAPI::TEST):

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

        Unreviewed, reverting r286893.
        https://bugs.webkit.org/show_bug.cgi?id=234197

        Breaks the build

        Reverted changeset:

        "[macOS] Add new screen and window capture backend"
        https://bugs.webkit.org/show_bug.cgi?id=234029
        https://commits.webkit.org/r286893

2021-12-10  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add new screen and window capture backend
        https://bugs.webkit.org/show_bug.cgi?id=234029

        Reviewed by Jer Noble and Youenn Fablet.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMediaWindowAndScreen.mm: Added.
        (-[WindowAndScreenCaptureTestView haveStream:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewUnderPageBackgroundColor.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessTerminate.mm:
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h:
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm:
        (-[UserMediaCaptureUIDelegate init]):
        (-[UserMediaCaptureUIDelegate setGetDisplayMediaDecision:]):
        (-[UserMediaCaptureUIDelegate _webView:requestDisplayCapturePermissionForOrigin:initiatedByFrame:decisionHandler:]):

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

        Add FileSystem function to read a file at a path
        https://bugs.webkit.org/show_bug.cgi?id=234103

        Reviewed by Alex Christensen.

        Add tests for readEntireFile.

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

2021-12-10  Alex Christensen  <achristensen@webkit.org>

        Move if-domain and unless-domain conversion to WKContentRuleList parsing
        https://bugs.webkit.org/show_bug.cgi?id=234126

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequestImpl):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::testRequest): Deleted.

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

        Unreviewed, reverting r286836.
        https://bugs.webkit.org/show_bug.cgi?id=234153

        some tests are flaky on iOS and some are crashing on macOS

        Reverted changeset:

        "[Model] Add load and error events to distinguish resource
        load from model readiness"
        https://bugs.webkit.org/show_bug.cgi?id=233706
        https://commits.webkit.org/r286836

2021-12-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        IOSurface memory attribution is hard to use in constructors
        https://bugs.webkit.org/show_bug.cgi?id=232988
        <rdar://problem/85541918>

        Reviewed by Chris Dumez.

        Update constructor calling base class constructor, add empty
        ProcesseIdentity.

        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLCocoa.mm:

2021-12-09  Antoine Quint  <graouts@webkit.org>

        [Model] Add load and error events to distinguish resource load from model readiness
        https://bugs.webkit.org/show_bug.cgi?id=233706
        rdar://85922697

        Reviewed by Chris Dumez and Dean Jackson.

        Use the "load" event instead of the "ready" promise for this test which only requires monitoring
        the <model> resource being loaded.

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

2021-12-09  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add SPI to enable find interactions on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=234017
        rdar://86140542

        Reviewed by Wenson Hsieh.

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

        Test that the new SPI installs a _UIFindInteraction on the web view.

2021-12-09  Lauro Moura  <lmoura@igalia.com>

        [webkitpy] Make check-webkit-style check WebDriverTests/TestExpectations.json
        https://bugs.webkit.org/show_bug.cgi?id=213453

        Reviewed by Adrian Perez de Castro.

        While the WebDriver tests are imported and mostly ignored by
        check-webkit-style, the script must check TestExpectations.json
        to avoid commiting invalid json data and breaking the bots.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherSkipTest._assert_should_skip_without_warning): Pass
        a valid error handler so the JSONChecker can be instantiated.
        (CheckerDispatcherSkipTest.test_should_skip_without_warning__false):

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

        Prepare for transition to C++20
        https://bugs.webkit.org/show_bug.cgi?id=234022

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (createBitmapContext):
        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestPDFDocument.mm:
        (TestWebKitAPI::TestPDFPage::colorAtPoint const):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromCGImage):

2021-12-08  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: provide a way for _WKInspectorExtension clients to be to notified when an extension tab navigates
        https://bugs.webkit.org/show_bug.cgi?id=233935
        <rdar://86123899>

        Reviewed by Patrick Angle.

        Add API test coverage for -inspectorExtension:didNavigateTabWithIdentifier:newURL:

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm:
        (TEST):
        Drive-by, fix an outdated completion handler type signature.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm:
        (-[InspectorExtensionDelegateForTesting inspectorExtension:didNavigateTabWithIdentifier:newURL:]):
        (TEST):
        Add a test case which exercises the new delegate method.

2021-12-09  Lauro Moura  <lmoura@igalia.com>

        [WebXR][WPE] Build fails without openxr installed
        https://bugs.webkit.org/show_bug.cgi?id=220250

        Reviewed by Adrian Perez de Castro.

        Based on original patch by Yury Semikhatsky. Rebased and installed
        only for WPE, as GTK's module set does not declare openxr.

        * wpe/dependencies/apt: Install libxcb-glx0-dev

2021-12-09  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up another iOS GPU Processes tester
        https://bugs.webkit.org/show_bug.cgi?id=234016

        Rubber-stamped by Alexey Proskuryakov.

        * CISupport/build-webkit-org/config.json: Repurpose the Catalina GPU bot for this queue.
        * CISupport/build-webkit-org/factories_unittest.py:
        (TestExpectedBuildSteps): Update unit tests.

2021-12-09  Brady Eidson  <beidson@apple.com>

        Add ability to inject messages into webpushd
        https://bugs.webkit.org/show_bug.cgi?id=233988

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements:

        * TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm:
        (messageDictionary):

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::createMessageDictionary):
        (TestWebKitAPI::sendMessageToDaemon):
        (TestWebKitAPI::sendMessageToDaemonWaitingForReply):
        (TestWebKitAPI::sendConfigurationWithAuditToken):
        (TestWebKitAPI::createAndConfigureConnectionToService):
        (TestWebKitAPI::encodeString):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::function):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

2021-12-09  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Remove user gesture requirement for using platform authenticator on the web
        https://bugs.webkit.org/show_bug.cgi?id=230893
        <rdar://problem/79781342>

        Reviewed by Brent Fulgham.

        This patch removes the Quirks allowlist of the freebie web authentication use without a gesture and replaces it with one freebie, then a consent sheet.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate _webView:requestWebAuthenticationNoGestureForOrigin:completionHandler:]):
        Test delegate

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

        Unreviewed, reverting r286764.
        https://bugs.webkit.org/show_bug.cgi?id=234081

        broke the build

        Reverted changeset:

        "Add ability to inject messages into webpushd"
        https://bugs.webkit.org/show_bug.cgi?id=233988
        https://commits.webkit.org/r286764

2021-12-09  Myles C. Maxfield  <mmaxfield@apple.com> and Don Olmstead  <don.olmstead@sony.com>

        Move TextCodec files from WebCore/platform/text to WebCore/PAL/text
        https://bugs.webkit.org/show_bug.cgi?id=233683

        Reviewed by Yusuke Suzuki.

        Update to use the new PAL files.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * TestWebKitAPI/Tests/WebCore/TextCodec.cpp:
        (TestWebKitAPI::testDecode):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

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

        [GTK][a11y] Ensure atspi wrappers have root set at construction time
        https://bugs.webkit.org/show_bug.cgi?id=233804

        Reviewed by Joanmarie Diggs.

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::AccessibilityController::axRunLoop):

2021-12-08  Brady Eidson  <beidson@apple.com>

        Add ability to inject messages into webpushd
        https://bugs.webkit.org/show_bug.cgi?id=233988

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements:

        * TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm:
        (messageDictionary):

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::createMessageDictionary):
        (TestWebKitAPI::sendMessageToDaemon):
        (TestWebKitAPI::sendMessageToDaemonWaitingForReply):
        (TestWebKitAPI::sendConfigurationWithAuditToken):
        (TestWebKitAPI::createAndConfigureConnectionToService):
        (TestWebKitAPI::encodeString):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::function):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

2021-12-08  Kyle Piddington  <kpiddington@apple.com>

        [MacCatalyst] Update header search paths for ANGLE Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=233996

        For iOSMac builds, search for ANGLE public headers inside System/iOSSupport

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/Base.xcconfig:

2021-12-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to load a resource in the context of a page
        https://bugs.webkit.org/show_bug.cgi?id=233908

        Reviewed by Tim Horton.

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

2021-12-08  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Consider support for the displayName for FIDO authenticator
        https://bugs.webkit.org/show_bug.cgi?id=233389
        rdar://84938707

        Reviewed by Brent Fulgham.

        Add test for new field stored with platform authenticator: displayName

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

2021-12-08  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r286596.

        broke 2 tests on iOS

        Reverted changeset:

        "Cocoa WebGL should support UI side compositing"
        https://bugs.webkit.org/show_bug.cgi?id=231009
        https://commits.webkit.org/r286596

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

        Make KVO work for WKWebpagePreferences._captivePortalModeEnabled
        https://bugs.webkit.org/show_bug.cgi?id=233954

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[CaptivePortalModeKVO observeValueForKeyPath:ofObject:change:context:]):

2021-12-08  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add support for _UITextSearchOptions when finding a string
        https://bugs.webkit.org/show_bug.cgi?id=233957
        rdar://86140673

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        (testPerformTextSearchWithQueryStringInWebView):
        (TEST):

        Add additional test cases for search options.

2021-12-07  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add initial support for find-in-page SPI
        https://bugs.webkit.org/show_bug.cgi?id=233915
        rdar://86140501

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        (-[TestSearchAggregator initWithCompletionHandler:]):
        (-[TestSearchAggregator foundRange:forSearchString:inDocument:]):
        (-[TestSearchAggregator finishedSearching]):
        (TEST):

        Added an API test to verify that search results are found correctly.

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

        Add support for `navigator.requestCookieConsent()` behind a disabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=233890
        rdar://86117718

        Reviewed by Darin Adler.

        Add several new API tests that enable the feature flag and exercise the API.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/CookieConsent.mm: Added.
        (-[CookieConsentDelegate _webView:requestCookieConsentWithMoreInfoHandler:decisionHandler:]):
        (TestWebKitAPI::createWebViewForTestingCookieConsent):
        (TestWebKitAPI::checkForString):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/cookie-consent-basic.html: Added.

2021-12-07  Yousuke Kimoto  <Yousuke.Kimoto@sony.com>

        [webkitcorepy] Fail to install python module when a working directory is not on C drive on Windows
        https://bugs.webkit.org/show_bug.cgi?id=233936

        Reviewed by Jonathan Bedard.

        On Windows, autoinstall.py installs python modules to C drive even if
        your working directory is on other drive (e.g. D drive). To install
        python modules correctly on Windows, a drive letter where your working
        directory exists needs to be given to "--root" option of "setup.py"
        in autoinstall.py.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Added root_location to detect a right drive letter to isntall modules on Windows.

2021-12-07  Devin Rousso  <drousso@apple.com>

        Add helper methods to `WebCore::FontShadow` for serializing to CSS and converting to `NSShadow`
        https://bugs.webkit.org/show_bug.cgi?id=233938

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/FontShadowTests.cpp: Added.
        (TestWebKitAPI::TEST.FontShadow.InvalidColor):
        (TestWebKitAPI::TEST.FontShadow.NoOffsetOrBlurRadius):
        (TestWebKitAPI::TEST.FontShadow.NoOffset):
        (TestWebKitAPI::TEST.FontShadow.NegativeOffset):
        (TestWebKitAPI::TEST.FontShadow.NoBlurRadius):
        (TestWebKitAPI::TEST.FontShadow.NegativeBlurRadius):
        (TestWebKitAPI::TEST.FontShadow.AllNegative):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        [commits.webkit.org] Fallback to remote repository (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=233904
        <rdar://problem/86131927>

        Reviewed by Dewei Zhu.

        * CISupport/ews-build/steps.py:
        (PushCommitToWebKitRepo.evaluateCommand): Wait before querying commits.webkit.org

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

        [commits.webkit.org] Fallback to remote repository (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=233904
        <rdar://problem/86131927>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Bump version.
        * Scripts/libraries/reporelaypy/reporelaypy/checkout.py:
        (Checkout.Encoder.default):
        (Checkout.__init__): Allow user to specify a remote fallback repository.
        * Scripts/libraries/reporelaypy/reporelaypy/checkoutroute.py:
        (CheckoutRoute.commit): If no commit is found, query the fallback repository.
        * Scripts/libraries/reporelaypy/run: Add --fallback option.
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

2021-12-07  Lauro Moura  <lmoura@igalia.com>

        [reporelaypy] Autoinstall missing lupa fakeredis dependency
        https://bugs.webkit.org/show_bug.cgi?id=233934

        Reviewed by Jonathan Bedard.

        Using the same version as resultsdbpy. Avoids ImportErrors running the
        webkitpy suite when they're not installed.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Add lupa and
        bump version.
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

2021-12-07  Kyle Piddington  <kpiddington@apple.com>

        Roll ANGLE to include upstreamed Metal backend
        https://bugs.webkit.org/show_bug.cgi?id=220896
        <rdar://problem/73539682>

        Reviewed by Ken Russell and Dean Jackson.

        Update script to take sources from main, instead of master.

        * Scripts/update-angle:

2021-12-07  Sihui Liu  <sihui_liu@apple.com>

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567
        <rdar://problem/86029185>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:

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

        [reporelaypy] Add implementation of commits.webkit.org (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=233734
        <rdar://problem/85945101>

        Unreviewed follow-up fix.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Bump version, add sortedcontainers dependency.
        * Scripts/libraries/reporelaypy/setup.py: Bump version.

2021-12-07  Kimmo Kinnunen  <kkinnunen@apple.com>

        Cocoa WebGL should support UI side compositing
        https://bugs.webkit.org/show_bug.cgi?id=231009
        <rdar://83437059>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLOpenGLCocoa.mm:
        Add a dummy override of the new member function layerContentsDisplayDelegate.

2021-12-06  John Wilander  <wilander@apple.com>

        Add WebCore::RegistrableDomain tests for duplicate sub domains
        https://bugs.webkit.org/show_bug.cgi?id=233902
        <rdar://problem/86130326>

        Unreviewed expansion of the RegistrableDomain.MatchesURLs API test.

        https://bugs.webkit.org/show_bug.cgi?id=233330 claims that duplicate sub domains
        such as news.news.example.com causes WebKit's RegistrableDomain matching to fail
        and treat same-site content as cross-site. This patch add tests of such duplicate
        sub domains.

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

2021-12-06  Brady Eidson  <beidson@apple.com>

        webpushd/webpushtool debugging additions
        https://bugs.webkit.org/show_bug.cgi?id=233864

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::TEST): Adapt to debug message changes.

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

        [reporelaypy] Add implementation of commits.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=233734
        <rdar://problem/85945101>

        Reviewed by Dewei Zhu.

        As commits.webkit.org becomes more important to WebKit development, we need to apply
        our normal robust testing and review to the code backing it.

        * Scripts/libraries/reporelaypy/reporelaypy/__init__.py: Add entrypoint to library.
        * Scripts/libraries/reporelaypy/reporelaypy/checkout.py: Added.
        (Checkout): Abstraction managing local repository checkout.
        * Scripts/libraries/reporelaypy/reporelaypy/checkoutroute.py: Added.
        (Redirector): Generates redirects for certain SCM services.
        (CheckoutRoute): http routes returning information based on a checkout.
        * Scripts/libraries/reporelaypy/reporelaypy/database.py: Added.
        (Database): A connection to a true Redis or TinyRedis database.
        * Scripts/libraries/reporelaypy/reporelaypy/tests/checkout_unittest.py:
        (CheckoutUnittest):
        * Scripts/libraries/reporelaypy/reporelaypy/tests/checkoutroute_unittest.py: Added.
        (RedirectorUnittest):
        (CheckoutRouteUnittest):
        * Scripts/libraries/reporelaypy/reporelaypy/tests/database_unittest.py: Added.
        (DatabaseUnittest):
        * Scripts/libraries/reporelaypy/reporelaypy/webserver.py: Copied from Tools/Scripts/libraries/webkitflaskpy/setup.py.
        (health):
        * Scripts/libraries/reporelaypy/run: Added.
        * Scripts/libraries/reporelaypy/setup.py: Added.
        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/flask_support/flask_testcase.py:
        (FlaskTestCase.run_with_mock_webserver.decorator.real_method):
        (FlaskRequestsResponse): Moved to webkitflaskpy.
        * Scripts/libraries/webkitflaskpy/setup.py: Bump version, update library description.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py: Bump version.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/mock_app.py: Added.
        (mock_app): Setup a flask app for testing.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/response.py: Added.
        (Response): Move FlaskRequestsResponse to more generic location.
        * Scripts/webkitpy/__init__.py: Include reporelaypy for testing.
        * Scripts/webkitpy/test/main.py:
        (main): Include reporelaypy for testing.
        (Tester._run_tests): Ditto.

2021-12-06  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r286507): [macOS] Many file system access layout tests became flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=233892

        Unreviewed, revert r286507.

        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:

2021-12-06  Jon Lee  <jonlee@apple.com>

        Update GPU Process feature flags
        https://bugs.webkit.org/show_bug.cgi?id=232547
        rdar://83905400

        Reviewed by Wenson Hsieh.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Update features that are set when using `run-webkit-tests --use-gpu-process`.
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults): Turn off DOM Rendering on layout test bots for the time being.

2021-12-06  Matt Gilligan  <matthew_gilligan@apple.com>

        [iOS] Allow WKWebView clients to override undoManager
        https://bugs.webkit.org/show_bug.cgi?id=233297
        <rdar://problem/85526549>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[CustomUndoManagerWebView undoManager]):
        (TestWebKitAPI::TEST):

2021-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] AppHighlights.AppHighlightCreateAndRestoreAndScroll is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=233828

        Reviewed by Tim Horton.

        This test began to sometimes fail on iOS 15 API test runners in EWS after enabling `APP_HIGHLIGHTS` in non-
        internal builds. Make this test more robust by waiting for scrolling to the restored highlight.

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

2021-12-06  Alex Christensen  <achristensen@webkit.org>

        WKWebpagePreferences._activeContentRuleListActionPatterns should be an NSDictionary of identifier to allowed patterns
        https://bugs.webkit.org/show_bug.cgi?id=233842

        Reviewed by Timothy Hatcher.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (navigationDelegateAllowingActiveActionsOnTestHost):
        (TEST_F):

2021-12-05  Said Abou-Hallawa  <said@apple.com>

        [GPU Process] Add the encoding/decoding for Filter and FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=232844

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:

2021-12-05  Simon Fraser  <simon.fraser@apple.com>

        Add trace points for generated momentum events
        https://bugs.webkit.org/show_bug.cgi?id=233857

        Reviewed by Tim Horton.

        Add start/end points for synthetic momentum, and a trace point for each generated event.

        * Tracing/SystemTracePoints.plist:

2021-12-04  Andres Gonzalez  <andresg_22@apple.com>

        Change WTR::AccessibilityUIElement::descriptionOfValue(id) to return a RetainPtr.
        https://bugs.webkit.org/show_bug.cgi?id=233815
        <rdar://problem/86019373>

        Reviewed by Chris Fleizach.

        This fixes several tests in isolated tree mode, in particular:
        accessibility/mac/focus-crash.html
        accessibility/mac/search-predicate.html

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::descriptionOfValue const):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::embeddedImageDescription const):

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

        [iOS] Web content process sometimes crashes under WebPage::positionInformation()
        https://bugs.webkit.org/show_bug.cgi?id=233841
        rdar://85917212

        Reviewed by Geoffrey Garen.

        Add a test that exercises hit-testing for Live Text, but induces this crash by hit-testing outside of the bounds
        of the web view (such that the hit-tested node ends up as null).

        * TestWebKitAPI/Tests/WebKitCocoa/ImageAnalysisTests.mm:
        (TestWebKitAPI::swizzledLocationInView):
        (TestWebKitAPI::TEST):

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

        PCM: Unlinkable tokens for triggering event to prevent fraud
        https://bugs.webkit.org/show_bug.cgi?id=233673
        <rdar://79426347>

        Reviewed by Alex Christensen.

        New test PrivateClickMeasurement.DestinationClickFraudPrevention.
        The other changes are a report version bump 2->3 and a name change
        FraudPrevention–>SourceClickFraudPrevention.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::runBasicPCMTest):
        (TestWebKitAPI::triggerAttributionWithSubresourceRedirect):
            Extracted shared code.
        (TestWebKitAPI::runDestinationWebView):
            Extracted shared code.
        (TestWebKitAPI::signUnlinkableTokenAndSendSecretToken):
            Extracted shared code.
        (TestWebKitAPI::TEST):
            New test PrivateClickMeasurement.DestinationClickFraudPrevention.
            Extracted shared code from PrivateClickMeasurement.SourceClickFraudPrevention.

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

        Fetch and remove file system data via WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=233567

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:

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

        Follow-up to r286479 to add API test and address issues found by the test
        https://bugs.webkit.org/show_bug.cgi?id=233798

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Add room for more bytecode in WKContentRuleList file format
        https://bugs.webkit.org/show_bug.cgi?id=233780

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

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

        Persist NavigationPreloadState in service worker registration database
        https://bugs.webkit.org/show_bug.cgi?id=233698
        <rdar://problem/85963120>

        Reviewed by Chris Dumez.

        Increase counter from 7 to 8.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        Compilation error on Tools/TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm
        https://bugs.webkit.org/show_bug.cgi?id=233797
        rdar://problem/86000569

        Unreviewed API test build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:

2021-11-29  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Make Python 3.10 compatible
        https://bugs.webkit.org/show_bug.cgi?id=233771
        <rdar://problem/85978234>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/model/configuration_context.py:

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

        [git-webkit] Handle ambiguous branch names in land
        https://bugs.webkit.org/show_bug.cgi?id=233763
        <rdar://problem/85973434>

        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.rebase): Be explicit about the name of the target branch when modifying timestamps.

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

        [css-values-4] Support `*vi` (inline) and `*vb` (block) viewport units
        https://bugs.webkit.org/show_bug.cgi?id=232895
        <rdar://problem/85179134>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.html:
        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.svg: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:
        (TEST.CSSViewportUnits.AllSame):
        (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.SVGDocument): Added.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        [WK2] Make Web Lock API work across multiple WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=233719

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebLocks.mm: Added.
        (TestWebKitAPI::TEST):

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

        [ Monterey ] fast/images/text-recognition/mac/image-overlay-text-disables-app-highlight-menu-items.html (layout-test) is a constant text failure
        https://bugs.webkit.org/show_bug.cgi?id=233658
        rdar://problem/85886424

        Reviewed by Tim Horton.

        Add a forward declaration for open source builds.

        * TestWebKitAPI/ios/UIKitSPI.h:

2021-12-02  Brady Eidson  <beidson@apple.com>

        REGRESSION: r286075 [ Big Sur x86] 2 TestWebKitAPI.WebPushD (API-Tests) are constant failures
        https://bugs.webkit.org/show_bug.cgi?id=233726

        Unreviewed gardening.

        - Disabling these tests on all Mac platforms until we can figure out the code signing/etc situation
        - Fix the truly broken "basic" test everywhere by adapting to messaging changes

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

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

        Unreviewed. [GTK] Use nullptr instead of 0 in JSStringCreateWithCharacters()

        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::accessibilityValue const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        (WTR::AccessibilityUIElement::characterAtOffset):

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

        [GTK][a11y] Add implementation of table and table cell interfaces when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233694

        Reviewed by Adrian Perez de Castro.

        Add unit tests and WTR implementation for tables.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testTableBasic):
        (beforeAll):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::elementsVector):
        (WTR::attributesOfElements):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::makeJSArray):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):

2021-12-01  Sihui Liu  <sihui_liu@apple.com>

        FileSystemSyncAccessHandle should be invalidated when network process crashes
        https://bugs.webkit.org/show_bug.cgi?id=232605
        <rdar://problem/85187706>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:
        (test):
        (keepAccessHandleActive):

2021-12-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EWS][GTK][WPE] Add a new Class for running layout tests on the EWS for the GTK and WPE ports.
        https://bugs.webkit.org/show_bug.cgi?id=231999

        Reviewed by Jonathan Bedard.

        This patch adds a new class to the EWS for running layout tests for the GTK and WPE ports.
        It will be used initially for the GTK port and later for the WPE one.
        Mac/iOS ports will continue to use the current default EWS, so no behaviour change for them.

        This new class is specially designed to:
        A. Work with a tree that is not always green (or even that is often quite red).
        B. To not report any false positive to the patch author.
        C. To allow patch authors to use this EWS to get new expectations for patches that need lot of new re-baselines (like a WPT import)

        The very simplified logic of how this works is the following:
        1. Run layout tests with patch (abort early at 500 unexpected failures)
        2. Run layout tests with patch 10 times for each test that failed consistently (non-flaky) on step 1.
        3. Run layout tests without patch 10 times for each test that failed consistently (non-flaky) on step 2.

        Then report to the patch author only the new consistent failures (tests that failed always with the patch and passed always without the patch, retrying 10 times)
        Any flaky test found is only reported to the bot watchers.

        For an explainer about why this is needed, and more details about the flow diagram and several design considerations, please check:
        https://people.igalia.com/clopez/wkbug/231999/explainer.html

        The patch also add 3 new workers to the queue (to a total of 8) to speed up testing.

        * CISupport/ews-build/config.json:
        * CISupport/ews-build/factories.py:
        (GTKTestsFactory):
        * CISupport/ews-build/layout_test_failures.py:
        (LayoutTestFailures.__init__):
        (LayoutTestFailures.results_from_string):
        (LayoutTestFailures.results_from_string.get_failing_tests):
        * CISupport/ews-build/steps.py:
        (BufferLogHeaderObserver):
        (BufferLogHeaderObserver.__init__):
        (BufferLogHeaderObserver.headerReceived):
        (BufferLogHeaderObserver.getHeaders):
        (BugzillaMixin.send_email_for_infrastructure_issue):
        (Trigger.propertiesToPassToTriggers):
        (RunWebKitTests.setLayoutTestCommand):
        (RunWebKitTests.start):
        (RunWebKitTests.commandComplete):
        (ReRunWebKitTests.evaluateCommand):
        (ReRunWebKitTests.commandComplete):
        (RunWebKitTestsWithoutPatch.commandComplete):
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeLayoutTestsResults.send_email_for_flaky_failure):
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):
        (AnalyzeLayoutTestsResults.start):
        (RunWebKit1Tests.start):
        (RunWebKitTestsRedTree):
        (RunWebKitTestsRedTree._did_command_timed_out):
        (RunWebKitTestsRedTree.evaluateCommand):
        (RunWebKitTestsRepeatFailuresRedTree):
        (RunWebKitTestsRepeatFailuresRedTree.__init__):
        (RunWebKitTestsRepeatFailuresRedTree.setLayoutTestCommand):
        (RunWebKitTestsRepeatFailuresRedTree.evaluateCommand):
        (RunWebKitTestsRepeatFailuresRedTree.commandComplete):
        (RunWebKitTestsRepeatFailuresRedTree.start):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree.__init__):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree.setLayoutTestCommand):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree.evaluateCommand):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree.commandComplete):
        (RunWebKitTestsRepeatFailuresWithoutPatchRedTree.start):
        (RunWebKitTestsWithoutPatchRedTree):
        (RunWebKitTestsWithoutPatchRedTree.evaluateCommand):
        (AnalyzeLayoutTestsResultsRedTree):
        (AnalyzeLayoutTestsResultsRedTree.report_success):
        (AnalyzeLayoutTestsResultsRedTree.report_warning):
        (AnalyzeLayoutTestsResultsRedTree.report_infrastructure_issue_and_maybe_retry_build):
        (AnalyzeLayoutTestsResultsRedTree.send_email_for_pre_existent_failures):
        (AnalyzeLayoutTestsResultsRedTree.start):
        * CISupport/ews-build/steps_unittest.py:

2021-12-01  Alex Christensen  <achristensen@webkit.org>

        Use Span instead of pointer/length in CompiledContentExtension
        https://bugs.webkit.org/show_bug.cgi?id=233727

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

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

        Unreviewed API test build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:

2021-12-01  Alex Christensen  <achristensen@webkit.org>

        Add csp-report resource type to WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=233675
        <rdar://71869893>

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::compareContents):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):

2021-12-01  Ryan Haddad  <ryanhaddad@apple.com>

        [ iOS ] TestWebKitAPI.ApplicationManifest.IconCoding is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=233715

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm:
        (TestWebKitAPI::TEST): Remove a fragile assertion about the size of NSKeyedArchive that is causing the test to fail on iOS.

2021-12-01  W.D. Xiong  <wdx@apple.com>

        [macOS] run-benchmark should take diagnostic screenshots upon test timeout
        https://bugs.webkit.org/show_bug.cgi?id=232736

        Reviewed by Dewei Zhu.

        Added defaults for the --diagnose-directory flag depending on platform.
        Added diagnose_test_failure method to OSXBrowserDriver to take screenshots and save to diagnostic directory.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver._save_screenshot_to_path):
        (OSXBrowserDriver):
        (OSXBrowserDriver.diagnose_test_failure):

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

        [webkitscmpy] Do not query remotes when determining branches containing commit
        https://bugs.webkit.org/show_bug.cgi?id=233700
        <rdar://problem/85920569>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.branches_for): Remove -a from --contains check.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:

2021-12-01  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r286346): ResourceLoadDelegate.LoadInfo fails
        https://bugs.webkit.org/show_bug.cgi?id=233689

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        This test asserts that archiving a _WKResourceLoadInfo via NSKeyedArchiver
        encodes to a particular size (607 bytes).

        If you look at the resultant plist before r286346, the encoded frameID
        and resourceLoadID have the same value, and because of NSKeyedArchiver
        deduplication, share the same object.

        If you look at the resultant plist *after* r286346, the encoded frameID
        is one larger than the resourceLoadID, thus cannot be deduplicated, and
        end up encoding as separate objects. This results in the encoded size
        increasing to 612 bytes.

        The reason that the encoded frameID is now one value larger is that
        ObjectIdentifier uses a global identifier pool, and r286346 creates
        one more ObjectIdentifier during EventHandler construction, destroying
        our entirely coincidental ID overlap, and causing the aforementioned
        encoded size change.

        Remove this assertion from the test, since it is very aggressive and
        seems unnecessary. We could instead just rebaseline the test, but it
        seems insufficiently important to burden some future developer with
        a repeat of this evening of exploration and discovery.

2021-12-01  Brady Eidson  <beidson@apple.com>

        Add WKWebsiteDataStore configuration option to enable Mock app bundle testing.
        https://bugs.webkit.org/show_bug.cgi?id=233679

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:

2021-11-30  Devin Rousso  <drousso@apple.com>

        [css-values-4] Dynamic `dv*` viewport units should not respect the page scale
        https://bugs.webkit.org/show_bug.cgi?id=233291

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.html:
        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:
        (evaluateForNumber):
        (dimensionOfElement): Added.
        (widthOfElementWithID): Added.
        (heightOfElementWithID): ADded.
        (viewportUnitLength): Added.
        (TEST.CSSViewportUnits.AllSame):
        (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):
        (getElementHeight): Deleted.

2021-11-30  BJ Burg  <bburg@apple.com>

        Web Inspector: add ExtensionTabActivation diagnostic event
        https://bugs.webkit.org/show_bug.cgi?id=233101
        <rdar://85264921>

        Reviewed by Devin Rousso.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionHost.mm:
        (TEST):
        Start using new method parameter 'extensionBundleIdentifier'.

2021-11-30  Brent Fulgham  <bfulgham@apple.com>

        Correct serialization error in _WKApplicationManifestIcon
        https://bugs.webkit.org/show_bug.cgi?id=233602
        <rdar://problem/85838843>

        Reviewed by Devin Rousso.

        This patch adds a new test "ApplicationManifest.IconCoding" to exercise the
        NSCoder code paths.

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

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

        Scripting attributes are sometimes not properly stripped from elements when JS is disabled
        https://bugs.webkit.org/show_bug.cgi?id=233642
        <rdar://63180952>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2021-11-30  Tyler Wilcock  <tyler_w@apple.com>

        AX: Reduce repetition in retrieving typed attribute values in AccessibilityUIElementMac
        https://bugs.webkit.org/show_bug.cgi?id=233603

        Reviewed by Chris Fleizach.

        We have a lot of functions in both the WebKitTestRunner and DumpRenderTree versions of
        AccessibilityUIElementMac that repeat the same logic for getting a typed attribute value.
        We can make this simpler.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::stringAttributeValue):
        Move core logic to new stringAttributeValue(NSString* attribute) function.
        (AccessibilityUIElement::stringAttributeValue const): Added.

        (AccessibilityUIElement::numberAttributeValue):
        Move core logic to new numberAttributeValue(NSString* attribute) function.
        (AccessibilityUIElement::numberAttributeValue const): Added.

        (AccessibilityUIElement::boolAttributeValue const): Added.
        (AccessibilityUIElement::boolAttributeValue):
        Move core logic to new boolAttributeValue(NSString* attribute) function.

        (AccessibilityUIElement::domIdentifier const):
        (AccessibilityUIElement::intValue const):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        (AccessibilityUIElement::isEnabled):
        (AccessibilityUIElement::isRequired const):
        (AccessibilityUIElement::isFocused const):
        (AccessibilityUIElement::isSelected const):
        (AccessibilityUIElement::isExpanded const):
        (AccessibilityUIElement::ariaIsGrabbed const):
        (AccessibilityUIElement::documentEncoding):
        (AccessibilityUIElement::documentURI):
        (AccessibilityUIElement::isOnScreen const):
        (AccessibilityUIElement::hasPopup const):
        (AccessibilityUIElement::popupValue const):
        (AccessibilityUIElement::hasDocumentRoleAncestor const):
        (AccessibilityUIElement::hasWebApplicationAncestor const):
        (AccessibilityUIElement::isInDescriptionListDetail const):
        (AccessibilityUIElement::isInDescriptionListTerm const):
        (AccessibilityUIElement::isInCell const):
        Refactor to use new `NSString *attribute` convenience functions.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):
        Move core logic to new stringAttributeValue(NSString* attribute) function.
        (WTR::AccessibilityUIElement::stringAttributeValue const): Added.

        (WTR::AccessibilityUIElement::numberAttributeValue):
        Move core logic to new numberAttributeValue(NSString* attribute) function.
        (WTR::AccessibilityUIElement::numberAttributeValue const): Added.
        (WTR::AccessibilityUIElement::boolAttributeValue const): Added.
        (WTR::AccessibilityUIElement::boolAttributeValue):
        Move core logic to new boolAttributeValue(NSString* attribute) function.

        (WTR::AccessibilityUIElement::domIdentifier const):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::currentStateValue const):
        (WTR::AccessibilityUIElement::sortDirection const):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::popupValue const):
        (WTR::AccessibilityUIElement::hasDocumentRoleAncestor const):
        (WTR::AccessibilityUIElement::hasWebApplicationAncestor const):
        (WTR::AccessibilityUIElement::isInDescriptionListDetail const):
        (WTR::AccessibilityUIElement::isInDescriptionListTerm const):
        (WTR::AccessibilityUIElement::isInCell const):
        Refactor to use new `NSString *attribute` convenience functions.

2021-11-29  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Use info log level instead of warning
        https://bugs.webkit.org/show_bug.cgi?id=233607
        <rdar://problem/85840831>

        Reviewed by Ryan Haddad.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/branch.py:
        (Branch.branch_point): Log to info instead of warning.
        (Branch.main): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/checkout.py:
        (Checkout.main): Log to info instead of warning.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/land.py:
        (Land.main): Log to info instead of warning.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.create_commit): Log to info instead of warning.
        (PullRequest.main): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.github): Log to info instead of warning.
        (Setup.git): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/branch_unittest.py:
        (TestBranch.test_basic_git):
        (TestBranch.test_prompt_git):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/land_unittest.py:
        (TestLand.test_non_editable):
        (TestLand.test_with_oops):
        (TestLand.test_default):
        (TestLand.test_canonicalize):
        (TestLand.test_no_svn_canonical_svn):
        (TestLand.test_svn):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py:
        (TestSetup.test_svn):
        (TestSetup.test_github):

2021-11-29  Simon Fraser  <simon.fraser@apple.com>

        Store image resolution in layout test snapshots, and have ImageDiff read it
        https://bugs.webkit.org/show_bug.cgi?id=233609

        Reviewed by Darin Adler.

        On the way to fixing bug 232525, we need to communicate to ImageDiff the resolution of
        layout test snapshots so that it can account for the resolution when computing pixel
        tolerance values, which should be reported in CSS pixels.

        So have DumpRenderTree and WebKitTestRunner, on Cocoa platforms, add image resolution
        metadata, where a 2x snapshot (i.e. a hidpi test) reports a horizontal and vertical
        resolution of 144dpi.

        Change ImageDiff to read these values and store them in PlatformImage; a future patch will
        make use of the data.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::scaleFactor const):
        (BitmapContext::setScaleFactor):
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        * ImageDiff/ImageDiff.cpp:
        (main):
        * ImageDiff/PlatformImage.h:
        (ImageDiff::PlatformImage::scaleFactor const):
        * ImageDiff/cg/PlatformImageCG.cpp:
        (ImageDiff::createImageFromDataProvider):
        (ImageDiff::PlatformImage::createFromFile):
        (ImageDiff::PlatformImage::createFromStdin):
        (ImageDiff::PlatformImage::PlatformImage):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::dumpBitmap):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2021-11-29  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Guard git-webkit with __name__
        https://bugs.webkit.org/show_bug.cgi?id=233278

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/git-webkit:

2021-11-29  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Delete unused environment variables
        https://bugs.webkit.org/show_bug.cgi?id=233565
        <rdar://problem/85820306>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/environment.py:
        (Environment.__init__): Keep track of sure environment files.
        (Environment.load): Ditto.
        (Environment.secure): Delete all unused environment files, since they may contain credentials.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/environment_unittest.py:
        (TestEnvironment.test_secure):

2021-11-29  Lauro Moura  <lmoura@igalia.com>

        [webkitcorepy] Environment: Sort values before comparing in unittest
        https://bugs.webkit.org/show_bug.cgi?id=233582

        Reviewed by Jonathan Bedard.

        While Python3.6+'s dicts happen to keep insertion order, `os.listdir`
        does not guarantee the order of the listed items[1]. This may cause
        the Environment unittest to fail when comparing to the fixed expected
        data, as it has been happending in some GTK/WPE bots.

        [1] https://docs.python.org/3/library/os.html#os.listdir

        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/environment_unittest.py:
        (TestEnvironment.test_list):

2021-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKContentView should allow -captureTextFromCamera: with a caret selection unless the sender is the callout bar
        https://bugs.webkit.org/show_bug.cgi?id=233378
        rdar://85478344

        Reviewed by Tim Horton.

        Adjust an API test to exercise the changes. See WebKit/ChangeLog for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:

2021-11-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Move m_incomingPolymorphicCalls out of CodeBlock::JITData
        https://bugs.webkit.org/show_bug.cgi?id=233415

        Reviewed by Mark Lam and Darin Adler.

        Add tests for SentinelLinkedList.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/SentinelLinkedList.cpp: Added.
        (TestWebKitAPI::TestNode::TestNode):
        (TestWebKitAPI::TestNode::value const):
        (TestWebKitAPI::TEST):

2021-11-29  Lauro Moura  <lmoura@igalia.com>

        [webkitflaskpy] Make sure flask is registered before importing webkitflaskpy
        https://bugs.webkit.org/show_bug.cgi?id=233561

        Reviewed by Jonathan Bedard.

        bug233339 moved AuthedBlueprint to webkitflaskpy, but flask needs to
        be registered before being imported to make sure AutoInstall takes
        care of it. This avoids `ModuleNotFound: flask` errors running the
        tests from a clean tree.

        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py:

2021-11-29  Angelos Oikonomopoulos  <angelos@igalia.com>

        Consider Source/cmake relevant for JSC
        https://bugs.webkit.org/show_bug.cgi?id=233552

        Reviewed by Aakash Jain.

        Changes in Source/cmake may well be relevant for JSC.

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

2021-11-29  Nikolas Zimmermann  <nzimmermann@igalia.com>

        [LBSE] Add runtime flag for Layer-based SVG engine (LBSE)
        https://bugs.webkit.org/show_bug.cgi?id=233211
        <rdar://problem/85711597>

        Reviewed by Sam Weinig.

        Add build option ('build-webkit --(no-)layer-based-svg-engine') and
        runtime flag ('LayerBasedSVGEngineEnabled' in LBSE enabled builds) to
        switch between the SVG engines.

        The actual SVG code changes will follow in subsequent patches,
        this just adds the infrastructure for LBSE.

        * Scripts/webkitperl/FeatureList.pm: Add mapping from 'layer-based-svg-engine' -> 'ENABLE_LAYER_BASED_SVG_ENGINE'.

2021-11-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Signal state-changed:selected is not emitted for listbox elements when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233521

        Reviewed by Adrian Perez de Castro.

        Add test cases to check that the signal is now emitted as expected.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::isSelected):
        (testAccessibleStateChanged):
        (testSelectionListBox):
        (testSelectionMenuList):

2021-11-26  Lauro Moura  <lmoura@igalia.com>

        [GTK] Gardening API test WebKit.OnDeviceChangedCrash as flaky timeout

        Unreviewed test gardening.

        Flakiness seems to have been introduced between 243131@main and
        243249@main.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [GTK][a11y] MenuListPopup elements should implement selection interface too when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233519

        Reviewed by Adrian Perez de Castro.

        Add a test case for menu list.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testSelectionListBox):
        (testSelectionMenuList):
        (beforeAll):

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

        [GTK][a11y] Add implementation of selection interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=233494

        Reviewed by Adrian Perez de Castro.

        Add tests case for selection interface and WTR implementation.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testSelectionListBox):
        (beforeAll):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::clearSelectedChildren const):

2021-11-25  Jean-Yves Avenard  <jya@apple.com>

        Avoid flattening a SharedBuffer when reading reading it through SharedBufferChunkReader.
        https://bugs.webkit.org/show_bug.cgi?id=233481
        rdar://problem/85733358

        Reviewed by Cameron McCormack.

        Add API tests.
        API tests original data come from the original bug that added
        SharedBufferChunkReader (bug 59946) and then expanded.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::readAllChunks):
        (TestWebKitAPI::checkChunks):
        (TestWebKitAPI::checkDataInRange):
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.h:

2021-11-25  Lauro Moura  <lmoura@igalia.com>

        [GTK] Gardening API test authentication-success flaky timeout

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-11-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        GraphicsContextGL implementations should have separate class definitions
        https://bugs.webkit.org/show_bug.cgi?id=233491

        Reviewed by Antti Koivisto.

        Adjust TestGraphicsContextGLOpenGLCocoa to
        TestGraphicsContextGLCocoa after GraphicsContextGLOpenGL
        Cocoa variant rename to GraphicsContextGLCocoa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLCocoa.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLOpenGLCocoa.mm.
        (TestWebKitAPI::createDefaultTestContext):
        (TestWebKitAPI::changeContextContents):
        (TestWebKitAPI::TEST_F):

2021-11-25  Kimmo Kinnunen  <kkinnunen@apple.com>

        ANGLE Metal: The memory backing IOSurfaces of former client buffer pbuffers is leaked
        https://bugs.webkit.org/show_bug.cgi?id=233328
        <rdar://problem/85563187>

        Reviewed by Antti Koivisto.

        Add tests testing Cocoa GraphicsContextGLOpenGL drawing buffer
        recycling behavior.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Sources.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ImageBufferTests.cpp:
        (TestWebKitAPI::imageBufferPixelIs):
        (TestWebKitAPI::memoryFootprintChangedBy): Deleted.
        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLOpenGLCocoa.mm:
        (TestWebKitAPI::createDefaultTestContext):
        (TestWebKitAPI::changeContextContents):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/TestUtilities.h: Added.
        * TestWebKitAPI/TestUtilities.cpp: Added.
        Add few useful functions to TestUtilities.h so that different
        tests can use them.

2021-11-23  Lauro Moura  <lmoura@igalia.com>

        [GTK] GdkRGBA expects colors to be in the 0.0 to 1.0 range
        https://bugs.webkit.org/show_bug.cgi?id=233452

        Reviewed by Michael Catanzaro.

        GTK4 debug was hitting assertInRange inside ColorTypes.h due to 255
        being used as the max value, while GdkRGBA expects the value to be
        between 0.0 and 1.0, per the official docs [1][2].

        [1] https://docs.gtk.org/gdk3/struct.RGBA.html
        [2] https://docs.gtk.org/gdk4/struct.RGBA.html

        * MiniBrowser/gtk/BrowserWindow.c:

2021-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Change hardware-acceleration-policy setting default value to always
        https://bugs.webkit.org/show_bug.cgi?id=233418

        Reviewed by Michael Catanzaro.

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

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

        Fix buildbot command timeout issue for remote tests
        https://bugs.webkit.org/show_bug.cgi?id=233309

        Reviewed by Adrian Perez de Castro.

        Occasionally, buildbots that execute the JSC tests on remote devices
        would stop producing any output and eventually get killed due to a timeout.

        The issue is that run-jsc-stress-tests would start an ssh command
        (overwhelmingly likely, the command to copy over the payload), then the remote
        board would stop responding.

        Introduce a timeout option to forEachRemote and bound the waiting time.
        Could also do this for each command individually (and this would make it
        straightforward to GC zombie processes) but seems way more fragile than
        doing it at the thread level.

        * Scripts/run-jsc-stress-tests:

2021-11-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove old concurrent display list logic that's no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=233433

        Reviewed by Sam Weinig.

        See WebCore ChangeLog for more details.

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

2021-11-22  Geza Lore  <glore@igalia.com>

        [JSC] Make sharing of unlinked baseline code possible on JSVALUE32_64
        https://bugs.webkit.org/show_bug.cgi?id=232624

        Reviewed by Yusuke Suzuki.

        Add extra SunSpider run on 32-bit platforms exerciseing baseline JIT
        code sharing.

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

2021-11-22  Angelos Oikonomopoulos  <angelos@igalia.com>

        Move detection of flaky JSC tests to run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=232529

        Reviewed by Jonathan Bedard.

        Currently, flaky detection happens by
        ReRunJavaScriptCoreTests. Unfortunately, this means that we end up
        rerunning all JSC tests when there's even a single failure. Even
        worse, when the tree is broken (as sometimes happens on ARM32 and
        MIPS) we end up

        1. running the tests once (they fail)
        2. running all tests again
        3. running all tests again without the patch

        This means the queue slows down a lot, since it runs all JSC
        stress tests 3 times.

        This patch attempts to eliminate step 2, while also being more
        reliable about handling flaky tests. Since we no longer need to
        rerun the whole test suite, we can spend more CPU time on
        identifying tests that might be flaky. The user can pass in
        --treat-failing-as-flaky=passPercentage,maxTries,maxFailing. If
        less than maxFailing tests failed, we run them again (up to
        maxTries) until we can tell whether they pass more than
        passPercentage of the time. This should result in less false
        positives compared to ReRunJavaScriptCoreTests, as we'll no longer
        declare a flaky test a failure if it happens to fail two times in
        a row. In order to remove ReRunJavaScriptCoreTests, the patch
        unconditionally enables --treat-failing-as-flaky by default in the
        JSC EWS queues.

        Implementation-wise, the patch generalizes the existing retry loop in
        run-jsc-stress-tests (for dealing with flaky remote hosts) to (a) work
        with any runner and (b) also retry flaky tests. As flaky handling is
        impractical to test manually, it also abstracts-out the retry logic so
        that we can test with predetermined results. This means we need to
        e.g. pass the runlist around instead of treating it as a global,
        capturing the main logic in classes and having a subclass provide
        methods to be called back and so on. The patch does not shy away from
        refactoring code when it makes sense but also doesn't go out of its
        way to refactor (e.g. there's still a lot of duplication between the
        default and ruby writers).

        Downsides: we can no longer detect flakiness in the binary tests
        (testair, testb3, ...). However, I'm not aware of any instance of
        flakiness in those tests. The retry loop is now being used for all
        runners, which means the results analysis path for e.g. the make
        runner is now a bit more complicated. Detecting flaky tests needs
        code somewhere, but this moves the detection code before the
        result reporting, so is a bit riskier. The self tests should
        counterbalance this.
        * CISupport/ews-build/steps.py:
        Kill ReRunJavaScriptCoreTests and enable --treat-failing-as-flaky.
        Defaults to 60% pass percentage, 10 maxTries and a limit of 200
        failing tests.
        (RunJavaScriptCoreTests):
        (RunJavaScriptCoreTests.__init__):
        (RunJavaScriptCoreTests.start):
        (RunJavaScriptCoreTests.evaluateCommand):
        (RunJavaScriptCoreTests.commandComplete):
        (RunJavaScriptCoreTests.getResultSummary):
        (RunJavaScriptCoreTests._addToLog):
        (AnalyzeJSCTestsResults.start):
        (ReRunJavaScriptCoreTests): Deleted.
        (ReRunJavaScriptCoreTests.evaluateCommand): Deleted.
        * CISupport/ews-build/steps_unittest.py:
        Update to match the changes in steps.py. Some testcases no longer
        apply.
        * Scripts/jsc-stress-test-helpers/shell-runner.sh:
        Don't deduce the test list manually, expect it as an argument instead.
        * Scripts/run-javascriptcore-tests:
        Propagate info on test flakiness.
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:
        Refactor the execution logic to use the abstracted-out code in
        executor.rb. Use the retry loop on every runner.
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        Update the test-writer files for the changes to run-jsc-stress-tests.
        Move prepareFooRunner and testRunnerCommand to a class so that we can
        keep state (for the new argument to the shell runner).
        * Scripts/webkitruby/jsc-stress-test-writer-playstation.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:
        * Scripts/webkitruby/jsc-stress-test/executor.rb: Added.
        Implement a generic retry loop and define an array of virtual
        tests (using predefined test results for each iteration).
        * Scripts/webkitruby/jsc-stress-test/test-result-evaluator.rb: Added.
        Encapsulate the logic on whether a test has passed or not
        (Did we get any results? Were those results enough to declare a
        flaky/non-flaky test a pass?) and add a number of tests.

2021-11-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add an API test for batch image analysis (-[WKWebView _startImageAnalysis:])
        https://bugs.webkit.org/show_bug.cgi?id=233331

        Reviewed by Sam Weinig.

        Add a new API teset to exercise the `-_startImageAnalysis:` SPI introduced in r285949, along with helper
        functions to simulate `VKImageAnalysis` results from VisionKitCore. See below for more details.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ImageAnalysisTests.mm:
        (-[TestWKWebView waitForImageAnalysisRequests:]):
        (TestWebKitAPI::createWebViewWithTextRecognitionEnhancements):
        (TestWebKitAPI::swizzledProcessRequestWithResults):
        (TestWebKitAPI::swizzledProcessRequestWithError):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::swizzledProcessRequest): Deleted.

        Add an API test that uses `-_startImageAnalysis:` to perform batch image analysis over 5 image elements on the
        page, and verify that the text results are injected back into the page.

        * TestWebKitAPI/Tests/WebKitCocoa/multiple-images.html: Added.
        * TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.h: Added.
        * TestWebKitAPI/cocoa/ImageAnalysisTestingUtilities.mm: Added.
        (-[TestVKQuad initWithTopLeft:topRight:bottomLeft:bottomRight:]):
        (-[TestVKWKTextInfo initWithString:quad:]):
        (-[TestVKWKTextInfo string]):
        (-[TestVKWKTextInfo quad]):
        (-[TestVKWKLineInfo initWithString:quad:children:]):
        (-[TestVKWKLineInfo children]):
        (-[TestVKImageAnalysis initWithLines:]):
        (-[TestVKImageAnalysis allLines]):
        (TestWebKitAPI::createQuad):
        (TestWebKitAPI::createTextInfo):
        (TestWebKitAPI::createLineInfo):
        (TestWebKitAPI::createImageAnalysis):
        (TestWebKitAPI::createImageAnalysisWithSimpleFixedResults):

        Add helper functions to create and return mock objects that represent VKImageAnalysis, VKWKLineInfo,
        VKWKTextInfo and VKQuad.

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

        Dispatch all AccessibilityUIElement parameterized attribute requests to the AX thread for isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=233377
        <rdar://problem/85613334>

        Reviewed by Chris Fleizach.

        To simulate AT client requests in isolated tree mode, all parameterized
        attribute requests should be dispatched to the AX thread.
        This patch adds AccessibilityUIElement::attributeValueForParameter that
        does the appropriate dispatch to the AX thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributeValue):
        (WTR::AccessibilityUIElement::attributeValue const):
        (WTR::AccessibilityUIElement::attributeValueForParameter const):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        (WTR::AccessibilityUIElement::searchTextWithCriteria):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::lineIndexForTextMarker const):
        (WTR::AccessibilityUIElement::misspellingTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::textMarkerRangeForRange):
        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (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):
        (WTR::_convertMathMultiscriptPairsToString):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of image interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232782

        Reviewed by Adrian Perez de Castro.

        Add unit tests for the image interface.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testImageBasic):
        (beforeAll):

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

        Implement extension-path variant of redirect action in WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=233351

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::makeBackend):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (TEST_F):

2021-11-19  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Add headers for [_WKWebAuthenticationPanel makeCredentialWithClientDataHash] and [_WKWebAuthenticationPanel getAssertionWithClientDataHash]
        https://bugs.webkit.org/show_bug.cgi?id=233371
        <rdar://problem/85607248>
        
        Reviewed by Brent Fulgham.

        Add tests for [_WKWebAuthenticationPanel makeCredentialWithClientDataHash] and 
        [_WKWebAuthenticationPanel getAssertionWithClientDataHash].

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

2021-11-19  Robert Jenner  <Jenner@apple.com>

        [ Monterey ] TestWebKitAPI.WebSocket.PageWithAttributedBundleIdentifierDestroyed (API-test) is a constant timeout 
        https://bugs.webkit.org/show_bug.cgi?id=233224

        Unreviewed test gardening.

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

2021-11-18  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Indicate to user the default option
        https://bugs.webkit.org/show_bug.cgi?id=233342
        <rdar://problem/85573383>

        Reviewed by Ryan Haddad.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/terminal.py:
        (Terminal.choose): Surround the default option with square brackets.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/terminal_unittest.py:
        (TerminalTests.test_choose_triple):
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.github): We should construct a user owned mirror by default.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/land_unittest.py:
        (TestLand.test_default):
        (TestLand.test_canonicalize):
        (TestLand.test_svn):
        (TestLandGitHub):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py:
        (TestSetup.test_github):

2021-11-19  Brady Eidson  <beidson@apple.com>

        More webpushd architecture work
        https://bugs.webkit.org/show_bug.cgi?id=233295

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS-internal.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements:
        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::TEST):

2021-11-18  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Move AuthedBlueprint to webkitflaskpy
        https://bugs.webkit.org/show_bug.cgi?id=233339
        <rdar://problem/85571604>

        Reviewed by Ryan Haddad.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/api_routes.py: Import
        AuthedBlueprint from webkitflaskpy.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/view_routes.py: Ditto.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.
        * Scripts/libraries/webkitflaskpy/setup.py: Ditto.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py: Bump Export object.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/authed_blueprint.py: Renamed from
        Tools/Scripts/libraries/resultsdbpy/resultsdbpy/flask_support/authed_blueprint.py.

2021-11-19  Brent Fulgham  <bfulgham@apple.com>

        Add support for web app manifest icons in WebKit/UI Process layer
        https://bugs.webkit.org/show_bug.cgi?id=233350
        <rdar://problem/84311569>

        Reviewed by Chris Dumez.

        Add a new API test to exercise the _WKApplicationManifestIcon API. 

        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (ApplicationManifestParserTest::testIconsSizes):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm:
        (TestWebKitAPI::TEST):

2021-11-19  Robert Jenner  <Jenner@apple.com>

        [ Monterey ]TestWebKitAPI.PrivateClickMeasurement.EphemeralWithAttributedBundleIdentifier (API-test) is a constant timeout
        https://bugs.webkit.org/show_bug.cgi?id=233345

        Unreviewed test gardening.

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

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of document interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232755

        Reviewed by Adrian Perez de Castro.

        Add unit test for the document interface and WTR implementation.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testDocumentBasic):
        (beforeAll):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of action interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232749

        Reviewed by Adrian Perez de Castro.

        Add a unit test for the action interface and WTR implementation.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testActionBasic):
        (beforeAll):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::press):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of hypertext interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232708

        Reviewed by Adrian Perez de Castro.

        Add unit tests to check hypertext interface.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testHypertextBasic):
        (beforeAll):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GLIB] Add new test case to /jsc/class

        Add a test case to check using JSC_TYPE_VALUE for a JSCClass property.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (setFooValue):
        (getFooValue):
        (testJSCClass):

2021-11-19  Arcady Goldmints-Orlov  <agoldmints@igalia.com>

        REGRESSION(r285859) [GTK][WPE] a number of accessibility/* tests crash on GTK and WPE
        https://bugs.webkit.org/show_bug.cgi?id=233221

        Reviewed by Carlos Garcia Campos.

        Add null checks in the ATK code to ensure AccessibilityUIElement::create()
        is not passed a NULL pointer.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):

2021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add implementation of hyperlink interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232707

        Reviewed by Adrian Perez de Castro.

        Add unit tests to check hyperlink interface and implement AccessibilityUIElement::url() in WTR.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testTextReplacedObjects):
        (testHyperlinkBasic):
        (beforeAll):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::url):

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

        Allow all redirect schemes when compiling a content rule list
        https://bugs.webkit.org/show_bug.cgi?id=233338

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::checkCompilerError):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (compileContentRuleList):

2021-11-18  Robert Jenner  <Jenner@apple.com>

        [ Monterey ] TestWebKitAPI.WebpagePreferences.WebsitePoliciesDuringRedirect is a constant timeout
        <rdar://80476146>

        Uneviewed test gardening.

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

2021-11-18  Robert Jenner  <Jenner@apple.com>

        [ Monterey ] 2 TestWebKitAPI.WebKit.DisplayName (api-tests) are constantly failing
        <rdar://80353834>

        Uneviewed test gardening.

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

2021-11-18  Robert Jenner  <Jenner@apple.com>

        [ Monterey ] 2 TestWebKitAPI.WebKit.DisplayName (api-tests) are constantly failing
        <rdar://80353834>

        Uneviewed test gardening.

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

2021-11-18  Jonathan Bedard  <jbedard@apple.com>

        Link Python packages to GitHub
        https://bugs.webkit.org/show_bug.cgi?id=233318
        <rdar://problem/85551201>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version, link to GitHub.
        * Scripts/libraries/webkitcorepy/setup.py: Bump version, link to GitHub.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version.
        * Scripts/libraries/webkitflaskpy/setup.py: Bump version, link to GitHub.
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py: Bump version.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version, link to GitHub.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.

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

        [GTK][a11y] Add implementation of value interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232300

        Reviewed by Adrian Perez de Castro.

        Add new unit test for the value interface and implement WTR value support.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testValueBasic):
        (beforeAll):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):

2021-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add initial WTR accessibility support when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230259

        Reviewed by Adrian Perez de Castro.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
        (WTR::findAccessibleObjectById):
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::platformName):
        (WTR::AccessibilityController::axRunLoop):
        (WTR::AccessibilityController::executeOnAXThreadAndWait):
        (WTR::AccessibilityController::executeOnAXThread):
        (WTR::AccessibilityController::executeOnMainThread):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::elementForRelationAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::attributesOfElement):
        (WTR::attributesOfElements):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::checkElementState):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::roleValueToString):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::isChecked const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isVisible const):
        (WTR::AccessibilityUIElement::isOffScreen const):
        (WTR::AccessibilityUIElement::isCollapsed const):
        (WTR::AccessibilityUIElement::isSingleLine const):
        (WTR::AccessibilityUIElement::isMultiLine const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::stringAtOffset):
        (WTR::AccessibilityUIElement::characterAtOffset):
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        * WebKitTestRunner/gtk/main.cpp:
        (main):

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

        MediaPlayerAVFoundation should support rvfc
        https://bugs.webkit.org/show_bug.cgi?id=231945

        Reviewed by Eric Carlson.

        Enable rvfc by default in test runner.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/TestController.cpp:

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

        [GLIB] jsc_value_object_define_property_accessor() throws an exception when called on a value without a wrapper instance
        https://bugs.webkit.org/show_bug.cgi?id=233253

        Reviewed by Michael Catanzaro.

        Add unit tests to check jsc_value_object_define_property_accessor().

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (getIntProperty):
        (setIntProperty):
        (testJSCObject):

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

        Implement most of redirect and modify-headers action types
        https://bugs.webkit.org/show_bug.cgi?id=233268

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::checkCompilerError):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (compileContentRuleList):
        (navigationDelegateAllowingActiveActionsOnTestHost):
        (TEST_F):

2021-11-17  John Wilander  <wilander@apple.com>

        PCM: Add capability for click destination to fire triggering event without cross-site requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=233173
        <rdar://79426605>

        Reviewed by Alex Christensen.

        These changes are just a correction of a function name:
        sourceUnlinkableToken() to sourceSecretToken()

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):

2021-11-17  Ryan Haddad  <ryanhaddad@apple.com>

        ASSERT NOT REACHED under WebKit::Daemon::ConnectionToMachService seen with TestWebKitAPI.WebPushD.BasicCommunication and PermissionManagement
        https://bugs.webkit.org/show_bug.cgi?id=232857

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm: Fix number in version check.

2021-11-17  Ryan Haddad  <ryanhaddad@apple.com>

        [Monterey] TestWebKitAPI.PrivateClickMeasurement.Daemon* tests timing out: Failed to connect to mach service org.webkit.pcmtestdaemon.service
        https://bugs.webkit.org/show_bug.cgi?id=232890

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST): Disable tests for Monterey.

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

        Enable adattributiond testing on iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=233285

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::testDaemonPList):
        (TestWebKitAPI::cleanUpDaemon):
        (TestWebKitAPI::TEST):

2021-11-17  Ryan Haddad  <ryanhaddad@apple.com>

        ASSERT NOT REACHED under WebKit::Daemon::ConnectionToMachService seen with TestWebKitAPI.WebPushD.BasicCommunication and PermissionManagement
        https://bugs.webkit.org/show_bug.cgi?id=232857

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::TEST): Disable the tests for Monterey.

2021-11-16  Ryan Haddad  <ryanhaddad@apple.com>

        [macOS Debug] TestWebKitAPI.WKInspectorExtensionDelegate.InspectedPageNavigatedCallbacks is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231847

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm: Disable test in the debug configuration.

2021-11-17  Zixing Liu  <liushuyu011@gmail.com>

        [GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers
        https://bugs.webkit.org/show_bug.cgi?id=203273

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme): Added a new test to test getting and setting HTTP headers in custom URI scheme handlers

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

        [webkitscmpy] Load secrets in kubernetes
        https://bugs.webkit.org/show_bug.cgi?id=233158
        <rdar://problem/85433499>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, export Environment.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
        (credentials): Use Environment instead of os.environ.
        * Scripts/libraries/webkitcorepy/webkitcorepy/environment.py: Added.
        (Environment):
        (Environment.instance): Construct a shared Environmant intance.
        (Environment.__init__):
        (Environment.load): Load secrets in file directory.
        (Environment.get): Check environment variable and then secret store.
        (Environment.__getitem__):
        (Environment.__setitem__):
        (Environment.keys): Iterate through secret store and environment variables.
        (Environment.values): Ditto.
        (Environment.items): Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/environment_unittest.py: Added.
        (TestEnvironment):
        (TestEnvironment.test_basic):
        (TestEnvironment.test_scoped):
        (TestEnvironment.test_list):

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

        [git-webkit] Mark landed changes as merged
        https://bugs.webkit.org/show_bug.cgi?id=233056
        <rdar://problem/85351564>

        Reviewed by Dewei Zhu.

        For BitBucket and GitHub to recognize a pull-request as merged, the target
        branch must be updated with the exact commit to be merged as the merge occurs.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/land.py:
        (Land.main): Update source branch when merging commits to target branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.update): Only delete values if they exist.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/land_unittest.py:
        (TestLand):
        (TestLandGitHub):
        (TestLandBitBucket):

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

        Crash under WebKit::WebPageProxy::commitProvisionalPage()
        https://bugs.webkit.org/show_bug.cgi?id=233199
        <rdar://57659921>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-11-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser][WK2] Show a message box for a provisional navigation failure
        https://bugs.webkit.org/show_bug.cgi?id=233170

        Reviewed by Don Olmstead.

        Show a MessageBox if a provisional navigation failed.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didFailProvisionalNavigation):
        * MiniBrowser/win/WebKitBrowserWindow.h:

2021-11-16  Zhifei Fang  <zhifei_fang@apple.com>

        Make run-javascript-core-test and run-jsc-stress-tests support a customized identity file
        https://bugs.webkit.org/show_bug.cgi?id=232453

        Reviewed by Ryan Haddad.

        * Scripts/run-javascriptcore-tests: Add idFilePath field for remote config.
        * Scripts/run-jsc-stress-tests: Add idFilePath field for remote config.
        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture): Provide -i option to ssh

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

        [iOS] Do not require the web browser entitlement to opt into captive portal mode
        https://bugs.webkit.org/show_bug.cgi?id=233191

        Reviewed by Brent Fulgham.

        Update API test coverage accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-11-16  Andres Gonzalez  <andresg_22@apple.com>

        Fix for accessibility/mac/replace-text-with-range-on-webarea-element.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=233160
        <rdar://problem/85436385>

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::replaceTextInRange):
        Dispatches to the AX thread the call to the wrapper's
        [accessibilityReplaceRange withText:] method.

2021-11-16  Brady Eidson  <beidson@apple.com>

        Enable webpushd tests in the iOS simulator.
        https://bugs.webkit.org/show_bug.cgi?id=233149

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::testWebPushDaemonPList): Add a key to allow an OSLaunchdJob executable to break out of the simulator runtime root.

2021-11-16  Tyler Wilcock  <tyler_w@apple.com>

        AX: Stop returning AccessibilityUIElements backed by a null pointer
        https://bugs.webkit.org/show_bug.cgi?id=233138

        Reviewed by Andres Gonzalez.

        Prior to this patch, some callers of AccessibilityUIElement::create
        passed null `id`s, resulting in a seemingly valid AccessibilityUIElement
        that is actually backed by a null pointer. This makes writing tests harder,
        since you can't rely on common operations like `!myElement` to do the right thing.

        With this patch, we add a RELEASE_ASSERT to
        AccessibilityUIElement::create requiring the passed pointer to be
        valid. This patch also fixes up some callsites where we could (and did) pass null pointers.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp:
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::focusedElement):
        Return RefPtr instead of Ref, since it's possible that no element is
        focused.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::create):
        Add RELEASE_ASSERT() to verify passed pointer is valid.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::focusedElement const):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[AccessibilityNotificationHandler _notificationReceived:]):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        Don't call AccessibilityUIElement::create with null pointers.

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

        Make valgrind work properly without extra environment variables
        https://bugs.webkit.org/show_bug.cgi?id=230460

        Reviewed by Carlos Garcia Campos.

        Exempt valgrind.h from the style checker.

        * Scripts/webkitpy/style/checker.py:

2021-11-14  Brady Eidson  <beidson@apple.com>

        Get daemon API ready to work in the iOS simulator (starting with WebPushD)
        https://bugs.webkit.org/show_bug.cgi?id=232982

        Reviewed by Geoff Garen.

        To get this working we needed to:
        - Have the Daemons installed in a simulator-runtime-root-visible path
        - Point the OSLaunchDJob plist to the simulator-relative path, not Mac-relative
        - Solve the "How do I kill existing instances to run a clean test?" problem within the simulator.
        
        This patch does those things.
        
        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        
        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (TestWebKitAPI::testWebPushDaemonPList):
        (TestWebKitAPI::setUpTestWebPushD):
        (TestWebKitAPI::cleanUpTestWebPushD):
        
        * TestWebKitAPI/cocoa/DaemonTestUtilities.h:
        * TestWebKitAPI/cocoa/DaemonTestUtilities.mm:
        (TestWebKitAPI::registerPlistWithLaunchD):
        (TestWebKitAPI::pidOfFirstDaemonInstance):
        (TestWebKitAPI::killFirstInstanceOfDaemon):

2021-11-13  Simon Fraser  <simon.fraser@apple.com>

        Implement UIScriptController.sendEventStream() for DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=233090

        Reviewed by Wenson Hsieh.
        
        Implement UIScriptControllerMac::sendEventStream(), sharing some event dispatching code from
        EventSendingController.

        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        (-[EventSendingController sendScrollEventAt:deltaX:deltaY:units:wheelPhase:momentumPhase:timestamp:]):
        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::gesturePhaseFromString):
        (WTR::momentumPhaseFromString):
        (WTR::eventSenderFromView):
        (WTR::UIScriptControllerMac::sendEventStream):

2021-11-13  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, reverting r285772.

        Ownership issues in some XCode installs

        Reverted changeset:

        "[webkitpy] Symlink daemons into simulator runtime root"
        https://bugs.webkit.org/show_bug.cgi?id=233080
        https://commits.webkit.org/r285772

2021-11-13  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make accessibility/mac/header.html test async to fix it for isolated tree mode
        https://bugs.webkit.org/show_bug.cgi?id=233017

        Reviewed by Andres Gonzalez.

        This patch implements the `domIdentifier` attribute for DumpRenderTree
        elements. When making this test async, I wanted to use this attribute,
        hence the implementation in this patch.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (domIdentifierCallback): Added.
        (AccessibilityUIElement::getJSClass):
        Add "domIdentifer" entry to `staticValues[]`.

        * DumpRenderTree/AccessibilityUIElement.h:
        Add AccessibilityUIElement::domIdentifier const definition.
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::domIdentifier const): Added.
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::domIdentifier const): Added.
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::domIdentifier const):Added.

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

        [webkitpy] Symlink daemons into simulator runtime root
        https://bugs.webkit.org/show_bug.cgi?id=233080
        <rdar://problem/85362551>

        Reviewed by Brady Eidson.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Symlink daemons in the WebKit.framework into
        simulator runtime root.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.symlink):
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.symlink):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.path_to_daemons):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.Runtime.__init__): Add root.
        (SimulatedDeviceManager._create_device_with_runtime): Pass runtime.
        (SimulatedDevice.__init__): Link to runtime.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:

2021-11-12  Darin Adler  <darin@apple.com>

        Make sort-Xcode-project-file idempotent
        https://bugs.webkit.org/show_bug.cgi?id=233077

        Reviewed by Wenson Hsieh.

        * Scripts/sort-Xcode-project-file:
        (sortChildrenByFileName): Fix the "directories first" rule to work in a straightforward
        way that is symmetric, and make the rest of the rules fall through when two files are
        equal for the same reason. Also remove almost all names from the special list of filenames
        to treat as files even though they have no extension. For example, "jsc" is a directory
        in WebCore and it's not needed to sort products correctly in JavaScriptCore. And
        "minidom" is both a product and a directory.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Sorted.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Ditto.

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

        [git-webkit] Checkout pull-requests
        https://bugs.webkit.org/show_bug.cgi?id=233042
        <rdar://problem/85343364>

        Reviewed by Dewei Zhu.

        In GitHub, pull-requests are somewhat difficult to checkout because they're
        attached to a specific user's mirror of WebKit. Automate this process.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init.py__: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git): Add username:branch regex.
        (Git.checkout): Allow checking out of branches by username:branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add `git checkout -B`.
        (Git.checkout): `-B` will force checkout a branch, even if one already exists.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub): Embed error message in 404 response.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/checkout.py:
        (Checkout.main): Allow direct checkout of pull-request instead of relying
        exclusively on branches.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/clean.py:
        (Clean.main): Add newline.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/checkout_unittest.py:
        (TestCheckout.test_no_pr_github):
        (TestCheckout.test_no_pr_bitbucket):
        (TestCheckout.test_pr_github):
        (TestCheckout.test_pr_bitbucket):

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

        Set default general storage directory to websiteDataDirectory
        https://bugs.webkit.org/show_bug.cgi?id=232985

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/file-system-access.salt: Added.

2021-11-12  Peng Liu  <peng.liu6@apple.com>

        Promote WKPreferences._fullScreenEnabled to API
        https://bugs.webkit.org/show_bug.cgi?id=230784
        <rdar://83255308>

        Reviewed by Jer Noble.

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

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

        Demote WKWebpagePreferences.captivePortalModeEnabled API to SPI
        https://bugs.webkit.org/show_bug.cgi?id=233059

        Reviewed by Geoffrey Garen.

        Update API test accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [git-webkit] Open closed pull-request when running pr
        https://bugs.webkit.org/show_bug.cgi?id=232765
        <rdar://problem/85084318>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.request): Ensure displayId is set when updating PR.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub.request): Make sure that new pull-requests are open.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): Open closed pull-requests.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.update): Only set head if user specifies head.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

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

        Disable MathML when in Captive Portal Mode
        https://bugs.webkit.org/show_bug.cgi?id=233013
        <rdar://84567129>

        Reviewed by Brent Fulgham.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        WebKit is unable to recover if a WebProcess gets terminated while it is launching
        https://bugs.webkit.org/show_bug.cgi?id=233001
        <rdar://85302938>

        Reviewed by Brent Fulgham.

        Add API test coverage, this test was timing out before the fix.

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

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

        Disable getUserMedia() when in Captive Portal Mode
        https://bugs.webkit.org/show_bug.cgi?id=233021

        Reviewed by Brent Fulgham.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-11-11  Brent Fulgham  <bfulgham@apple.com>

        [WebAuthn] Stop serializing BufferSource and Vector<uint8_t> duplicates of identifiers
        https://bugs.webkit.org/show_bug.cgi?id=233011
        <rdar://problem/85313807>

        Reviewed by Chris Dumez.

        The original WebAuthn logic converted WebCore::BufferSource objects to Vector<uint8_t>
        during serialization, which created a weird design where some code dealt with BufferSource
        objects, and other with Vectors, and lots of converting to and from these types. It also caused
        WebAuthn data structures to have two places where this information might live, with the
        UIProcess using one representation, and the WebContent process using another.

        This patch revises the code as follows:

        1. The identifiers are always stored as BufferSource, and the same member is used in UIProcess
           and WebContent process when accessing this information.
        2. We now serialize BufferSource directly.

        Tested by existing WebAuthn test cases (API and Layout tests)

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp:
        (TestWebKitAPI::constructMakeCredentialRequest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):

2021-11-11  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in LayoutTests in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=233014

        Reviewed by Chris Fleizach.

        This fixes the following tests in isolated tree mode:
        accessibility/image-link-inline-cont.html [ Crash ]
        accessibility/image-link.html [ Crash ]
        accessibility/internal-link-anchors2.html [ Crash ]

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::allAttributes):
        Need to retain the pointer returned by
        AccessibilityUIElement::descriptionOfValue.

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

        REGRESSION: 26 InAppBrowserPrivacy API failures on iOS
        https://bugs.webkit.org/show_bug.cgi?id=233016
        <rdar://problem/85315536>

        Reviewed by Brent Fulgham.

        In r285594, I have the browser entitlement to TestWebKit API to make my new API test work
        on iOS. However, it turns out that 26 InAppBrowserPrivacy API tests rely on the browser
        entitlement not being present. I am therefore reverting this part of my change.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-11-11  Andres Gonzalez  <andresg_22@apple.com>

        Fix for thread deadlocks during layout tests in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=232999
        <rdar://problem/85300861>

        Reviewed by Chris Fleizach.

        In isolated tree mode, AccessibilityUIElement calls into the AX API are
        dispatched to a secondary, mocked thread created by the
        AccessibilityController to simulate AT requests off of the main thread.
        The main thread, in which all AccessibilityUIElement methods are run,
        is blocked to wait for the results from the AX thread, to then continue
        execution of JS layout tests.
        The deadlocks arise when the AX API call cannot be fulfilled on the
        secondary thread and needs to be dispatched to the main thread that is
        now blocked. The main thread is waitng for the AccessibilityController's
        secondary mocked thread, and that thread is waitng for the main thread
        to compute results for the AX API request.
        This patch introduces a workaround by spinning the main thread run loop
        right after the API calls are dispatched to the AX thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::executeOnAXThreadAndWait):
        (WTR::AccessibilityController::spinMainRunLoop const):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:

2021-11-11 Rachel Ginsberg <rginsberg@apple.com>

        Add support in WebCore for web app manifest icons
        https://bugs.webkit.org/show_bug.cgi?id=231339

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (ApplicationManifestParserTest::parseIconFirstTopLevelProperty):
        Function to create JSON for icon attributes. This is
        necessary because icons are in a list, whereas all other
        attributes in app manifest are not.
        (ApplicationManifestParserTest::parseIconFirstTopLevelPropertyForSrc):
        Needed to make a slightly different version to add a src URL, since
        it is required for a given icon to be added to the vector.

        (ApplicationManifestParserTest::testIconsSrc):
        (ApplicationManifestParserTest::testIconsType):
        (ApplicationManifestParserTest::testIconsSizes):
        (ApplicationManifestParserTest::testIconsPurposes):
        Functions for each of the icon attributes.

        (TEST_F):
        Calls the various icon test functions with different input

2021-11-11  Kimmo Kinnunen  <kkinnunen@apple.com>

        REGRESSION (iOS 15, GPU Process): Fails to load texture map
        https://bugs.webkit.org/show_bug.cgi?id=231471
        <rdar://problem/84328146>

        Reviewed by Tim Horton.

        Add a test that tries to assert that GraphicsContext::drawImageBuffer() does not increase
        memory footprint of the process. However, leave the test disabled as currently
        it seems that the WTF::memoryFootprint() measurement does not see all the
        memory releases the CG does.

        * TestWebKitAPI/Tests/WebCore/ImageBufferTests.cpp:
        (TestWebKitAPI::memoryFootprintChangedBy):
        (TestWebKitAPI::imageBufferPixelIs):
        (TestWebKitAPI::TEST):

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

        Infinite recursion under InjectedBundlePage::exitFullScreenForElement()
        https://bugs.webkit.org/show_bug.cgi?id=232948
        <rdar://80588375>

        Reviewed by Eric Carlson.

        When WebCore indicates an error in exiting fullscreen, WebKit will respond by attempting to
        close any outstanding fullscreen sessions by calling WebFullScreenManager::close(). If this
        occurs in the InjectedBundlePage client during a call into WKBundlePageWillExitFullScreen()
        or WKBundlePageWillDidFullScreen(), this call will recurse into
        InjectedBundlePage::exitFullScreenForElement(), and cause a stack overflow.

        Track the current state of fullscreen on a per-InjectedBundlePage basis, and bail out if
        the state has been modified due to recursion.

        Add a HashMap to map WKBundlePageRef onto InjectedBundlePages. Use that map to find the
        particular InjectedBundlePage being requested to enter fullscreen. Add an enumerated
        set of Fullscreen states and a private ivar for tracking that state.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::InjectedBundlePage::~InjectedBundlePage):
        (WTR::InjectedBundlePage::enterFullScreenForElement):
        (WTR::InjectedBundlePage::exitFullScreenForElement):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

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

        Turn off various preferences when in captive portal mode
        https://bugs.webkit.org/show_bug.cgi?id=232958
        <rdar://84622396>

        Reviewed by Brent Fulgham.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-11-11  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] http server is not properly tear down
        https://bugs.webkit.org/show_bug.cgi?id=221554

        Reviewed by Adrian Perez de Castro.

        In Linux when the layout tests are manually interrupted it might lead to Apache not being
        cleanly stopped. On the next run it would then fail to start, usually failing to setup its
        'scoreboard' with SHM. The proposed solution is to look for stale SHM segments, eg. segments
        allocated but not attached to any process, and remove them, before starting the Apache
        process.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd._remove_stale_shm_segments):
        (LayoutTestApacheHttpd._spawn_process):

2021-11-11  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] webkit-flatpak-run-nightly infinite self-call loop
        https://bugs.webkit.org/show_bug.cgi?id=230400

        Reviewed by Adrian Perez de Castro.

        Port the changes landed in r272712 for the webkit-bwrap script, which we can't directly use
        within webkit-flatpak-run-nightly because it's nice to keep it as standalone as possible.

        * Scripts/webkit-flatpak-run-nightly:

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

        We should not kill all WebContent processes whenever the WebAuthn process crashes
        https://bugs.webkit.org/show_bug.cgi?id=232970
        <rdar://83941760>

        Reviewed by Geoff Garen.

        Update API test coverage to reflect behavior change.

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

2021-11-10  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Unify _WKWebAuthenticationPanel SPI and AuthenticatorCoordinator's ClientDataJson generation 
        https://bugs.webkit.org/show_bug.cgi?id=232965
        <rdar://problem/85268216>

        Reviewed by Brent Fulgham.

        Update api tests to reflect different clientDataJson format from WebAuthenticationUtils

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

2021-11-10  Tim Nguyen  <ntim@apple.com>

        Remove non-standard -webkit-border-fit CSS property
        https://bugs.webkit.org/show_bug.cgi?id=229564

        Reviewed by Simon Fraser.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2021-11-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Build WebGPU on our bots
        https://bugs.webkit.org/show_bug.cgi?id=232924

        Reviewed by Dean Jackson and Alex Christensen.

        Simply tell the build script about the existence of WebGPU.

        * Scripts/build-webkit:

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

        Unreviewed, reverting r285603.
        https://bugs.webkit.org/show_bug.cgi?id=232963

        broke the watchOS build

        Reverted changeset:

        "[Cocoa] Build WebGPU on our bots"
        https://bugs.webkit.org/show_bug.cgi?id=232924
        https://commits.webkit.org/r285603

2021-11-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Build WebGPU on our bots
        https://bugs.webkit.org/show_bug.cgi?id=232924

        Reviewed by Dean Jackson.

        Simply tell the build script about the existence of WebGPU.

        * Scripts/build-webkit:

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

        Implement serialization and deserialization of redirect and modify headers actions for WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=232901

        Reviewed by Timothy Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):

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

        Add basic support for launching CaptivePortalMode WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=232737
        <rdar://84473037>

        Reviewed by Brent Fulgham.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-11-10  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make ancestor computation cheaper by setting flags upon child insertion
        https://bugs.webkit.org/show_bug.cgi?id=232466

        Reviewed by Andres Gonzalez.

        This patch adds bit-flags (named AXAncestorFlags) to our accessibility objects,
        and sets these flags upon child insertion to enable cheap
        determination of whether any object has ancestors of certain types
        (e.g. a document role ancestor). Some AX clients need this
        information, and WebKit can compute it more efficiently than they can.

        The following flags are added in this patch:
          - HasDocumentRoleAncestor
          - HasWebApplicationAncestor
          - IsInDescriptionListDetail
          - IsInDescriptionListTerm
          - IsInCell

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (hasDocumentRoleAncestorCallback):
        (hasWebApplicationAncestorCallback):
        (isInDescriptionListDetailCallback):
        (isInDescriptionListTermCallback):
        (isInCellCallback):
        Added all of the above.

        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::hasDocumentRoleAncestor const):
        (AccessibilityUIElement::hasWebApplicationAncestor const):
        (AccessibilityUIElement::isInCell const):
        Added all of the above.
        (AccessibilityUIElement::isInDescriptionListDetail const): Added.
        (AccessibilityUIElement::isInDescriptionListTerm const): Added.
        (WTR::AccessibilityUIElement::isInDefinitionListDefinition const): Deleted.
        (WTR::AccessibilityUIElement::isInDefinitionListTerm const): Deleted.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::hasDocumentRoleAncestor const):
        (AccessibilityUIElement::hasWebApplicationAncestor const):
        (AccessibilityUIElement::isInDescriptionListDetail const):
        (AccessibilityUIElement::isInDescriptionListTerm const):
        (AccessibilityUIElement::isInCell const):
        Added all of the above.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::hasDocumentRoleAncestor const):
        (WTR::AccessibilityUIElement::hasWebApplicationAncestor const):
        (WTR::AccessibilityUIElement::isInCell const):
        Added all of the above.
        (WTR::AccessibilityUIElement::isInDefinitionListDefinition const): Deleted.
        (WTR::AccessibilityUIElement::isInDefinitionListTerm const): Deleted.
        (WTR::AccessibilityUIElement::isInDescriptionListDetail const): Added.
        (WTR::AccessibilityUIElement::isInDescriptionListTerm const): Added.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        Add new attributes hasDocumentRoleAncestor, hasWebApplicationAncestor,
        isInDescriptionListDetail, and isInDescriptionListTerm. Change
        isInTableCell() to be an attribute named isInCell.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::hasDocumentRoleAncestor const): Added.
        (WTR::AccessibilityUIElement::hasWebApplicationAncestor const): Added.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::hasDocumentRoleAncestor const):
        (WTR::AccessibilityUIElement::hasWebApplicationAncestor const):
        (WTR::AccessibilityUIElement::isInDescriptionListDetail const):
        (WTR::AccessibilityUIElement::isInDescriptionListTerm const):
        (WTR::AccessibilityUIElement::isInCell const):
        Added all of the above.

2021-11-10  Darin Adler  <darin@apple.com>

        [CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions
        https://bugs.webkit.org/show_bug.cgi?id=232220

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST): Removed extra argument to URLWithUserTypedString/Deprecated.

2021-11-10  Philippe Normand  <pnormand@igalia.com>

        [GLib] apply-build-revision fails when git-svn is not installed
        https://bugs.webkit.org/show_bug.cgi?id=232929

        Reviewed by Michael Catanzaro.

        Attempt to get the build revision from the git log if the git-svn call failed, either
        because git-svn is not installed or the metadata in .git/svn is incomplete.

        * glib/apply-build-revision-to-files.py:
        (get_revision_from_most_recent_git_commit):
        (get_build_revision):

2021-11-10  Antti Koivisto  <antti@apple.com>

        Hasher should be able to hash pointers
        https://bugs.webkit.org/show_bug.cgi?id=232927

        Reviewed by Kimmo Kinnunen.

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

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

        Unreviewed, reverting r285536.
        https://bugs.webkit.org/show_bug.cgi?id=232915

        causes API test crashes

        Reverted changeset:

        "[CF] Reduce duplication and unneeded buffer allocations and
        copying in URL code, also remove unused methods and functions"
        https://bugs.webkit.org/show_bug.cgi?id=232220
        https://commits.webkit.org/r285536

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

        Unify build of TestWebKitAPI/Tests/WebKitCocoa
        https://bugs.webkit.org/show_bug.cgi?id=232768

        Reviewed by Tim Horton.

        I found that the Fullscreen.LayoutConstraints was not being built because FullscreenLayoutConstraints.mm was not being built.
        Now that it is being built it times out, so I disabled it.

        * TestWebKitAPI/DeprecatedGlobalValues.cpp: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm.
        (resetGlobalState):
        * TestWebKitAPI/DeprecatedGlobalValues.h: Copied from Tools/TestWebKitAPI/Tests/WebKit/AboutBlankLoad.cpp.
        * TestWebKitAPI/DeprecatedGlobalValues.mm: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm.
        * TestWebKitAPI/Scripts/generate-unified-sources.sh:
        * TestWebKitAPI/Sources.txt:
        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AVFoundationPreference.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLs.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AsyncPolicyForNavigationResponse.mm:
        (-[TestAsyncNavigationDelegate webView:didFinishNavigation:]):
        (-[TestAsyncNavigationDelegate webView:didFailNavigation:withError:]):
        (-[TestAsyncNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleParameters.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ClientCertificateDelegate webView:didFinishNavigation:]):
        (-[ProposedCredentialDelegate webView:didFinishNavigation:]):
        (-[ServerTrustDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[ServerTrustDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTestWKView::SetUp):
        (WebKit2_CommandBackForwardTestWKView::loadFiles):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate _webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuImageUIDelegate _webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/CookieAcceptPolicy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/CustomUserAgent.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (-[DecidePolicyForNavigationActionController webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoubleDefersLoading.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DuplicateCompletionHandlerCalls.mm:
        (-[DuplicateCompletionHandlerCallsDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitPiPOnSuspendVideoElement.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenLayoutConstraints.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (-[IPCTestingAPIDelegate webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/IconLoadingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[AppBoundDomainDelegate webView:didFailProvisionalNavigation:withError:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (-[DatabaseProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBInPageCache.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBUserDelete.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/JavaScriptDuringNavigation.mm:
        (-[JSNavigationDelegate webView:didFinishNavigation:]):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didStartProvisionalNavigation:]):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileThenReload.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageNullEntries.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (-[LocalStorageNavigationDelegate webView:didFinishNavigation:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageQuirkTest.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaSession.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (-[BroadcastChannelMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NotificationAPI.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (emptyReleaseInfoCallback):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PasteboardUtilities.h: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm.
        * TestWebKitAPI/Tests/WebKitCocoa/PasteboardUtilities.mm: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm.
        (createWebViewWithCustomPasteboardDataEnabled):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PrepareForMoveToWindow.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):
        (-[PSONNavigationDelegate webView:didCommitNavigation:]):
        (-[PSONUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProvisionalURLNotChange.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (-[ProxyDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookDelegate navigationError]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RequiresUserActionForPlayback.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimerDoesntFireEarly.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RunOpenPanel.mm:
        (-[RunOpenPanelUIDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webView:didCommitNavigation:]):
        (-[WKWebViewGoBackNavigationDelegate webView:didFinishNavigation:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeRegistry.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[TestSWAsyncNavigationDelegate webView:didFinishNavigation:]):
        (-[TestSWAsyncNavigationDelegate webView:didFailNavigation:withError:]):
        (-[TestSWAsyncNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        (-[ShouldOpenExternalURLsInNewWindowActionsController webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionNavigationDelegate webView:didFinishNavigation:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobThenDelete.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TopContentInset.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[UITestDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[ModalDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UploadDirectory.mm:
        (-[UploadDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserInitiatedActionInNavigationAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (resetInspectorGlobalState):
        (-[UIDelegateForTesting _webView:configurationForLocalInspector:]):
        (TEST):
        (resetGlobalState): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm:
        (resetGlobalState): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm:
        (resetGlobalState): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionHost.mm:
        (resetGlobalState): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (-[NavigationResponseTestDelegate webView:didFinishNavigation:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[RedirectSchemeHandler webView:didReceiveServerRedirectForProvisionalNavigation:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDiagnosticLogging.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebContentProcessDidTerminate.mm:
        (-[BasicNavigationDelegateWithoutCrashHandler webView:didStartProvisionalNavigation:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebSQLBasics.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[PopUpPoliciesDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/DateTimeInputsAccessoryViewTests.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/PreemptVideoFullscreen.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/WebGLPrepareDisplayOnWebThread.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/AccessingPastedImage.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/ClosingWebView.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/DeallocWebViewInEventListener.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/DownloadThread.mm:
        * TestWebKitAPI/Tests/WebKitObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        (-[AsyncPolicyDelegateForInsetTest webView:didFinishNavigation:]):
        * TestWebKitAPI/Tests/mac/ContentFiltering.mm:

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

        Unreviewed, reverting r285246.
        https://bugs.webkit.org/show_bug.cgi?id=232907

        Broke FixedVector

        Reverted changeset:

        "[JSC] Clean up StructureStubInfo initialization"
        https://bugs.webkit.org/show_bug.cgi?id=232652
        https://commits.webkit.org/r285246

2021-10-28  Darin Adler  <darin@apple.com>

        [CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions
        https://bugs.webkit.org/show_bug.cgi?id=232220

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST): Removed extra argument to URLWithUserTypedString/Deprecated.

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

        [WebGPU] Stub out methods in WebGPU.framework
        https://bugs.webkit.org/show_bug.cgi?id=232872

        Reviewed by Dean Jackson.

        * Scripts/webkitpy/style/checker.py:

2021-11-09  Stephan Szabo  <stephan.szabo@sony.com>

        [Windows] Non-find based status file finding in run-jsc-stress-tests needs to release status files
        https://bugs.webkit.org/show_bug.cgi?id=232851

        Reviewed by Don Olmstead.

        Change the reading of status files in the non-find search
        to properly scope the file access to release the status
        files.

        * Scripts/run-jsc-stress-tests:

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

        New spec: Block external protocol handler in sandboxed frames
        https://bugs.webkit.org/show_bug.cgi?id=231727
        <rdar://problem/84498192>

        Reviewed by Brent Fulgham.

        Add API test coverage.

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

2021-11-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EWS] Allow the optimization of running only the subset of failed tests on run-layout-tests-without-patch also for patches modifying the TestExpectations files
        https://bugs.webkit.org/show_bug.cgi?id=231265

        Reviewed by Alexey Proskuryakov.

        On r274475 an optimization was applied to run-layout-tests-without-patch to only
        run the subset of tests that failed with patch instead of the whole layout tests.
        But this optimization had a corner case where it couldn't be applied.
        It seems that we can still apply this optimization in this corner case if we pass
        '--skipped=always' to run-webkit-tests so that Skipped tests are not run even if
        those are specified as arguments on the command-line.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests.setLayoutTestCommand):
        (RunWebKitTestsWithoutPatch.setLayoutTestCommand):
        * CISupport/ews-build/steps_unittest.py:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_ews_corner_case_failing_test):
        (RunTest):
        (RunTest.test_ews_corner_case_failing_directory):
        (RunTest.test_ews_corner_case_skipped_test):
        (RunTest.test_ews_corner_case_skipped_directory):
        * Scripts/webkitpy/port/test.py:

2021-11-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Make WebGPU.xcodeproj and WebGPU.framework
        https://bugs.webkit.org/show_bug.cgi?id=231661

        Reviewed by Dean Jackson and Robin Morisset.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/sdkvariant.py:

2021-11-08  J Pascoe  <j_pascoe@apple.com>

        [WebAuthn] challenge does not get passed to -[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=232836
        rdar://85163927

        Reviewed by Brent Fulgham.

        -[_WKWebAuthenticationPanel getAssertionWithChallenge:origin:options:completionHandler:] receives
        an empty challenge, causing _WKWebAuthenticationPanel to immediately close when using the new UNIFIED_ASC_AUTH_UI. 

        This change encodes/decodes challenge in PublicKeyCredentialRequestOptions. Before this
        field was not used after xpc, but with the new UNIFIED_ASC_AUTH_UI it is.
        This change also adds an empty value for tests.

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

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

        Parse redirect and modify-headers actions for WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=232838

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):

2021-11-08  Devin Rousso  <drousso@apple.com>

        webView.scrollView.indicatorStyle does not work on iOS 15
        https://bugs.webkit.org/show_bug.cgi?id=232295
        <rdar://problem/82816423>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        (TEST.WKScrollViewTests.IndicatorStyleSetByClient): Added.
        (TEST.WKScrollViewTests.BackgroundColorSetByClient): Added.

2021-11-08  Manuel Rego Casasnovas  <rego@igalia.com>

        WPT test importer imports rel="mismatch" as the reference
        https://bugs.webkit.org/show_bug.cgi?id=207175
        <rdar://problem/69332102>

        Reviewed by Jonathan Bedard.

        Setting "-expected-mismatch" suffix for <meta rel="mismatch"> references from WPT.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests): Adding "-mismatch" suffix as needed.
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test): Store the reference type in test_info["type"].
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        (test_analyze_test_reftest_one_mismatch): Add new test cases for the reference type.

2021-11-08  Kate Cheney  <katherine_cheney@apple.com>

        [ iOS15 EWS ] TestWebKitAPI.AppPrivacyReport.LoadSimulatedRequest tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=232166
        <rdar://problem/84560948>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

2021-11-07  Simon Fraser  <simon.fraser@apple.com>

        Fix the CGEvent types used for wheel event generation from streams
        https://bugs.webkit.org/show_bug.cgi?id=232805

        Reviewed by Sam Weinig.

        The set of enum values for wheel event types are confusing, and I used the wrong ones in
        r285390, so fix that. Values are all the same other than kCGMomentumScrollPhaseEnd which is
        now correct.

        Also relax parsing of event steam JSON to allow "continue" for momentumPhase; this is the
        name of the CG-level enum, but AppKit calls this "changed". This will ease conversion from
        eventSender in tests.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::cgScrollPhaseFromPhase):
        (WTR::cgMomentumPhaseFromPhase):
        (WTR::EventSenderProxy::sendWheelEvent):
        (WTR::cgGesturePhaseFromString): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::eventPhaseFromString):
        (WTR::UIScriptControllerMac::sendEventStream):

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

        WTR::AccessibilityController::focusedElement() cannot get the focused object via WKAccessibilityFocusedObject in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=232756
        <rdar://problem/85069882>

        Reviewed by Chris Fleizach.

        WTR::AccessibilityController::focusedElement() was getting the focused
        object from WKAccessibilityFocusedObject, which has to run on the main
        thread. WKAccessibilityFocusedObject was in turn calling AXObjectCache::
        focusedUIElementForPage that tried to return the isolated focused
        object. The problem with this is that the isolated focused object can
        only be retrieved on the secondary thread.
        The solution in this patch is to retrieve the focused object from the
        root object as an AT client would do.
        Added AccessibilityUIElement::focusedElement in order to retrieve the
        focused object from the root object.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::focusedElement const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::focusedElement const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::focusedElement const):

2021-11-07  Simon Fraser  <simon.fraser@apple.com>

        Implement UIScriptController.sendEventStream() on macOS for wheel events
        https://bugs.webkit.org/show_bug.cgi?id=232794

        Reviewed by Tim Horton.

        eventSender.mouseScrollByWithWheelAndMomentumPhases() is problematic for timing-sensitive
        scrolling behaviors because the timestamps used are not under script control. It's also
        a rather unwieldy API.
        
        To make wheel event testing easier, implement enough of UIScriptController.sendEventStream()
        on macOS that it can generate a series of wheel events with predicable timestamps
        (currently hardcoded to be 16.6ms apart).

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::cgScrollPhaseFromPhase):
        (WTR::cgGesturePhaseFromString):
        (WTR::EventSenderProxy::sendWheelEvent):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::eventPhaseFromString):
        (WTR::UIScriptControllerMac::sendEventStream):

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

        Remove empty directories from from svn.webkit.org repository as of r285357
        <https://webkit.org/b/232773>

        Unreviewed clean up.

        * WebKitTestRunner/WebKitTestRunnerApp/en.lproj: Removed.

2021-11-06  Tyler Wilcock  <tyler_w@apple.com>

        AX: Rename usages DefinitionList to DescriptionList and DescriptionListDefinition to DescriptionListDetail
        https://bugs.webkit.org/show_bug.cgi?id=232775

        Reviewed by Chris Fleizach.

        Rename usages of "definition list" to "description list" and
        DescriptionListDefinition to DescriptionListDetail, as the latter
        versions of each pair are what the corresponding HTML elements are
        actually called.

        https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element
        https://html.spec.whatwg.org/multipage/grouping-content.html#the-dd-element

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isInDescriptionListDetail const): Added.
        (WTR::AccessibilityUIElement::isInDescriptionListTerm const): Added.
        (WTR::AccessibilityUIElement::isInDefinitionListDefinition const): Deleted.
        (WTR::AccessibilityUIElement::isInDefinitionListTerm const): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        Rename isInDefinitionListDefinition to isInDescriptionListDetail and
        isInDefinitionListTerm to isInDescriptionListTerm.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::isInDescriptionListDetail const): Added.
        (WTR::AccessibilityUIElement::isInDescriptionListTerm const): Added.
        (WTR::AccessibilityUIElement::isInDefinitionListDefinition const): Deleted.
        (WTR::AccessibilityUIElement::isInDefinitionListTerm const): Deleted.

2021-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Mail compose becomes unresponsive after pasting in text and attempting to type
        https://bugs.webkit.org/show_bug.cgi?id=232764
        rdar://84669661

        Reviewed by Geoff Garen.

        Add an API test that exercises the hang (and also verifies that we don't hit any debug assertions in the
        process).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/InsertTextAlternatives.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/simple-editor.html: Added.
        * TestWebKitAPI/ios/UIKitSPI.h:

        Drive-by fixes: remove some old staging declarations for UIKit SPI that has long been in the internal iOS 15
        SDK. Remove the staging categories and definitions, and move them to the non-internal SDK section instead.

2021-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        [steps.py] Update macOS versions in build_to_name_mapping
        https://bugs.webkit.org/show_bug.cgi?id=232732

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (PrintConfiguration.convert_build_to_os_name):
        * CISupport/ews-build/steps_unittest.py:
        * CISupport/build-webkit-org/steps.py:
        (PrintConfiguration.convert_build_to_os_name):
        * CISupport/build-webkit-org/steps_unittest.py:

2021-11-05  Lauro Moura  <lmoura@igalia.com>

        [Flatpak SDK] Print SDK version after update
        https://bugs.webkit.org/show_bug.cgi?id=232725

        Reviewed by Adrian Perez de Castro.

        Print the actual installed version after the update step, even if
        nothing was updated. This should help tracking the SDK versions across
        builds on the bots.

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

2021-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Monterey
        https://bugs.webkit.org/show_bug.cgi?id=232186

        Unreviewed follow-up fix.

        * CISupport/build-webkit-org/config.json: Should have used bot185, not bot186.

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

        Restructure WKContentRuleList Action storage during compilation and interpretation
        https://bugs.webkit.org/show_bug.cgi?id=232692

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::actionsEqual):
        (WebCore::ContentExtensions::operator<<): Deleted.

2021-11-05  Tim Horton  <timothy_horton@apple.com>

        generate-xcfilelists doesn't work if build path contains a `+`
        https://bugs.webkit.org/show_bug.cgi?id=232493

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (BaseGenerator._generate_derived):
        (BaseGenerator._replaceSinglePrefix):
        (BaseGenerator._replacePrefix):
        (BaseGenerator._unexpand._try_unexpand):
        (BaseGenerator._replace): Deleted.
        The xcfilelist generator had a regex injection issue that resulted in
        paths with not-very-special characters causing it to infinitely
        regenerate the xcfilelists; we can just use simple string prefix
        replacement instead.

2021-11-05  Devin Rousso  <drousso@apple.com>

        [css-values-4] viewport units should be floats
        https://bugs.webkit.org/show_bug.cgi?id=231644
        <rdar://problem/84172685>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:
        (evaluateForNumber):
        (getElementHeight):
        (TEST.CSSViewportUnits.AllSame):
        (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):

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

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

        [ic-stats.py] Change shebang to Python 3
        https://bugs.webkit.org/show_bug.cgi?id=232721
        <rdar://problem/85030782>

        Reviewed by Alexey Proskuryakov.

        * Scripts/ic-stats.py:

2021-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Embedded objects are not correctly handled by text interface with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=232622

        Reviewed by Andres Gonzalez.

        Add a test case to check handling of embedded objects by text interface.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testTextReplacedObjects):
        (beforeAll):

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

        [git-webkit] Add land command
        https://bugs.webkit.org/show_bug.cgi?id=231821
        <rdar://problem/84309339>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit: WebKit still uses Svn as it's canonical source of truth.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git._to_git_ref): Convert identifiers or revisions to git refs.
        (Git.checkout): Use shared _to_git_ref function.
        (Git.rebase): Support rebasing identifiers.
        (Git.pull): Generalize computation of the gmtoffset.
        (Git.diff_lines): Output diff between two refs.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add branch, push and diff commands.
        (Git.filter_branch): Support sed.
        (Git.pull): Mock `git pull`
        (Git.move_branch): Mock `git rebase`.
        (Git.push): Mock `git push`.
        (Git.reset): Mock `git reset HEAD~#`.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add land command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/land.py: Added.
        (Land.parser):
        (Land.main): Rebase the current branch against it's root, assign the reviewer, check for 'oops' messages,
        rebase against target branch, update target branch ref, optionally canonicalize, push (or svn dcommit) and
        update and close pull-request with information on the landed commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.gmtoffset): Add shared computation of GMT offset.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_commits): `git log` should exclude base ref.
        (TestGit.test_commits_branch): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/land_unittest.py: Added.
        (repository):
        (TestLand):
        (TestLandGitHub):
        (TestLandBitBucket):

2021-11-04  Jonathan Bedard  <jbedard@apple.com>

        [generate-webkit-css-docs] Change shebang to Python 3
        https://bugs.webkit.org/show_bug.cgi?id=232714
        <rdar://problem/85019719>

        Reviewed by Ryan Haddad.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/library/css/generate-webkit-css-docs: Use Python 3 shebang.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-11-04  Jonathan Bedard  <jbedard@apple.com>

        [run-webkit-websocketserver] Replace `/usr/bin/python` with `/usr/bin/env python`
        https://bugs.webkit.org/show_bug.cgi?id=232713
        <rdar://problem/85019074>

        Reviewed by Ryan Haddad.

        * Scripts/run-webkit-websocketserver:
        (openWebSocketServer):
        (closeWebSocketServer):

2021-11-04  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crashes in layout tests in AX isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=232680
        <rdar://problem/84987971>

        Reviewed by Chris Fleizach.

        Changed the return value of WTR::AccessibilityUIElement::attributeValue
        to be a RetainPtr<id> instead of id. This guaranties that the ObjC
        object pointed by it is not freed when the value is computed on the AX
        thread and utilized on the main thread.

        The following tests were crashing before and now pass:
        accessibility/mac/internal-link-when-document-has-fragment.html
        accessibility/svg-remote-element.html
        accessibility/url-test.html
        accessibility/video-element-url-attribute.html

        The following tests were failing before and now pass:
        accessibility/add-children-pseudo-element.html
        accessibility/aria-selected.html
        accessibility/aria-table-with-presentational-elements.html
        accessibility/mac/aria-columnrowheaders.html
        accessibility/mac/aria-details.html
        accessibility/mac/children-in-navigation-order-returns-children.html
        accessibility/mac/descriptionlist-not-ignored.html
        accessibility/mac/id-class-attributes.html
        accessibility/mac/landmark-not-ignored.html
        accessibility/mac/line-index-for-textmarker.html
        accessibility/mac/table-visible-rows.html
        accessibility/mac/treeitem-row-delegation.html
        accessibility/math-has-non-presentational-children.html
        accessibility/math-multiscript-attributes.html
        accessibility/radio-button-group-members.html
        accessibility/table-column-headers-with-captions.html
        accessibility/table-header-calculation-for-header-rows.html
        accessibility/table-roles-hierarchy.html
        accessibility/treeitem-child-exposed.html

        The following tests were timing out and now pass:
        accessibility/aria-combobox-control-owns-elements.html
        accessibility/loading-iframe-sends-notification.html

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributeValue):
        (WTR::AccessibilityUIElement::descriptionOfValue const):
        (WTR::AccessibilityUIElement::attributeValue const):
        (WTR::AccessibilityUIElement::domIdentifier const):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
        (WTR::AccessibilityUIElement::children const):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::elementForAttribute const):
        (WTR::AccessibilityUIElement::elementForAttributeAtIndex const):
        (WTR::AccessibilityUIElement::detailsElements const):
        (WTR::AccessibilityUIElement::errorMessageElements const):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::lineRectsAndText const):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::currentStateValue const):
        (WTR::AccessibilityUIElement::sortDirection const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::classList const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isOnScreen const):
        (WTR::AccessibilityUIElement::embeddedImageDescription const):
        (WTR::AccessibilityUIElement::imageOverlayElements const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::popupValue const):
        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
        (WTR::AccessibilityUIElement::mathRootRadicand const):
        (WTR::AccessibilityUIElement::pathDescription const):

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

        Remove QuickTimePluginReplacement and YouTubePluginReplacement
        https://bugs.webkit.org/show_bug.cgi?id=232400

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp: Removed.

2021-11-03  Yousuke Kimoto  <Yousuke.Kimoto@sony.com>

        Use 0.0.0.0 when "--all-interfaces" is given for websocket_server
        https://bugs.webkit.org/show_bug.cgi?id=231798
        <rdar://problem/84540538>

        Reviewed by Jonathan Bedard.

        When run-webkit-tests runs with "--all-interfaces", servers running
        on the host PC should use "0.0.0.0". It will help situations where
        host and target systems are discrete so that test programs can
        connect to test servers on the host PC.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket.__init__): Fixed a style check error.
        (PyWebSocket._prepare_config): Added "0.0.0.0" for --all-interfaces.

2021-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up StructureStubInfo initialization
        https://bugs.webkit.org/show_bug.cgi?id=232652

        Reviewed by Saam Barati.

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

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

        [ iOS Debug ] TestWebKitAPI.ResourceLoadStatistics.GrandfatherCallback is failing
        https://bugs.webkit.org/show_bug.cgi?id=232675

        Reviewed by Kate Cheney.

        Clearing website data attempts a connection with the daemon.
        For now, just tell it not to connect to the daemon.

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

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

        _pasteboardWithName should be thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=232670

        Reviewed by Tim Horton.

        _pasteboardWithName should be thread-safe, to match [NSPasteboard _pasteboardWithName].
        This was leading to flaky crashes in _pasteboardWithName getting called off the main
        thread from ShareKit code.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (+[DumpRenderTreePasteboard _pasteboardWithName:]):
        (+[DumpRenderTreePasteboard releaseLocalPasteboards]):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (+[WebKitTestRunnerPasteboard _pasteboardWithName:]):
        (+[WebKitTestRunnerPasteboard releaseLocalPasteboards]):

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

        [EWS] Add more bots to iOS layout and API test queues
        https://bugs.webkit.org/show_bug.cgi?id=232678

        Reviewed by Aakash Jain.

        * CISupport/ews-build/config.json:

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

        Expose fuzzy match data in layout test results
        https://bugs.webkit.org/show_bug.cgi?id=232523

        Reviewed by Jonathan Bedard.

        For a failing ref (or image) test, include the fuzzy matching data in full_results.json
        in the form "image_difference": { "max_difference": 13, "total_pixels": 167 }, and
        show that in the image comparison page that's written out for each test result.

        Fix some tests that relied on JSON property serialization ordering (we don't serialize
        with `sort_keys=True`).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._save_json_files):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.write_image_diff_files):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator.generate_times_ms_file):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureImageHashMismatch.formatted_diff_percent):
        (FailureImageHashMismatch):
        (FailureImageHashMismatch.formatted_fuzzy_data):
        (FailureImageHashMismatch.write_failure):
        (FailureReftestMismatch.message):
        (FailureReftestMismatch.formatted_diff_percent):
        (FailureReftestMismatch):
        (FailureReftestMismatch.formatted_fuzzy_data):
        (FailureReftestMismatch.write_failure):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (_interpret_test_failures):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (InterpretTestFailuresTest.test_interpret_test_failures):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_retrying_force_pixel_tests):

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

        [iOS] Need API for marking file requests as non-app-initiated
        https://bugs.webkit.org/show_bug.cgi?id=232506
        <rdar://problem/84824703>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/file-with-iframe.html: Added.

2021-11-03  Brady Eidson  <beidson@apple.com>

        Fix iOS API tests after r285199 
        https://bugs.webkit.org/show_bug.cgi?id=232649

        Unreviewed.

        * TestWebKitAPI/Tests/WebKitCocoa/NotificationAPI.mm: Definitely not ready for these tests to start running.

2021-11-02  Tim Horton  <timothy_horton@apple.com>

        UnicodeDecodeError in write_reftest copying a non-UTF8 expected result file
        https://bugs.webkit.org/show_bug.cgi?id=232643

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.write_reftest):
        If a reftest's -expected.html file is not valid UTF-8, and the test fails,
        when we copy the expected file from the layout tests directory to the
        test results directory, we attempt to parse it as UTF-8, resulting in
        an exception being thrown.

        Instead of needlessly reading in the file as a string and immediately
        writing it back out, just copy the file...

        I'm not sure there are any not-valid-UTF-8 *ref* tests in the tree, but
        there is at least one not-valid-UTF-8 *text* test, which can be run
        as a ref-test in some scenarios (see r285132), in which case this problem
        occurs: fast/css/line-height-determined-by-primary-font.html.

        Also, explicitly ensure the output directory exists before copying
        to avoid regressing r122505. Previously this was done inside _write_text_file.

2021-11-02  Per Arne  <pvollan@apple.com>

        REGRESSION (r268421): TestWebKitAPI.WebKit.PreferenceChanges* tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=221848
        <rdar://problem/70966379>

        Reviewed by Brent Fulgham.

        After r268421, the preferences are set asynchronously in the WebContent process, which introduced this flakiness.
        This patch addresses this by modifying the flaky tests to loop until the preference value is equal to the expected
        value.

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

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

        [webkitscmpy] Reduce autoinstalls on import
        https://bugs.webkit.org/show_bug.cgi?id=232574
        <rdar://problem/84894275>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Remove whichcraft (webkitcorepy registers it).
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py: Remove unused webkitscmpy imports.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py: Remote unused webkitcorepy import.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py: Move whichcraft to function.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py: Move jinja2 to function.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py: Move fasteners, xmltodict import to functions.

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

        PCM: Safari on iOS and macOS are not sending ad click attribution reports for Private Click Measurement
        https://bugs.webkit.org/show_bug.cgi?id=228104
        <rdar://problem/80991209>

        Reviewed by John Wilander.

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

2021-11-02  Tim Horton  <timothy_horton@apple.com>

        dumpAsText() tests don't get the ref-test treatment when using --self-compare-with-header
        https://bugs.webkit.org/show_bug.cgi?id=232611

        Reviewed by Jonathan Bedard.

        One oversight in r285132: a test can disable pixel dumping by calling
        dumpAsText(). This causes --self-compare-with-header to fall over because
        it expects every test to have pixel results (and that is the whole point).

        Add an un-overrideable `--force-dump-pixels` TestCommand argument,
        and adopt it for self-comparison tests.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_self_comparison_test):
        * Scripts/webkitpy/port/driver.py:
        (DriverInput.__init__):
        (DriverInput.__repr__):
        (Driver._command_from_driver_input):
        * TestRunnerShared/TestCommand.cpp:
        (WTR::parseInputLine):
        * TestRunnerShared/TestCommand.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

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

        https://bugs.webkit.org/show_bug.cgi?id=232593
        Remove isAppInitiated from _WKSessionState

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

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

        [webkitscmpy] Generalize pull-request title generation.
        https://bugs.webkit.org/show_bug.cgi?id=232463
        <rdar://problem/84784354>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.title_for): Compute pull-request title for a set of commits.
        (PullRequest.main): Generalize pull-request title generation.

2021-11-02  Zixing Liu  <liushuyu011@gmail.com>

        [GTK][WPE] Support setting status code and getting HTTP method in custom URI scheme handlers
        https://bugs.webkit.org/show_bug.cgi?id=231880

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme): Added tests to test new public APIs for WebKitGtk

2021-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        ImageDiff.cpp(74): warning C4477: 'fprintf' : format string '%lu' requires an argument of type 'unsigned long', but variadic argument 2 has type 'size_t'
        https://bugs.webkit.org/show_bug.cgi?id=232596

        Reviewed by Don Olmstead.

        Since r284764, MSVC reports the following warning and a suggestion.

        > Tools\ImageDiff\ImageDiff.cpp(74): warning C4477: 'fprintf' : format string '%lu' requires an argument of type 'unsigned long', but variadic argument 2 has type 'size_t'
        > Tools\ImageDiff\ImageDiff.cpp(74): note: consider using '%zu' in the format string

        * ImageDiff/ImageDiff.cpp:
        (processImages): Use %zu for size_t.

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

        [webkitscmpy] Only respect the latest review
        https://bugs.webkit.org/show_bug.cgi?id=231987
        <rdar://problem/84434991>

        Reviewed by Dewei Zhu.

        GitHub will report the entire history of a review, we should only
        respect the latest review state.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.reviewers):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        (TestNetworkPullRequestGitHub.test_approved_edits):

2021-11-01  Sam Sneddon  <gsnedders@apple.com>

        Improve LayoutTestFinder test coverage
        https://bugs.webkit.org/show_bug.cgi?id=232576

        Reviewed by Jonathan Bedard.

        Some of these are largely copied from layout_tests/run_webkit_tests_integrationtest.py, but
        in unit test form for the test finder.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy_unittest.py:
        (LayoutTestFinderTests.__init__):
        (LayoutTestFinderTests):
        (LayoutTestFinderTests.setUp):
        (LayoutTestFinderTests.tearDown):
        (LayoutTestFinderTests.test_find_no_paths_specified):
        (LayoutTestFinderTests.test_find_no_paths_sorted):
        (LayoutTestFinderTests.test_find_all_no_paths):
        (LayoutTestFinderTests.test_includes_other_platforms):
        (LayoutTestFinderTests.test_find_one_test):
        (LayoutTestFinderTests.test_find_platform):
        (LayoutTestFinderTests.test_find_platform_self):
        (LayoutTestFinderTests.test_find_platform_other):
        (LayoutTestFinderTests.test_find_platform_specific):
        (LayoutTestFinderTests.test_find_platform_specific_directory):
        (LayoutTestFinderTests.test_find_directory_includes_platform_specific):
        (LayoutTestFinderTests.test_find_glob):
        (LayoutTestFinderTests.test_find_glob_mixed_file_type_sorted):
        (LayoutTestFinderTests.test_find_glob_directory):
        (LayoutTestFinderTests.test_find_glob_directory_b):
        (LayoutTestFinderTests.test_find_glob_directory_e):
        (LayoutTestFinderTests.test_find_directory):
        (LayoutTestFinderTests.test_find_directory_trailing_slash):
        (LayoutTestFinderTests.test_find_directory_star):
        (LayoutTestFinderTests.test_preserves_order):
        (LayoutTestFinderTests.test_preserves_order_multiple_times):
        (LayoutTestFinderTests.test_preserves_order_directories):
        (LayoutTestFinderTests.test_preserves_order_mixed_file_type):
        (LayoutTestFinderTests.test_preserves_order_mixed_file_type_b):
        (LayoutTestFinderTests.test_find_directory_multiple_times):
        (LayoutTestFinderTests.test_no_reference):
        (LayoutTestFinderTests.test_glob_no_references):
        (LayoutTestFinderTests.test_find_with_skipped_directories):
        (LayoutTestFinderTests.test_find_with_skipped_directories_2):
        (LayoutTestFinderTests.test_is_test_file):
        (LayoutTestFinderTests.test_is_w3c_resource_file):
        (LayoutTestFinderTests.make_finder): Deleted.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.setUp): Re-enable tests on Python 3, as this now works
        (RunTest.test_child_processes_min): Also ignore tests in platform/
        * Scripts/webkitpy/port/test.py:

2021-11-01  Tim Horton  <timothy_horton@apple.com>

        Add a run-webkit-tests mode to A/B test a given feature
        https://bugs.webkit.org/show_bug.cgi?id=232553

        Reviewed by Jonathan Bedard.

        Add the argument --self-compare-with-header to run-webkit-tests, which
        can be used to test the impact of a given feature (or set of features;
        it accepts the standard test features header format).

        When tests are run in this mode, all tests are run in the ref-test
        style, but with the `expected` and `actual` results loading the same
        test file (ignoring the usual -expected.html or whatever); they differ
        only in the set of features/preferences enabled.

        This is especially useful for testing the impact of e.g. platform
        graphics features, where the difference between the shipping behavior
        and in-development behavior is more interesting than whether or not
        it actually makes the tests, as written, fail.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner):
        (SingleTestRunner._run_comparison_test):
        Add the comparison test runner, and prefer it if requested.

        One note here: the run with the options derived from the given header is
        considered the "actual" result and the default configuration the "expected".

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/driver.py:
        (DriverInput.__init__):
        (DriverInput.__repr__):
        (Driver._command_from_driver_input):
        Pass the comparison test header along to the test runner.

        Also, fix a longstanding error where --dump-jsconsolelog-in-stderr
        could get inserted immediately after --pixel-test, causing the test runner
        to consume it as the expected image hash! And leave a comment so nobody
        else has to debug this again...

        * TestRunnerShared/TestCommand.cpp:
        (WTR::parseInputLine):
        * TestRunnerShared/TestCommand.h:
        * TestRunnerShared/TestFeatures.cpp:
        (WTR::parseTestHeaderString):
        (WTR::parseTestHeader):
        (WTR::featureDefaultsFromComparisonTestHeader):
        Factor out the parsing of the part of the test header inside the [ ],
        since we use this format for the value of --self-compare-with-header as well.

        * TestRunnerShared/TestFeatures.h:
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::testOptionsForTest const):
        Merge the comparison header's options in to the test options before
        the test's own header, so that the comparison header wins.

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

        webkitpy: Remove obsolete port name
        https://bugs.webkit.org/show_bug.cgi?id=169302
        <rdar://problem/30953024>

        Reviewed by Alex Christensen.

        Removing a temporary workaround from r213654.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port): Remove mapping from 'ios' to 'ios-device.'

2021-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        TestWTF.WTF_CompactUniquePtrTuple.Subclassing is randomly failing on WinCairo tester bots
        https://bugs.webkit.org/show_bug.cgi?id=232556

        Reviewed by Yusuke Suzuki.

        "EXPECT_NE(oldPointer, a.pointer())" of line 241 was randomly
        failing on WinCairo tester bots. This seems a simple mistake of
        the test case. 'oldPointer' should be updated before destructing
        the old value.

        * TestWebKitAPI/Tests/WTF/CompactUniquePtrTuple.cpp:
        (WTF_CompactUniquePtrTuple::Subclassing):

2021-11-01  Brady Eidson  <beidson@apple.com>

        webpushd: Add mock in-memory registration, and the WKWebsiteDataStore SPI to manage them
        https://bugs.webkit.org/show_bug.cgi?id=232539

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
        (-[NotificationPermissionDelegate _webView:requestNotificationPermissionForSecurityOrigin:decisionHandler:]):
        (-[NotificationPermissionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::then):

2021-11-01  Devin Rousso  <drousso@apple.com>

        [ iOS15 EWS ] TestWebKitAPI.CSSViewportUnits.SameUnobscuredSizeOverrides flaky fails on EWS
        https://bugs.webkit.org/show_bug.cgi?id=232158
        <rdar://problem/84555218>

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:
        (TEST.CSSViewportUnits.AllSame):
        (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):

2021-11-01  Simon Fraser  <simon.fraser@apple.com>

        ImageDiff no longer needs a --tolerance argument, and fix sometimes-black diff images
        https://bugs.webkit.org/show_bug.cgi?id=232522

        Reviewed by Martin Robinson.

        ImageDiff no longer deals with tolerance, so remove `--tolerance` handling code in ImageDiff
        and the driving script.

        Also fix an issue where the diff image could be all black pixels even when there was a diff;
        we need to ensure that a pixel with any diff is non-zero before scaling, and we need to
        ensure that scaling by legacyDistanceMax doesn't overflow.

        * ImageDiff/ImageDiff.cpp:
        (processImages):
        (main):
        * ImageDiff/PlatformImage.cpp:
        (ImageDiff::PlatformImage::difference):
        * ImageDiff/PlatformImage.h:
        * ImageDiff/cg/PlatformImageCG.cpp:
        (ImageDiff::PlatformImage::createFromFile):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image):
        (ImageDiffer._start): No need to restart ImageDiff if the tolerance changed, since
        ImageDiff doesn't consult it. Tolerance in the python here just feeds into
        the ImageDiffResult.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image):

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

        Fix a typo in EWS emails

        Unreviewed minor fix.

        * CISupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.send_email_for_new_build_failure):
        (AnalyzeLayoutTestsResults.send_email_for_new_test_failures):
        * CISupport/ews-build/steps_unittest.py: Unit-test fix after 243670@main.

2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        Layer tree should not be stuck in frozen state after explicitly stopping a page load
        https://bugs.webkit.org/show_bug.cgi?id=232532
        rdar://84522357

        Reviewed by Tim Horton.

        Add support for `TestRunner.stopLoading()`, which immediately stops the page load, emulating what would normally
        happen if the user taps or clicks the "x" button to cancel loading in Safari. See the layout test for more
        details.

        * DumpRenderTree/TestRunner.cpp:
        (stopLoadingCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::stopLoading):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::stopLoading):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::stopLoading):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        Improve error handling in sendWithAsyncReply()
        https://bugs.webkit.org/show_bug.cgi?id=232508

        Reviewed by Darin Adler.

        Add API test coverage.

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

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

        Ensure we stop LayoutTest servers without them becoming zombies
        https://bugs.webkit.org/show_bug.cgi?id=225189
        <rdar://problem/77604119>

        Reviewed by Jonathan Bedard.

        Also increase the polling frequency in HttpServerBase._wait_for_action, as this is a major
        source of delay when running run-webkit-tests --dry-run due to the number of servers we're
        starting nowadays.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__): Rename self.returncode to _returncode
        (MockProcess.returncode): returncode should be None if process is still running
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._spawn_process): Store Popen object
        (Lighttpd._check_and_kill): Skip "kill" if process has returned
        (Lighttpd._is_server_running_on_all_ports): Correctly raise ServerError if it has returned
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.start): Change polling frequency for cygwin from 0.1Hz to default
        (HttpServerBase._wait_for_action): Increase default polling frequency to 10Hz from 1Hz
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._stop_running_server): Poll first so we don't have zombies keeping references to pipes

2021-10-30  Kate Cheney  <katherine_cheney@apple.com>

        [iOS 15] Loads after WKWebView session restore are marked as app-initiated 
        https://bugs.webkit.org/show_bug.cgi?id=232486
        <rdar://problem/84811692>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

2021-10-29  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Build fix after r285020
        https://bugs.webkit.org/show_bug.cgi?id=232494

        Unreviewed temporary Build Fix

        Remove test that requires unsupported WTF::FileSystem functions.

        * TestWebKitAPI/PlatformPlayStation.cmake:

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Revert r285034
        webkit.org/b/232166

        The test still times out in EWS.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r284917.

        Likely caused significant performance regression

        Reverted changeset:

        "Remove properties set by NSURLProtocol on NSURLRequest before
        serializing"
        https://bugs.webkit.org/show_bug.cgi?id=232332
        https://commits.webkit.org/r284917

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Fix AppleWin build after r285051
       ​https://bugs.webkit.org/show_bug.cgi?id=232462

        * DumpRenderTree/CMakeLists.txt:

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        [ Monterey iOS15 ] TestWebKitAPI.URLSchemeHandler.Ranges is a constant timeout
        https://bugs.webkit.org/show_bug.cgi?id=231394

        Reviewed by Jer Noble.

        For some reason, AVFoundation used to play videos from custom schemes when you respond to range requests with 1 fewer byte than requested.
        They stopped successfully playing videos in such circumstances, which is fine.  I had accidentally done that in my test.
        When I respond properly, the test starts passing again.

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

2021-10-29  John Pascoe  <j_pascoe@apple.com>

        Add last modified and creation time to +[_WKWebAuthenticationPanel getAllLocalAuthenticatorCredentials]
        https://bugs.webkit.org/show_bug.cgi?id=232390
        <rdar://problem/84689277>

        Reviewed by Darin Adler.

        These fields (creation time and last modified) are useful for providing context about credentials.
        The modifications to the tests verify they are properly added.

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

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Fix macOS clean build after r285047
        https://bugs.webkit.org/show_bug.cgi?id=232462

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn: Removed.

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

        [webkitscmpy] Assign PR to author
        https://bugs.webkit.org/show_bug.cgi?id=232348
        <rdar://problem/84685313>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub.request): Add assignees.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.create): Assign created PR to it's author.
        (GitHub.PRGenerator.update): Assign modified PR to it's editor.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py: Add assignees.

2021-10-29  Alex Christensen  <achristensen@webkit.org>

        Re-enable two AppPrivacyReport tests
        webkit.org/b/232166

        I ran them locally on iOS simulator and they ran fine.
        They were disabled during a tumultuous time, and the cause of their timeouts is likely resolved.
        I'll watch the bots and see if they agree.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

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

        [webkitscmpy] Add fetch and rebase
        https://bugs.webkit.org/show_bug.cgi?id=232447
        <rdar://problem/84770221>

        Reviewed by Dewei Zhu.

        To land commits, we need to be able to rebase a branch against another.
        Additionally, when rebasing, we need to discard stale cache bits. This
        is also true when pulling and rebasing against main.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.Cache.clear): Clear cache of a specific branch.
        (Git.rebase): Rebase a branch on top of another.
        (Git.fetch): Fetch specific branch ref.
        (Git.pull): Use generalized fetch command, clear cache for updated branch
        if that branch is not the default branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add rebase mock.
        (Git.rebase):
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): Recompute branch-point after rebase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (test_rebase):

2021-10-29  Takashi Komori  <Takashi.Komori@sony.com>

        WKAPI does not have any APIs to set cookie path to WKWebsiteDataStoreConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=232336

        Reviewed by Alex Christensen.

        Add cookie-path setting API for WKWebasiteDataStoreConfigurationRef.

        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebKit/CookieStorageFile.cpp: Added.
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST_F):

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

        [webkitscmpy] Fix commits set on branch
        https://bugs.webkit.org/show_bug.cgi?id=232443
        <rdar://problem/84763432>

        Reviewed by Darin Adler.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commits): We are appending to list of commits, not pre-pending.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGitHub.test_commits_branch_ref):

2021-10-28  Andres Gonzalez  <andresg_22@apple.com>

        Isolated tree mode: Dispatch all calls to [WebAccessibilityObjectWrapper accessibilityAttributeValue] in WTR::AccessibilityUIElement to the AX thread.
        https://bugs.webkit.org/show_bug.cgi?id=232415
        <rdar://problem/84738483>

        Reviewed by Chris Fleizach.

        This is necessary to simulate running accessibility layout tests on the
        secondary AX thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::descriptionOfValue const):
        (WTR::descriptionOfElements):
        (WTR::AccessibilityUIElement::attributeValue const):
        (WTR::AccessibilityUIElement::domIdentifier const):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
        (WTR::AccessibilityUIElement::children const):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::elementForAttribute const):
        (WTR::AccessibilityUIElement::elementForAttributeAtIndex const):
        (WTR::AccessibilityUIElement::detailsElements const):
        (WTR::AccessibilityUIElement::errorMessageElements const):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::lineRectsAndText const):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::currentStateValue const):
        (WTR::AccessibilityUIElement::sortDirection const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::classList const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isOnScreen const):
        (WTR::AccessibilityUIElement::embeddedImageDescription const):
        (WTR::AccessibilityUIElement::imageOverlayElements const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::popupValue const):
        (WTR::AccessibilityUIElement::selectedTextMarkerRange):
        (WTR::AccessibilityUIElement::resetSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
        (WTR::AccessibilityUIElement::mathRootRadicand const):
        (WTR::AccessibilityUIElement::pathDescription const):
        (WTR::descriptionOfValue): Deleted.
        (WTR::attributesOfElement): Deleted.

2021-10-28  Simon Fraser  <simon.fraser@apple.com>

        Prepare SingleTestRunnerTest to read fuzzy pixel matching data
        https://bugs.webkit.org/show_bug.cgi?id=232410

        Reviewed by Martin Robinson.

        Add code to SingleTestRunnerTest to get fuzzy pixel matching data from the <meta name=fuzzy>
        tag in a test in the case of a hash match failure[1]. In future this will be used to
        determine if the test can pass with acceptable fuzziness.
        
        [1] Strictly speaking this can result in wrong behavior; a test with <meta name=fuzzy> is
        supposed to fail if the differences are below the minimum specified values, so for correct
        WPT behavior we would need to always look for the meta tag. But to avoid the perf impact of
        always parsing tests, for now only look for the tag in the case of hash failure.

        Add unit tests for the new functionality in SingleTestRunner.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner):
        (SingleTestRunner._relative_reference_path):
        (SingleTestRunner._fuzzy_matching_values):
        (SingleTestRunner._test_passes_fuzzy_matching):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner_unittest.py: Added.
        (TestDriver):
        (TestDriver.run_test):
        (TestDriver.start):
        (TestDriver.stop):
        (SingleTestRunnerTest):
        (SingleTestRunnerTest._add_file):
        (SingleTestRunnerTest._make_test_runner):
        (SingleTestRunnerTest.test_fuzzy_matching_values):
        (SingleTestRunnerTest.test_fuzzy_matching_values_for_ref):

2021-10-28  Youenn Fablet  <youenn@apple.com>

        Fix CARingBuffer mix mode
        https://bugs.webkit.org/show_bug.cgi?id=232427
        <rdar://problem/84747657>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp:

2021-10-28  Simon Fraser  <simon.fraser@apple.com>

        Enhance test_parser.py to find fuzzy matching metadata
        https://bugs.webkit.org/show_bug.cgi?id=232399

        Reviewed by Martin Robinson.

        w3c/test_parser is used by wpt import code, and it knows how to parse a file for various
        meta tags. Enhance it to find <meta name=fuzzy> and return the data in test_info for future
        use by layout tests, using code copied from wpt/tools/manifest/sourcefile.py.

        Tested by new unit tests in test_parser_unittest.py

        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.analyze_test):
        (TestParser.has_fuzzy_metadata):
        (TestParser):
        (TestParser.fuzzy_metadata):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        (_test_info_from_test_with_contents):
        (test_simple_fuzzy_data):
        (test_nameless_fuzzy_data):
        (test_range_fuzzy_data):
        (test_nameless_range_fuzzy_data):
        (test_per_ref_fuzzy_data):

2021-10-28  David Kilzer  <ddkilzer@apple.com>

        [Tools] Enable -Wformat=2 warnings
        <https://webkit.org/b/232404>
        <rdar://problem/84728058>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        * ImageDiff/cg/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        * MiniBrowser/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        - Add -Wformat=2 switch, which includes -Wformat-nonliteral.

        * TestWebKitAPI/PlatformUtilities.h:
        (TestWebKitAPI::Util::waitForConditionWithLogging):
        - Add NS_FORMAT_FUNCTION() attribute.
        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        (TEST):
        - Change type of format string to `NSString *const`.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h:
        (ServiceWorkerTCPServer::request):
        (ServiceWorkerTCPServer::requestWithLocalhost):
        (ServiceWorkerTCPServer::requestWithFragment):
        - Call -[NSString initWithFormat:] in each method so the format
          string is used directly in the method call.
        (ServiceWorkerTCPServer::respondToRequests):
        - Change type of format string to `NSString *const`, and fix
          placeholder for strlen() return value.
        (ServiceWorkerTCPServer::requestWithFormat): Delete.
        (ServiceWorkerTCPServer::requestWithURLString):
        - Rename from requestWithFormat() and take a `url` parameter
          instead of a `format` parameter.
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::request const):
        - Change switch statement to set the scheme for the URL, and
          move the format string into +[NSString stringWithFormat:].

        * WebEditingTester/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        * WebKitTestRunner/Configurations/Base.xcconfig:
        (WARNINGS_CFLAGS):
        - Add -Wformat=2 switch, which includes -Wformat-nonliteral.

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

        [webkitscmpy] Generate commit message template
        https://bugs.webkit.org/show_bug.cgi?id=231023
        <rdar://problem/83722871>

        Unreviewed follow-up fix.

        * Scripts/git-webkit: Match repository base, not folder containing repository.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.git): Mark hook as executable.

2021-10-27  Alexey Proskuryakov  <ap@apple.com>

        AutoInstall should have separate install directories per CPU architecture
        https://bugs.webkit.org/show_bug.cgi?id=232403

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/__init__.py:

2021-10-27  Alex Christensen  <achristensen@webkit.org>

        Use correct String constructor in PrivateClickMeasurement.FraudPrevention API test
        https://bugs.webkit.org/show_bug.cgi?id=232362

        Reviewed by Darin Adler.

        The Vector<char> received in the CompletionHandler given to Connection::receiveHTTPRequest is not null terminated,
        so we need to call the String constructor that takes a length instead of assuming the byte after the Vector buffer is 0.

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

2021-10-27  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION: [iOS] TestWebKitAPI.InAppBrowserPrivacy.AppBoundDomainAllowsServiceWorkers is failing
        https://bugs.webkit.org/show_bug.cgi?id=227918

        Unreviewed fix to unskip failing test that was fixed by
        https://commits.webkit.org/239967@main.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-10-27  Simon Fraser  <simon.fraser@apple.com>

        Preserve image diff precision until display time
        https://bugs.webkit.org/show_bug.cgi?id=232365

        Reviewed by Martin Robinson.

        Keep the precise image diff percentage value, saving it in full_results.json, and
        only round it at presentation time in results.html.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._read):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image_failed_with_rounded_diff):

2021-10-27  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-Function-References] Add call_ref spec tests
        https://bugs.webkit.org/show_bug.cgi?id=229710

        Reviewed by Yusuke Suzuki.
        
        Add a new routine to run typed function references spec tests.

        * Scripts/run-jsc-stress-tests:

2021-10-27  Simon Fraser  <simon.fraser@apple.com>

        Store WPT-style fuzzy pixel matching data in ImageDiffResult
        https://bugs.webkit.org/show_bug.cgi?id=232352

        Reviewed by Martin Robinson.

        Always run ImageDiff with `--difference` so that it prints the "maxDifference=; totalPixels="
        output, and parse and store this output in ImageDiffResult.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tolerance.ImageDiffTestPort.diff_image):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffResult.__init__):
        (ImageDiffResult.__eq__):
        (ImageDiffResult.__repr__):
        (ImageDiffer._start):
        (ImageDiffer._read):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image.make_proc):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image_passed):
        (PortTestCase.test_diff_image_passed_with_tolerance):
        (PortTestCase.test_diff_image_failed_with_rounded_diff):
        (PortTestCase.test_diff_image_failed):
        * Scripts/webkitpy/port/test.py:

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

        [webkitscmpy] Ensure empty line before canonicalization
        https://bugs.webkit.org/show_bug.cgi?id=232103
        <rdar://problem/84521382>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/message.py:
        (main): Handle empty lines around identifier links, add empty line before identifier links.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:
        (TestCanonicalize.test_formated_identifier):
        (TestCanonicalize.test_existing_identifier):
        (TestCanonicalize.test_git_svn):
        (TestCanonicalize.test_git_svn_existing):
        (TestCanonicalize.test_branch_commits):
        (TestCanonicalize.test_number):

2021-10-27  Alexey Proskuryakov  <ap@apple.com>

        webkitdirs.pm should use JSON::XS when available
        https://bugs.webkit.org/show_bug.cgi?id=232354

        Reviewed by Dewei Zhu.

        JSON::XS is faster than JSON::PP. While it doesn't matter for webkitdirs' own use,
        where JSONs are tiny, other scripts that import webkitdirs.pm do care.

        * Scripts/webkitdirs.pm:

2021-10-26  Alex Christensen  <achristensen@webkit.org>

        Remove properties set by NSURLProtocol on NSURLRequest before serializing
        https://bugs.webkit.org/show_bug.cgi?id=232332
        <rdar://79227845>

        Reviewed by Geoff Garen.

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

2021-10-26  Roy Reapor  <rreapor@apple.com>

        webkitpy/autoinstalled/pyobjc_frameworks.py should not autoinstall frameworks if they can be imported without exceptions
        https://bugs.webkit.org/show_bug.cgi?id=232331

        Reviewed by Jonathan Bedard.
 
        Avoid autointalling pyobjc frameworks if the installed frameworks can be imported without generating an exception.

        * Scripts/webkitpy/autoinstalled/pyobjc_frameworks.py:
        (_import_modules):

2021-10-26  Tim Horton  <timothy_horton@apple.com>

        [GPU Process] `DisplayList::Recorder::getCTM` should include the device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=230647

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Add a test that getCTM returns the correct scale after applyDeviceScaleFactor is called.

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

        [webkitscmpy] Comment and close pull-requests
        https://bugs.webkit.org/show_bug.cgi?id=232095
        <rdar://problem/84515738>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.request): Add support for activities, opening and closing pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub.__init__): Add issues.
        (GitHub.request): Access issue underlying pull-request (which includes global comments).
        * Scripts/libraries/webkitscmpy/webkitscmpy/pull_request.py:
        (PullRequest.Exception): Added.
        (PullRequest.Comment): Added.
        (PullRequest.__init__): Add list of pull-request comments, metadata used by generator.
        (PullRequest.open): Re-open the pull-request.
        (PullRequest.close): Close the pull-request.
        (PullRequest.comment): Make a comment on the pull-request.
        (PullRequest.comments): List all comments on a pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.update): Handle closing and opening of the pull-request.
        (BitBucket.PRGenerator.comment): Make a comment on a pull-request.
        (BitBucket.PRGenerator.comments): List all comments on a pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.update): Handle closing and opening of the pull-request.
        (GitHub.PRGenerator.comment): Make a comment on a issue underpinning a pull-request.
        (GitHub.PRGenerator.comments): List all comments on the pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.PRGenerator.update): Add support for opening and closing a pull-request.
        (Scm.PRGenerator.comment): Make a comment on a pull-request.
        (Scm.PRGenerator.comments): List all comments for a pull-request
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

2021-10-26  Simon Fraser  <simon.fraser@apple.com>

        The script should decide when an image diff cases, not ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=232225

        Unreviewed; respond to review feedback.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._read):

2021-10-26  Alex Christensen  <achristensen@webkit.org>

        Update PCM test public key to one with RSA-PSS OID
        https://bugs.webkit.org/show_bug.cgi?id=231048

        Reviewed by John Wilander.

        In rdar://79069615 support for public keys with rsaEncryption OIDs was removed as stated on the blog at
        https://webkit.org/blog/11940/pcm-click-fraud-prevention-and-attribution-sent-to-advertiser/
        This implements enough ASN1 serialization to serialize a public key in the form accepted by WebKit now,
        which is described at https://datatracker.ietf.org/doc/html/rfc8017#appendix-A.2.3

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ASN1Utilities.cpp: Added.
        (ASN1::Object::sizeSerializedSize const):
        (ASN1::Object::serializeSize const):
        (ASN1::ObjectIdentifier::ObjectIdentifier):
        (ASN1::ObjectIdentifier::bytes const):
        (ASN1::Sequence::create):
        (ASN1::Sequence::Sequence):
        (ASN1::Sequence::elementEncodedLengthBytes const):
        (ASN1::IndexWrapper::IndexWrapper):
        (ASN1::Integer::Integer):
        (ASN1::BitString::BitString):
        (TestWebKitAPI::wrapPublicKeyWithRSAPSSOID):
        * TestWebKitAPI/Tests/WebCore/ASN1Utilities.h: Added.
        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):

2021-10-26  Tim Horton  <timothy_horton@apple.com>

        DisplayList::Recorder's clipBounds() becomes empty if a flip is applied to the CTM
        https://bugs.webkit.org/show_bug.cgi?id=232134

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Add a test ensuring that our clipBounds and CG's match through a series
        of simple transforms.

2021-10-26  Brady Eidson  <beidson@apple.com>

        Add helper classes and messaging infrastructure to launch webpushd and round trip a message to it
        https://bugs.webkit.org/show_bug.cgi?id=232262

        Reviewed by Alex Christensen.

        * MiniBrowser/mac/AppDelegate.m:
        (persistentDataStore):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestNotificationPermissionForSecurityOrigin:decisionHandler:]):

2021-10-26  Simon Fraser  <simon.fraser@apple.com>

        The script should decide when an image diff cases, not ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=232225

        Reviewed by Martin Robinson.

        Rather than have ImageDiff decide if the comparison passes or fails (with some built-in
        tolerance), have it just print the percentage difference, and have the script compare it
        against the tolerance.

        Code to prettify diff_percent is moved into the script (but should eventually
        move closer to display time).

        * ImageDiff/ImageDiff.cpp:
        (processImages):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._read):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image.make_proc):
        (PortTestCase.test_diff_image_passed):
        (PortTestCase):
        (PortTestCase.test_diff_image_passed_with_tolerance):
        (PortTestCase.test_diff_image_failed_with_rounded_diff):
        (PortTestCase.test_diff_image_failed):

2021-10-26  Kate Cheney  <katherine_cheney@apple.com>

        [ App Privacy Report ] Restoring a session after clearing the cache results in app initiated loads in Safari
        https://bugs.webkit.org/show_bug.cgi?id=232292
        <rdar://problem/84597422>

        Reviewed by Brent Fulgham.

        Update API test in 2 ways. First, close the original WebView to
        destroy the page's document loader as if the application was being
        quit. Second, clear history to make sure there are no cached loads.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

2021-10-26  Simon Fraser  <simon.fraser@apple.com>

        Have ImageDiff print the diff image when any pixel is different
        https://bugs.webkit.org/show_bug.cgi?id=232294

        Reviewed by Martin Robinson.
        
        ImageDiff currently only outputs the diff image when any pixel exceeds its built-in
        tolerance.

        To prepare for moving the "pass/fail" decision to script, have ImageDiff output the diff
        image when any pixel is different. Also have it write "#EOF" so that we're not reliant on
        the "diff:" line to terminate reading the output.

        Fix up webkitpy unit tests for #EOF parsing, presence of image when the test passes via
        tolerance, and to actually test which image data is present in the ImageDiffResult.

        * ImageDiff/ImageDiff.cpp:
        (processImages):
        (main):
        * ImageDiff/PlatformImage.cpp:
        (ImageDiff::PlatformImage::difference): Track legacyDistanceMax if any pixel diff is non-zero,
        since it's needed to scale the diff image.
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._read): Look for "#EOF" to terminate the output. Save the diff image, even
        if the test passed.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image.make_proc):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image_passed):
        (PortTestCase.test_diff_image_failed):
        (PortTestCase.test_diff_image_crashed):

2021-10-26  Simon Fraser  <simon.fraser@apple.com>

        Don't run ImageDiff a second time to generate diff images
        https://bugs.webkit.org/show_bug.cgi?id=232288

        Reviewed by Martin Robinson.

        Currently, for a ref test failure (which is always run with tolerance=0), we run ImageDiff a
        second time in FailureReftestMismatch.write_failure() with the intent of generating a diff
        image with zero tolerance.

        Fix by storing the ImageDiffResult in FailureReftestMismatch and FailureImageHashMismatch so
        we already have the diff image. We only regenerate it when the first diff was run with a
        non-zero tolerance (only relevant for pixel tests). To faciliate this, store the tolerance
        that was used inside ImageDiffResult too.

        * ImageDiff/ImageDiff.cpp:
        (main): Show tolerance in verbose logging.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image.ImageDiffTestPort.diff_image):
        (TestResultWriterTest):
        (TestResultWriterTest.test_reftest_diff_image):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureImageHashMismatch.__init__):
        (FailureReftestMismatch.__init__):
        (FailureReftestMismatch.write_failure):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (_interpret_test_failures):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (InterpretTestFailuresTest.test_interpret_test_failures):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tolerance.ImageDiffTestPort.diff_image):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffResult.__init__):
        (ImageDiffResult.__repr__):
        (ImageDiffer._read):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image):

2021-10-25  Ryan Haddad  <ryanhaddad@apple.com>

        Change default iOS simulator to one with a larger screen size
        https://bugs.webkit.org/show_bug.cgi?id=231844

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_specific_listing):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort):
        (IPhoneSimulatorPort):

2021-10-25  Alexey Proskuryakov  <ap@apple.com>

        Add perl 5.30 to kill-old-processes
        https://bugs.webkit.org/show_bug.cgi?id=232290

        Reviewed by Ryan Haddad.

        * CISupport/kill-old-processes:

2021-10-25  Kate Cheney  <katherine_cheney@apple.com>

        Clean up App Bound Domains tests
        https://bugs.webkit.org/show_bug.cgi?id=232278

        Reviewed by John Wilander.

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

2021-10-25  Simon Fraser  <simon.fraser@apple.com>

        webkitpy: Add an explicit ImageDiffResult.passed rather than relying on diff_image being non-None
        https://bugs.webkit.org/show_bug.cgi?id=232266

        Reviewed by Jonathan Bedard.
        
        A ref test was considered failing if it ImageDiffResult.diff_image was not None, allowing
        for confusing unit tests that used a value of True for diff_image.

        Fix by giving ImageDiffResult an explicit 'passes' field, and testing it rather than
        diff_image.

        Also used named arguments when creating ImageDiffResults for readability.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image): Use `diff_result.passed` as truth for whether the test passed,
        and only store the error_string in failure cases (which allows ImageDiff to spew diagnostic errors
        without triggering failures).
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image.ImageDiffTestPort.diff_image):
        (TestResultWriterTest):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tolerance.ImageDiffTestPort.diff_image):
        * Scripts/webkitpy/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffResult.__init__):
        (ImageDiffResult.__eq__):
        (ImageDiffResult.__repr__):
        (ImageDiffer._read):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.integration_test_image_diff):
        (PortTestCase.test_diff_image__missing_both):
        (PortTestCase.test_diff_image__missing_actual):
        (PortTestCase.test_diff_image__missing_expected):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image_passed):
        (PortTestCase.test_diff_image_failed):
        (PortTestCase.test_diff_image_crashed):
        * Scripts/webkitpy/port/test.py:

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

        WebKit ought to be able to play videos without Content-Length HTTP header fields and without range support
        https://bugs.webkit.org/show_bug.cgi?id=232174

        Reviewed by Geoff Garen.

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

2021-10-25  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Monterey
        https://bugs.webkit.org/show_bug.cgi?id=232186

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/factories_unittest.py:
        (TestExpectedBuildSteps):
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * CISupport/build-webkit-org/wkbuild.py:
        (_should_file_trigger_build):

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

        [webkitscmpy] Log based tests fail in different timezones
        https://bugs.webkit.org/show_bug.cgi?id=232197
        <rdar://problem/84615646>

        Reviewed by Dewei Zhu.

        Tests based on `git log` need to be timezone aware.

        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/log_unittest.py:

2021-10-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r284079): Audio continues playing on hulu.com in private browsing mode after closing the tab
        https://bugs.webkit.org/show_bug.cgi?id=232113
        rdar://84399283

        Reviewed by Chris Dumez.

        Add a new API test to verify that the GPU to web prcoess connection isn't leaked in the GPU process. See WebKit
        ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/canvas-image-data.html: Added.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView gpuToWebProcessConnectionCount]):

2021-10-25  Simon Fraser  <simon.fraser@apple.com>

        webkitpy: have diff_image() return a ImageDiffResult
        https://bugs.webkit.org/show_bug.cgi?id=232222

        Reviewed by Jonathan Bedard.

        diff_image() returned a list which resulted in hard to read code. In addition, the
        presence of a diff_image is used to indicate failure; future patches will change this,
        so having diff_image() return a class makes that easier.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_image):
        (SingleTestRunner._compare_output_with_reference):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer_unittest.py:
        (TestResultWriterTest.test_reftest_diff_image.ImageDiffTestPort.diff_image):
        (TestResultWriterTest):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (FailureReftestMismatch.write_failure):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tolerance.ImageDiffTestPort.diff_image):
        * Scripts/webkitpy/port/base.py:
        (Port.diff_image):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffResult):
        (ImageDiffResult.__init__):
        (ImageDiffResult.__eq__):
        (ImageDiffResult.__ne__):
        (ImageDiffResult.__repr__):
        (ImageDiffer._read):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.integration_test_image_diff):
        (PortTestCase.test_diff_image__missing_both):
        (PortTestCase.test_diff_image__missing_actual):
        (PortTestCase.test_diff_image__missing_expected):
        (PortTestCase.test_diff_image):
        (PortTestCase.test_diff_image_passed):
        (PortTestCase.test_diff_image_failed):
        (PortTestCase.test_diff_image_crashed):
        * Scripts/webkitpy/port/test.py:

2021-10-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] webkit-test-runner doesn't report all results when a test is run several times
        https://bugs.webkit.org/show_bug.cgi?id=231790

        Reviewed by Jonathan Bedard.

        WTR was only picking one of the failure results when a test was run more than once
        (for example with the flag --repeat-each=X), so it was not reporting all the values
        that the test generated. This is a major issue when searching for flaky tests.

        This patch adds a dictionary to store all the results of a given test on the repeated
        repeats and then it ensures those values are taken into account when reporting the
        final results for the test. It marks the test as flaky if more than one different value
        was generated.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.__init__):
        (TestRunResults.add):
        (TestRunResults.merge):
        (summarize_results):

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

        Add support for fast-cq mode to webkit-patch land-safely command
        https://bugs.webkit.org/show_bug.cgi?id=232196

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/steps/postdiffforcommit.py:
        (PostDiffForCommit):
        (PostDiffForCommit.run):
        * Scripts/webkitpy/tool/commands/upload_unittest.py: Added unit-test.
        (test_land_safely_with_fast_cq):

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

        [Python] rename assertEquals/assertNotEquals
        https://bugs.webkit.org/show_bug.cgi?id=232214

        Reviewed by Alexey Proskuryakov.

        This is assert(Not)?Equals -> assert(\1)Equal

        Python 3.11 (currently CPython main branch) removes the deprecated
        aliases assertEquals/assertNotEquals. These have long been deprecated,
        and the modern names exist all the way back to Python 2.7, hence there's
        no reason not to switch.

        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py:
        (TaskPoolUnittest.test_multiple):
        * Scripts/webkitpy/common/attribute_saver_unittest.py:
        (AttributeSaverTest.test_class):
        (AttributeSaverTest.test_normal_default):
        (AttributeSaverTest.test_normal_value):
        (AttributeSaverTest.test_normal_value_on_exception):
        (AttributeSaverTest.test_normal_value_on_normal_exit):
        (AttributeSaverTest.test_normal_value_with_finally_on_exception):
        (AttributeSaverTest.test_normal_value_with_finally_on_normal_exit):
        (AttributeSaverTest.test_normal_value_with_else_on_exception):
        (AttributeSaverTest.test_normal_value_with_else_on_normal_exit):
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py:
        (StubRepositoryTest.test_find_checkout_root):
        * Scripts/webkitpy/layout_tests/models/test_configuration_unittest.py:
        (TestConfigurationTest.test_eq):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (MiscTests.test_parse_warnings_are_logged_if_not_in_lint_mode):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (SummarizedResultsTest.test_svn_revision_exists):
        (SummarizedResultsTest.test_svn_revision):
        (SummarizedResultsTest.test_svn_revision_git):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tests_options):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_win32_start_and_stop):
        * Scripts/webkitpy/port/driver_unittest.py:
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_gtk4_expectations_binary_only):
        (GtkPortTest.test_gtk3_expectations_binary_only):
        (GtkPortTest.test_gtk_expectations_both_binaries):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.assert_lines_lint):
        * Scripts/webkitpy/tool/steps/preparechangelog_unittest.py:
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (verify_test_harness_paths):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py:
        (TestExporterTest.test_export):
        (TestExporterTest.test_export_with_specific_branch):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        * Scripts/webkitpy/w3c/wpt_runner_unittest.py:
        (WPTRunnerTest.MockSpawnWPT.__call__):
        (WPTRunnerTest.test_prepare_wpt_checkout):
        (WPTRunnerTest.test_prepare_wpt_checkout_specified_path):
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_iphone_initialization):
        (DeviceTypeTest.test_ipad_initialization):
        (DeviceTypeTest.test_generic_ios_device):
        (DeviceTypeTest.test_watch_initialization):
        (DeviceTypeTest.test_tv_initialization):
        * Scripts/webkitpy/xcode/sdk_unittest.py:
        (SDKTest.test_iphoneos):
        (SDKTest.test_iphonesim):
        (SDKTest.test_macos):
        (SDKTest.test_appletvos):
        (SDKTest.test_appletvsim):
        (SDKTest.test_watchos):
        (SDKTest.test_watchsimulator):
        (SDKTest.test_prodos):
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:

2021-10-24  Arcady Goldmints-Orlov  <agoldmints@igalia.com>

        REGRESSION(r282686) [GTK] Tests are flaky due to spurious "MainFrameView: mouseEnteredContentArea" messages in the log
        https://bugs.webkit.org/show_bug.cgi?id=232142

        Add MockScrollAnimatorEnabled to the list of preferences to reset
        between tests in TestOptions.cpp.

        Reviewed by Carlos Garcia Campos.

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

2021-10-23  Simon Fraser  <simon.fraser@apple.com>

        Add an ImageDiff option to print out WPT-style pixel differences
        https://bugs.webkit.org/show_bug.cgi?id=232212

        Reviewed by Darin Adler.
        
        When passed `--difference`, ImageDiff will compute and print out the "maxDifference=;totalPixels="
        values documented at https://web-platform-tests.org/writing-tests/reftests.html. With these values,
        there is no built-in tolerance as there is with the legacy difference computation.

        Rename variables related to the legacy computation.

        * ImageDiff/ImageDiff.cpp:
        (processImages):
        (main):
        * ImageDiff/PlatformImage.cpp:
        (ImageDiff::PlatformImage::difference):
        * ImageDiff/PlatformImage.h:

2021-10-24  Simon Fraser  <simon.fraser@apple.com>

        Allow ImageDiff to read from files
        https://bugs.webkit.org/show_bug.cgi?id=232201

        Reviewed by Darin Adler.
        
        For improved hackability when working on pixel tolerance, allow ImageDiff to read from
        files by adding support for reading two file path arguments.

        Also add some nice --help output, and preliminary support for --verbose.

        * ImageDiff/ImageDiff.cpp:
        (processImages):
        (main):
        * ImageDiff/PlatformImage.h:
        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromFile):
        * ImageDiff/cg/PlatformImageCG.cpp:
        (ImageDiff::PlatformImage::createFromFile):

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

        [WTF] Replace current LLVM flang's Int128 with abseil-cpp's Int128
        https://bugs.webkit.org/show_bug.cgi?id=232129

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Int128.cpp:
        (TestWebKitAPI::TYPED_TEST):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::ToNativeUInt128):
        (TestWebKitAPI::FromNativeUInt128):
        (TestWebKitAPI::ToNativeInt128):
        (TestWebKitAPI::FromNativeInt128):
        (TestWebKitAPI::TestBinaryUInt128):
        (TestWebKitAPI::TestBinaryInt128):
        (TestWebKitAPI::TestVsNativeUInt128):
        (TestWebKitAPI::TestVsNativeInt128):
        (TestWebKitAPI::TestUnary): Deleted.
        (TestWebKitAPI::TestBinary): Deleted.
        (TestWebKitAPI::ToNative): Deleted.
        (TestWebKitAPI::FromNative): Deleted.
        (TestWebKitAPI::TestVsNative): Deleted.
        * TestWebKitAPI/Tests/WTF/LeadingZeroBitCount.cpp: Removed.

2021-10-22  Simon Fraser  <simon.fraser@apple.com>

        Content offset in this codepen when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=231989

        Reviewed by Tim Horton.

        API test that scrolls an iframe via wheel events, then detached and re-attaches the view.

        The two wheel scrolls are necessary to exercise the "stale ScrollingStateScrollingNode
        scroll position" issue.

        The scrolling tree dumps validate the layout viewport part of the fix.

        Also correct some functions where the sense of 'isWaitingForJavaScript' was flipped.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/ScrollingCoordinatorTests.mm: Added.
        (TestWebKitAPI::synthesizeWheelEvents):
        (TestWebKitAPI::waitForScrollEventAndReturnScrollY):
        (TestWebKitAPI::scrollingTreeElidingLastCommittedScrollPosition):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByEvaluatingJavaScript:]):
        (-[WKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):

2021-10-22  Ryan Haddad  <ryanhaddad@apple.com>

        [ iOS15 EWS ] TestWebKitAPI.AppPrivacyReport.LoadSimulatedRequest tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=232166

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm: Disable these tests.

2021-10-22  Roy Reapor  <rreapor@apple.com>

        webkitpy/autoinstalled/pyobjc_frameworks.py should install wheel distribution
        https://bugs.webkit.org/show_bug.cgi?id=232156

        Reviewed by Stephanie Lewis.

        Install wheel version of framweorks.

        * Scripts/webkitpy/autoinstalled/pyobjc_frameworks.py:

2021-10-22  Ayumi Kojima  <ayumi_kojima@apple.com>

        Unreviewed, reverting r284654.

        Reverting because this commit caused scrolling tests to fail

        Reverted changeset:

        "Content offset in this codepen when switching tabs"
        https://bugs.webkit.org/show_bug.cgi?id=231989
        https://commits.webkit.org/r284654

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

        [GTK][a11y] Localized role name doesn't work with ATSPI enabled
        https://bugs.webkit.org/show_bug.cgi?id=232136

        Reviewed by Adrian Perez de Castro.

        Add a few tests for localized role name.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testAccessibleBasicHierarchy):

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

        [GTK][a11y] Add implementation of text interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230258

        Reviewed by Adrian Perez de Castro.

        Add unit tests for the text interface.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AtspiTextRangeDeleter::operator() const):
        (AccessibilityTest::startEventMonitor):
        (AccessibilityTest::stopEventMonitor):
        (AccessibilityTest::findEvent):
        (testTextBasic):
        (testTextSurrogatePair):
        (testTextIterator):
        (testTextExtents):
        (testTextSelections):
        (testTextAttributes):
        (testTextStateChanged):
        (beforeAll):

2021-10-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        WebGL low-power and high-performance contexts should use different ANGLE Metal EGLDisplays
        https://bugs.webkit.org/show_bug.cgi?id=231012
        <rdar://problem/83971417>

        Reviewed by Dean Jackson.

        Add a API test to test GraphicsContextGLOpenGL
        Cocoa implementation regarding the bug where
        the GraphicsContextGLOpenGL instances would use
        the GPU that was selected by the first instance.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/TestGraphicsContextGLOpenGLCocoa.mm: Added.
        (TestWebKitAPI::WebCore::TestedGraphicsContextGLOpenGL::create):
        (TestWebKitAPI::WebCore::TestedGraphicsContextGLOpenGL::TestedGraphicsContextGLOpenGL):
        (TestWebKitAPI::hasMultipleGPUs):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/WebCoreUtilities.h: Added.
        (TestWebKitAPI::ScopedSetAuxiliaryProcessTypeForTesting::ScopedSetAuxiliaryProcessTypeForTesting):
        (TestWebKitAPI::ScopedSetAuxiliaryProcessTypeForTesting::~ScopedSetAuxiliaryProcessTypeForTesting):
        Add a utility state setter to set the process type for the
        duration of a test.

2021-10-21  Ryan Haddad  <ryanhaddad@apple.com>

        WebGL bot should run tests with GPU Process enabled
        https://bugs.webkit.org/show_bug.cgi?id=232107

        Reviewed by Jonathan Bedard.

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

2021-10-21  Simon Fraser  <simon.fraser@apple.com>

        Content offset in this codepen when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=231989

        Reviewed by Tim Horton.

        API test that scrolls an iframe via wheel events, then detached and re-attaches the view.

        The two wheel scrolls are necessary to exercise the "stale ScrollingStateScrollingNode
        scroll position" issue.

        The scrolling tree dumps validate the layout viewport part of the fix.

        Also correct some functions where the sense of 'isWaitingForJavaScript' was flipped.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/ScrollingCoordinatorTests.mm: Added.
        (TestWebKitAPI::synthesizeWheelEvents):
        (TestWebKitAPI::waitForScrollEventAndReturnScrollY):
        (TestWebKitAPI::scrollingTreeElidingLastCommittedScrollPosition):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByEvaluatingJavaScript:]):
        (-[WKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):

2021-10-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] TestWTF.FileSystemTest.* are timing out if run-api-tests is run by a normal user
        https://bugs.webkit.org/show_bug.cgi?id=232065

        Reviewed by Jonathan Bedard.

        run-api-tests script didn't pass TEMP and TMP env vars to
        TestWTF.exe. Then, generateTemporaryPath in
        wtf/win/FileSystemWin.cpp never finished because a normal user
        can't create a file in the Windows system directory.

        * Scripts/webkitpy/port/win.py:
        (WinPort.environment_for_api_tests): Added TEMP and TMP to the env
        var list to inherit.

2021-10-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win Python] REGRESSION(r284398): run-api-tests: FileNotFoundError raised: [WinError 2] The system cannot find the file specified
        https://bugs.webkit.org/show_bug.cgi?id=232037

        Reviewed by Jonathan Bedard.

        r284398 temporarily copied TestWTF program to ToBeListed to list
        test cases. However, on Windows, TestWTF.exe is just a wrapper
        program loading TestWTFLib.dll. If I just rename TestWTF.exe to
        ToBeListed.exe, ToBeListed.exe tries to load ToBeListedLib.dll.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._collect_tests): Do not copy the test program to
        ToBeListed on Windows.

2021-10-21  Devin Rousso  <drousso@apple.com>

        [css-values-4] Support small (sv*), large (lv*) and dynamic (dv*) viewport units
        https://bugs.webkit.org/show_bug.cgi?id=219287
        <rdar://problem/71857370>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm: Added.
        (evaluateForInt):
        (getElementHeight):
        (TEST.CSSViewportUnits.AllSame):
        (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
        (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):
        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.html: Added.

        * TestWebKitAPI/Tests/WebCore/FloatSizeTests.cpp:
        (TEST.FloatSize.MinDimension): Added.
        (TEST.FloatSize.MaxDimension): Added.
        * TestWebKitAPI/Tests/WebCore/IntSizeTests.cpp:
        (TEST.IntSize.MinDimension): Added.
        (TEST.IntSize.MaxDimension): Added.
        Add utility/helper methods for returning the minimum/maximum of the width vs height.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        WebKit should process-swap for initial navigation of a popup if it has no opener
        https://bugs.webkit.org/show_bug.cgi?id=231990
        <rdar://84425504>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[PSONUIDelegate webViewDidClose:]):
        Updated existing API tests to reflect behavior change.
        Also extend an API test to make sure that a popup opened by JS can still close itself
        via JS (by calling window.close()), even in the case where we process swap.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::outputText):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::didReceivePageMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        We have some tests that open a new popup with 'noopener' and the popup would be the
        one to call `testRunner.notifyDone()`. This used to work fine when the popup would
        end up in the same WebProcess because the injected bundle would know which page is
        the main test page and use that one. However, now that we process-swap, the popup
        page would think it is the main test page and try to dump its own output. However,
        the UIProcess wasn't listening for messages from auxiliary pages' injected bundles.
        The UIProcess now listens for those messages and asks the main test page to dump
        its output when an auxiliary page in another process says the test is done.

2021-10-21  Simon Fraser  <simon.fraser@apple.com>

        run-webkit-tests --ios-simulator --print-expectations fails
        https://bugs.webkit.org/show_bug.cgi?id=232035

        Reviewed by Jonathan Bedard.
        
        self._port.supported_device_types(), which _collect_tests() uses (despite its argument)
        returns a different set of devices than self._port.DEFAULT_DEVICE_TYPES which caused
        using those as hash keys to throw. So have print_expectations() and print_summary()
        just use self._port.supported_device_types().

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.print_expectations):
        (Manager.print_summary):

2021-10-21  Chris Lord  <clord@igalia.com>

        [WPE][GTK] Enable smooth scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=220512

        Reviewed by Carlos Garcia Campos.

        Smooth scrolling is default on on GTK now, so reverse the logic in the
        test for the efficacy of the related setting.

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

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

        Move layout_test_finder to layout_test_finder_legacy
        https://bugs.webkit.org/show_bug.cgi?id=232018

        Reviewed by Darin Adler.

        This is a simple rename; no further changes.

        * Scripts/open-layout-test:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy.py: Renamed from Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py.
        (_is_reference_html_file):
        (_has_supported_extension):
        (LayoutTestFinder):
        (LayoutTestFinder.__init__):
        (LayoutTestFinder.find_tests):
        (LayoutTestFinder.find_tests_by_path):
        (LayoutTestFinder._expanded_paths):
        (LayoutTestFinder._real_tests):
        (LayoutTestFinder._is_test_file):
        (LayoutTestFinder._is_w3c_resource_file):
        (LayoutTestFinder._strip_test_dir_prefixes):
        (LayoutTestFinder._strip_test_dir_prefix):
        (LayoutTestFinder._read_test_names_from_file):
        (LayoutTestFinder._strip_comments):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_legacy_unittest.py: Renamed from Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py.
        (MockLayoutTestFinder):
        (MockLayoutTestFinder._real_tests):
        (LayoutTestFinderTests):
        (LayoutTestFinderTests.make_finder):
        (LayoutTestFinderTests.test_supported_test_extensions):
        (LayoutTestFinderTests.test_is_reference_html_file):
        (LayoutTestFinderTests.test_find_no_paths_specified):
        (LayoutTestFinderTests.test_find_one_test):
        (LayoutTestFinderTests.test_find_glob):
        (LayoutTestFinderTests.test_find_with_skipped_directories):
        (LayoutTestFinderTests.test_find_with_skipped_directories_2):
        (LayoutTestFinderTests.test_is_test_file):
        (LayoutTestFinderTests.test_is_w3c_resource_file):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/tool/commands/queries.py:

2021-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with old version of ATSPI after r284367.

        There's not API to check ATSPI version, so check if ATSPI_SCROLLTYPE_COUNT is defined to know if component
        scroll API is available.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (beforeAll):

2021-10-20  Brady Eidson  <beidson@apple.com>

        WebKit Managed Notifications: Skeleton NotificationProvider
        https://bugs.webkit.org/show_bug.cgi?id=231786

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults): Disable BuiltInNotificationsEnabled for now.

2021-10-20  Beth Dakin  <bdakin@apple.com> and Dana Estra <destra@apple.com>

        macOS key-driven smooth scrolling does not stop when focus changes
        https://bugs.webkit.org/show_bug.cgi?id=228302

        Reviewed by Simon Fraser.

        This patch adds support for rawKeyUp and rawKeyDown to the macOS versions of WKTR and DRT.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController initialize]):
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController rawKeyDown:withModifiers:withLocation:]):
        (-[EventSendingController rawKeyDownWrapper:withModifiers:withLocation:]):
        (-[EventSendingController rawKeyUp:withModifiers:withLocation:]):
        (-[EventSendingController rawKeyUpWrapper:withModifiers:withLocation:]):
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::createRawKeyDownMessageBody):
        (WTR::createRawKeyUpMessageBody):
        (WTR::EventSendingController::rawKeyDown):
        (WTR::EventSendingController::rawKeyUp):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        (WTR::EventSenderProxy::rawKeyDown):
        (WTR::EventSenderProxy::rawKeyUp):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveRawKeyDownMessageFromInjectedBundle):
        (WTR::TestController::didReceiveRawKeyUpMessageFromInjectedBundle):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::rawKeyDown):
        (WTR::EventSenderProxy::rawKeyUp):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::rawKeyDown):
        (WTR::EventSenderProxy::rawKeyUp):
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::rawKeyDown):
        (WTR::EventSenderProxy::rawKeyUp):
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::EventSenderProxy::rawKeyDown):
        (WTR::EventSenderProxy::rawKeyUp):

2021-10-20  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r284418): [iOS] TestWebKitAPI.HSTS.Basic, TestWebKitAPI.HSTS.CrossOriginRedirect, TestWebKitAPI.HSTS.ThirdParty, and TestWebKitAPI.WebKit.RedirectToPlaintextHTTPSUpgrade timing out
        https://bugs.webkit.org/show_bug.cgi?id=232003

        Reviewed by Chris Dumez.

        I observed that sometimes the framer's nw_framer_input_handler_t is called after calling nw_framer_pass_through_input.
        To fix this, I instead call nw_framer_deliver_input_no_copy myself to pass through the data inside my nw_framer_input_handler_t.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/HSTS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::proxyDefinition):

2021-10-20  Roy Reapor  <rreapor@apple.com>

        Benchmarks harness could fail if pyobjc-core module is upgraded without upgrading other pyobjc-frameworks
        https://bugs.webkit.org/show_bug.cgi?id=231983

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepare_env): Use autoinstalled Quartz module
        (OSXBrowserDriver._terminate_processes):  Use autoinstalled AppKit module

2021-10-20  Alex Christensen  <achristensen@webkit.org>

        Fix iOS build after r284539
        https://bugs.webkit.org/show_bug.cgi?id=232003

        * TestWebKitAPI/Tests/WebKitCocoa/HSTS.mm:

2021-10-20  Alex Christensen  <achristensen@webkit.org>

        Skip timing out tests on iOS while I investigate.
        https://bugs.webkit.org/show_bug.cgi?id=232003

        These tests are clearly timing out on iOS, but it'll take more than an hour or so to investigate.
        Keep the bots green while I look into a better solution.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/HSTS.mm:

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

        Do not use strerror()
        https://bugs.webkit.org/show_bug.cgi?id=231913

        Reviewed by Chris Dumez.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Tests/WTF/SafeStrerror.cpp: Added.
        (TestWebKitAPI::TEST):

2021-10-20  John Pascoe  <j_pascoe@apple.com>
        [WebAuthn] Obtain consent to create new credential when platform authenticator in excludedCredentials
        https://bugs.webkit.org/show_bug.cgi?id=219813
        <rdar://problem/72484635>

        Reviewed by Brent Fulgham.

        Currently, whenever the platform authenticator is within excludedCredentials during makeCredential we
        always return NotAllowedError and merely flash a consent screen. This does not match the spec per Step 3.1
        of makeCredential (https://w3c.github.io/webauthn/#sctn-op-make-cred). Instead, we should always obtain consent
        and return a different error depending on consent was obtained.

        This adds a test to confirm a different path is taken whenever consent is obtained.

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

2021-10-20  Youenn Fablet  <youenn@apple.com>

        Add support for requestVideoFrameCallback API and MediaStreamTrack-based backend support
        https://bugs.webkit.org/show_bug.cgi?id=231803

        Reviewed by Eric Carlson.

        Disable rvfc on tests by default until we implement rvfc for usual video streaming.
        WebRTC tests enable rvfc themselves.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2021-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Reenable -fvisibility=hidden and -fvisibility-inlines-hidden
        https://bugs.webkit.org/show_bug.cgi?id=222860

        Reviewed by Don Olmstead.

        * TestRunnerShared/CMakeLists.txt:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformWPE.cmake:

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

        It should be possible to format C++ code to project style with WebKit tools
        https://bugs.webkit.org/show_bug.cgi?id=230397

        Reviewed by Jonathan Bedard.

        Add capability to run clang-format for lines changed by
        a patch.
        Supports workflow of:
            webkit-patch format -g HEAD
            git commit -a --amend --no-edit

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/format.py: Added.
        (Format):
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/formatcppfiles.py: Added.
        (_is_formatted):
        (_ranges):
        (FormatCppFiles):
        (FormatCppFiles.options):
        (FormatCppFiles.__init__):
        (FormatCppFiles.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

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

        [webkitscmpy] Override http url with ssh url
        https://bugs.webkit.org/show_bug.cgi?id=231965
        <rdar://problem/84422393>

        Reviewed by Ryan Haddad.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git): Exclude / from hostname.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.git): Prompt user to switch to ssh checkout.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py:

2021-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        [EWS] Move EWS bots to iOS 15 / watchOS 8 / tvOS 15
        https://bugs.webkit.org/show_bug.cgi?id=231925

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/config.json:
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps):

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

        [webkitscmpy] Generate commit message template (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=231023
        <rdar://problem/83722871>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: MarkupSafe is imported as markupsafe.

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

        [webkitscmpy] Generate commit message template
        https://bugs.webkit.org/show_bug.cgi?id=231023
        <rdar://problem/83722871>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit: Use prepare-ChangeLog to generate commit messages.
        * Scripts/hooks/prepare-commit-msg: Added.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version, add jinja.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add unbound status mock.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Pass hooks to sub-programs.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.git): iterate through the directory of provided hooks and render with jinja2.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/hooks/prepare-commit-msg: Added.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py:
        (TestSetup.test_commit_message):

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

        [webkitscmpy] Filter approvers by status
        https://bugs.webkit.org/show_bug.cgi?id=231843
        <rdar://problem/84320934>

        Reviewed by Dewei Zhu.

        If a project defines statuses for it's contributors, we only want
        to allow reviewers to approve changes.

        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor): Add reviewer status.
        (Contributor.Mapping.load): Keep track of possible statuses.
        (Contributor.Mapping.__init__): Ditto.
        (Contributor.Mapping.add): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.PullRequest): If a project defines a reviewer status, enforce it.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator._contributor): Handle case where no name is defined.
        (GitHub.PRGenerator.reviewers): If a project defines a reviewer status, enforce it.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

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

        Fix iOS API tests after r284304
        https://bugs.webkit.org/show_bug.cgi?id=231829

        Part of the original commit that told the tests to continue doing what they were doing before was omitted.
        This commits that.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (webViewWithResourceLoadStatisticsEnabledInNetworkProcess):

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

        Use JSONValues instead of a JSC::VM to parse WKContentRuleLists
        https://bugs.webkit.org/show_bug.cgi?id=231704

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):

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

        Re-disable WebKit.HTTPSProxy API test on iOS
        https://bugs.webkit.org/show_bug.cgi?id=231396

        Yesterday's attempt at making it not time out does not appear to have worked.

        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:

2021-10-19  Yusuke Suzuki  <ysuzuki@apple.com>

        DumpRenderTree should not use WK methods
        https://bugs.webkit.org/show_bug.cgi?id=231910

        Reviewed by Alex Christensen.

        DumpRenderTree functions can be called on WebThread if ios simulator is used.
        If we first use WK functions on that, it causes WebKit initialization on non
        main thread. We should not mix WK functions with DumpRenderTree.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText):

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

        Unreviewed, reverting r284413.
        https://bugs.webkit.org/show_bug.cgi?id=231936

        BrokeSafariBuildByAddingANewEnum

        Reverted changeset:

        "[WebAuthn] Obtain consent to create new credential when
        platform authenticator in excludedCredentials"
        https://bugs.webkit.org/show_bug.cgi?id=219813
        https://commits.webkit.org/r284413

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

        Unreviewed, reverting r284399.

        Breaks commit message generation

        Reverted changeset:

        "[webkitperl] Stop using LoadAsModule.pm"
        https://bugs.webkit.org/show_bug.cgi?id=231868
        https://commits.webkit.org/r284399

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

        Remove TCPServer
        https://bugs.webkit.org/show_bug.cgi?id=231912

        Reviewed by Chris Dumez.

        It has been replaced by HTTPServer, which doesn't time out in its destructor when not everything is perfect,
        and which does its logic on the main thread.  It also doesn't use boringssl directly, so we can compile it on watchOS and tvOS.

        * TestWebKitAPI/Sources.txt:
        * TestWebKitAPI/TCPServer.cpp: Removed.
        * TestWebKitAPI/TCPServer.h: Removed.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (testCertificate):
        (testIdentity):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/HSTS.mm:
        (TestWebKitAPI::hstsWebViewAndDelegate):
        (TestWebKitAPI::hstsServer):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::hasRadar80550123): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h:
        (ServiceWorkerTCPServer::respondToRequests):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::testCertificate):
        (TestWebKitAPI::HTTPServer::testPrivateKey):

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

        [Python-3] Invoke webkit-patch with Python 3 by default (Revert)
        https://bugs.webkit.org/show_bug.cgi?id=231591
        <rdar://problem/84153640>

        Reverted to fix webkitbot.

        * Scripts/webkit-patch:

2021-10-18  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Obtain consent to create new credential when platform authenticator in excludedCredentials
        https://bugs.webkit.org/show_bug.cgi?id=219813
        <rdar://problem/72484635>

        Currently, whenever the platform authenticator is within excludedCredentials during makeCredential we
        always return NotAllowedError and merely flash a consent screen. This does not match the spec per Step 3.1
        of makeCredential (https://w3c.github.io/webauthn/#sctn-op-make-cred). Instead, we should always obtain consent
        and return a different error depending on consent was obtained.

        This adds a test to confirm a different path is taken whenever consent is obtained.

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (TestWebKitAPI::TEST):

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

        [ iOS15 ] TestWebKitAPI.WebKit.HTTPSProxy is a flaky, but frequent, timeout
        https://bugs.webkit.org/show_bug.cgi?id=231396

        Reviewed by Chris Dumez.

        Something was happening that was very timing dependent that was causing this test to time out.
        I think it was because the proxy framer was receiving an incomplete HTTP request.
        To fix this, I look at the bytes received and if it wasn't a complete HTTP request, wait for the rest of the message.
        I was unable to reproduce the timeout after this change and only rarely reproduced the timeout without this change.

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

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

        Add a callback to know when the service worker loads via -[WKWebView _loadServiceWorker:]
        https://bugs.webkit.org/show_bug.cgi?id=231771
        <rdar://problem/84274364>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-10-18  Basuke Suzuki  <basuke@mac.com>

        [webkitperl] Fix webkitperl on Windows
        https://bugs.webkit.org/show_bug.cgi?id=231374

        Reviewed by Fujii Hironori.

        Set WEBKIT_LIBRARIES environment variable before run if it is not defined.
        Shell-style environment variables settings are not available on Windows. Replace them by setting
        %ENV directly.

        * Scripts/test-webkitperl:
        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl:
        * Scripts/webkitperl/auto-version_unittest/versionStampTests.pl:

2021-10-18  Basuke Suzuki  <basuke.suzuki@sony.com>

        [webkitperl] Stop using LoadAsModule.pm
        https://bugs.webkit.org/show_bug.cgi?id=231868

        Reviewed by Jonathan Bedard.

        This module load a script file as module with a bit tricky way. It prevents the proper
        usage of package after all. The purpose of this module is to test routines defined in the
        script. It just be wrong with such way. If you have something to test, it should be separated
        as a module and be imported to the script. Then unit test can load the module and can test
        without any sort of trouble.

        * Scripts/filter-build-webkit:
        (setOutputFormatOption):
        (shouldShowSubsequentLine): Moved to webkitperl/build/output.pm.
        (shouldIgnoreLine): Ditto.
        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (fetchBugXMLData):
        (openChangeLogs):
        (method_decl_to_selector):
        (diffCommand):
        (statusCommand):
        (propertyChangeDescription):
        (normalizeLineEndings):
        (actuallyGenerateFunctionLists): Moved to webkitperl/changelog.
        (computeModifiedFunctions): Ditto.
        (fetchBugDescriptionFromBugXMLData): Ditto.
        (fetchRadarURLFromBugXMLData): Ditto.
        (get_function_line_ranges): Ditto.
        (get_function_line_ranges_for_cpp): Ditto.
        (delete_namespaces_from_ranges_for_cpp): Ditto.
        (is_function_in_namespace): Ditto.
        (get_function_line_ranges_for_java): Ditto.
        (get_function_line_ranges_for_javascript): Ditto.
        (get_function_line_ranges_for_perl): Ditto.
        (get_function_line_ranges_for_python): Ditto.
        (get_selector_line_ranges_for_css): Ditto.
        (get_function_line_ranges_for_swift): Ditto.
        (parseSwiftFunctionArgs): Ditto.
        (attributeCommand): Ditto.
        (extractLineRangeAfterChange): Ditto.
        (extractLineRangeBeforeChange): Ditto.
        (decodeEntities): Ditto.
        * Scripts/run-leaks:
        (main):
        (removeMatchingRecords):
        (runLeaks): Moved to webkitperl/leaks.pm.
        (parseLeaksOutput): Ditto.
        (reportError): Deleted. Use Carp::croak instead.
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (determineCurrentSVNRevision):
        (chdirWebKit):
        (determineSourceDir): Moved to webkitperl/dirs.pm.
        (setSourceDir): Ditto.
        (sourceDir): Ditto.
        * Scripts/webkitperl/LoadAsModule.pm: Removed.
        * Scripts/webkitperl/build/output.pm: Extracted from Tools/Scripts/filter-build-webkit.
        (shouldShowSubsequentLine):
        (shouldIgnoreLine):
        * Scripts/webkitperl/changelog.pm: Extracted from Tools/Scripts/prepare-ChangeLog.
        (actuallyGenerateFunctionLists):
        (extractLineRangeAfterChange):
        (extractLineRangeBeforeChange):
        (attributeCommand):
        (fetchBugDescriptionFromBugXMLData):
        (fetchRadarURLFromBugXMLData):
        (computeModifiedFunctions):
        (get_function_line_ranges):
        (get_function_line_ranges_for_cpp):
        (delete_namespaces_from_ranges_for_cpp):
        (is_function_in_namespace):
        (get_function_line_ranges_for_java):
        (get_function_line_ranges_for_javascript):
        (get_function_line_ranges_for_perl):
        (get_function_line_ranges_for_python):
        (get_selector_line_ranges_for_css):
        (get_function_line_ranges_for_swift):
        (parseSwiftFunctionArgs):
        (decodeEntities):
        * Scripts/webkitperl/dirs.pm: Extracted from Tools/Scripts/webkitdirs.
        (sourceDir):
        (setSourceDir):
        (determineSourceDir):
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
        * Scripts/webkitperl/leaks.pm: Copied from Tools/Scripts/run-leaks.
        (runLeaks):
        (parseLeaksOutput):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/extractLineRangeBeforeAndAfterChange.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/fetchRadarURLFromBugXMLData.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/filenameWithParentheses.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/generateFunctionLists.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        (convertAbsolutePathToRelativeUnixPath):
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl:

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

        [run-api-tests] Use temporary symlink when listing tests
        https://bugs.webkit.org/show_bug.cgi?id=230560

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._collect_tests): Copy binary when listing tests to make debuging easier.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.copyfile): Return copyfile result.
        (FileSystem.copymode): Invoke shutil.copymode.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.copymode):

2021-10-18  Andres Gonzalez  <andresg_22@apple.com>

        Set isolated tree mode to secondary AX thread in LayoutTests.
        https://bugs.webkit.org/show_bug.cgi?id=231763

        Reviewed by Chris Fleizach.

        Isolated tree mode was enabled for LayoutTests but set to run on the
        main thread. Change it to run on the AX thread.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::updateIsolatedTreeMode):

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

        [ iOS15 Monterey ] TestWTF.WTF_URLExtras.URLExtras is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=231454

        Reviewed by Chris Dumez.

        The behavior of NSURL changed to disallow empty punycode in the host.
        This is fine, but we need to update our test expectations.

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

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

        [webkitscmpy] Allow repositories to define custom setup commands (Follow0-up)
        https://bugs.webkit.org/show_bug.cgi?id=231345
        <rdar://problem/83960249>

        Unreviewed follow-up fix.

        * Scripts/git-webkit: Do not specify OpenSource in Tools/Scripts path.

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

        Regression (r284304) : [ iOS 15 Release ] http/tests/privateClickMeasurement tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=231898

        Use the SPI I made to keep the tests having old behavior of using the network process instead of the daemon.

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

2021-10-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/mediastream/video-rotation tests are failing due to missing TestController::takeViewPortSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=231059

        Reviewed by Xabier Rodriguez-Calvar.

        Implement takeViewPortSnapshot for WPE and GTK, the WebView snapshot is exported to PNG and
        serialized as a data URL.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::takeViewPortSnapshot):
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::takeViewPortSnapshot):

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

        [GTK][a11y] Add implementation of component interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230257

        Reviewed by Adrian Perez de Castro.

        Add unit tests for component interface.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testComponentHitTest):
        (testComponentScrollTo):
        (beforeAll):

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

        Remove AVOID_NATIVE_INT128_T
        https://bugs.webkit.org/show_bug.cgi?id=231888

        Reviewed by Mark Lam.

        We can test Int128 without AVOID_NATIVE_INT128_T.

        * TestWebKitAPI/Tests/WTF/Int128.cpp:
        (TestWebKitAPI::TestUnary):
        (TestWebKitAPI::TestBinary):
        (TestWebKitAPI::ToNative):
        (TestWebKitAPI::FromNative):
        (TestWebKitAPI::TestVsNative):
        (TestWebKitAPI::TEST):

2021-10-17  David Kilzer  <ddkilzer@apple.com>

        Add tests for WTF::OSObjectPtr/adoptOSObject in Cocoa with and without ARC
        <https://webkit.org/b/231819>
        <rdar://problem/84312692>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add OSObjectPtrCocoa.mm and OSObjectPtrCocoaARC.mm source
          files to the project.
        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtr.cpp:
        (TestWebKitAPI::TEST):
        - Make code work when compiled with ARC enabled.
        - Fix a pre-existing leak of dispatch_queue_t in RetainRelease
          test.
        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtrCocoa.mm: Add.
        * TestWebKitAPI/Tests/WTF/darwin/OSObjectPtrCocoaARC.mm: Add.
        - Add test files that #include OSObjectPtr.cpp.

2021-10-17  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: remove _WKInspectorExtensionPrivateForTesting
        https://bugs.webkit.org/show_bug.cgi?id=231784
        <rdar://problem/84280608>

        Reviewed by Timothy Hatcher.

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

2021-10-16  Simon Fraser  <simon.fraser@apple.com>

        Page zoom is messed up after navigating back from a PDF
        https://bugs.webkit.org/show_bug.cgi?id=231841
        <rdar://72666365>

        Reviewed by Tim Horton.

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

2021-10-15  Basuke Suzuki  <basuke.suzuki@sony.com>

        Add flag to turn off Iso heap
        https://bugs.webkit.org/show_bug.cgi?id=231823

        Reviewed by Yusuke Suzuki.

        Added --(no-)iso-malloc feature flag for cmake build.

        * Scripts/webkitperl/FeatureList.pm:

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

        Start using adattributiond on iOS
        https://bugs.webkit.org/show_bug.cgi?id=231829

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::configurationWithoutUsingDaemon):
        (TestWebKitAPI::webViewWithoutUsingDaemon):
        (TestWebKitAPI::runBasicPCMTest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (webViewWithResourceLoadStatisticsEnabledInNetworkProcess):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::configureWebsiteDataStoreTemporaryDirectories):

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

        Use attributedBundleIdentifier instead of applicationBundleIdentifier when present for handling PCM attribution
        https://bugs.webkit.org/show_bug.cgi?id=231827

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::runBasicPCMTest):
        (TestWebKitAPI::TEST):

2021-10-15  Ross Kirsling  <ross.kirsling@sony.com>

        Realize Mac CMake build of WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=231749

        Reviewed by Alex Christensen.

        * PlatformMac.cmake:

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

        [webkitscmpy] Allow repositories to define custom setup commands
        https://bugs.webkit.org/show_bug.cgi?id=231345
        <rdar://problem/83960249>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit: Define changelog conflict resolver.
        * Scripts/libraries/webkitscmpy/setup.py: Add inspect2 as dependency, bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Attempt to resolve additional_setup function.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.github): Invoke additional_setup function, if it exists.
        (Setup.git): Ditto.

2021-10-15  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: handle Promise objects returned from evaluateScriptInExtensionTab
        https://bugs.webkit.org/show_bug.cgi?id=231709
        <rdar://problem/84224179>

        Reviewed by Timothy Hatcher.

        Add a new test: 
        WKInspectorExtension.EvaluateScriptInExtensionTabCanReturnPromises

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

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

        [webkitscmpy] Refactor PR branch management (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=230432
        <rdar://problem/83258413>

        Reviewed by Stephanie Lewis.

        When we are uploading a change that includes multiple commits,
        the second commit will be on the same branch as the first, but that
        branch will be editable. We should not declare that "no commits
        have been found on an editable branch," because that's not true.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/branch.py:
        (Branch.branch_point): Log the found commit for branches with multiple commits.

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

        Make submit to ews error messages readable
        https://bugs.webkit.org/show_bug.cgi?id=231824

        Reviewed by Ryan Haddad.

        * CISupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS.post):

2021-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r284079): [Debug] IPCTestingAPI.CanReceiveSharedMemory is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231701
        <rdar://problem/84219000>

        Reviewed by Tim Horton.

        Fix the failing API test by using the new `sendSyncMessage()` method on JSIPCStreamClientConnection to send
        the "RemoteRenderingBackend::UpdateSharedMemoryForGetPixelBuffer" stream message and decode the result into a
        buffer of shared memory.

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

2021-10-14  John Wilander  <wilander@apple.com>

        TestWebKitAPI.PrivateClickMeasurement.FraudPrevention is a constant timeout
        https://bugs.webkit.org/show_bug.cgi?id=231393
        <rdar://problem/84000081>

        Reviewed by Alex Christensen and Kate Cheney as part of https://bugs.webkit.org/show_bug.cgi?id=231553.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
            PrivateClickMeasurement.FraudPrevention fixed. It was missing a call to
            _setPrivateClickMeasurementAppBundleIDForTesting() so that the app bundle ID
            for the triggering event matches the app bundle ID where the click happened.

2021-10-14  Lauro Moura  <lmoura@igalia.com>

        [webkitpy] Occasional exception thrown in change_result_to_failure when repeating flaky layout tests
        https://bugs.webkit.org/show_bug.cgi?id=229788

        Reviewed by Jonathan Bedard.

        When a iterated/repeated flaky test moves from an unexpected Failure to
        successive unexpected Pass, the currently stored result is still the
        Failure (likely due to r235467). This may cause change_result_to_failure
        to raise KeyError trying to forcibly remove() the Failure result from
        the test_by_expectations set twice.

        This commit relaxes the behavior to just ask to discard the value from
        the set.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests.test_update_summary_with_result): Added test case.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.change_result_to_failure): Use set.discard to avoid
        KeyErrors.

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

        Service workers running on the main thread should use the main VM
        https://bugs.webkit.org/show_bug.cgi?id=231753

        Reviewed by Geoffrey Garen.

        Extend API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerPagePlugIn.mm:
        (-[ServiceWorkerPagePlugIn webProcessPlugInBrowserContextController:serviceWorkerGlobalObjectIsAvailableForFrame:inScriptWorld:]):

2021-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [JS IPC] Implement a way to synchronously wait for an incoming IPC message
        https://bugs.webkit.org/show_bug.cgi?id=231745

        Reviewed by Tim Horton.

        Adjust an existing JS IPC test, IPCTestingAPI.CanReceiveIPCSemaphore, so that it uses the new JSIPC method to
        wait for RemoteRenderingBackend's IPC stream wakeup semaphore to arrive. This fixes
        IPCTestingAPI.CanReceiveIPCSemaphore (which is one of the two IPC tests that time out after r284079).

        We also adjust IPCTestingAPI.CanReceiveSharedMemory to wait for and install the wakeup semaphore into the IPC
        stream connection; however, this alone isn't sufficient to fix the test, since the test also requires the
        ability to send synchronous messages through the IPC stream.

        See WebKit ChangeLog for more details.

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

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

        Fix some iOS builds after r284203
        https://bugs.webkit.org/show_bug.cgi?id=231718

        * TestWebKitAPI/cocoa/DaemonTestUtilities.h:
        * TestWebKitAPI/cocoa/DaemonTestUtilities.mm:
        Linker couldn't find OSLaunchdJob.  It's only used on macOS, so only build it on macOS.

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

        Reduce memory use of AdAttributionDaemon
        https://bugs.webkit.org/show_bug.cgi?id=231523

        Reviewed by Brady Eidson.

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

2021-10-14  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix build failures with newer clang
        https://bugs.webkit.org/show_bug.cgi?id=231783

        Reviewed by Chris Dumez.

        Since this is Objective-C (not Objective-C++), we cannot use `static const uint32_t` value for array size.
        Use enum hack instead.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (displayUUIDStrings):

2021-10-14  Peng Liu  <peng.liu6@apple.com>

        Promote WKPreferences._needsSiteSpecificQuirks to API
        https://bugs.webkit.org/show_bug.cgi?id=230721
        <rdar://83255206>

        Reviewed by Jer Noble.

        Updated API tests to use the new API.

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

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

        Share IPC communication code between webpushd and adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=231718

        Reviewed by Brady Eidson.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::testDaemonPList):
        (TestWebKitAPI::currentExecutableLocation): Deleted.
        (TestWebKitAPI::currentExecutableDirectory): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm: Added.
        (TestWebKitAPI::testWebPushDaemonLocation):
        (TestWebKitAPI::testWebPushDaemonPList):
        (TestWebKitAPI::setUpTestWebPushD):
        (TestWebKitAPI::cleanUpTestWebPushD):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/DaemonTestUtilities.h: Renamed from Source/WebKit/Shared/EntryPointUtilities/Cocoa/Daemon/webpushd.c.
        * TestWebKitAPI/cocoa/DaemonTestUtilities.mm: Added.
        (TestWebKitAPI::currentExecutableLocation):
        (TestWebKitAPI::currentExecutableDirectory):
        (TestWebKitAPI::registerPlistWithLaunchD):

2021-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [JS IPC] Make it possible to establish a stream connection using the JS IPC testing API
        https://bugs.webkit.org/show_bug.cgi?id=231710

        Reviewed by Tim Horton.

        See WebKit ChangeLog for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:

        Adjust these two API tests so that they actually end up creating a new remote rendering backend in the GPU
        process, instead of failing to decode because we're missing a StreamConnectionBuffer. This allows us to make it
        to `GPUConnectionToWebProcess::createRenderingBackend` and actually create the corresponding rendering backend;
        however, this is still insufficient to fix the failing API tests, since there is still no mechanism to (1)
        wait for and receive the stream wakeup semaphore in the web process, and (2) send stream messages using an
        instance of the stream client connection.

2021-10-14  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] The actual results reported for a flaky tests shouldn't include the expectation
        https://bugs.webkit.org/show_bug.cgi?id=231241

        Reviewed by Jonathan Bedard.

        When a test is marked as flaky and fails the expectations on the
        first run but passes on the second run (the retry) the current code
        was adding the expectations to the actual results.
        This is missleading and makes really hard to detect when a test stops
        giving a specific expectation.

        Instead of doing that report the actual results of the test on both runs.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.__init__):
        (TestRunResults.add):
        (TestRunResults.merge):
        (summarize_results):
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_unexpected_results):

2021-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        All the SDKVariant.xcconfig files should match
        https://bugs.webkit.org/show_bug.cgi?id=231663

        Reviewed by Youenn Fablet.

        * 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:

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

        [WKWebView _loadServiceWorkerURL] ends up lowercasing URL host
        https://bugs.webkit.org/show_bug.cgi?id=231742

        Reviewed by Timothy Hatcher.

        Extend test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [ iOS Release ] TestWebKitAPI.WebKit.TryUsingPrewarmedProcessThatJustCrashed is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=229260
        <rdar://problem/82100254>

        Reviewed by Youenn Fablet.

        WebKit's default crash handler simply calls [webview reload] which does not reliably work
        here because the WebProcess gets terminated so early in the page load. To make the test pass
        reliably, it now provides its own crash handler which loads the same request again.

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

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

        [git-webkit] Reset author time when editing commits (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=230224

        Reviewed by Dewei Zhu.

        update-ref creates a sticky ref file, which is not what we want.
        Use 'fetch' instead.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.pull): Use fetch instead of update-ref.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:

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

        Disable django admin url on ews.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=231739

        Reviewed by Jonathan Bedard.

        * CISupport/ews-app/ews-app/urls.py:

2021-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Move getCurrentExecutablePath() and getCurrentExecutableName() to FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=231732

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):

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

        Drop makeWeakPtr() and use WeakPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=231679

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_callonmainthread):
        (process_line):
        (check_makeweakptr): Deleted.
        * TestWebKitAPI/Tests/WTF/Observer.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::makeWeakPtr):

2021-10-13  Jean-Yves Avenard  <jya@apple.com>

        Clearly distinguish serial from concurrent WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=231418
        rdar://problem/84021977

        Reviewed by Chris Dumez.

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

2021-10-13  Ryan Haddad  <ryanhaddad@apple.com>

        Disable failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=231700

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDoesNotLogDuringInitialization.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewPausePlayingAudioTests.mm:

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

        [webkitscmpy] List reviewers for pull-request
        https://bugs.webkit.org/show_bug.cgi?id=231577
        <rdar://problem/84146807>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.request): Add state to created pull-reqest.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub):
        (GitHub._users): Vend json representation of user for username.
        (GitHub.request): Filter review details, add users endpoint.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): Match both closed and opened pull-requests.
        * Scripts/libraries/webkitscmpy/webkitscmpy/pull_request.py:
        (PullRequest): Remove state.
        (PullRequest.__init__): Add opened flag, reviewers and generator.
        (PullRequest.reviewers): List the users who are reviewing this change.
        (PullRequest.approvers): List the users who have aproved this change.
        (PullRequest.blockers): List the users that are blocking this change from landing.
        (PullRequest.opened): Check the pull-request is opened.
        (PullRequest.State): Deleted.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.PullRequest): Set opened flag, specify reviewers.
        (BitBucket.PRGenerator.find): Filter by opened flag instead of state.
        (BitBucket.PRGenerator.update): Set generator.
        (BitBucket.PRGenerator.reviewers): Set reviewer lists.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.PullRequest): Set opened flag, pass generator.
        (GitHub.PRGenerator.find): Filter by opened flag instead of state.
        (GitHub.PRGenerator.update): Set generator and opened flag.
        (GitHub.PRGenerator._contributor): Find contributor matching username.
        (GitHub.PRGenerator.reviewers): Populate lists of reviewers for a pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.PRGenerator.find): Filter via opened flag instead of state.
        (Scm.PRGenerator.reviewers): Function which populates reviewer lists for a pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

2021-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::Variant and WTF::get
        https://bugs.webkit.org/show_bug.cgi?id=231675

        Reviewed by Chris Dumez.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Variant.cpp: Removed.
        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (addValuesToTable):

2021-10-13  Angelos Oikonomopoulos  <angelos@igalia.com>

        Debugging code for jscore-test hang
        https://bugs.webkit.org/show_bug.cgi?id=231573

        Reviewed by Jonathan Bedard.

        Occasionally, jscore-test will just hang ("1200 seconds without
        output"). When that happens, send SIGTERM first and have
        run-jsc-stress-tests print a backtrace when that happens, so that we
        can hopefully get an idea of what went wrong.
        * CISupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.__init__):
        * Scripts/run-jsc-stress-tests:

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

        [AppleSilicon] Support native simulator testing
        https://bugs.webkit.org/show_bug.cgi?id=231639
        <rdar://problem/84170151>

        Reviewed by Tim Horton.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Add arm64 as possible architecture.
        (IOSSimulatorPort.architecture): Return the native system's architecture.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort): Add arm64_32.
        (WatchSimulatorPort.architecture): Return the native system's 32 bit architecture.

2021-10-12  Garrett Davidson  <garrett_davidson@apple.com>

        Adopt platform UI for WebAuthn
        https://bugs.webkit.org/show_bug.cgi?id=230906
        <rdar://74659556>

        Reviewed by David Kilzer.

        Update the timeout test to expect NotAllowedError, which is the expected error
        code when a timeout occurs, per Step 21 of the "Create a New Credential"
        algorithm.

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

2021-10-12  Sihui Liu  <sihui_liu@apple.com>

        Implement FileSystemSyncAccessHandle read() and write()
        https://bugs.webkit.org/show_bug.cgi?id=231466
        <rdar://problem/84050394>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FileSystemAccess.mm: Added.
        (-[FileSystemAccessMessageHandler userContentController:didReceiveScriptMessage:]):
        (test):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Rename AdAttributionDaemon to adattributiond
        https://bugs.webkit.org/show_bug.cgi?id=231620

        Reviewed by Kate Cheney.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::testPCMDaemonLocation):
        (TestWebKitAPI::cleanUpDaemon):

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

        [GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=231414
        <rdar://problem/84015584>

        Reviewed by Said Abou-Hallawa.

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

2021-10-12  Gabriel Nava Marino  <gnavamarino@apple.com>

        WebKitTestRunner should check mainFrameURL exists in InjectedBundlePage::willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=231401

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        Add mainFrameURL check in case of loading a non localhost URL with WebKitTestRunner.

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use STL instead of WTF::get_if, WTF::Monostate, WTF::visit, and WTF::holds_alternative
        https://bugs.webkit.org/show_bug.cgi?id=231582

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (addValuesToTable):

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

        Reverting r282216 becasue unauthenticated GitHub requests have low rate limits
        https://bugs.webkit.org/show_bug.cgi?id=230095

        Reviewed by Ryan Haddad.

        * CISupport/ews-build/factories.py:
        (WatchListFactory.__init__):
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps):

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

        [Python-3] Invoke webkit-patch with Python 3 by default
        https://bugs.webkit.org/show_bug.cgi?id=231591
        <rdar://problem/84153640>

        Reviewed by Michael Catanzaro.

        * Scripts/webkit-patch: Change shebang to Python 3.

2021-10-12  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, run-benchmark fix after r283936
        https://bugs.webkit.org/show_bug.cgi?id=231512

        import sys is necessary.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:

2021-10-12  Tim Horton  <timothy_horton@apple.com>

        Borders are not drawn when using BifurcatedGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=230976
        <rdar://problem/83657330>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Add a test for line drawing.

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

        Move few scripts from python 2 to python3 (Follow-up)
        https://bugs.webkit.org/show_bug.cgi?id=229817

        Reviewed by Alexey Proskuryakov.

        * CISupport/clean-build: Invoke clean-webkit with Python 3.

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Remove non-HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE) code
        https://bugs.webkit.org/show_bug.cgi?id=231579

        Reviewed by Chris Dumez.

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

2021-10-11  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed build fix. Fix build for Debian 10 (Buster)

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:

2021-10-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Unique RenderingResourceIdentifiers Part 8: Consolidate DisplayList::ResourceHeap
        https://bugs.webkit.org/show_bug.cgi?id=231411
        <rdar://problem/84013167>

        Reviewed by Simon Fraser.

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

2021-10-11  Darin Adler  <darin@apple.com>

        Slightly better idiom for ARC debug autorelease workaround
        https://bugs.webkit.org/show_bug.cgi?id=231435

        Reviewed by David Kilzer.

        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoa.mm:
        (TestWebKitAPI::TEST): Use one macro instead of two, with
        traditional indentation instead of left flush style.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST): Ditto.

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

        [build-imagediff] Build universal binaries by default
        https://bugs.webkit.org/show_bug.cgi?id=231527
        <rdar://problem/84113091>

        Reviewed by Ryan Haddad.

        * Scripts/build-imagediff:

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

        [run-benchmark] Make Python 3 compatible
        https://bugs.webkit.org/show_bug.cgi?id=231512
        <rdar://problem/84098736>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py:
        (LinuxBrowserDriver.launch_url): Encode Popen call if Python 3.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url): Ditto.

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

        Reduce use of TCPServer
        https://bugs.webkit.org/show_bug.cgi?id=231518

        Reviewed by Chris Dumez.

        HTTPServer runs its logic on the main thread and doesn't hang in its destructor
        when the number of connections and requests isn't exactly what was expected.

        verifyCertificateAndPublicKey needed its expected bytes to be changed because it is
        using the identity from TCPServer::testCertificate instead of TCPServer::startSecureConnection now.

        I also moved the proxy basic authentication check from proxyAuthenticationServer to proxyDefinition.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TEST):
        (verifyCertificateAndPublicKey):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::proxyAuthenticationServer):
        (TestWebKitAPI::webViewAndDelegate):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::proxyDefinition):
        (TestWebKitAPI::shouldDisableTLS):
        (TestWebKitAPI::HTTPServer::listenerParameters):
        (TestWebKitAPI::statusText):
        (TestWebKitAPI::HTTPServer::request const):

2021-10-11  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up an iOS GPU Process tester
        https://bugs.webkit.org/show_bug.cgi?id=231515

        Reviewed by Jonathan Bedard.

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

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

        Prepare to switch from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231239

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/Hasher.cpp:
        (TestWebKitAPI::add):
        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        (TestWebKitAPI::TEST):

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

        [build.webkit.org] Build iOS 15 as universal binary (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=231389
        <rdar://problem/83997697>

        Reviewed by Ryan Haddad.

        * CISupport/build-webkit-org/config.json: Use universal iOS 15 Simulator Release build.

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

        [WPE] Expose WKTextCheckerSetContinuousSpellCheckingEnabled and use it from WKTR
        https://bugs.webkit.org/show_bug.cgi?id=231446

        Reviewed by Philippe Normand.

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

2021-10-09  Beth Dakin  <bdakin@apple.com>

        Pull modifier key extraction into TestRunnerShared
        https://bugs.webkit.org/show_bug.cgi?id=231267

        Reviewed by Tim Horton.

        This patch pulls the code to extract modifier key information is pulled into a little class 
        called ModifierKeys in TestRunnerShared. That code is now shared between DRT and WKTR 
        for the existing implementations of keyDown.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * TestRunnerShared/cocoa/ModifierKeys.h: Added.
        * TestRunnerShared/cocoa/ModifierKeys.mm: Added.
        (-[ModifierKeys init]):
        (-[ModifierKeys dealloc]):
        (+[ModifierKeys modifierKeysWithKey:modifiers:keyLocation:]):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::keyDown):

2021-10-08  BJ Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: provide a way for _WKInspectorExtension clients to be notified when the inspected page navigates
        https://bugs.webkit.org/show_bug.cgi?id=231338
        <rdar://71200338>

        Reviewed by Devin Rousso.

        Add a new test to verify that triggering a navigation on the inspected WKWebView
        causes the -extension:inspectedPageDidNavigate: method of _WKInspectorExtensionDelegate
        to fire.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm:
        (resetGlobalState):
        (-[InspectorExtensionDelegateForTesting inspectorExtension:inspectedPageDidNavigate:]):
        (TEST):

2021-10-08  Tadeu Zagallo  <tzagallo@apple.com>

        Implement the WebAssembly exception handling proposal
        https://bugs.webkit.org/show_bug.cgi?id=229681
        <rdar://81603387>

        Reviewed by Keith Miller.

        * Scripts/run-jsc-stress-tests:

2021-10-08  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward-declare more things in Element.h
        https://bugs.webkit.org/show_bug.cgi?id=231283

        Reviewed by Myles C. Maxfield.

        Include ArrayBuffer.h in various necessary places.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:

2021-10-08  Truitt Savell  <tsavell@apple.com>

        Reverting r283824 becasue it broke baseline search paths
        https://bugs.webkit.org/show_bug.cgi?id=230540

        Unreviewed revert.

        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/version_unittest.py:
        (VersionTestCase.test_int_constructor):
        * Scripts/libraries/webkitcorepy/webkitcorepy/version.py:
        (Version.from_iterable):
        (Version.__init__):
        (Version.__setitem__):
        (Version.__contains__):
        (Version.__hash__):
        (Version.__cmp__):

2021-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Split DisplayList::Recorder into an abstract base class and a concrete implementation
        https://bugs.webkit.org/show_bug.cgi?id=231404

        Reviewed by Myles Maxfield.

        See WebCore/ChangeLog for more details.

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

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

        [webkitscmpy] Allow caller to differentiate remote branches
        https://bugs.webkit.org/show_bug.cgi?id=231450
        <rdar://problem/84042400>

        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.branches): Change _branches_for to branches_for.
        (Git.branches_for): Allow call to differentiate remote branches
        to be returned, or return dictionary of all remotes.
        (Git.commit): Change _branches_for to branches_for.
        (Git._branches_for): Renamed branches_for.

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

        Ensure webkitpy secret storage works successfully on Linux using only autoinstalled libraries
        https://bugs.webkit.org/show_bug.cgi?id=231381

        Reviewed by Jonathan Bedard.

        Update to the latest python-keyring and python-secretstorage when using python 3.6 or newer.
        Otherwise, use the latest version that still supports python2. This version is broken on
        Linux, but that's OK because we do not care about python2 or python 3.5 anymore. I'm just
        trying to avoid gratuitous breakage.

        Autoinstall python-jeepey, a D-Bus library required by python-secretstorage.

        Update to a newer version of importlib_metadata when using python 3.6 or newer. For older
        versions of python, stick to the older version. There are some API breaks in this library
        that I hope only affect python-keyring. We have other software that depends on this library,
        but I think it's OK with either version. test-webkitpy will be the arbiter of that.

        * Scripts/libraries/webkitcorepy/setup.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/webkitpy/__init__.py:

2021-10-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser][WK2] Implement Show Layer Tree to dump the GraphicsLayer tree
        https://bugs.webkit.org/show_bug.cgi?id=231409

        Reviewed by Don Olmstead.

        MiniBrower has Show Layer Tree to dump the GraphicsLayer tree.
        It's useful, but worked only in WebKit1. It should work for
        WebKit2.

        The layer tree are dumped to the debug console of WebProcess by
        using OutputDebugString. You need to attach a debugger to it to
        see the message. I'd like to recommend to install Child Process
        Debugging Power Tool to your Visual Studio.

        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/Common2.cpp: Added.
        (createString):
        * MiniBrowser/win/Common2.h: Added.
        * MiniBrowser/win/InjectedBundle.cpp: Added.
        (didReceiveMessageToPage):
        (WKBundleInitialize):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (injectedBundlePath):
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::showLayerTree):

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

        [contributors.json] Support GitHub usernames
        https://bugs.webkit.org/show_bug.cgi?id=231400
        <rdar://problem/84005266>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.Encoder.default): Add GitHub and BitBucket username.
        (Contributor.Mapping.load): Ditto.
        (Contributor.Mapping.add): Ditto.
        (Contributor.__init__): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor):
        (TestContributor.test_github):
        (TestContributor.test_bitbucket):
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__init__): Add GitHub username.
        (Contributor.as_dict): Ditto.
        (Committer.__init__): Ditto.
        (Reviewer.__init__): Ditto.
        (Bot.__init__): Ditto.
        (CommitterList.load_json): Ditto.

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

        [webkitcorepy] Not possible to autoinstall a package with micro version 0
        https://bugs.webkit.org/show_bug.cgi?id=230540
        <rdar://problem/83613371>

        Reviewed by Michael Catanzaro.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/version_unittest.py:
        (VersionTestCase.test_int_constructor): Default values are 'None.'
        * Scripts/libraries/webkitcorepy/webkitcorepy/version.py:
        (Version.from_iterable):
        (Version.__init__): Use 'None' as the default value instead of 0.
        (Version.__setitem__): Support 'None' as a version value.
        (Version.__contains__): Ditto.
        (Version.__hash__): Ditto.
        (Version.__cmp__): Ditto.

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

        AX: AXMathRootRadicand should return an array of elements, not just the first
        https://bugs.webkit.org/show_bug.cgi?id=230986
        <rdar://83688829>

        Reviewed by Chris Fleizach.

        Added AccessibilityUIElement::mathRootRadicand as a readonly property to
        be used in LayoutTests.

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

2021-10-08  Antti Koivisto  <antti@apple.com>

        Make WTF::IteratorRange reversible
        https://bugs.webkit.org/show_bug.cgi?id=231415

        Reviewed by Darin Adler.

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

2021-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WebDriver] Update w3c and selenium tests
        https://bugs.webkit.org/show_bug.cgi?id=230551
        <rdar://problem/83620518>

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (RunWebDriverTests): Run run-webdriver-tests with python3.
        * Scripts/run-webdriver-tests: Run with python3.
        * Scripts/webkitpy/__init__.py: Use a newer version of pytest and its dependencies to match what tests expect.
        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (collect): Use contextlib to redirect stdout to /dev/null while collecting tests.
        (run): Use ExitCode new enum added to pytest.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.__init__): Do not encode paths.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.collect_tests): Use items() instead of iteritems() that doesn't exist in python3.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebKitDriverServer.__init__):
        (WebDriverW3CExecutor.__init__):
        (WebDriverW3CExecutor.setup):
        (WebDriverW3CExecutor._runner):

2021-10-08  Youenn Fablet  <youenn@apple.com>

        Add support for processing push events without service worker clients
        https://bugs.webkit.org/show_bug.cgi?id=231285

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm:

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

        [webkitscmpy] Library should own contributors.json loading
        https://bugs.webkit.org/show_bug.cgi?id=231310
        <rdar://problem/83941327>

        Unreviewed follow-up fix.

        * Scripts/git-webkit: Fix imports.

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

        [webkitscmpy] Library should own contributors.json loading
        https://bugs.webkit.org/show_bug.cgi?id=231310
        <rdar://problem/83941327>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit: Do not load contributors from webkitpy.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor.Encoder.default): Save contributor status to json.
        (Contributor.Mapping.load): contributors.json is a list, may include
        status, aliases and nicks.
        (Contributor.Mapping.save): Save contributors to json file.
        (Contributor.Mapping.__iter__): Iterate through all contributors.
        (Contributor.__init__): Add status to contributor.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.__init__): Attempt to load contributors.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.__init__): Set root_path before constructing base class.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase.__init__): Only reset path if it's not already defined.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
        (TestContributor.test_iteration):

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

        [webkitscmpy] Share cache between processes
        https://bugs.webkit.org/show_bug.cgi?id=231176
        <rdar://problem/83841221>

        Reviewed by Dewei Zhu.

        Generating the identifier cache is more expensive than reading a file with
        that cache in it. This is particularly relevant for webservers, which are
        likely running multiple processes.

        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.Cache.__init__): Move cache loading into "load" function.
        (Git.Cache.load): Open cache file.
        (Git.Cache.to_hash): If we fail to find a match, attempt to load the file
        before populating the file.
        (Git.Cache.to_revision): Ditto.
        (Git.Cache.to_identifier): Ditto.

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

        [contributors.json] Relocation (Part 7)
        https://bugs.webkit.org/show_bug.cgi?id=229690
        <rdar://problem/82552403>

        Reviewed by Dewei Zhu.

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

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

        [tvOS] Build simulator for arm64
        https://bugs.webkit.org/show_bug.cgi?id=231390
        <rdar://problem/83998448>

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/config.json: Change tvOS simulator build to arm64.
        * CISupport/ews-build/config.json: Ditto.

2021-10-07  Tim Horton  <timothy_horton@apple.com>

        BifurcatedGraphicsContext doesn't bifurcate draw{Tiled}Image
        https://bugs.webkit.org/show_bug.cgi?id=231385
        <rdar://problem/83922633>

        Reviewed by Devin Rousso.

        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Add some test.

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

        [build.webkit.org] Build iOS 15 as universal binary
        https://bugs.webkit.org/show_bug.cgi?id=231389
        <rdar://problem/83997697>

        Reviewed by Ryan Haddad.

        * CISupport/build-webkit-org/config.json: Make iOS 15 Simulator Release build universal.

2021-10-07  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Support run-jsc-stress-tests without posix commands
        https://bugs.webkit.org/show_bug.cgi?id=231101

        Reviewed by Adrian Perez de Castro.

        Add support for collecting the test result files when not on
        a posix host platform by roughly emulating the find command
        current used in ruby code when using the ruby-runner or
        for playstation.

        * Scripts/run-jsc-stress-tests:

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

        [WebKitBot] Land local changes on production host
        https://bugs.webkit.org/show_bug.cgi?id=231388
        <rdar://problem/83996428>

        Reviewed by Yusuke Suzuki.

        * WebKitBot/src/Commit.mjs: Add Slack ID integration.
        * WebKitBot/src/Contributors.mjs: Ditto.
        * WebKitBot/src/Utility.mjs:
        * WebKitBot/src/WebKitBot.mjs: Add "hi" and "yt" commands.
        * WebKitBot/src/index.mjs: 

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

        Misc compiler warning fixes, October 2021
        https://bugs.webkit.org/show_bug.cgi?id=231377

        Reviewed by Adrian Perez de Castro.

        Stop testing the default value of the XSS auditor setting. I could have used
        IGNORE_DEPRECATED_DECLARATIONS_BEGIN instead, but I see no point in testing the default
        value of a setting that no longer does anything.

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

2021-10-07  BJ Burg  <bburg@apple.com>

        Web Inspector: WebInspectorExtensionTabContentView should not reload its iframe when detached
        https://bugs.webkit.org/show_bug.cgi?id=230758
        <rdar://74714861>

        Reviewed by Timothy Hatcher.

        Add a new test to verify that re-selecting an extension tab does not cause it to reload.

        * TestWebKitAPI/Tests/WebKitCocoa/InspectorExtension-basic-tab.html:
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm:
        (TEST):

2021-10-07  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r283613): [ macOS ] TestWebKitAPI.ResourceLoadDelegate.LoadInfo is failing
        https://bugs.webkit.org/show_bug.cgi?id=231303
        <rdar://problem/83940067>

        Reviewed by Chris Dumez.

        Make sure to clear all data store at the end of PushAPI test, as well as at the beginning of ResourceLoadDelegate test.

        * TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:

2021-10-07  David Kilzer  <ddkilzer@apple.com>

        Add back RetainPtrARC and TypeCastsCocoaARC tests to TestWTF
        <https://webkit.org/b/231251>
        <rdar://problem/83902809>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add RetainPtrARC.mm and TypeCastsCocoaARC.mm to the project.

        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoa.mm:
        (TestWebKitAPI::TEST):
        - Modify tests to clean up autoreleased objects in Debug builds
          that are optimized out of Release builds.
        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoaARC.mm: Add.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        - Modify tests to clean up autoreleased objects in Debug builds
          that are optimized out of Release builds.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtrARC.mm: Add.

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

        ASSERTION FAILED: This HTTPServer does not know how to respond to a request for /popup-after-redirection.html
        https://bugs.webkit.org/show_bug.cgi?id=231256
        <rdar://problem/83904937>

        Reviewed by Alex Christensen.

        Stop hardcoding the HTTPServer port in COOP API tests to address flakiness.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::addResponse):

2021-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

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

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/PlatformGTK.cmake:

2021-10-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        Python 3: run-inspector-generator-tests and generate-inspector-protocol-bindings.py
        https://bugs.webkit.org/show_bug.cgi?id=231055

        Reviewed by Jonathan Bedard.

        * Scripts/run-inspector-generator-tests:
        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.generate_from_json): Use sys.executable
        to invoke generate-inspector-protocol-bindings.py because 'python'
        is python2.

2021-10-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Move FlushIdentifier out of the DisplayList namespace
        https://bugs.webkit.org/show_bug.cgi?id=231263

        Reviewed by Simon Fraser.

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

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

        [ iOS15 Release ] TestWebKitAPI.WebSocket.CloseCode
        https://bugs.webkit.org/show_bug.cgi?id=231306

        Reviewed by Chris Dumez.

        This test starts by navigating, opening a websocket connection, then navigating away.
        Sometimes in release builds we only get one didFinishNavigation callback.
        The important thing about this test is that the server receives the expected close code
        whenever the page is navigated away from, so drop the two didFinishNavigation checks.

        I manually verified that on iOS15 simulator release builds the test would time out here,
        and that it doesn't any more.

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

2021-10-06  Philip Chimento  <pchimento@igalia.com>

        Style checker should check spacing inside braces with elements in them
        https://bugs.webkit.org/show_bug.cgi?id=231199

        In order to automate this and prevent reviewers from having to comment
        on it, ensure that spaces are required by webkit-check-style inside of
        braces with elements in them (e.g., initializer lists.)

        In order to avoid false positives, ignore brace spacing if the braces
        are surrounded by double-quotes on the same line, assuming that means
        it's likely the braces are inside a string.

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        (NoNonVirtualDestructorsTest):
        (WebKitStyleTest.test_indentation):

2021-10-06  Youenn Fablet  <youenn@apple.com>

        Implement https://w3c.github.io/push-api/#receiving-a-push-message
        https://bugs.webkit.org/show_bug.cgi?id=231070
        <rdar://problem/83759574>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PushAPI.mm: Added.

2021-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK] Fix /webkit/WebKitAccessibility/accessible/state with ATSPI

        Add missing #else I didn't add by mistake in r283361.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (testAccessibleState):

2021-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] TestJSC incorrectly expects garbage collector to collect variables still on the stack
        https://bugs.webkit.org/show_bug.cgi?id=222972

        Reviewed by Michael Catanzaro.

        Include JSCContextInternal.h instead of JSCContextPrivate.h and remove the jscContextGarbageCollect() implementation.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCWeakValue): Call sanitizeStackForVM() before the garbage collection.
        (jscContextGarbageCollect): Deleted.

2021-10-06  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward declare JS TypedArrays
        https://bugs.webkit.org/show_bug.cgi?id=231196

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        [ iOS15 ] TestWebKitAPI.ResourceLoadStatistics.DataTaskIdentifierCollision is a constant crash
        https://bugs.webkit.org/show_bug.cgi?id=231246

        Reviewed by Chris Dumez.

        For a reason that is mysterious to me, this test was timing out on iOS
        in the call to synchronouslyLoadHTMLString unless I added "addToWindow:NO"
        to the TestWKWebView initialization.

        For a reason that is also mysterious to me, the test was crashing when closing
        because of something in the autoreleasepool, but using Vector<String> instead of
        RetainPtr<NSArray<NSString *>> in DataTaskIdentifierCollisionDelegate makes that
        stop crashing.

        I've looked quite closely and don't see why this fixes it, but I verified that it does.

        While I was at it, I migrated from TCPServer to HTTPServer to be more robust against timeouts,
        because the TCPServer destructor waits forever for threads to join, and if not everything is
        perfect it will make the tests time out, which isn't great.  HTTPServer does everything on the
        main thread with callbacks instead.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (-[DataTaskIdentifierCollisionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[DataTaskIdentifierCollisionDelegate waitForMessages:]):
        (waitUntilTwoServersConnected):
        (TEST):

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        Add an entitlement check to only allow AdAttributionDaemon to be connected to by the network process
        https://bugs.webkit.org/show_bug.cgi?id=231248

        Reviewed by Alexey Proskuryakov.

        Also add a system call to "launchctl unload" to clear any residual state in launchd before starting the unit test.
        Otherwise we could get into a state where the plist is registered with launchd from an old test that registered it
        but didn't start the daemon, causing the test to time out until you reboot the machine.  This makes it recover nicely.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::attemptConnectionInProcessWithoutEntitlement):
        (TestWebKitAPI::setInjectedBundleClient): Deleted.
        (TestWebKitAPI::webViewWithOpenInspector): Deleted.

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        TestWebKitAPI.PrivateClickMeasurement.DaemonBasicFunctionality is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231257

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        Originally reviewed as part of https://bugs.webkit.org/show_bug.cgi?id=231248
        this should fix the error that happens when a previous test run has registered
        the test AdAttributionDaemon but then failed before it was started, which leaves
        launchd in a state of having already loaded a plist for the mach service named
        "org.webkit.pcmtestdaemon.service" so it refuses to load another.  The solution is
        just to try unloading any previously loaded plist before loading another to clear
        state in launchd.

2021-10-05  Tim Horton  <timothy_horton@apple.com>

        <model> should be draggable, similar to <img>
        https://bugs.webkit.org/show_bug.cgi?id=229246

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/cube.usdz: Added.
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (-[ModelLoadingMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        Add a test that ensures that dragging a <model> works.

2021-10-05  Alex Christensen  <achristensen@webkit.org>

        Implement missing functions in PrivateClickMeasurementDaemonClient
        https://bugs.webkit.org/show_bug.cgi?id=231060

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::testDaemonPList):
        (TestWebKitAPI::cleanUpDaemon):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestUIDelegate.h:
        * TestWebKitAPI/cocoa/TestUIDelegate.mm:
        (-[TestUIDelegate _webView:didAttachLocalInspector:]):
        (-[TestUIDelegate waitForInspectorToShow]):
        (-[WKWebView _test_waitForInspectorToShow]):

2021-10-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r283476): [ iOS macOS Debug ] TestWTF failures in RetainPtrARC and TypeCastsCocoaARC
        <https://webkit.org/b/231172>
        <rdar://problem/83836549>

        Unreviewed partial revert of r283476.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Remove RetainPtrARC.mm and TypeCastsCocoaARC.mm from the
          project.
        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoaARC.mm: Delete.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtrARC.mm: Delete.
        - Remove these tests until issues can be fixed.

2021-10-05  David Kilzer  <ddkilzer@apple.com>

        Follow-up #2: WTF::RetainPtr<> allows assignment of two pointer types that are not assignable
        <https://webkit.org/b/230406>
        <rdar://problem/83241893>

        Unreviewed attempt to fix API tests.

        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoa.mm:
        (TestWebKitAPI::TEST):
        - Revert code back to using objectNS.get() for
          checked_objc_cast<> tests since it always worked.

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

        [ews-build.webkit.org] check-patch-relevance can get stuck
        https://bugs.webkit.org/show_bug.cgi?id=231190
        <rdar://problem/77327168>

        Reviewed by Alexey Proskuryakov.

        * CISupport/ews-build/steps.py:
        (CheckPatchRelevance): Compute all regexes in advance.
        (CheckPatchRelevance._patch_is_relevant): Rely on pre-computed regexes,
        limit the number of characters to check in a line to 250 and include a
        hard-timeout so that a patch can never get EWS stuck.

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

        Add SPI to launch a service service worker in a WKWebView and expose service worker to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=231045
        <rdar://problem/83744069>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[ServiceWorkerSchemeHandler initWithBytes:]):
        (-[ServiceWorkerSchemeHandler addMappingFromURLString:toData:]):
        (-[ServiceWorkerSchemeHandler webView:startURLSchemeTask:]):
        (-[ServiceWorkerSchemeHandler webView:stopURLSchemeTask:]):
        (-[ServiceWorkerPageRemoteObject serviceWorkerGlobalObjectIsAvailable]):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerPagePlugIn.mm: Added.
        (-[ServiceWorkerPagePlugIn webProcessPlugInBrowserContextController:serviceWorkerGlobalObjectIsAvailableForFrame:inScriptWorld:]):
        (-[ServiceWorkerPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerPageProtocol.h: Added.

2021-10-04  David Kilzer  <ddkilzer@apple.com>

        Follow-up: WTF::RetainPtr<> allows assignment of two pointer types that are not assignable
        <https://webkit.org/b/230406>
        <rdar://problem/83241893>

        Unreviewed attempt to fix api-ios tests.

        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoa.mm:
        (TestWebKitAPI::TEST):
        - Work around TestWTF.TypeCastsCocoa.checked_objc_cast test
          failures on iOS Simulator by using @autoreleasepool.

2021-10-04  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Prefer internal user verification if available over pin entry.
        https://bugs.webkit.org/show_bug.cgi?id=213903
        <rdar://problem/65359269>

        Reviewed by Brent Fulgham.

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

2021-10-04  John Pascoe  <j_pascoe@apple.com>

        [WebAuthn] Add SPI to change username of credential
        https://bugs.webkit.org/show_bug.cgi?id=230956
        <rdar://problem/83471755>

        Reviewed by Brent Fulgham.

        API test coverage for updating the username of a webauthn credential.

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

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

        Send EWS exception emails to bot watchers instead of Aakash

        Unreviewed.

        * CISupport/ews-build/master.cfg:

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

        WTF::RetainPtr<> allows assignment of two pointer types that are not assignable
        <https://webkit.org/b/230406>
        <rdar://problem/83241893>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        - Use bridge_cast() to fix assignment.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add RetainPtrARC.mm and TypeCastsCocoaARC.mm to the project.
        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoa.mm:
        - Update for dual compilation with MRR and with ARC.  Change
          -retainCount methods to CFGetRetainCount().
        - Add @autoreleasepool blocks around groups of tests to find
          over-released bugs sooner (for future changes).
        - Add more CFGetRetainCount() to catch unexpected auto-released
          objects as well as leaks.
        (TestWebKitAPI::helloWorldCStringLength): Add.
        (TestWebKitAPI::TEST):
        - Add tests for bridge_cast() and bridge_id_cast().
        - Remove invalid tests after changing RetainPtr<> move
          constructor to check types.
        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoaARC.mm: Add.
        - Run tests in TypeCastsCocoa.mm with ARC enabled.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        - Update for dual compilation with MRR and with ARC.  Change
          -retainCount methods to CFGetRetainCount().
        - Make it possible to name tests differently for MRR vs. ARC
          using RETAIN_PTR_TEST_NAME macro.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtrARC.mm: Add.
        - Run tests in RetainPtr.mm with ARC enabled.
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (readFile):
        - Use bridge_cast() to fix assignment.
        - Drive-by fix to keep NSData out of autoreleasePool.

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

        Some layout tests with Japanese glyphs fail if Japanese is included in the system "Preferred Languages" settings
        https://bugs.webkit.org/show_bug.cgi?id=231112

        Reviewed by Simon Fraser.

        Simply set the default locale to en-US. Tests can still override it.

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

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

        Migrate some tests from TCPServer to HTTPServer
        https://bugs.webkit.org/show_bug.cgi?id=231130

        Reviewed by Chris Dumez.

        The former runs logic on a non-main thread and has a destructor that waits for all threads to join,
        which often causes timeouts in tests.  This is progress towards removing TCPServer, which has been
        replaced by HTTPServer.

        * TestWebKitAPI/Tests/WebKitCocoa/DisplayName.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UploadDirectory.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        (respondToRangeRequests):

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

        Drop support for macOS < 10.15
        https://bugs.webkit.org/show_bug.cgi?id=231085

        Reviewed by Darin Adler.

        * TestRunnerShared/spi/AppKitTestSPI.h:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm:
        * TestWebKitAPI/config.h:

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

        [webkitpy] Add a delay between successive iOS simulator boots (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=226376

        Unreviewed infrastrucutre fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._boot_device): Increase delay to support iOS 15.

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

        [webkitscmpy] Get pull-request by number
        https://bugs.webkit.org/show_bug.cgi?id=231039
        <rdar://problem/83740215>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub.request): Add pull-request access by number.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.PullRequest): Shared JSON pull-request generator.
        (BitBucket.PRGenerator.get): Get pull-request by number.
        (BitBucket.PRGenerator.find): Use shared pull-request generator.
        (BitBucket.PRGenerator.create): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.PullRequest): Shared JSON pull-request generator.
        (GitHub.PRGenerator.get): Get pull-request by number.
        (GitHub.PRGenerator.find): Use shared pull-request generator.
        (GitHub.PRGenerator.create):
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.PRGenerator.get):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        (TestNetworkPullRequestGitHub): Added.

2021-10-01  Alex Christensen  <achristensen@webkit.org>

        Implement HTTPS proxy in HTTPServer
        https://bugs.webkit.org/show_bug.cgi?id=231109

        Reviewed by Geoff Garen.

        Previously we used TCPServer for this, which is picky about the exact number of connections, requests, and replies.
        If everything isn't perfect, it hangs in the TCPServer destructor.
        It also doesn't run the server logic on the main thread.
        This will allow migration to HTTPServer, the replacement for TCPServer.

        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::proxyDefinition):
        (TestWebKitAPI::HTTPServer::listenerParameters):
        (TestWebKitAPI::HTTPServer::respondWithOK):
        (TestWebKitAPI::HTTPServer::request const):

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

        [webkitcorepy] Add TaskPool (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=220547
        <rdar://problem/73043887>

        Unreviewed pip install modification.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version, add tblib.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version,].

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

        Drop legacy USE(LEGACY_CFNETWORK_DOWNLOADS) code paths
        https://bugs.webkit.org/show_bug.cgi?id=231081

        Reviewed by Alex Christensen.

        Drop legacy USE(LEGACY_CFNETWORK_DOWNLOADS) code paths, as we no longer support Mac OS 14 Mojave.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

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

        [webkitscmpy] Linkify http urls in pull-requests
        https://bugs.webkit.org/show_bug.cgi?id=230655

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/pull_request.py:
        (PullRequest): 
        (PullRequest.escape_html): Escape any html and linkify http urls.
        (PullRequest.unescape_html): Unescape escaped html and strip links from http urls.
        (PullRequest.create_body): Use <pre> and escape html in commit messages.
        (PullRequest.parse_body): Match both <pre> and ```, escape html if <pre> was used.
        * Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.create): Opt out of linkifying http in comment body.
        (BitBucket.PRGenerator.update): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:

2021-10-01  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add Kimmo Kinnunen as reviewer
        https://bugs.webkit.org/show_bug.cgi?id=231072

        Unreviewed.

        Add myself as a reviewer

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

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

        Remove most deprecated webkit-patch commands
        https://bugs.webkit.org/show_bug.cgi?id=231032

        Reviewed by Jonathan Bedard.

        This removes all currently deprecated commands except for
        rebaseline-server (to be decided about) and land-cowhand (see
        https://bugs.webkit.org/show_bug.cgi?id=227980).

        This undoubtedly leaves dead code elsewhere in webkitpy, but tidying that is a task for the
        future (due to dynamic typing, determining what is or is not dead is non-trivial).

        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py:
        (MockJSCEarlyWarningSystem):
        Rewrite to directly be a EarlyWarningSystemTaskDelegate subclass.
        (MockJSCEarlyWarningSystem.__init__):
        (MockJSCEarlyWarningSystem.group):
        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/adduserstogroups.py: Removed.
        * Scripts/webkitpy/tool/commands/analyzechangelog.py: Removed.
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal.py:
        * Scripts/webkitpy/tool/commands/bugfortest.py: Removed.
        * Scripts/webkitpy/tool/commands/bugsearch.py: Removed.
        * Scripts/webkitpy/tool/commands/download.py:
        (Update): Deleted.
        (Build): Deleted.
        (Build._prepare_state): Deleted.
        (CheckPatchRelevance): Deleted.
        (LandCowboy): Deleted.
        (LandCowboy._prepare_state): Deleted.
        (BuildAttachment): Deleted.
        (ApplyWatchList): Deleted.
        (LandFromURL): Deleted.
        (PrepareRollout): Deleted.
        (PrepareRollout._prepare_state): Deleted.
        (CreateRollout): Deleted.
        (CreateRollout._prepare_state): Deleted.
        (Rollout): Deleted.
        (Rollout._prepare_state): Deleted.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.test_build): Deleted.
        (DownloadCommandsTest.test_apply_watch_list): Deleted.
        (test_land): Deleted.
        (test_build_attachment): Deleted.
        (test_land_from_url): Deleted.
        (test_prepare_revert): Deleted.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py: Removed.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/findusers.py: Removed.
        * Scripts/webkitpy/tool/commands/gardenomatic.py: Removed.
        * Scripts/webkitpy/tool/commands/openbugs.py: Removed.
        * Scripts/webkitpy/tool/commands/openbugs_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/queries.py:
        (BugsToCommit): Deleted.
        (BugsToCommit.execute): Deleted.
        (PatchesInCommitQueue): Deleted.
        (PatchesInCommitQueue.execute): Deleted.
        (PatchesToCommitQueue): Deleted.
        (PatchesToCommitQueue.__init__): Deleted.
        (PatchesToCommitQueue._needs_commit_queue): Deleted.
        (PatchesToCommitQueue.execute): Deleted.
        (PatchesToReview): Deleted.
        (PatchesToReview.__init__): Deleted.
        (PatchesToReview._print_report): Deleted.
        (PatchesToReview._generate_report): Deleted.
        (PatchesToReview.execute): Deleted.
        (WhatBroke): Deleted.
        (WhatBroke._print_builder_line): Deleted.
        (WhatBroke._print_blame_information_for_builder): Deleted.
        (WhatBroke.execute): Deleted.
        (ResultsFor): Deleted.
        (ResultsFor._print_layout_test_results): Deleted.
        (ResultsFor.execute): Deleted.
        (FailureReason): Deleted.
        (FailureReason._blame_line_for_revision): Deleted.
        (FailureReason._print_blame_information_for_transition): Deleted.
        (FailureReason._explain_failures_for_builder): Deleted.
        (FailureReason._builder_to_explain): Deleted.
        (FailureReason._done_explaining): Deleted.
        (FailureReason.execute): Deleted.
        (FindFlakyTests): Deleted.
        (FindFlakyTests._find_failures): Deleted.
        (FindFlakyTests._increment_statistics): Deleted.
        (FindFlakyTests._print_statistics): Deleted.
        (FindFlakyTests._walk_backwards_from): Deleted.
        (FindFlakyTests._builder_to_analyze): Deleted.
        (FindFlakyTests.execute): Deleted.
        (TreeStatus): Deleted.
        (execute): Deleted.
        (CrashLog): Deleted.
        (PrintExpectations): Deleted.
        (PrintExpectations.__init__): Deleted.
        (PrintExpectations.execute): Deleted.
        (PrintExpectations._filter_tests): Deleted.
        (PrintExpectations._format_lines): Deleted.
        (PrintExpectations._model): Deleted.
        (PrintBaselines): Deleted.
        (PrintBaselines.__init__): Deleted.
        (PrintBaselines.execute): Deleted.
        (PrintBaselines._print_baselines): Deleted.
        (PrintBaselines._platform_for_path): Deleted.
        (FindResolvedBugs): Deleted.
        (FindResolvedBugs.execute): Deleted.
        * Scripts/webkitpy/tool/commands/queries_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/rebaseline.py: Removed.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/upload.py:
        (CommitMessageForCurrentDiff): Deleted.
        (CommitMessageForCurrentDiff.__init__): Deleted.
        (CommitMessageForCurrentDiff.execute): Deleted.
        (CleanPendingCommit): Deleted.
        (CleanPendingCommit._flags_to_clear_on_patch): Deleted.
        (CleanPendingCommit.execute): Deleted.
        (CleanReviewQueue): Deleted.
        (CleanReviewQueue.execute): Deleted.
        (AssignToCommitter): Deleted.
        (AssignToCommitter._patches_have_commiters): Deleted.
        (AssignToCommitter._assign_bug_to_last_patch_attacher): Deleted.
        (AssignToCommitter.execute): Deleted.
        (ObsoleteAttachments): Deleted.
        (ObsoleteAttachments._prepare_state): Deleted.
        (AttachToBug): Deleted.
        (AttachToBug._prepare_state): Deleted.
        (HasLanded): Deleted.
        (PostCommits): Deleted.
        (PostCommits.__init__): Deleted.
        (PostCommits._comment_text_for_commit): Deleted.
        (PostCommits.execute): Deleted.
        (CreateBug): Deleted.
        (CreateBug.__init__): Deleted.
        (CreateBug.create_bug_from_commit): Deleted.
        (CreateBug.create_bug_from_patch): Deleted.
        (CreateBug.prompt_for_bug_title_and_comment): Deleted.
        (CreateBug.execute): Deleted.
        (WPTChangeExport): Deleted.
        (WPTChangeExport._prepare_state): Deleted.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (UploadCommandsTest.test_commit_message_for_current_diff): Deleted.
        (UploadCommandsTest.test_clean_pending_commit): Deleted.
        (UploadCommandsTest.test_assign_to_committer): Deleted.
        (test_obsolete_attachments): Deleted.
        (test_post): Deleted.
        (test_attach_to_bug): Deleted.
        (test_attach_to_bug_no_description_or_comment): Deleted.

2021-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add initial implementation of accessible interface when building with ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230256

        Reviewed by Adrian Perez de Castro.

        Add more unit tests for the accessible interface.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AtspiEventDeleter::operator() const):
        (AccessibilityTest::startEventMonitor):
        (AccessibilityTest::stopEventMonitor):
        (AccessibilityTest::stateSetSize):
        (testAccessibleBasicHierarchy):
        (testAccessibleIgnoredObjects):
        (testAccessibleChildrenChanged):
        (testAccessibleAttributes):
        (testAccessibleState):
        (testAccessibleStateChanged):
        (beforeAll):
        (testAtspiBasicHierarchy): Deleted.

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

        Stop making a file named null when running API tests
       ​https://bugs.webkit.org/show_bug.cgi?id=230191

        r283298 did the trick, but I need to pipe stderr to /dev/null instead of null

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

2021-09-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        Python 3 fails to run run-builtins-generator-tests : ModuleNotFoundError: No module named 'builtins_model'
        https://bugs.webkit.org/show_bug.cgi?id=230870

        Reviewed by Jonathan Bedard.

        After r282424 (Bug 229879) switched to python3 for running
        run-builtins-generator-tests on Buildbot, only WinCairo buildbot
        was failing run-builtins-generator-tests.

        run-builtins-generator-tests was invoking generate-js-builtins.py
        explictly with 'python'. This is Python 2 on other bots.

        Use sys.executable instead of 'python' to invoke
        generate-js-builtins.py.

        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.generate_from_js_builtins):

2021-09-30  John Wilander  <wilander@apple.com>

        PCM: Take app bundle ID into consideration when matching triggering events with pending clicks
        https://bugs.webkit.org/show_bug.cgi?id=230778
        <rdar://problem/83516528>

        Reviewed by Alex Christensen.

        https://commits.webkit.org/r282884 added app bundle IDs to unattributed
        and attributed clicks in PCM. This patch makes sure we take those IDs
        into consideration in PCM::Database::attributePrivateClickMeasurement().

        The TestRunner changes are all test infrastructure to enable different
        app bundle IDs in the eyes of PCM. The API test changes are to make use
        of the app bundle ID test infrastructure.

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

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

        Clean up PrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=230978

        Reviewed by Kate Cheney.

        I removed the InvalidSourceID test because it is now impossible to make an invalid source ID
        because it uses a uint8_t and allows the values 0-255.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):

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

        Terminate PCM daemon before and after unit test that uses it
        https://bugs.webkit.org/show_bug.cgi?id=230191

        In r282368 I added a unit test that creates a daemon, uses it, then terminates it.
        On some bots it has been timing out.  Once it starts timing out, it probably won't stop because
        it won't get to the part of the test that terminates the problematic daemon.

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

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

        Add support for running service workers on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=230649

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-09-29  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Contributors may be undefined
        https://bugs.webkit.org/show_bug.cgi?id=230997
        <rdar://problem/83693400>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Ensure that repositories always have defined contributors.

2021-09-29  Basuke Suzuki  <basuke.suzuki@sony.com>

        [webkitpy] LOG_CHANNEL is widely used in the codebase and shouldn't be treated as error
        https://bugs.webkit.org/show_bug.cgi?id=230995

        Reviewed by Jonathan Bedard.

        LOG_CHANNEL is the macro which is defined in each framework to define list of all channels
        in the framework.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

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

        Update PCM Daemon name
        https://bugs.webkit.org/show_bug.cgi?id=230516

        In r282883 I updated the daemon name but not in this one place.
        I think this might cause TestWebKitAPI.EventAttribution.Daemon to stop timing out on one of the bots.

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

2021-09-29  BJ Burg  <bburg@apple.com>

        [Cocoa] add _WKInspectorExtension SPI to evaluate script on an extension tab
        https://bugs.webkit.org/show_bug.cgi?id=230646
        <rdar://problem/83420328>

        Reviewed by Devin Rousso.

        Add a new test to exercise the SPI. The test sets up an _WKInspectorExtension,
        creates a tab, evaluates script on the tab, and later reads back the stored value.

        Notably, this test would fail if the extension tab is not currently showing.
        This is a bug and will be addressed as part of https://bugs.webkit.org/show_bug.cgi?id=230758.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add new files.

        * TestWebKitAPI/Tests/WebKitCocoa/InspectorExtension-basic-tab.html:
        Add inline <script> to set window._secretValue. This is checked by the API test.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtension.mm: Added.
        (resetGlobalState):
        (-[UIDelegateForTestingInspectorExtension _webView:didAttachLocalInspector:]):
        (-[UIDelegateForTestingInspectorExtension _webView:configurationForLocalInspector:]):
        (-[InspectorExtensionDelegateForTestingInspectorExtension inspectorExtension:didShowTabWithIdentifier:]):
        (-[InspectorExtensionDelegateForTestingInspectorExtension inspectorExtension:didHideTabWithIdentifier:]):
        (TEST):

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm:
        (-[UIDelegateForTestingInspectorExtensionDelegate _webView:configurationForLocalInspector:]):
        (TEST):
        Adopt fixes from WKInspectorExtension that allow extension tab content and icons to load.

        * TestWebKitAPI/cocoa/TestInspectorURLSchemeHandler.h: Added.
        * TestWebKitAPI/cocoa/TestInspectorURLSchemeHandler.mm: Copied from Source/WebKit/UIProcess/Inspector/mac/WKInspectorResourceURLSchemeHandler.mm.
        (-[TestInspectorURLSchemeHandler webView:startURLSchemeTask:]):
        (-[TestInspectorURLSchemeHandler webView:stopURLSchemeTask:]):
        Add a simple URLSchemeHandler which allows serving test resources from the TestWebKitAPI.resources directory.
        This is necessary to test _WKInspectorExtension tabs, which must load their content from a custom URL scheme.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        Fix UnifiedSources fallout by adding a missing include.

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

        Migrate _WKDownload tests from TCPServer to HTTPServer
        https://bugs.webkit.org/show_bug.cgi?id=230980
        <rdar://82100878>

        Reviewed by Chris Dumez.

        The former is very picky when it comes to numbers of TCP connections, and causes tests to time out when
        the number of connections changes.  The latter is more forgiving and runs code on the main thread.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::respondSlowly):
        (TestWebKitAPI::downloadAtRate):
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::Connection::send const):

2021-09-29  Matt Lewis  <jlewis3@apple.com>

        Unreviewed built trigger fix.

        * CISupport/build-webkit-org/wkbuild.py:
        (_should_file_trigger_build):
        * CISupport/build-webkit-org/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2021-09-29  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Make build-webkit configurable using environment variable
        https://bugs.webkit.org/show_bug.cgi?id=230958

        Reviewed by Fujii Hironori.

        The cmake toolchain file is hard coded in the script. Make it configurable using
        environment variable.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2021-09-29  Youenn Fablet  <youenn@apple.com>

        WPT importer should create serviceworker template for templated test that have worker as global
        https://bugs.webkit.org/show_bug.cgi?id=230943

        Reviewed by Jonathan Bedard.

        Tests with a worker global should run in all worker global scope (dedicated worker, shared worker and service worker).
        Let's add service worker by default for now.

        * Scripts/webkitpy/w3c/test_importer.py:
        * Scripts/webkitpy/w3c/test_importer_unittest.py:

2021-09-28  BJ Burg  <bburg@apple.com>

        [Cocoa] Add SPI to select a tab created by _WKInspectorExtension
        https://bugs.webkit.org/show_bug.cgi?id=230580
        <rdar://problem/83372851>

        Reviewed by Devin Rousso.

        Create a new test file for _WKInspectorExtensionDelegate. Add a
        new test case that exercises creating an extension tab, showing an
        extension tab, and uses delegate callbacks for didShowTab/didHideTab.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InspectorExtension-TabIcon-30x30.png: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/InspectorExtension-basic-tab.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorExtensionDelegate.mm: Added.
        (resetGlobalState):
        (-[UIDelegateForTestingInspectorExtensionDelegate _webView:didAttachLocalInspector:]):
        (-[InspectorExtensionDelegateForTesting inspectorExtension:didShowTabWithIdentifier:]):
        (-[InspectorExtensionDelegateForTesting inspectorExtension:didHideTabWithIdentifier:]):
        (TEST):

2021-09-28  Kate Cheney  <katherine_cheney@apple.com>

        PCM: different bundleID entries will override each other
        https://bugs.webkit.org/show_bug.cgi?id=230839

        Reviewed by Alex Christensen.

        API test coverage for the case of existing PCM data with a bundleID
        column but an expired unique index.

        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (addUnattributedPCMv4):
        (addAttributedPCMv4):
        (dumpedPCM):
        (pollUntilPCMIsMigrated):
        (emptyPcmDBPath):
        (createAndPopulatePCMObservedDomainTable):
        (setUpFromResourceLoadStatisticsDatabase):
        (setUpFromPCMDatabase):
        (TEST):
        (setUp): Deleted.

2021-09-28  Eddy Wong  <eddy_wong@apple.com>

        Added GlobalSign R3/R5 Root CA cert to webkitcorepy to resolve certain pip module download SSL error.
        https://bugs.webkit.org/show_bug.cgi?id=230904

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitcorepy/webkitcorepy/cacert.pem:

2021-09-28  Youenn Fablet  <youenn@apple.com>

        Validate DeviceIdHashSaltStorage persistent data
        https://bugs.webkit.org/show_bug.cgi?id=230852
        <rdar://problem/83615408>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        * TestWebKitAPI/Tests/WebKit/invalidDeviceIDHashSalts: Added.

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

        Move Cross-Origin-Opener-Policy handling to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=230812
        <rdar://83504842>

        Reviewed by Youenn Fablet.

        Port COOP API tests from PSONSchemeHandler to HTTPServer. This was necessary since custom scheme handler
        loads do not go via the networkProcess (Where COOP handling is now implemented).

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        * TestWebKitAPI/cocoa/HTTPServer.h:

2021-09-28  Matt Lewis  <jlewis3@apple.com>

        Move iOS, watchOS, and tvOS queues to latest releases
        https://bugs.webkit.org/show_bug.cgi?id=230837

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/factories_unittest.py:
        (TestExpectedBuildSteps):
        * 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.ios-simulator-14 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-14 img.logo): Deleted.
        (table.queue-grid tr.platform.tvos-simulator-14 img.logo): Deleted.
        (table.queue-grid tr.platform.tvos-14 img.logo): Deleted.
        (table.queue-grid tr.platform.watchos-simulator-7 img.logo): Deleted.
        (table.queue-grid tr.platform.watchos-7 img.logo): Deleted.

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

        Mostly fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=230868

        Reviewed by Don Olmstead.

        * DumpRenderTree/PlatformMac.cmake:
        * DumpRenderTree/TestNetscapePlugIn/PlatformMac.cmake: Added.
        * TestRunnerShared/PlatformMac.cmake: Added.

2021-09-28  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r283102): [ MacOS Debug ] TestWebKitAPI.WebKit2.CaptureIndicatorDelay is failing
        https://bugs.webkit.org/show_bug.cgi?id=230847
        <rdar://problem/83577251>

        Reviewed by Saam Barati.

        As identified by Saam, the promise resolution callback is racing with the stop function.
        To prevent this, we check in a loop whether the page has a stream and call stop when that is the case.

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

2021-09-28  Geza Lore  <gezalore@gmail.com>

        Fix rounding issue in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=230889

        Reviewed by Adrian Perez de Castro.

        * Scripts/run-jsc-stress-tests:

2021-09-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add ApproximateTime
        https://bugs.webkit.org/show_bug.cgi?id=230876

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/Tests/WTF/Time.cpp:
        (WTF::operator<<):
        (TestWebKitAPI::TEST):

2021-09-27  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2021-09-27  Sam Sneddon  <gsnedders@apple.com>

        Port._natural_sort_key should sort a01 before a001
        https://bugs.webkit.org/show_bug.cgi?id=230764

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/base.py:
        (Port._natural_sort_key):
        * Scripts/webkitpy/port/base_unittest.py:
        (NaturalCompareTest.test_natural_compare):
        (KeyCompareTest.test_test_key):

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

        Unreviewed, reverting r283102, r283103 and r283104.
        https://bugs.webkit.org/show_bug.cgi?id=230854

        It regresses JetStream2 on iOS devices

        Reverted changesets:

        "Build an unlinked baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283102

        "Unreviewed, fix CLoop build"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283103

        "Unreviewed, fix CLoop build part 2"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283104

2021-09-27  Jonathan Bedard  <jbedard@apple.com>

        Exception in run-webkit-tests: Bad file descriptor (Revert)
        https://bugs.webkit.org/show_bug.cgi?id=229994
        <rdar://problem/82826083>

        Unreviewed revert.

        Revert of 241391@main, 241474@main, 241546@main and 241782@main

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.rmtree):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write):
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess):
        (SimulatorProcess._start):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.launch_app):

2021-09-27  Youenn Fablet  <youenn@apple.com>

        Make sure to reset presenting application pid in case of mediaserverd crash
        https://bugs.webkit.org/show_bug.cgi?id=230822
        <rdar://83474184>

        Reviewed by Eric Carlson.

        Add test runner API to crash GPUProcess.

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

2021-09-27  Hoa Dinh  <dvh@apple.com>

        prepare-ChangeLog does not show the correct result with using --git-commit
        https://bugs.webkit.org/show_bug.cgi?id=230816

        Reviewed by Jonathan Bedard.

        When we pass the parameter --git-commit, we need to use the correct reference version when
        computing the difference between the version before and after the change.
        This patch fixes it by passing the version before the specified commit.

        Also, when --git-commit is used, we need compare against the correct version of the file.
        This patch fixes that part by calling git to retrieve the accurate version.

        * Scripts/prepare-ChangeLog:
        (originalFile):
        (generateFunctionLists):

2021-09-27  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

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

        Unreviewed, reverting r283083 and r283088.
        https://bugs.webkit.org/show_bug.cgi?id=230806

        Windows pors are crashing

        Reverted changesets:

        "Build an unlinked baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283083

        "Make byte codes with arithmetic profiles switch to using an
        index instead of a pointer in metadata"
        https://bugs.webkit.org/show_bug.cgi?id=230798
        https://commits.webkit.org/r283088

2021-09-25  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Use less parallel webviews in the uri-scheme API test for WPE and debug builds
        https://bugs.webkit.org/show_bug.cgi?id=230783

        Reviewed by Michael Catanzaro.

        The WPE bots are timing out due to the reasons already mentioned in
        bug230556 and bug229116, and GTK-Debug is flaky timing out.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):

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

        [run-webkit-tests] Use Python 3 (Revert)
        https://bugs.webkit.org/show_bug.cgi?id=226658
        <rdar://problem/78882016>

        Unreviewed revert.

        When running run-webkit-tests with Python 3, our simulator often
        encounter https://bugs.webkit.org/show_bug.cgi?id=230513. Until we
        resolve this bug, we must use Python 2 to run run-webkit-tests.

        * CISupport/build-webkit-org/steps.py:
        (RunWebKitTests):
        * CISupport/build-webkit-org/steps_unittest.py:
        * CISupport/ews-build/steps.py:
        (RunWebKitTests):
        * CISupport/ews-build/steps_unittest.py:
        (test_success):
        (test_warnings):
        * Scripts/run-webkit-tests:

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

        Gracefully handle security bugs in apply-watchlist
        https://bugs.webkit.org/show_bug.cgi?id=229961

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._parse_bug_dictionary_from_xml):
        (Bugzilla.fetch_bug):

2021-09-24  Sam Sneddon  <gsnedders@apple.com>

        LayoutTestFinder should return tests in order
        https://bugs.webkit.org/show_bug.cgi?id=230684

        Reviewed by Jonathan Bedard.

        It has always been intended that LayoutTestFinder return tests in a deterministic order;
        however, a bug in find_files means that directories found by glob aren't sorted, and hence
        running run-webkit-tests with no arguments ends up running the top-level directories in a
        non-deterministic order.

        * Scripts/webkitpy/common/find_files.py:
        (_normalized_find):
        (_normalized_find.sort_by_directory_key):
        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.assert_filesystem_normalizes):
        (TestWinNormalize.test_win):
        (TestFindFiles):
        (TestFindFiles.test_directory_sort_key):
        (TestFindFiles.test_directory_sort_key_with_paths):

2021-09-24  Youenn Fablet  <youenn@apple.com>

        <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
        https://bugs.webkit.org/show_bug.cgi?id=229792
        <rdar://problem/82776741>

        Reviewed by Eric Carlson.

        Add testRunner API to take a view port snapshot as a PNG data URL.
        We can then use this data URL to validate some rendered pixel values.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::takeViewPortSnapshot):
        (WTR::TestRunner::viewPortSnapshotTaken):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::takeViewPortSnapshot):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::takeViewPortSnapshot):

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

        REGRESSION(r282742): Broke IceCC builds
        https://bugs.webkit.org/show_bug.cgi?id=230547

        Reviewed by Sergio Villar Senin.

        There's no need to check the default IceCC toolchain exists, we can't do that from the host
        anyway because their path is a sandbox path. Additionally we now check host paths supplied
        through $ICECC_VERSION_OVERRIDE and ICECC_VERSION_APPEND.

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

2021-09-24  Youenn Fablet  <youenn@apple.com>

        [IOS 15] Video track does not get unmuted in case of tab was inactive less than ~500 ms
        https://bugs.webkit.org/show_bug.cgi?id=230538
        <rdar://problem/83355705>

        Reviewed by Eric Carlson.

        Add mock API to mock camera interruption.

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

2021-09-23  Andres Gonzalez  <andresg_22@apple.com>

        Remove AXDRTElementIdAttribute from the AX object platform wrapper interface.
        https://bugs.webkit.org/show_bug.cgi?id=230657
        <rdar://problem/83424767>

        Reviewed by Chris Fleizach.

        AXDRTElementIdAttribute is a duplicate of AXDOMIdentifier, thus removing
        an unnecessary attribute from the platform wrapper's
        accessibilityAttributeValue method, and making the corresponding change
        to the DRT and WTR accessibilityControllers.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (findAccessibleObjectById):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (findAccessibleObjectById):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::findAccessibleObjectById):

2021-09-23  Sergio Villar Senin  <svillar@igalia.com>

        [Flatpak] Use NUMBER_OF_PROCESSORS if already defined
        https://bugs.webkit.org/show_bug.cgi?id=230638

        Reviewed by Martin Robinson.

        The environment variable NUMBER_OF_PROCESSORS can be defined to instruct the build system
        to spawn as many concurrent build commands as specified. By default flatpak was using 3x the number
        of processors in the local system. However we might prefer to provide a more convenient number
        by using the environment variable. Note that this approach is better than passing -j as
        --makeargs because cmake would have to be reconfigured everytime the number passed to -j changes.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Use NUMBER_OF_PROCESSORS if already defined. Otherwise fallback
        to 3x the number of processors.

2021-09-23  Chris Lord  <clord@igalia.com>

        [GTK] Allow sending precise mouse wheel events in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=230541

        Reviewed by Tim Horton.

        Add API to be able to send precise mouse-wheel events in EventSender.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::setWheelHasPreciseDeltas):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::toWebKitGLibAPI):
        (WTR::EventSenderProxy::~EventSenderProxy):
        (WTR::EventSenderProxy::setWheelHasPreciseDeltas):

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

        PCM should include the bundle ID of the app from which it originated
        https://bugs.webkit.org/show_bug.cgi?id=230576
        <rdar://83065221>

        Reviewed by Kate Cheney.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (pollUntilPCMIsMigrated):

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

        Move PCMDaemon to WebKit.framework and rename it to AdAttributionDaemon
        https://bugs.webkit.org/show_bug.cgi?id=230516

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::testPCMDaemonLocation):

2021-09-22  Brady Eidson  <beidson@apple.com>

        Disable FTP.
        <rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WebKitCocoa/BundlePageConsoleMessage.mm: Added.
        (willAddMessageToConsoleCallback):
        (-[BundlePageConsoleMessage webProcessPlugIn:didCreateBrowserContextController:]):

        * TestWebKitAPI/Tests/WebKitCocoa/FTP.mm: Added.
        (TestWebKitAPI::didReceivePageMessageFromInjectedBundle):
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        (TestWebKitAPI::Util::toNS):

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

        [Flatpak SDK] Switch runtime to 21.08 SDK
        https://bugs.webkit.org/show_bug.cgi?id=229919

        Reviewed by Michael Catanzaro.

        Upgrade SDK runtime to the 21.08 branch.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.main):
        (WebkitFlatpak.check_installed_packages):
        (WebkitFlatpak._get_dependency_packages):
        (WebkitFlatpak.install_all):

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

        REGRESSION(r282082): [GTK] Tests timeout when using xvfb after r282082
        https://bugs.webkit.org/show_bug.cgi?id=230610

        Reviewed by Philippe Normand.

        r282082 changed the way xvfb is spawned by providing a PIPE for stdout and stderr instead of redirecting to
        /dev/null. The problem is that stderr is only read in case of execution failure, so when nothing fails we end up
        filling the buffer that is never read. We can try to find a better solution to show the stderr output in error
        messages, but for now we can revert that part to redirect stderr to /dev/null to make the tests work again.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._xvfb_run):
        (XvfbDriver._xvfb_check_if_ready):

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

        Drop makeRefPtr() and use RefPtr { } directly instead
        https://bugs.webkit.org/show_bug.cgi?id=230564

        Reviewed by Alex Christensen.

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

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

        Rename {checked,dynamic}_ns_cast<> to {checked,dynamic}_objc_cast<>
        <https://webkit.org/b/230508>
        <rdar://problem/83323145>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Update for rename of TypeCastsNS.h to TypeCastsCocoa.h.
        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsCocoa.mm: Rename from TypeCastsNS.mm.
        (TestWebKitAPI::TEST):
        - Update for rename.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        - Import <wtf/cocoa/TypeCastsCocoa.h> for future move of
          WTF::dynamic_objc_cast<> from RetainPtr.h to that header.

2021-09-21  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation][MiniBrowser] Remove WebKit private header include
        https://bugs.webkit.org/show_bug.cgi?id=230183

        Reviewed by Ross Kirsling.

        * MiniBrowser/playstation/main.cpp:
        Remove config.h and wtf/Platform.h include directive.
        PlayStation MiniBrowser is expected to be independent of WebKit
        private headers (i.e. it should depend only on WK API.) in order to
        ensure that we can make a WebBrowser without those headers.

2021-09-21  Philip Chimento  <pchimento@igalia.com>

        Add LLVM/FLang's int128_t implementation to WTF
        https://bugs.webkit.org/show_bug.cgi?id=230437

        Added tests for Int128 and LeadingZeroBitCount copied from LLVM's tests,
        reformatted according to WebKit style.

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Int128.cpp: Added.
        (TestWebKitAPI::TestUnary):
        (TestWebKitAPI::TestBinary):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::ToNative):
        (TestWebKitAPI::FromNative):
        (TestWebKitAPI::TestVsNative):
        * TestWebKitAPI/Tests/WTF/LeadingZeroBitCount.cpp: Added.
        (countWithTwoShiftedBits):
        (TEST):

2021-09-21  Phillip Mates  <pmates@igalia.com>

        Fix JSC test runner warnings and errors on linux
        https://bugs.webkit.org/show_bug.cgi?id=230218

        Reviewed by Jonathan Bedard.

        Fixed the following warning that arises in many scripts when they are
        run on Linux:
        `Can't exec "xcodebuild": No such file or directory at
        /home/mates/igalia/WebKit/Tools/Scripts/webkitdirs.pm line 634.`

        Fixed `run-javascriptcore-tests` on Linux, which was failing to invoke
        builds before running the test suite with the error:
        `Unrecognized option `--64-bit'`

        * Scripts/webkitdirs.pm:
        (XcodeOptions):
        (determineIsWin64):
        (determineIsWin64FromArchitecture): Deleted.

2021-09-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [webkitcorepy] Fail to parse python required version when there's a space between operator and version
        https://bugs.webkit.org/show_bug.cgi?id=230549

        Reviewed by Jonathan Bedard.

        Add optional space between operator and version expression in regular expression.

        * Scripts/libraries/webkitcorepy/webkitcorepy/version.py:
        (Version):

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

        Reduce use of makeRefPtr() and use RefPtr { } directly
        https://bugs.webkit.org/show_bug.cgi?id=230503

        Reviewed by Geoffrey Garen.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::sendEventStream):
        (WTR::UIScriptControllerIOS::dragFromPointToPoint):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):

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

        WebKit might load custom URI scheme request content multiple times
        https://bugs.webkit.org/show_bug.cgi?id=229116

        Reviewed by Brady Eidson.

        Let's load the same URL 50 times and make sure all loads complete with the same content.
        Without the fix, the test hangs forever spinning its main loop, because only a few of the
        requests actually complete, so the test gets stuck waiting.

        Note I picked 50 because when running the test 100 times, wpebackend-fdo dies to an
        unrelated problem: its internal Wayland registry stops registering new global objects, and
        each new web process starts crashing. That's weird, but not the problem we're trying to
        solve today.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (createTestWebViewWithWebContext):
        (testWebContextURIScheme):

2021-09-20  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Move FileLock from webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=230320
        <rdar://problem/83168826>

        Reviewed by Dewei Zhu.

        Move FileLock from webkitpy into webkitcorepy, implement FileLock as a more
        modern Python API.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/file_lock.py: Added.
        (FileLock):
        (FileLock.__init__):
        (FileLock.acquired): Check if the current process has acquired the lock.
        (FileLock.acquire): Attempt to acquire lockfile.
        (FileLock.release): Release lockfile, if this process owns the lock.
        (FileLock.__enter__): Invoke acquire.
        (FileLock.__exit__): Invoke release.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/file_lock.py: Copied from Tools/Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py.
        (FileLock): Single-thread stub implementation of FileLock for testing without a filesystem.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/file_lock_unittest.py: Added.
        (FileLockTestCase):
        (FileLockTestCase.__init__):
        (FileLockTestCase.setUp):
        (FileLockTestCase.tearDown):
        (FileLockTestCase.test_basic):
        (FileLockTestCase.test_locked):
        (FileLockTestCase.test_locked_timeout):
        (FileLockTestCase.test_double):
        * Scripts/webkitpy/common/system/file_lock.py: Removed.
        * Scripts/webkitpy/common/system/file_lock_integrationtest.py: Removed.
        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.make_file_lock): Use webkitcorepy's FileLock.
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.make_file_lock): Use webkitcorepy's mocks.FileLock.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file): Use webkitcorepy's FileLock.

2021-09-20  Brent Fulgham  <bfulgham@apple.com>

        Remove XSS Auditor: Part 1 (Turn off by default)
        https://bugs.webkit.org/show_bug.cgi?id=230483
        <rdar://problem/83310922>

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST): Switch expectation for XSS Auditor.

2021-09-20  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Enable selections
        https://bugs.webkit.org/show_bug.cgi?id=230463

        Reviewed by Alan Bujtas.

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

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

        Stop using makeRef(*this) / makeRefPtr(this)
        https://bugs.webkit.org/show_bug.cgi?id=230464

        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::callUIScriptCallback):
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::doAsyncTask):
        (WTR::UIScriptControllerIOS::zoomToScale):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::doAsyncTask):
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        (WTR::UIScriptControllerMac::removeViewFromWindow):
        (WTR::UIScriptControllerMac::addViewToWindow):
        * DumpRenderTree/win/UIScriptControllerWin.cpp:
        (WTR::UIScriptControllerWin::doAsyncTask):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::H2::Connection::receive const):
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setDidShowContextMenuCallback):
        (WTR::UIScriptControllerCocoa::setDidDismissContextMenuCallback):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        (WTR::UIScriptControllerGtk::doAsyncTask):
        (WTR::UIScriptControllerGtk::activateAtPoint):
        (WTR::UIScriptControllerGtk::removeViewFromWindow):
        (WTR::UIScriptControllerGtk::addViewToWindow):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::doAfterPresentationUpdate):
        (WTR::UIScriptControllerIOS::doAfterNextStablePresentationUpdate):
        (WTR::UIScriptControllerIOS::ensurePositionInformationIsUpToDateAt):
        (WTR::UIScriptControllerIOS::doAfterVisibleContentRectUpdate):
        (WTR::UIScriptControllerIOS::zoomToScale):
        (WTR::UIScriptControllerIOS::retrieveSpeakSelectionContent):
        (WTR::UIScriptControllerIOS::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptControllerIOS::touchDownAtPoint):
        (WTR::UIScriptControllerIOS::liftUpAtPoint):
        (WTR::UIScriptControllerIOS::twoFingerSingleTapAtPoint):
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::doubleTapAtPoint):
        (WTR::UIScriptControllerIOS::stylusDownAtPoint):
        (WTR::UIScriptControllerIOS::stylusMoveToPoint):
        (WTR::UIScriptControllerIOS::stylusUpAtPoint):
        (WTR::UIScriptControllerIOS::stylusTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::longPressAtPoint):
        (WTR::UIScriptControllerIOS::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptControllerIOS::dismissFilePicker):
        (WTR::UIScriptControllerIOS::applyAutocorrection):
        (WTR::UIScriptControllerIOS::simulateRotation):
        (WTR::UIScriptControllerIOS::simulateRotationLikeSafari):
        (WTR::UIScriptControllerIOS::setDidStartFormControlInteractionCallback):
        (WTR::UIScriptControllerIOS::setDidEndFormControlInteractionCallback):
        (WTR::UIScriptControllerIOS::setWillBeginZoomingCallback):
        (WTR::UIScriptControllerIOS::setDidEndZoomingCallback):
        (WTR::UIScriptControllerIOS::setDidShowKeyboardCallback):
        (WTR::UIScriptControllerIOS::setDidHideKeyboardCallback):
        (WTR::UIScriptControllerIOS::setWillStartInputSessionCallback):
        (WTR::UIScriptControllerIOS::chooseMenuAction):
        (WTR::UIScriptControllerIOS::setWillPresentPopoverCallback):
        (WTR::UIScriptControllerIOS::setDidDismissPopoverCallback):
        (WTR::UIScriptControllerIOS::setDidEndScrollingCallback):
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):
        (WTR::UIScriptControllerIOS::doAfterDoubleTapDelay):
        (WTR::UIScriptControllerIOS::installTapGestureOnWindow):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::zoomToScale):
        (WTR::UIScriptControllerMac::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptControllerMac::chooseMenuAction):
        (WTR::UIScriptControllerMac::activateAtPoint):
        * WebKitTestRunner/win/UIScriptControllerWin.cpp:
        (WTR::UIScriptControllerWin::doAsyncTask):
        * WebKitTestRunner/wpe/UIScriptControllerWPE.cpp:
        (WTR::UIScriptControllerWPE::doAsyncTask):
        (WTR::UIScriptControllerWPE::activateAtPoint):
        (WTR::UIScriptControllerWPE::removeViewFromWindow):
        (WTR::UIScriptControllerWPE::addViewToWindow):

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

        [Flatpak SDK] Move toolchains to UserFlatpak and improve SDK upgrades
        https://bugs.webkit.org/show_bug.cgi?id=230201

        Reviewed by Carlos Alberto Lopez Perez.

        As toolchain archives depend on the SDK runtime, it makes sense to move them in the
        corresponding UserFlatpak folder, so that when SDK is upgraded, stale toolchains are
        removed. The SDK upgrade is also now handling cached SSCache authentication tokens and
        propagating those in the newly installed SDK. Finally, SDK upgrades will now also clear
        CMake cache files on WebKit builds, so that hopefully, existing build directories no longer
        need to be manually removed.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.setup_gstbuild):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.main):
        (WebkitFlatpak.acquire_sccache_auth_token_from_config_file):
        (WebkitFlatpak.save_config):

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

        [ macOS Release ] TestWebKitAPI.NetworkProcess.BroadcastChannelCrashRecovery is flaky timing out
        https://bugs.webkit.org/show_bug.cgi?id=230430
        <rdar://problem/83256307>

        Reviewed by Alex Christensen.

        I suspect that the flakiness is due to the BroadcastChannel.postMessage() sometimes failing right
        after we kill the network process and relaunch it. I believe this could happen because the test
        was only making sure that `[[WKWebsiteDataStore defaultDataStore] _networkProcessIdentifier]`
        changed. This meant that the UIProcess was indeed notified that the network process crashed and
        that a new one was relaunched. However, this doesn't necessarily indicate that the view's
        WebProcesses were notified yet. As a result, when we evaluate JS to post a message on a
        BroadcastChannel, the WebProcess could potentially still try to send the IPC via the
        IPC::Connection for the old network process.

        To try and address this race, I am adding code to wait until cookie synchronization is
        working across both web views before I try posting the message. Because cookie synchronization
        involves the network process and both WebProcesses, once this happens, we know that both
        WebProcesses are properly connected to the new NetworkProcess.

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

2021-09-17  Kevin Neal  <kevin_neal@apple.com>

        [results.webkit.org] Add ability to access Bugzilla and Radar links from commit messages
        https://bugs.webkit.org/show_bug.cgi?id=229160

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/css/tooltip.css:
        (.tooltip-content hr):
        (@media (prefers-color-scheme: dark) .tooltip-content hr):
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (Commit):
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale):

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

        [git-webkit] Reset author time when editing commits (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=230224
        <rdar://problem/83065417>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.pull): We can't update SVN if the HEAD commit does not have a revision.

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

        [webkitscmpy] Refactor PR branch management
        https://bugs.webkit.org/show_bug.cgi?id=230432
        <rdar://problem/83258413>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/branch.py:
        (Branch): Specify that the 'eng' prefix is for pull-requests.
        (Branch.normalize_branch_name): Normalized branch names should consider other developement prefixes.
        (Branch.editable): Check if a branch is editable. Only includes development branches at the moment,
        will include commit-queue in the near future.
        (Branch.branch_point): Moved from pull_request.py.
        (Branch.main):
        (Branch.normalize_issue): Renamed normalize_branch_name.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull.py:
        (Pull.main): branch_point is now owned Branch command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.main): Match DEV_BRANCHES instead of PREFIX, branch_point is now owned Branch command.
        (PullRequest.branch_point): Moved to branch.py.

2021-09-17  Kate Cheney  <katherine_cheney@apple.com>

        Remove unnecessary ITP memory store code
        https://bugs.webkit.org/show_bug.cgi?id=229512
        <rdar://problem/82644309>

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        Deleted an extra memory store test leftover from when we still had
        a functioning memory store. Now it is just a duplicate of the database
        test, so we can remove it.

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

        REGRESSION: [ iOS ] 5 TestWebKitAPI.WebpagePreferences.* api tests are flaky timing out
        https://bugs.webkit.org/show_bug.cgi?id=229094

        Reviewed by Chris Dumez.

        Disable the tests on iOS until we can fix the problem.
        This will help EWS be much faster and more reliable.

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

2021-09-17  Geza Lore  <gezalore@gmail.com>

        Speed up run-jsc-stress-tests with parallel processing
        https://bugs.webkit.org/show_bug.cgi?id=230251

        Reviewed by Yusuke Suzuki.

        Around 2/3 of the time spent in the initial serial processing phase of
        run-jsc-stress-tests is simply writing out the many test runner
        scripts to disk, which is trivially parallelizable. The change in this
        patch forks sub-processes to emit the test runner scripts which makes
        the serial startup phase overall about 2.5x faster on my test machine
        (47 sec -> 19 sec).

        * Scripts/run-jsc-stress-tests:

2021-09-17  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r275267) [GLIB] API test /webkit/WebKitWebsiteData/configuration is failing
        https://bugs.webkit.org/show_bug.cgi?id=224175

        Reviewed by Carlos Garcia Campos.

        Some WebsiteData tests rely on checking whether some specific files
        are created in the background. Currently, this is done through
        waitUntilFileChanged(), which first g_file_query() whether the file
        exists before entering a main loop which uses GFileMonitor. While this
        worked most of the time, some tests were flaky due to likely the file
        being created between the query call and the monitoring starting,
        especially after revisions like r275267.

        This commit replaces the waitUntilFileChanged calls with an explicit
        check loop, like was done for the applicationCache file in the
        configuration test.

        Also, for the ITP test, there's no need to check for the file to be
        deleted, as the ResourceLoadStatistics just clears the database and
        recreates the schema, reusing the existing file.

        Covered by existing tests.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataConfiguration):
        (testWebsiteDataITP):
        (testWebsiteDataDOMCache):
        * TestWebKitAPI/glib/TestExpectations.json:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::assertFileIsCreated):
        (WebViewTest::assertJavaScriptBecomesTrue):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2021-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][a11y] Add a build option to enable ATSPI
        https://bugs.webkit.org/show_bug.cgi?id=230254

        Reviewed by Adrian Perez de Castro.

        Add stubs for WTR accessibility implementation.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isIsolatedObject const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::AccessibilityUIElement::platformUIElement):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp: Added.
        (WTR::AccessibilityController::resetToConsistentState):
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::platformName):
        (WTR::AccessibilityController::injectAccessibilityPreference):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        (WTR::AccessibilityController::updateIsolatedTreeMode):
        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp: Added.
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (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::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::isChecked const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild const):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::clearSelectedChildren const):
        (WTR::AccessibilityUIElement::accessibilityValue const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isVisible const):
        (WTR::AccessibilityUIElement::isOffScreen const):
        (WTR::AccessibilityUIElement::isCollapsed const):
        (WTR::AccessibilityUIElement::isIgnored const):
        (WTR::AccessibilityUIElement::isSingleLine const):
        (WTR::AccessibilityUIElement::isMultiLine const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::setSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::supportedActions const):
        (WTR::AccessibilityUIElement::pathDescription const):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
        (WTR::AccessibilityUIElement::classList const):
        (WTR::AccessibilityUIElement::characterAtOffset):
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        (WTR::AccessibilityUIElement::replaceTextInRange):
        (WTR::AccessibilityUIElement::insertText):
        (WTR::AccessibilityUIElement::popupValue const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::updateIsolatedTreeMode):
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-09-16  David Kilzer  <ddkilzer@apple.com>

        WebKit::WebProcessPool should use a weak observer with CFNotificationCenter
        <https://webkit.org/b/230227>
        <rdar://problem/83067708>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add TypeCastsNS.mm to the project.
        * TestWebKitAPI/Tests/WTF/cocoa/TypeCastsNS.mm: Add.
        (TestWebKitAPI::TEST): Add tests for <wtf/TypeCastsNS.h>.

2021-09-16  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Remove ENABLE_RESIZE_OBSERVER build-time option. This option is
        quite broken if you try to disable it.

        * Scripts/webkitperl/FeatureList.pm:

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

        Exception in run-webkit-tests: Bad file descriptor (Part 4)
        https://bugs.webkit.org/show_bug.cgi?id=229994
        <rdar://problem/82826083>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess):
        (SimulatorProcess._start): Retry app start if OSError is caught when constructing stdout/stdin/stderr.

2021-09-16  Megan Gardner  <megan_gardner@apple.com>

        Fix TestWebKitAPI.WebKit.AppHighlightsInImageOverlays to work with changing menu states.
        https://bugs.webkit.org/show_bug.cgi?id=230363
        rdar://82099562

        Reviewed by Wenson Hsieh.

        The tests assumes that both menu items would be available, but that was changed to be based on the visibility
        of the quick note window, so update the test accordingly.

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

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

        Add an option to disable linter in WPT test exporter
        https://bugs.webkit.org/show_bug.cgi?id=230345

        Reviewed by Jonathan Bedard.

        Some existings WPT tests are failing the linter.
        While we should probably try to restrict linter to test files actually modified, let's add an option to disable linter for now.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter.do_export):
        (parse_args):

2021-09-16  Hoa Dinh  <dvh@apple.com>

        Allow use of --git-index and --git-commit at the same time when using with --only-files
        https://bugs.webkit.org/show_bug.cgi?id=230328

        Reviewed by Jonathan Bedard.

        When specifying --git-index and --git-commit, it will compute the diff between the parent commit of the specified commit
        and HEAD, including the current staged changes.

        * Scripts/prepare-ChangeLog:
        (main):
        (diffFromToString):

2021-09-16  Tyler Wilcock <twilco.o@protonmail.com> and Myles C. Maxfield  <mmaxfield@apple.com>

        font-weight should always serialize as a number
        https://bugs.webkit.org/show_bug.cgi?id=214230
        <rdar://problem/65623540>

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:

2021-09-15  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Remove ENABLE_INTERSECTION_OBSERVER build-time option. This option is
        quite broken if you try to disable it.

        * Scripts/webkitperl/FeatureList.pm: Remove intersection-observer option

2021-09-15  Philip Chimento  <pchimento@igalia.com>

        Fixes for build-webkit --minimal
        https://bugs.webkit.org/show_bug.cgi?id=229780

        Reviewed by Fujii Hironori.

        Remove the fast-jit-permissions, legacy-css-vendor-prefixes,
        webassembly-streaming-api, and webgpu options. These don't seem to exist
        anymore within the codebase and print an error if they are used.

        * Scripts/webkitperl/FeatureList.pm:

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

        Implement network process crash recovery for BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=230236

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (-[BroadcastChannelMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2021-09-15  Tim Horton  <timothy_horton@apple.com>

        Remove the "core.webKitBranchBuild" prompt from setup-git-clone
        https://bugs.webkit.org/show_bug.cgi?id=230323

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute):
        "core.webKitBranchBuild" is an advanced feature and also doesn't work
        at all for Apple folks (leading to a myriad of bizarro build problems).
        Folks who want it can use the documentation (UsingGitWithWebKit on the Wiki),
        but in general, until it's well supported, it's best if we don't encourage it.

2021-09-15  Geza Lore  <gezalore@gmail.com>

        Cache resource paths in run-jsc-stress-tests for speedup
        https://bugs.webkit.org/show_bug.cgi?id=230263

        Reviewed by Adrian Perez de Castro.

        A large portion of the serial startup time of run-jsc-stress-tests is
        just re-computing file system paths of bundle resources over and over
        again. Cache results for a 40% speedup of the test enumeration phase.

        * Scripts/run-jsc-stress-tests:

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

        Rename RESOURCE_LOAD_STATISTICS to INTELLIGENT_TRACKING_PREVENTION
        https://bugs.webkit.org/show_bug.cgi?id=230279
        <rdar://problem/83118683>

        Reviewed by John Wilander.

        Followup renaming the variables in FeatureList.pm.

        * Scripts/webkitperl/FeatureList.pm:

2021-09-14  John Wilander  <wilander@apple.com>

        Rename RESOURCE_LOAD_STATISTICS to INTELLIGENT_TRACKING_PREVENTION
        https://bugs.webkit.org/show_bug.cgi?id=230279
        <rdar://problem/83118683>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:

2021-09-14  Kevin Neal  <kevin_neal@apple.com>

        [builtins-generator-tests] Invoke with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=229879

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (RunBuiltinsTests):
        * Scripts/run-builtins-generator-tests:
        (main): Deleted.

2021-09-14  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Reset author time when editing commits (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=230224
        <rdar://problem/83065417>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.pull): Force-update ref of pulled branch, reset author time of all rebased commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Add update-ref mock.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        (TestDoPullRequest):

2021-09-14  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Reset author time when editing commits (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=230224
        <rdar://problem/83065417>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Capture 'git commit date=now'.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.create_commit): Always reset commit date.

2021-09-14  Hoa Dinh  <dvh@apple.com>

        Provide a way to update the commit message with an updated list of changed files/functions
        https://bugs.webkit.org/show_bug.cgi?id=230195

        Reviewed by Jonathan Bedard.

        Add a new parameter --only-files to request generation of only the part of the changed files/functions.

        * Scripts/prepare-ChangeLog:
        (main):
        (generateNewChangeLogs):

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

        [macOS] -toggleAutomaticSpellingCorrection: menu item validation shouldn't require post-layout editor state
        https://bugs.webkit.org/show_bug.cgi?id=230205

        Reviewed by Darin Adler.

        See WebKit ChangeLog for more details.

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

2021-09-13  Andres Gonzalez  <andresg_22@apple.com>

        AX: set insertion point to the end of a native text control does not work when passing a collapsed TextMarkerRange with both start and end equals to the end TextMarker for the element.
        https://bugs.webkit.org/show_bug.cgi?id=230166

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        Use AXTextMarkerRangeForTextMarkers instead of
        AXTextMarkerRangeForUnorderedTextMarkers.

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

        Add unit test that uses PCM daemon
        https://bugs.webkit.org/show_bug.cgi?id=230191

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Configurations/TestPCMDaemon.xcconfig: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::currentExecutableLocation):
        (TestWebKitAPI::testDaemonPList):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestPCMDaemonMain.c: Copied from Source/WebKit/NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementConnection.cpp.
        (main):

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

        Crash under WebPage::runJavaScript()
        https://bugs.webkit.org/show_bug.cgi?id=230223
        <rdar://80172436>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (-[AsyncJSUIDelegate initWithAlertHandler:]):
        (-[AsyncJSUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):

2021-09-13  Tyler Wilcock  <tyler_w@apple.com>

        AX: Make PDFs loaded via <embed> accessible
        https://bugs.webkit.org/show_bug.cgi?id=229556

        Reviewed by Chris Fleizach and Andres Gonzalez.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributeValue):
        Some PDFKit elements don't respond to `accessibilityAttributeValue`,
        so before calling that selector first check to see if the given `element` responds
        to an attribute-specific selector (like `accessibilityRole`).

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

        Running iOS layout tests sometimes fails with a utf-8 error
        https://bugs.webkit.org/show_bug.cgi?id=230082

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test): Decode errors should not be fatal, since it's possible
        that stdout may be a png from a timed out test.

2021-09-13  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [TestWTF] Hash tests for denorm_min should be skipped if denorm is not supported.
        https://bugs.webkit.org/show_bug.cgi?id=230177

        Reviewed by Don Olmstead.

        std::numeric_limits::denorm_min does not return a denormalized value
        if denormal number is not supported. Test denorm_min only if 
        (has_denorm == denorm_present).

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

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

        Reduce EWS email notifications to Aakash

        Unreviewed. Do not email to Aakash anymore for every build/test failure. It was added initially so that I
        can debug any issue in these email notifications. But these have been stable and I don't need a copy of every
        EWS email.

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

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

        Unreviewed, AutoInstall hotfix for Linux platforms

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall):
        (AutoInstall._request): Disable custom cacert on Linux, OpenSSL fails validate this cert.

2021-09-10  Simon Fraser  <simon.fraser@apple.com>

        Add an lldb summary provider for the WebCore::Length type
        https://bugs.webkit.org/show_bug.cgi?id=230185

        Reviewed by Alan Bujtas.

        Make Length types easier to visualize when debugging in lldb.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WebCoreLength_SummaryProvider):
        (WebCoreLengthProvider):
        (WebCoreLengthProvider.__init__):
        (WebCoreLengthProvider.get_type):
        (WebCoreLengthProvider.get_type_string):
        (WebCoreLengthProvider.is_auto):
        (WebCoreLengthProvider.is_undefined):
        (WebCoreLengthProvider.is_calculated):
        (WebCoreLengthProvider.is_fixed):
        (WebCoreLengthProvider.is_percent):
        (WebCoreLengthProvider.has_quirk):
        (WebCoreLengthProvider.is_float):
        (WebCoreLengthProvider.get_numeric_value):

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

        Implement navigation reporting for Cross-Origin-Opener-Policy
        https://bugs.webkit.org/show_bug.cgi?id=230046

        Reviewed by Alex Christensen.

        Fix issue where [DumpJSConsoleLogInStdErr] was not working for tests that process-swap
        due to COOP. Some data members on InjectedBundle such as m_dumpJSConsoleLogInStdErr
        were only set in didReceiveMessageToPage(), before calling beginTesting(). However, in
        case of process-swap, beginTesting() gets called a second time in the new process, from
        InjectedBundle::didCreatePage() with BegingTestingMode::Resume. As a result, the
        m_dumpJSConsoleLogInStdErr flag was not getting set in the new process' injected bundle
        after a process-swap. To address the issue, those data members now get initialized in
        beginTesting() instead.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::beginTesting):

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

        [webkitcorepy] AutoInstall occasionally raising SSL error (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=230169
        <rdar://problem/82767008>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.archives): Add retry when listing archives.

2021-09-10  David Kilzer  <ddkilzer@apple.com>

        Fix ASan+UBSan builds: part two
        <https://webkit.org/b/230100>
        <rdar://problem/82926910>

        Reviewed by Alexey Proskuryakov.

        Overview of changes:
        - Rename variables so no Tools/sanitizer/*.xcconfig file
          contains a variable with the same name.  This is required due
          to the way Xcode collects variables from an xcconfig file
          specified on the command-line.
        - Remove use of $(inherited) except in well-known variables.
          That mechanism doesn't work at the time when Xcode resolves
          variables from an xcconfig file specified on the command-line.
        - Remove or inline existing variables in sanitizer.xcconfig.

        * sanitizer/asan.xcconfig:
        (WK_ENABLE_ADDRESS_SANITIZER):
        - Rename from WK_ENABLE_SANITIZER.
        (WK_ADDRESS_SANITIZER_OTHER_CPLUSPLUSFLAGS_YES):
        - Rename from WK_SANITIZER_OTHER_CPLUSPLUSFLAGS_YES and remove
          $(inherited).

        * sanitizer/sanitizer.xcconfig:
        (OTHER_CFLAGS):
        - Inline WK_SANITIZER_OTHER_CFLAGS_YES and add variable defined
          in ubsan.xcconfig.
        (OTHER_CPLUSPLUSFLAGS):
        - Remove WK_SANITIZER_OTHER_CPLUSPLUSFLAGS_YES and add variable
          defined in asan.xcconfig.
        (OTHER_LDFLAGS):
        - Inline WK_LDFLAGS_SANITIZER_YES.

        * sanitizer/tsan.xcconfig:
        (WK_ENABLE_SANITIZER):
        - Remove instead of renaming to WK_ENABLE_THREAD_SANITIZER since
          this is unused.

        * sanitizer/ubsan.xcconfig:
        (WK_ENABLE_UNDEFINED_BEHAVIOR_SANITIZER):
        - Rename from WK_ENABLE_SANITIZER.
        (WK_UNDEFINED_BEHAVIOR_SANITIZER_OTHER_CFLAGS_YES):
        - Rename from WK_SANITIZER_OTHER_CFLAGS_YES and remove
          $(inherited).

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

        [resultsdbpy] model.casserole_unittest.CasseroleTest.test_asynchronous failing
        https://bugs.webkit.org/show_bug.cgi?id=230162
        <rdar://problem/82847267>

        Reviewed by Ryan Haddad.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/casserole_unittest.py:
        (CasseroleTest.test_asynchronous): Child processes do not pick up MockTime.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-09-10  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Support running applications with ENABLE_STATIC_JSC=ON
        https://bugs.webkit.org/show_bug.cgi?id=230170

        Reviewed by Ross Kirsling.

        Updating loading code to not load libJavaScriptCore shared library
        if we are using a static version. Fix platform bits for
        TestJavaScriptCore to load libraries at all.

        * MiniBrowser/playstation/main.cpp:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/playstation/main.cpp:

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

        [webkitcorepy] AutoInstall occasionally raising SSL error
        https://bugs.webkit.org/show_bug.cgi?id=230169
        <rdar://problem/82767008>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall._request): Pass cafile into urlopen directly.

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

        [build.webkit.org] Remove ./ from command invocations
        https://bugs.webkit.org/show_bug.cgi?id=230165

        Reviewed by Ryan Haddad.

        * CISupport/build-webkit-org/steps.py: Removed ./ from command invocations to be consistent with EWS configuration.
        * CISupport/build-webkit-org/steps_unittest.py: Updatd unit-tests.

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

        Add infrastructure to allow TLS during PCM tests
        https://bugs.webkit.org/show_bug.cgi?id=230137

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::delegateAllowingAllTLS):
        (TestWebKitAPI::runBasicEventAttributionTest):
        (TestWebKitAPI::TEST):

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

        Exception in run-webkit-tests: Bad file descriptor (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=229994
        <rdar://problem/82826083>

        Unreviewed follow-up fix.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.rmtree): shutil.rmtree doesn't ignore bad file descriptor OSErrors.

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

        Fix some lldb data provider issues
        https://bugs.webkit.org/show_bug.cgi?id=230134

        Reviewed by Daniel Bates.

        Fix the color data provider. Add a test for the URL provider. Add an
        early return in lstring_to_string that fixed an error.

        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders):
        * lldb/lldb_webkit.py:
        (lstring_to_string):
        (WebCoreColorProvider):
        (WebCoreColorProvider._is_outOfLine):
        (WebCoreColorProvider._is_valid):
        (WebCoreColorProvider._is_semantic):
        (WebCoreColorProvider._color_space):
        (WebCoreColorProvider._flags):
        (WebCoreColorProvider._to_string_outOfLine):
        (WebCoreColorProvider.to_string):
        (WebCoreColorProvider._is_extended): Deleted.
        (WebCoreColorProvider._to_string_extended): Deleted.
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFURL_SummaryProvider):

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

        [Mac Catalyst] Korean characters do not combine correctly in editable fields in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=230122
        rdar://79062204

        Reviewed by Devin Rousso.

        Add a new API test to exercise the change. See WebKit/ChangeLog for more information.

        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        (-[TestWKWebView synchronouslyRequestAutocorrectionContext]):
        (TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        Implement a WebProcess cap
        https://bugs.webkit.org/show_bug.cgi?id=230067
        <rdar://79479244>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

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

        Run check-github-mirror-integrity more frequently
        https://bugs.webkit.org/show_bug.cgi?id=230095

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/factories.py:
        (WatchListFactory.__init__): Run check-github-mirror-integrity on watchlist ews.
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps): Updated unit-test.

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

        [ews] Share more bots between EWS queues
        https://bugs.webkit.org/show_bug.cgi?id=230094

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/config.json:

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

        Exception in run-webkit-tests: Bad file descriptor (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=229994
        <rdar://problem/82826083>

        Reviewed by Ryan Haddad.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.launch_app): Catch OSError.

2021-09-08  Sihui Liu  <sihui_liu@apple.com>

        Regression (r282130): [ macOS iOS wk2 ] imported/w3c/web-platform-tests/storage/persisted.https.any.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=230053
        <rdar://problem/82879548>

        Reviewed by Chris Dumez.

        Clear storage states between tests so tests do not affect each other.

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

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

        [webkitcorepy] Add support for find_spec
        https://bugs.webkit.org/show_bug.cgi?id=230009
        <rdar://problem/82827571>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.find_spec): Added.

2021-09-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][DumpRenderTree] ASSERTION FAILED: openWindows().size() == 1 in runTest
        https://bugs.webkit.org/show_bug.cgi?id=229932

        Reviewed by Chris Dumez.

        runTest() called DestroyWindow while iterating 'openWindows'.
        However, DestroyWindow dispatches WM_DESTROY that removes the item
        from 'openWindows'.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Copy the vector to iterate.

2021-09-08  Simon Fraser  <simon.fraser@apple.com>

        Add a temporarily prefixed property for mask-mode, aliased to -webkit-mask-source-type
        https://bugs.webkit.org/show_bug.cgi?id=229915

        Reviewed by Antti Koivisto.
        
        Allow the "synonym" key in CSSProperties.json.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):

2021-09-08  Lauro Moura  <lmoura@igalia.com>

        [GTK] Fix test path in last commit

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-09-08  Lauro Moura  <lmoura@igalia.com>

        [GTK] Garden default-menu API test failure

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-09-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] TestWebKitAPI.WebKit.DidNotHandleKeyDown is failing
        https://bugs.webkit.org/show_bug.cgi?id=229927

        Reviewed by Don Olmstead.

        TestWebKitAPI::Util::isKeyDown was not implemented

        * TestWebKitAPI/CMakeLists.txt: Added Tests/WebKit/DidNotHandleKeyDown.cpp.
        * TestWebKitAPI/Tests/WebKit/DidNotHandleKeyDown.cpp: GTK and WPE ports fail the test. Skip it.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::isKeyDown): Implemented.

2021-09-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] PlatformWebView::simulateSpacebarKeyPress sends wrong scan code for the space key and Alt key
        https://bugs.webkit.org/show_bug.cgi?id=229928

        Reviewed by Don Olmstead.

        PlatformWebView::simulateSpacebarKeyPress sent 39, but it should be 0x39.
        PlatformWebView::simulateAltKeyPress sent 38, but it should be 0x38.

        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):

2021-09-07  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Support callbacks as main arguments (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=229739
        <rdar://problem/82597266>

        Unreviewed follow-up fix.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.url): For compatibility, use git config directly.

2021-09-07  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Support callbacks as main arguments
        https://bugs.webkit.org/show_bug.cgi?id=229739
        <rdar://problem/82597266>

        Reviewed by Dewei Zhu.

        * Scripts/git-webkit:
        (is_webkit_filter): Return item if repository is Webkit.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Pass repository to contributors, identifier_template and subversion
        to dynamically generate values if those arguments are callable.

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

        Implement origin partitioning (top-origin/frame-origin) for BroadcastChannel
        https://bugs.webkit.org/show_bug.cgi?id=229814

        Reviewed by Alex Christensen.

        Disable BroadcastChannel origin partitioning when running layout tests since it would cause
        too many test failures in WPT tests at this point (e.g. COOP/COEP tests).

        * TestRunnerShared/TestFeatures.cpp:
        (WTR::shouldDisableBroadcastChannelOriginPartitioning):
        (WTR::hardcodedFeaturesBasedOnPathForTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):

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

        Allow layout tests to open popups by default
        https://bugs.webkit.org/show_bug.cgi?id=229881

        Reviewed by Darin Adler.

        Allow layout tests to open popups by default and drop testRunner.setCanOpenWindow().

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setCallCloseOnWebViews):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::createWebViewWithRequest):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::setAcceptsEditing):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

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

        TestWebKitAPI.EventAttribution.Basic is extremely flaky on api-ios
        https://bugs.webkit.org/show_bug.cgi?id=229995

        Reviewed by Jonathan Bedard.

        Clear state on disk before running these tests.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::clearState):
        (TestWebKitAPI::runBasicEventAttributionTest):
        (TestWebKitAPI::TEST):

2021-09-07  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [build.webkit.org][ews-build.webkit.org] Only try to download from S3 on the production server
        https://bugs.webkit.org/show_bug.cgi?id=230006

        Reviewed by Aakash Jain.

        The URL identifiers used for the S3 built products are not random,
        they depend on the revision number or the patch number. So it can
        happen than on a test deployment the tester downloads the built-product
        from the official deployment at webkit.org rather than from its own worker.

        Avoid this by ensuring that only on the official deployment it is tried to
        download from S3. On the test deployments the code will now skip the step to
        download from S3 and instead it will download the built product from the master.

        * CISupport/build-webkit-org/steps.py:
        (DownloadBuiltProduct.start):
        * CISupport/ews-build/steps.py:
        (DownloadBuiltProduct.getResultSummary):
        (DownloadBuiltProduct.start):
        * CISupport/ews-build/steps_unittest.py:

2021-09-07  Megan Gardner  <megan_gardner@apple.com>

        Rewrite long press and drag tests to be more robust.
        https://bugs.webkit.org/show_bug.cgi?id=229779
        rdar://40917203

        Reviewed by Wenson Hsieh.

        Found a crash when bad data was entered for gesture emulation.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::convertCoordinates):

2021-09-07  Jonathan Bedard  <jbedard@apple.com>

        Exception in run-webkit-tests: Bad file descriptor (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=229994

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write): Catch "Bad file descriptor."
        (ServerProcess._wait_for_data_and_update_buffers_using_select): Ditto.

2021-09-07  Jonathan Bedard  <jbedard@apple.com>

        run_webkit_tests failed to print error message in python3 in linux_get_crash_log.py
        https://bugs.webkit.org/show_bug.cgi?id=229971

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._get_gdb_output):

2021-09-07  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] The Xvfb display server may fail to start sometimes causing tests to randomly crash (v3)
        https://bugs.webkit.org/show_bug.cgi?id=229758

        Reviewed by Philippe Normand.

        Add a new function in XvfbDriver() to ensure that the display server
        at a given display_id is replying as expected. Ask it for the screen
        size at monitor 0 and compare the result with the one we expect to
        have inside Xvfb. For doing this check a external python program is
        called which does the query using GTK. Using a external program is
        more robust against possible failures calling into GTK and also will
        allow re-using this program also to check that the weston server is
        also replying as expected for the weston driver (on a future patch).

        If the Xvfb driver is not replying as expected then restart it and
        try again, up to 3 retries.

        Use this also on the weston driver to check that the Xvfb driver is
        ready.

        The code is both compatible with python2 and python3, when running on
        python2 it will try first to use subprocess32 if available, otherwise
        will use standard python2 subprocess without using the timeout feature.

        On this v3 fix an error that caused that the subprocess stderr was
        redirected to stdout by mistake.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__):
        (MockProcess.communicate):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver_unittest.py:
        (WestonXvfbDriverDisplayTest._xvfb_check_if_ready):
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver):
        (XvfbDriver.__init__):
        (XvfbDriver.check_driver):
        (XvfbDriver._xvfb_run):
        (XvfbDriver._xvfb_screen_size):
        (XvfbDriver._xvfb_stop):
        (XvfbDriver._xvfb_check_if_ready):
        (XvfbDriver._setup_environ_for_test):
        (XvfbDriver.has_crashed):
        (XvfbDriver.stop):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.assertDriverStartSuccessful):
        (XvfbDriverTest.test_xvfb_start_and_ready):
        (XvfbDriverTest.test_xvfb_start_arbitrary_worker_number):
        (XvfbDriverTest.test_xvfb_not_replying):
        * gtk/print-screen-size: Added.

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

        TestWebKitAPI.EventAttribution.Basic is extremely flaky on api-ios
        https://bugs.webkit.org/show_bug.cgi?id=229995

        Disabling the test for now.

        Unreviewed test gardening.

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

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

        Unreviewed, reverting r282064.
        https://bugs.webkit.org/show_bug.cgi?id=229990

        Made run-webkit-test fail in Linux

        Reverted changeset:

        "[GTK] The Xvfb display server may fail to start sometimes
        causing tests to randomly crash"
        https://bugs.webkit.org/show_bug.cgi?id=229758
        https://commits.webkit.org/r282064

2021-09-07  Sam Sneddon  <gsnedders@apple.com>

        Fix DeprecationWarning in webkitpy under Py 3.6+
        https://bugs.webkit.org/show_bug.cgi?id=229959

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.print_summary):

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

        Unreviewed, reverting r282058.
        https://bugs.webkit.org/show_bug.cgi?id=229978

        broken two css layout tests on iOS

        Reverted changeset:

        "Add a temporarily prefixed property for mask-mode, aliased to
        -webkit-mask-source-type"
        https://bugs.webkit.org/show_bug.cgi?id=229915
        https://commits.webkit.org/r282058

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

        [ews] Invoke transfer-archive-to-s3 with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=229972

        Reviewed by Alexey Proskuryakov.

        * CISupport/ews-build/steps.py:
        (TransferToS3): Invoke with python 3.
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.
        * CISupport/Shared/transfer-archive-to-s3: Changed shebang to python 3.

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

        Unreviewed, reverting r282025.
        https://bugs.webkit.org/show_bug.cgi?id=229970

        broken layout test on mac-debug-wk1

        Reverted changeset:

        "Allow layout tests to open popups by default"
        https://bugs.webkit.org/show_bug.cgi?id=229881
        https://commits.webkit.org/r282025

2021-09-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] The Xvfb display server may fail to start sometimes causing tests to randomly crash
        https://bugs.webkit.org/show_bug.cgi?id=229758

        Reviewed by Philippe Normand.

        Add a new function in XvfbDriver() to ensure that the display server
        at a given display_id is replying as expected. Ask it for the screen
        size at monitor 0 and compare the result with the one we expect to
        have inside Xvfb. For doing this check a external python program is
        called which does the query using GTK. Using a external program is
        more robust against possible failures calling into GTK and also will
        allow re-using this program also to check that the weston server is
        also replying as expected for the weston driver (on a future patch).

        If the Xvfb driver is not replying as expected then restart it and
        try again, up to 3 retries.

        Use this also on the weston driver to check that the Xvfb driver is
        ready.

        The code is both compatible with python2 and python3, when running on
        python2 it will try first to use subprocess32 if available, otherwise
        will use standard python2 subprocess without using the timeout feature.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__):
        (MockProcess.communicate):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver_unittest.py:
        (WestonXvfbDriverDisplayTest._xvfb_check_if_ready):
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver):
        (XvfbDriver.__init__):
        (XvfbDriver.check_driver):
        (XvfbDriver._xvfb_run):
        (XvfbDriver._xvfb_screen_size):
        (XvfbDriver._xvfb_stop):
        (XvfbDriver._xvfb_check_if_ready):
        (XvfbDriver._setup_environ_for_test):
        (XvfbDriver.has_crashed):
        (XvfbDriver.stop):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.assertDriverStartSuccessful):
        (XvfbDriverTest.test_xvfb_start_and_ready):
        (XvfbDriverTest.test_xvfb_start_arbitrary_worker_number):
        (XvfbDriverTest.test_xvfb_not_replying):
        * gtk/print-screen-size: Added.

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

        Add a temporarily prefixed property for mask-mode, aliased to -webkit-mask-source-type
        https://bugs.webkit.org/show_bug.cgi?id=229915

        Reviewed by Antti Koivisto.
        
        Allow the "synonym" key in CSSProperties.json.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):

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

        [ews] Invoke validate-changelog with python 3
        https://bugs.webkit.org/show_bug.cgi?id=229872

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ValidateChangeLogAndReviewer):
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.

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

        Safari’s Privacy Report window is completely blank
        https://bugs.webkit.org/show_bug.cgi?id=229847
        <rdar://problem/80974688>

        Reviewed by Chris Dumez.

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

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

        [Web App Manifest] Always fetch the first manifest if provided
        https://bugs.webkit.org/show_bug.cgi?id=229059
        <rdar://problem/82148333>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm:
        (TestWebKitAPI::TEST.ApplicationManifest.AlwaysFetch): Added.
        (TestWebKitAPI::TEST.ApplicationManifest.OnlyFirstManifest): Added.
        (TestWebKitAPI::TEST.ApplicationManifest.NoManifest): Added.
        (TestWebKitAPI::TEST.ApplicationManifest.MediaAttriute): Added.
        (TestWebKitAPI::TEST.ApplicationManifest.DoesNotExist): Added.
        (TestWebKitAPI::TEST.ApplicationManifest.Blocked): Added.

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

        Allow layout tests to open popups by default
        https://bugs.webkit.org/show_bug.cgi?id=229881

        Reviewed by Darin Adler.

        Allow layout tests to open popups by default and drop testRunner.setCanOpenWindow().

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setCallCloseOnWebViews):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:createWebViewWithRequest:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::createWebViewWithRequest):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::setAcceptsEditing):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

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

        Drop calls to testRunner.setCloseRemainingWindowsWhenComplete() from layout tests
        https://bugs.webkit.org/show_bug.cgi?id=229873

        Reviewed by Sam Weinig.

        Drop testRunner.setCloseRemainingWindowsWhenComplete() implementation from WKTR and DRT
        as it is a no-op.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        Unreviewed iOS build fix after r281990.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):

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

        [ews] Invoke apply-watchlist with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=229864

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ApplyWatchList):
        * CISupport/ews-build/steps_unittest.py:

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

        WebKitTestRunner does not correctly close all auxiliary WebViews between tests
        https://bugs.webkit.org/show_bug.cgi?id=229838

        Reviewed by Alex Christensen.

        I noticed when running imported/w3c/web-platform-tests/html/cross-origin-opener-policy/coop-csp-sandbox-navigate.https.html
        in a loop that the number of WebContent processes would grow until we crash. The reason for that is that the
        test opens a popup window and that popup wouldn't get closed between runs.

        There was some logic in InjectedBundle::done() to close auxiliary pages but this relied on the injected
        bundle API and thus only knows about pages that are in the same WebProcess. Nowadays, with process swapping,
        it is common for auxiliary pages to end up in other WebProcesses. For this reason, I dropped the logic to
        close auxiliary pages from InjectedBundle::done() and instead added similar logic in the UIProcess,
        inside TestController::resetStateToConsistentValues().

        Finally, I dropped most of the code related to testRunner.setCloseRemainingWindowsWhenComplete() while keeping
        the method as a no-op for now so that I don't have to update all the layout tests in this patch (I'll follow
        up). For WebKitTestRunner, testRunner.setCloseRemainingWindowsWhenComplete() was already a no-op as the data
        member getting set was never queried. For DumpRenderTree, I just made this behavior the default as I don't see
        any reason why we wouldn't want to close auxiliary pages between tests.

        * DumpRenderTree/TestRunner.cpp:
        (setCloseRemainingWindowsWhenCompleteCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setCanOpenWindows):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::pageCount const):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::setCloseRemainingWindowsWhenComplete):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::closeOtherPage):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::platformCreateOtherPage):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateOtherPage):

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

        [iOS 15] editing/caret/ios/caret-in-overflow-area.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=229830
        rdar://82190832

        Reviewed by Tim Horton.

        In iOS 15, writing the "AutomaticMinimizationEnabled" default is no longer sufficient to ensure that only the
        UCB is on-screen when the keyboard is shown after focusing an editable element with the hardware keyboard
        attached in layout tests. Among other things, this causes editing/caret/ios/caret-in-overflow-area.html to fail
        in newly created iOS simulators, or iOS simulators that have just had their content erased, due to the fact that
        the full-height software keyboard is shown instead of the minimized UCB.

        Address this by updating the workaround such that we directly call into TextInput SPI to enable automatic
        keyboard minimization.

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

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

        Remove all WTR output before Content-Type:text/plain for WebRTC tests on BigSur
        https://bugs.webkit.org/show_bug.cgi?id=229552
        <rdar://problem/82390178>

        Reviewed by Jonathan Bedard.

        Previously we were removing stdout logging according certain patterns for webrtc tests.
        Based on bot results, we now remove any stdout logging for WebRTC tests, but only for BigSur.
        For that purpose, we add the empty string as detector when needed.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_detectors_to_strip_text_start):

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

        [GLIB] Install lcms2 in helper dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=229173

        Reviewed by Carlos Alberto Lopez Perez.

        lcms2 support is enabled by default since r274273.

        * glib/dependencies/apt:
        * glib/dependencies/dnf:
        * glib/dependencies/pacman:
        * gtk/dependencies/brew:

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

        [WPE] form-submission-steps API test is also flaky timing out like GTK

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [webkit-patch] apply-watchlist command fails on python 3 (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=229822
        <rdar://problem/82691261>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        (get_diff_converter): Potentially decode bytes.

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

        [GLIB] run-gtk-tests does not require GI outside the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=229836

        Reviewed by Jonathan Bedard.

        Some worker bots were failing without python3-gi installed, but it's
        not required as the flatpak env provides it.

        * Scripts/run-gtk-tests:

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

        Gracefully recover from WebAuthnProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=229828

        Reviewed by Chris Dumez.

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

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

        Reject non-IPv4 hostnames that end in numbers
        https://bugs.webkit.org/show_bug.cgi?id=228826

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        Update expectations for a few strange URLs that are no longer valid.

2021-09-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [run-perf-tests] Add support for python3 and use it by default
        https://bugs.webkit.org/show_bug.cgi?id=229783

        Reviewed by Jonathan Bedard.

        Make the script compatible with python3 and set it to use python3
        by default. The script is still compatible with python2.

        * CISupport/build-webkit-org/steps.py:
        (RunAndUploadPerfTests):
        * Scripts/run-perf-tests:
        * Scripts/webkitpy/common/net/file_uploader.py:
        (FileUploader._upload_data.callback):
        (FileUploader):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_upload_json):

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

        [contributors.json] Relocation (Part 6)
        https://bugs.webkit.org/show_bug.cgi?id=229690
        <rdar://problem/82552403>

        Reviewed by Yusuke Suzuki.

        * WebKitBot/src/Commit.mjs: Use name instead of fullName.
        * WebKitBot/src/Contributors.mjs: Load contributors from metadata/contributors.json,
        parse as list instead of dictionary.
        * WebKitBot/tests/Commit.test.mjs: Load contributors from metadata/contributors.json.

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

        [webkit-patch] apply-watchlist command fails on python 3
        https://bugs.webkit.org/show_bug.cgi?id=229822
        <rdar://problem/82691261>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/checkout/diff_parser.py:
        (DiffParser._parse_into_diff_files): Ensure all diff lines are strings.

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

        [webkitpy] WrappedPopen breaks process returncode
        https://bugs.webkit.org/show_bug.cgi?id=229824

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkitpy/common/system/executive.py:
        (WrappedPopen.__init__): Define underlying object.
        (WrappedPopen.returncode): Return underlying object's returncode.

2021-09-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Port API test runner to python3 (v2)
        https://bugs.webkit.org/show_bug.cgi?id=229782

        Unreviewed follow-up fix after r281919

        Remove change on the shebang of run-perf-tests that doesn't belong to this patch,
        not sure how this ended here, seems I messed it when working on the patch for bug 229783

        * Scripts/run-perf-tests:

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

        Move few scripts from python 2 to python3
        https://bugs.webkit.org/show_bug.cgi?id=229817

        Reviewed by Jonathan Bedard.

        * Scripts/clean-webkit: Changed shebang to python3.
        * CISupport/test-result-archive: Ditto.
        * CISupport/ews-build/steps.py: Ditto.
        * CISupport/build-webkit-org/steps.py:
        (DownloadBuiltProduct): Use python 3 instead of python 2.
        (ArchiveTestResults): Ditto.
        * CISupport/download-built-product: Ditto.
        (CleanWorkingDirectory):
        (DownloadBuiltProduct):
        (ArchiveTestResults):
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        [contributors.json] Relocation (Part 5)
        https://bugs.webkit.org/show_bug.cgi?id=229690
        <rdar://problem/82552403>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer): Pull from metadata/contributors.json.
        (ValidateCommiterAndReviewer.load_contributors_from_disk): Ditto.
        (ValidateCommiterAndReviewer.load_contributors): Parse contributors.json as list instead of dictionary.
        * CISupport/ews-build/steps_unittest.py:

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

        [webkitcorepy] Evaluate default Editor to false when not found
        https://bugs.webkit.org/show_bug.cgi?id=229791

        Reviewed by Jonathan Bedard.

        This makes the default editor to not be listed as valid in platforms
        without the open command. This was causing the tests to fail for
        GTK/WPE (on Linux).

        In a future commit a proper solution might be adding proper support
        for $EDITOR.

        * Scripts/libraries/webkitcorepy/webkitcorepy/editor.py:
        (Editor.__bool__):

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

        [buildbot] Only serve content through nginx
        https://bugs.webkit.org/show_bug.cgi?id=229785
        <rdar://problem/82653668>

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/master.cfg: Only expose webserver to localhost.
        * CISupport/ews-build/master.cfg: Ditto.

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

        [GLIB] Garden itp API test failure after r281886

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-09-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Port API test runner to python3
        https://bugs.webkit.org/show_bug.cgi?id=229782

        Reviewed by Philippe Normand.

        Port the GTK/WPE API test runner to be compatible with python3
        and set it to run with python3 by default.
        The runner is still compatible with python2 after this patch, so
        we can land this without immediately requiring a restart of the CI.

        * Scripts/run-gtk-tests:
        (GtkTestRunner): Deleted.
        (GtkTestRunner.__init__): Deleted.
        (GtkTestRunner._ensure_accessibility_service_is_running): Deleted.
        (GtkTestRunner._setup_testing_environment): Deleted.
        (GtkTestRunner._tear_down_testing_environment): Deleted.
        (GtkTestRunner.is_glib_test): Deleted.
        (GtkTestRunner.is_google_test): Deleted.
        (GtkTestRunner.is_qt_test): Deleted.
        * Scripts/run-perf-tests:
        * Scripts/run-wpe-tests:
        (WPETestRunner): Deleted.
        (WPETestRunner.__init__): Deleted.
        (WPETestRunner.is_glib_test): Deleted.
        (WPETestRunner.is_google_test): Deleted.
        (WPETestRunner.is_qt_test): Deleted.
        * glib/api_test_runner.py:
        (TestRunner._get_tests_from_google_test_suite):
        (TestRunner.run_tests):
        (TestRunner.run_tests.number_of_tests):
        * glib/common.py:
        (parse_output_lines):
        * glib/glib_test_runner.py:
        (Message.create.read_string):
        (Message):
        (GLibTestRunner._read_from_pipe):
        (GLibTestRunner._read_from_stderr):
        (GLibTestRunner.run):

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

        [contributors.json] Relocation (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=229690
        <rdar://problem/82552403>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.as_dict): Include name in dictionary.
        (CommitterList.load_json): Use list instead of dictionary.
        (CommitterList.as_json): Encode as list instead of dictionary.
        (CommitterList._contributor_list_to_dict): Deleted.

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

        Remove _statisticsDatabaseColumnsForTable and related unused test functions
        https://bugs.webkit.org/show_bug.cgi?id=229771

        Reviewed by Kate Cheney.

        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:

2021-09-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Unreviewed, reverting r281870.

        It broke the GTK api test runner.

        Reverted changeset:

        "[GTK] The Xvfb display server may fail to start sometimes
        causing tests to randomly crash"
        https://bugs.webkit.org/show_bug.cgi?id=229758
        https://commits.webkit.org/r281870

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

        [git-webkit] Automatic rebasing or pull-requests (Follow-up fix.)
        https://bugs.webkit.org/show_bug.cgi?id=229625
        <rdar://problem/82451030>

        Reviewed by Yusuke Suzuki.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.pull): Set commit for git-svn checkouts.

2021-09-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] The Xvfb display server may fail to start sometimes causing tests to randomly crash
        https://bugs.webkit.org/show_bug.cgi?id=229758

        Reviewed by Philippe Normand.

        Add a new function in XvfbDriver() to ensure that the display server
        at a given display_id is replying as expected. Ask it for the screen
        size at monitor 0 and compare the result with the one we expect to
        have inside Xvfb. For doing this check a external python program is
        called which does the query using GTK. Using a external program is
        more robust against possible failures calling into GTK and also will
        allow re-using this program also to check that the weston server is
        also replying as expected for the weston driver (on a future patch).

        If the Xvfb driver is not replying as expected then restart it and
        try again, up to 3 retries.

        Use this also on the weston driver to check that the Xvfb driver is
        ready.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__):
        (MockProcess.communicate):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver_unittest.py:
        (WestonXvfbDriverDisplayTest._xvfb_check_if_ready):
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver):
        (XvfbDriver.__init__):
        (XvfbDriver.check_driver):
        (XvfbDriver._xvfb_run):
        (XvfbDriver._xvfb_screen_size):
        (XvfbDriver._xvfb_stop):
        (XvfbDriver._xvfb_check_if_ready):
        (XvfbDriver._setup_environ_for_test):
        (XvfbDriver.has_crashed):
        (XvfbDriver.stop):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.assertDriverStartSuccessful):
        (XvfbDriverTest.test_xvfb_start_and_ready):
        (XvfbDriverTest.test_xvfb_start_arbitrary_worker_number):
        (XvfbDriverTest.test_xvfb_not_replying):
        * gtk/print-screen-size: Added.

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

        [git-webkit] Add automatic Editor configuration
        https://bugs.webkit.org/show_bug.cgi?id=228867
        <rdar://problem/81621991>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version, add whichcraft.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/editor.py: Added.
        (Editor): Class representing a text editor 
        (Editor.atom):
        (Editor.sublime):
        (Editor.textmate):
        (Editor.xcode):
        (Editor.textedit):
        (Editor.default): System's default text editor.
        (Editor.preferred): User's prefered text editor.
        (Editor.by_name): Search for text editor by name.
        (Editor.programs): List all available text editor programs on this machine.
        (Editor.__init__):
        (Editor.open): Open a file with a text editor.
        (Editor.__repr__):
        (Editor.__bool__):
        * Scripts/libraries/webkitscmpy/setup.py: Bump version, remove whichcraft.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py:
        (Setup.git): Prompt user and set commit log editor.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py:

2021-09-01  Kevin Neal  <kevin_neal@apple.com>

        [RunBindingsTests] Invoke with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=229724

        Reviewed by Darin Adler.

        * CISupport/build-webkit-org/steps.py:
        (RunBindingsTests):
        * CISupport/ews-build/steps.py:
        (RunBindingsTests):
        * CISupport/ews-build/steps_unittest.py:
        * Scripts/run-bindings-tests:
        (main): Deleted.

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

        [contributors.json] Relocation (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=229690
        <rdar://problem/82552403>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList.load_json): Read from metadata/contributors.json.
        (CommitterList.reformat_in_place): Ditto.

2021-09-01  Alicia Boya García  <aboya@igalia.com>

        [GTK] Fix missing UTF-8 decoding in test crash logs
        https://bugs.webkit.org/show_bug.cgi?id=229760

        Reviewed by Philippe Normand.

        Fix a couple of decoding issues in linux_get_crash_log.py, where
        bytestrings were being printed without decoding.

        An addditional decoding issue was fixed by Philippe Normand in
        driver.py when printing ASan results.

        * Scripts/webkitpy/port/driver.py:
        (Driver._read_block):
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._get_trace_from_flatpak):
        (GDBCrashLogGenerator.generate_crash_log):

2021-08-31  Chris Dumez  <cdumez@apple.com>

        Enable SharedArrayBuffer support when COOP/COEP headers are used
        https://bugs.webkit.org/show_bug.cgi?id=229559
        <rdar://problem/82391945>

        Reviewed by Alex Christensen.

        Add API test coverage. SharedArrayBuffer support is currently forcefully enabled by
        run-webkit-tests.py so it would not be practical to write layout tests for this at
        the moment.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme addMappingFromURLString:toData:withCOOPValue:withCOEPValue:]):
        (-[PSONScheme webView:startURLSchemeTask:]):

2021-08-31  Kate Cheney  <katherine_cheney@apple.com>

        Use after move in ServiceWorkerThreadProxy
        https://bugs.webkit.org/show_bug.cgi?id=229731

        Reviewed by Chris Dumez.

        While trying to test that this change did not cause regressions,
        I found a bug in the test code from the mass renaming that happened
        a few weeks ago. This patch fixes that.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

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

        [git-webkit] Automatic rebasing or pull-requests
        https://bugs.webkit.org/show_bug.cgi?id=229625
        <rdar://problem/82451030>

        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.pull): Add rebase and branch arguments.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add pull.rebase = true in default config.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull.py:
        (Pull): Add 'up' and 'update' aliases.
        (Pull.main): Update the source branch of a pull-request branches.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.parser): Add --rebase/--no-rebase options.
        (PullRequest.main): Update and rebase a pull-request on it's source branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        (TestPullRequest.test_staged):
        (TestPullRequest.test_modified):
        (TestPullRequest.test_github):
        (TestPullRequest.test_github_update):
        (TestPullRequest.test_bitbucket):
        (TestPullRequest.test_bitbucket_update):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_git_svn_unittest.py:
        (TestSetupGitSvn.test_empty):
        (TestSetupGitSvn.test_add):

2021-08-31  Kate Cheney  <katherine_cheney@apple.com>

        Loads after session restore marked app initiated in Safari
        https://bugs.webkit.org/show_bug.cgi?id=229721
        <rdar://problem/82084236>

        Reviewed by Brent Fulgham.

        API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm:

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

        [contributors.json] Replace class=bot with status=bot
        https://bugs.webkit.org/show_bug.cgi?id=229712
        <rdar://problem/82579767>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.as_dict): bot is now a status, not a class.
        (CommitterList.load_json): Ditto.
        * Scripts/webkitpy/common/config/contributors.json: Replace class=bot with status=bot.

2021-08-30  Megan Gardner  <megan_gardner@apple.com>

        Fix double-tap-on-editable-content-for-selection-then-drag-* tests.
        https://bugs.webkit.org/show_bug.cgi?id=229683
        rdar://59571151

        Reviewed by Wenson Hsieh.

        The swipe keyboard tutorial comes up on first launch. Set the defaults to prevent
        that from happening and interfering with tests.

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

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

        Migrate PrivateClickMeasurements from ResourceLoadStatistics database to new database
        https://bugs.webkit.org/show_bug.cgi?id=229646

        Reviewed by Kate Cheney.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (webViewWithResourceLoadStatisticsEnabledInNetworkProcess):
        (addValuesToTable):
        (earliestTimeToSend):
        (addAttributedPCMv1):
        (addUnattributedPCMv1):
        (addAttributedPCMv2):
        (addUnattributedPCMv2):
        (addAttributedPCMv3):
        (addUnattributedPCMv3):
        (dumpedPCM):
        (pollUntilPCMIsMigrated):
        (emptyObservationsDBPath):
        (cleanUp):
        (createAndPopulateObservedDomainTable):
        (setUp):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutFraudPreventionDatabase.db: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutFraudPreventionDatabase.db-shm: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutFraudPreventionDatabase.db-wal: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutReportingColumns.db: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutReportingColumns.db-shm: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutReportingColumns.db-wal: Removed.

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

        WKWebViewConfiguration._loadsSubresources=NO should prevent preconnecting
        https://bugs.webkit.org/show_bug.cgi?id=229684

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm:
        (TestWebKitAPI::verifyPreconnectDisabled):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebSocket.mm:
        (TestWebKitAPI::TEST):

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

        ews might mark build as successful if JSC tests fail to run
        https://bugs.webkit.org/show_bug.cgi?id=229634

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunJSCTestsWithoutPatch.evaluateCommand):
        (AnalyzeJSCTestsResults.start):
        (AnalyzeJSCTestsResults.retry_build): Method to retry build.
        (AnalyzeJSCTestsResults.report_failure):
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.

2021-08-30  Lauro Moura  <lmoura@igalia.com>

        [WPE][webkitpy] Sanitize browser name testcase environment
        https://bugs.webkit.org/show_bug.cgi?id=229667

        Reviewed by Carlos Garcia Campos.

        Around 2021-08-19, the WPE release bot changed its environment to
        ensure WPE_BROWSER points to MiniBrowser while Cog webdriver support
        was not present. Since then, the WPE webkitpy test
        test_browser_name_with_cog_built was failing, as the host envvar
        affected the code being tested.

        This commits ensures the variable is empty for proper testing.

        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest.test_browser_name_with_cog_built):

2021-08-29  Diego Pino Garcia  <dpino@igalia.com>

        [GTK][WPE] Add ICU 63.1 to JHBuild minimal dependencies
        https://bugs.webkit.org/show_bug.cgi?id=229607

        Reviewed by Carlos Alberto Lopez Perez.

        * jhbuild/jhbuild-minimal.modules:
        * jhbuild/patches/icudata-stdlibs.patch: Added.

2021-08-27  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Simplify run-gtk-tests handling of the a11y service
        https://bugs.webkit.org/show_bug.cgi?id=229620

        Reviewed by Carlos Garcia Campos.

        The service is DBusActivatable so it doesn't make sense to manually
        find and start every binary ourselves and then wait for the
        service to appear. We can simply call it and let the system
        manage the service as it normally would in the environment it
        normally would.

        * Scripts/run-gtk-tests:
        (GtkTestRunner.__init__):
        (GtkTestRunner):
        (GtkTestRunner._ensure_accessibility_service_is_running):
        (GtkTestRunner._setup_testing_environment):

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

        [PlayStation][CMake] Add control over whether JavaScriptCore should be shared
        https://bugs.webkit.org/show_bug.cgi?id=229591

        Reviewed by Don Olmstead.

        Add frameworks to test applications to build with an object library version
        of JavaScriptCore.

        * TestWebKitAPI/CMakeLists.txt:

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

        [EWS] Do not notify Apple bot watchers about failures seen on Igalia bots
        https://bugs.webkit.org/show_bug.cgi?id=229630

        Reviewed by Aakash Jain.

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

2021-08-27  Alex Christensen  <achristensen@webkit.org>

        Add UIEventAttribution SPI that uses PrivateClickMeasurementAttributionEphemeral::Yes
        https://bugs.webkit.org/show_bug.cgi?id=229623

        Reviewed by John Wilander.

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

2021-08-27  Yijia Huang  <yijia_huang@apple.com>

        Add a new email address to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=229628

        Unreviewed.

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

2021-08-27  Alex Christensen  <achristensen@webkit.org>

        Separate PrivateClickMeasurement database from ResourceLoadStatistics database and add SPI to set its location
        https://bugs.webkit.org/show_bug.cgi?id=229527

        Reviewed by Kate Cheney.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::runBasicEventAttributionTest):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm:
        (TEST):

2021-08-27  Chris Dumez  <cdumez@apple.com>

        Extend API test coverage to make sure didFailProvisionalLoad is not called upon COOP process swap
        https://bugs.webkit.org/show_bug.cgi?id=229610

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-08-27  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r281516): imported/w3c/web-platform-tests/IndexedDB/serialize-sharedarraybuffer-throws.https.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=229501
        <rdar://problem/82346152>

        Reviewed by Darin Adler.

        In case of a COOP process-swap, the old process gets a didFailProvisionalLoadWithErrorForFrame delegate call. We want to ignore
        this call in WKTR's injected bundle since it causes the test to dump its output too eagerly, before the test has had a chance
        to run in the new process.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):
        (WTR::InjectedBundlePage::didCommitLoadForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:

2021-08-27  Kate Cheney  <katherine_cheney@apple.com>

        PrivateClickMeasurementManager::firePendingAttributionRequests() is crashing in debug
        https://bugs.webkit.org/show_bug.cgi?id=229551

        Reviewed by John Wilander.

        We pre-fill the PCM database with data for this test but don't clear
        it once the test is over. This causes crashes in other tests.

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

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

        [git-webkit] Add pull-request command (Part 6)
        https://bugs.webkit.org/show_bug.cgi?id=229089
        <rdar://problem/81908751>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add commit, add and push commands.
        (Git.commit): Create new commit from staged files.
        (Git.add): Stage modified files.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.__init__): Add pull_requests.
        (BitBucket.request): Add ability to list and edit pull requets.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub.__init__): Add pull_requests.
        (GitHub.request): Add ability to list and edit pull requets.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py: Add PullRequest.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/pull_request.py:
        (PullRequest.parser): Add '--add' and '--no-add' to allow user to specify how modified files
        are incorperated into the pull-request.
        (PullRequest.create_commit): Based on currently modified files, either create a new commit or
        add those files to an existing commit.
        (PullRequest.branch_point): Determine when this branch diverged from a production branch.
        (PullRequest.main): Create branch, create commit on branch, push branch and either create or
        update a pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.PRGenerator.find):
        (BitBucket.PRGenerator.create):
        (BitBucket.PRGenerator.update):
        (BitBucket.__init__): Add pull_request generator.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.PRGenerator.find):
        (GitHub.PRGenerator.create):
        (GitHub.PRGenerator.update):
        (GitHub.__init__): Add pull_request generator.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/scm.py:
        (Scm.PRGenerator.__init__):
        (Scm.PRGenerator.find):
        (Scm.PRGenerator.create):
        (Scm.PRGenerator.update):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        (TestDoPullRequest.setUp):
        (TestDoPullRequest.test_svn):
        (TestDoPullRequest.test_no_modified):
        (TestDoPullRequest.test_staged):
        (TestDoPullRequest.test_modified):
        (TestDoPullRequest.test_github):
        (TestDoPullRequest.test_github_update):
        (TestDoPullRequest.test_stash):
        (TestDoPullRequest.test_stash_update):

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

        [run-webkit-tests] Use Python 3 (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=226658
        <rdar://problem/78882016>

        Reviewed by Ryan Haddad.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests): Change invocation to Python 3.
        * CISupport/ews-build/steps_unittest.py:
        (test_success): Change invocation to Python 3.
        (test_warnings): Ditto.

2021-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] op_put_private_name should use modern IC and remove ByValInfo
        https://bugs.webkit.org/show_bug.cgi?id=229544

        Reviewed by Saam Barati.

        * Scripts/run-jsc-benchmarks:

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

        [kill-old-processes] Invoke with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=229576
        <rdar://problem/82397885>

        Rubber-stamped by Darin Adler.

        * CISupport/build-webkit-org/steps.py:
        (KillOldProcesses): Invoke with Python 3.
        * CISupport/build-webkit-org/steps_unittest.py:
        (TestKillOldProcesses.test_success):
        (TestKillOldProcesses.test_failure):
        * CISupport/ews-build/steps.py:
        (KillOldProcesses): Invoke with Python 3.
        * CISupport/ews-build/steps_unittest.py:
        * CISupport/kill-old-processes: Change shebang to Python 3.

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

        watchOS simulator image missing on bot watchers dashboard
        https://bugs.webkit.org/show_bug.cgi?id=229587

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.watchos-simulator-7 img.logo):

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

        [EWS] compile-webkit-without-patch failed, but bot ran layout tests anyway and blamed the patch for a pre-existing failure
        https://bugs.webkit.org/show_bug.cgi?id=229533

        Reviewed by Jonathan Bedard.

        When the compile-webkit-without-patch step fails, instead of running further layout-tests, retry the build and email
        bot watcher's. The retried build will hopefully be picked up by other bot eventually. This is similar to what we do
        in case of other infrastructure issues like kill-old-processes step failure.
        * CISupport/ews-build/steps.py:
        (CompileWebKitWithoutPatch.__init__): Added retry_build_on_failure parameter.
        (CompileWebKitWithoutPatch.evaluateCommand): If build failed unexpectedly, retry it and email bot watchers.
        (CompileWebKitWithoutPatch.send_email_for_unexpected_build_failure):
        (ReRunWebKitTests.evaluateCommand):
        (ReRunAPITests.evaluateCommand):

2021-08-26  Simon Fraser  <simon.fraser@apple.com>

        Add to run-webkit-tests a --expect-pass argument as a synonym for --force
        https://bugs.webkit.org/show_bug.cgi?id=229581

        Reviewed by Wenson Hsieh.

        I am eternally confused that -f and --force are different things. Add --expect-pass
        as a synonym for --force to reduce my confusion.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2021-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        TestWebKitAPI._WKActivatedElementInfo.InfoForRotatedImage is failing on iOS 15
        https://bugs.webkit.org/show_bug.cgi?id=229531
        rdar://82100466

        Reviewed by Said Abou-Hallawa.

        Due to changes in underlying system frameworks in iOS 15, the red "corner" of the rotated image in this test now
        ends up with a color of 0xFFF51800 instead of 0xFFF51900. Resolve this by refactoring the test so that it's
        robust against these kinds of minute differences.

        To achieve this, we first run the test over a version of the test image without EXIF rotation data (test.jpg) to
        measure the expected values of the red, green, yellow and blue corners; we then verify that these color values
        are present in the corresponding rotated corners of the image with EXIF rotation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/test.jpg: Added.

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

        REGRESSION (r281516): [AppleSilicon WK2] fast/loader/reload-zero-byte-plugin.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=229532
        <rdar://problem/82370692>

        Unreviewed, partial revert of r281516 to drop the changes to WebKitTestRunner's injected bundle
        as I suspect this is what caused this regression. The WKTR changes were made to try and address
        the flakiness of imported/w3c/web-platform-tests/IndexedDB/serialize-sharedarraybuffer-throws.https.html
        but it turns out that the test is still flaky with the WKTR change.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFailProvisionalLoadWithErrorForFrame):

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

        [run-webkit-tests] Use Python 3 (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=226658
        <rdar://problem/78882016>

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/steps.py:
        (RunWebKitTests): Change invocation to Python 3.
        * CISupport/build-webkit-org/steps_unittest.py:
        * CISupport/kill-old-processes:
        (main): run-webkit-tests may be invoked with Python 3.

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove some iOS-specific compile-time guards that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=229500

        Reviewed by Tim Horton.

        Remove this workaround, which was only required to keep an API test passing on iOS 13.

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

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

        [git-webkit] Use Python 3 in CI
        https://bugs.webkit.org/show_bug.cgi?id=229498
        <rdar://problem/82342387>

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/steps.py:
        (ShowIdentifier.start): Invoke git-webkit with Python 3.
        * CISupport/build-webkit-org/steps_unittest.py:
        (TestShowIdentifier.test_success):
        (TestShowIdentifier.test_failure):
        * CISupport/ews-build/steps.py:
        (ShowIdentifier.start): Invoke git-webkit with Python 3.
        * CISupport/ews-build/steps_unittest.py:

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

        [resultsdbpy] Handle E configuration comparisons
        https://bugs.webkit.org/show_bug.cgi?id=229477
        <rdar://problem/82316775>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.compare): Ignore "E" version names in both directions.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] editing/input/cocoa/autocorrect-on.html times out when run after editing/input/cocoa/autocorrect-off.html
        https://bugs.webkit.org/show_bug.cgi?id=229486
        rdar://82191308

        Reviewed by Tim Horton.

        The layout test (autocorrect-on.html) fails when run immediately after autocorrect-off.html, in the same
        directory. This occurs because autocorrect-on.html attempts to verify that typing a period after "Tset" will
        autocorrect to "Test"; however, the previous test disables autocorrection and types "Tset.", which causes UIKit
        keyboard autocorrection code to add "Tset" to its lexicon. This means that we end up not autocorrecting to
        "Test" in `autocorrect-on.html`.

        In the past (r265376), to mitigate this, we set `-[UIKeyboardImpl correctionLearningAllowed]` to `NO`. However,
        after what appears to be a recent TextInput change, this fails to prevent the test runner from learning "Tset"
        while running autocorrect-off.html.

        We take a more heavy-handed approach in this mitigation, and instead use swizzling to prevent UIKeyboardImpl
        from notifying kbd when text candidates are "accepted".

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

2021-08-24  Alan Bujtas  <zalan@apple.com>

        [ iOS ] TestWebKitAPI.DocumentEditingContext.Request* tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=229446
        <rdar://problem/82295496>

        Unreviewed.

        Adjusting the test case after r281463 to match the new wrapping behavior.

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

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

        [run-webkit-tests] Use Python 3 (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=226658
        <rdar://problem/78882016>

        Reviewed by Dewei Zhu.

        * Scripts/run-webkit-tests: Change shebang to Python 3.

2021-08-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Implement process-swapping based on Cross-Origin-Opener-Policy HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=229203
        <rdar://problem/82047686>

        Reviewed by Alex Christensen.

        Add API test coverage to validate that we are indeed process-swapping.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme addMappingFromURLString:toData:withCOOPValue:]):
        (-[PSONScheme webView:startURLSchemeTask:]):

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

        [kill-old-processes] Hardcode directory for stale simulator files
        https://bugs.webkit.org/show_bug.cgi?id=229464
        <rdar://problem/82148711>

        Reviewed by Stephanie Lewis.

        * CISupport/kill-old-processes:
        (main):

2021-08-24  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r281473): [ iOS & MacOS ] TestWebKitAPI.ProcessSwap.NavigateToInvalidURL is timing out
        https://bugs.webkit.org/show_bug.cgi?id=229447

        Reviewed by Chris Dumez.

        Check that a JS error was thrown instead of checking that the navigation doesn't go through.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        PCM: Support ephemeral measurement with non-persistent WebCore::PrivateClickMeasurement
        https://bugs.webkit.org/show_bug.cgi?id=228984
        <rdar://problem/81778213>

        Reviewed by Kate Cheney.

        This patch adds support for ephemeral measurement with non-persistent
        WebCore::PrivateClickMeasurement for direct response advertising.
        Such advertising means there is only one pending click, held in memory,
        and only stored right before the triggering event causes attribution
        reports to be scheduled.

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

2021-08-23  Cameron McCormack  <heycam@apple.com>

        Preserve color space when getting current color in DisplayList::DrawGlyphsRecorder
        https://bugs.webkit.org/show_bug.cgi?id=229024
        <rdar://problem/81828477>

        Reviewed by Sam Weinig.

        Change existing CGColor -> WebCore::Color conversions to be explicit
        about lossily converting to sRGB.

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

2021-08-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        editing/selection/ios/select-text-in-existing-selection.html fails on iOS 15
        https://bugs.webkit.org/show_bug.cgi?id=229411
        rdar://80385434

        Reviewed by Tim Horton.

        After the changes in rdar://70851909, UIKit's text selection interaction (which encompasses the loupe text
        interaction gesture) is no longer allowed to transition to `Began` state when long pressing inside an existing
        text selection. This causes us to no longer enter floating caret mode (via loupe gesture) and change the
        selection when triggering a long press in selected text, which causes this layout test to fail.

        This layout test was originally intended to test a fix for text selection via trackpad on iPadOS failing to
        begin when clicking and dragging inside text that has already been selected. At that time, I intentionally wrote
        this test in a way that didn't involve the trackpad at all, and instead simply exercised the codechange in
        `-[WKContentView textInteractionGesture:shouldBeginAtPoint:]` by synthesizing touches.

        Since UIKit no longer supports this behavior, we can rewrite this test to be more robust by calling and checking
        the value of `-textInteractionGesture:shouldBeginAtPoint:` in an API test. This patch deletes the existing
        layout test, and replaces it with an API test that directly exercises the SPI on `UIWKInteractionViewProtocol`.

        Note that the original bug that was fixed by the change that came along with this failing test remains fixed,
        because trackpad-based text selection on iPadOS uses `UITextLoupeCursorBehavior` rather than
        `UITextLoupeTouchBehavior`, which (unlike the former) contains logic to explicitly avoid starting the loupe
        text interaction when long pressing inside of selected text.

        Test: UIWKInteractionViewProtocol.TextInteractionCanBeginInExistingSelection

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[TestWKWebView synchronouslyRequestTextInputContextsInRect:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (-[TestWKWebView synchronouslyRequestTextInputContextsInRect:]): Deleted.

        Drive-by fix: also fix a build warning by pulling duplicate implementations of this testing helper method into
        a common location in `WKWebView (TestWebKitAPI)`, inside of `TestWKWebView.h`.

        * TestWebKitAPI/Tests/WebKitCocoa/editable-responsive-body.html: Added.
        * TestWebKitAPI/Tests/ios/UIWKInteractionViewProtocol.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView synchronouslyRequestTextInputContextsInRect:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2021-08-23  Peng Liu  <peng.liu6@apple.com>

        Add a new option '--show-window' to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=229253

        Reviewed by Simon Fraser.

        Add the new option so that we can let WKTR show a window with webview.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionShowWindow):
        (WTR::OptionsHandler::OptionsHandler):
        (WTR::handleOptionShowWebView): Deleted.
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        (WTR::TestOptions::keyTypeMapping):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::shouldShowWindow const):
        (WTR::TestOptions::shouldShowWebView const): Deleted.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::finishCreatingPlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::setWindowFrame):

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

        [Cygwin] Support Python 3 in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=229360
        <rdar://problem/82192362>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py:
        (TaskPoolUnittest): Skip some tests on cygwin.
        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive.command_for_printing): Strings might be bytes on some platforms.
        * Scripts/webkitpy/common/system/path.py:
        (_CygPath.convert): Cygwin path process is not unicode.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._win_version_str): Return Windows version string as unicode string.

2021-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove already-shipped wasm option flags
        https://bugs.webkit.org/show_bug.cgi?id=229386

        Reviewed by Ross Kirsling.

        * Scripts/run-jsc-stress-tests:

2021-08-22  Lauro Moura  <lmoura@igalia.com>

        [WPE][WebDriver] Basic fullscreen support for the headless backend
        https://bugs.webkit.org/show_bug.cgi?id=229380

        Reviewed by Adrian Perez de Castro.

        r280774 added support for fullscreen in the WindowViewBackend, but
        many webdriver tests started failing as they run in the headless
        backend.

        This commits adds basic support in HeadlessBackend to make some
        tests pass. Currently, just storing the fullscreen state and
        forwarding the events to the WPE backend functions.

        A number of tests are still failing due to the missing multiple window
        support (required through the `session` fixtures), but also there are
        still some failing that expect the view to be started in
        non-fullscreen mode, which does not happen in the headless backend.

        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::onDOMFullScreenRequest):
        (WPEToolingBackends::HeadlessViewBackend::dispatchFullscreenEvent):
        * wpe/backends/HeadlessViewBackend.h:

2021-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove already-shipped JS feature flags
        https://bugs.webkit.org/show_bug.cgi?id=229387

        Reviewed by Ross Kirsling.

        * Scripts/run-jsc-benchmarks:

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

        [git-webkit] Add pull-request command (Part 5)
        https://bugs.webkit.org/show_bug.cgi?id=229089
        <rdar://problem/81908751>

        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.modified): Return a list of modified files in the current checkout.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add 'git diff' mock commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_modified):
        (TestGit.test_modified_no_staged):
        (TestGit.test_modified_staged):

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

        [git-webkit] Add pull-request command (Part 4)
        https://bugs.webkit.org/show_bug.cgi?id=229089
        <rdar://problem/81908751>

        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): Match BitBucket ssh urls when constructing remotes.

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

        [git-webkit] Add pull-request command (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=229089
        <rdar://problem/81908751>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version, export pull-request.
        * Scripts/libraries/webkitscmpy/webkitscmpy/pull_request.py:
        (PullRequest.State):
        (PullRequest.create_body): Create pull-request body from commits and comment.
        (PullRequest.parse_body): Turn a body from a pull-request into a comment string and partial commits.
        (PullRequest.__init__):
        (PullRequest.__repr__):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py:
        (TestPullRequest):
        (TestPullRequest.test_representation):
        (TestPullRequest.test_create_body_single):
        (TestPullRequest.test_parse_body_single):
        (TestPullRequest.test_create_body_multiple):
        (TestPullRequest.test_parse_body_multiple):
        (TestPullRequest.test_create_body_empty):
        (TestPullRequest.test_parse_body_empty):
        (TestPullRequest.test_create_body_comment):
        (TestPullRequest.test_parse_body_single):

2021-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Single characters don't get shaped in the fast text codepath
        https://bugs.webkit.org/show_bug.cgi?id=186804

        Reviewed by Alan Bujtas.

        Huge thanks to Laurence Penney to contributing this test font!!!

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

2021-08-21  Daniel Kolesa  <dkolesa@igalia.com>

        [GLIB] Do not assume log success in apply-build-revision-to-files
        https://bugs.webkit.org/show_bug.cgi?id=229335

        Reviewed by Philippe Normand.

        If the origin reference does not exist for any reason, this will
        fail the build. Since we have no reference point, just assume
        unknown like if it wasn't a git repo.

        * glib/apply-build-revision-to-files.py:
        (get_build_revision):

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

        [git-webkit] Add pull-request command (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=229089
        <rdar://problem/81908751>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add 'check-ref-format' and 'checkout -b'.
        (Git.checkout): Add ability to create branch.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add Branch command.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/branch.py:
        (Branch.parser): Allow user to specify engineering branch name.
        (Branch.normalize_issue): Turn provided string into eng branch if it isn't already.
        (Branch.main): Create eng branch from current checkout state.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/branch_unittest.py:
        (TestBranch):
        (TestBranch.setUp):
        (TestBranch.test_basic_svn):
        (TestBranch.test_basic_git):
        (TestBranch.test_prompt_git):
        (TestBranch.test_invalid_branch):

2021-08-20  Alex Christensen  <achristensen@webkit.org>

        Make UIEventAttribution tests less platform dependent
        https://bugs.webkit.org/show_bug.cgi?id=229323

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::exampleURL):
        (TestWebKitAPI::runBasicEventAttributionTest):
        (TestWebKitAPI::TEST):

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

        [git-webkit] Add pull-request command (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=229089
        <rdar://problem/81908751>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Sort programs, add aliases.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (Command): Add alias
        (FilteredCommand): Inherit from Command.

2021-08-20  Jon Lee  <jonlee@apple.com>

        Teach run-webkit-tests to print a summary of test status
        https://bugs.webkit.org/show_bug.cgi?id=200556

        Reviewed by Simon Fraser.

        Add a new option to print a summary listing test expectation health.
        It uses the same expected results as --print-expectations.

        To run it: run-webkit-tests --print-summary

        You can pass the same arguments as normal run-webkit-tests and it will
        return stats based on the tests collected.

        It also outputs a .csv file with the data.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.print_expectations): Gather the tests. Note whether the test
        is marked as skip, pass, flaky, or fail, the definitions of which are
        dictated by model.get_tests_with_result_type(). Output the results to
        command line as well as to file.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Add the new option.
        It goes through the same path as --print-expectations.

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

        [git-webkit] Forward unknown args to log and blame
        https://bugs.webkit.org/show_bug.cgi?id=229342
        <rdar://problem/82178743>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Both log and blame might be passed options that need to be forwarded to git/svn.

2021-08-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r274166): [GTK] It broke run-javascriptcore-tests causing all tests to use lot of memory
        https://bugs.webkit.org/show_bug.cgi?id=229321

        Unreviewed, reverting r274166 because it caused JSC tests to use too much memory.

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

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

2021-08-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [build.webkit.org] GTK-Linux-64-bit-Release-Skip-Failing-Tests worker should run only layout tests
        https://bugs.webkit.org/show_bug.cgi?id=229312

        Reviewed by Jonathan Bedard.

        Add a new factory for testing only layout tests and make this bot use it.

        * CISupport/build-webkit-org/config.json:
        * CISupport/build-webkit-org/factories.py:
        (TestLayoutFactory):
        (TestLayoutFactory.__init__):
        * CISupport/build-webkit-org/factories_unittest.py:
        (TestExpectedBuildSteps):

2021-08-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [ews-build.webkit.org] Add unit test with the expected build steps for each queue
        https://bugs.webkit.org/show_bug.cgi?id=229319

        Reviewed by Aakash Jain.

        Add a unit test listing all the expected build steps for each queue
        like the one added in r281286 for build.webkit.org
        Also remove the previous unit tests to not duplicate test functionality.
        And replace doble-quotes with single-ones on the test for build.webkit.org

        * CISupport/build-webkit-org/factories_unittest.py:
        (TestExpectedBuildSteps):
        (TestExpectedBuildSteps.test_all_expected_steps):
        (TestExpectedBuildSteps.test_unnecessary_expected_steps):
        * CISupport/ews-build/factories_unittest.py:
        (TestExpectedBuildSteps):
        (TestExpectedBuildSteps.setUp):
        (TestExpectedBuildSteps.test_all_expected_steps):
        (TestExpectedBuildSteps.test_unnecessary_expected_steps):

2021-08-20  Youenn Fablet  <youenn@apple.com>

        Remove all WTR output before Content-Type:text/plain for WebRTC tests in case of known excessive logging
        https://bugs.webkit.org/show_bug.cgi?id=229188

        Reviewed by Jonathan Bedard.

        Some logging beneath WebKit is making WebRTC tests flaky.
        While we work on the cause of this bug, we can still beef-up our test output clean up steps to handle this logging.
        Instead of stripping lines based on a known pattern, which does not always work as per current results,
        we can simply remove all logging before the 'Content-Type:text/plain\n' string that WebKitTestRunner is adding before
        printing the text generated by the test itself.
        We update webkitpy scripts accordingly and add this new clean-up for:
        - tests that have webrtc in their name
        - tests whose output contain some known logging strings like 'LRP' or 'Negotiation String'.
        This should hopefully be more robust while not hiding real regressions.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner):
        * Scripts/webkitpy/port/base.py:
        (Port.logging_detectors_to_strip_text_start):
        * Scripts/webkitpy/port/driver.py:
        (DriverOutput.strip_text_start_if_needed):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip):
        (MacPort.logging_detectors_to_strip_text_start):

2021-08-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [build.webkit.org] Port old unit test with the expected build steps to the new buildbot
        https://bugs.webkit.org/show_bug.cgi?id=229311

        Reviewed by Aakash Jain.

        Port the test that checked every worker and the expected steps to the new buildbot version.
        Also delete the file steps_unittest_old.py because the gross of the other tests contained in
        this old file are already ported in the current steps_unittests.py

        * CISupport/build-webkit-org/factories_unittest.py: Added.
        (TestExpectedBuildSteps):
        (TestExpectedBuildSteps.setUp):
        (TestExpectedBuildSteps.test_all_expected_results):
        (TestExpectedBuildSteps.test_unnecessary_expected_results):
        * CISupport/build-webkit-org/steps_unittest_old.py: Removed.

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

        [iOS] Remove support for the meaningful tap heuristic
        https://bugs.webkit.org/show_bug.cgi?id=229298
        rdar://82130066

        Reviewed by Tim Horton.

        Remove test runner support for testing the meaningful tap heuristic.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installDidHandleTapCallback): Deleted.
        (WTR::TestRunner::callDidHandleTapCallback): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didHandleTap): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didHandleTap): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didTapAtPoint:withResult:]): Deleted.

2021-08-19  Megan Gardner  <megan_gardner@apple.com>

        Turn on TestWebKitAPI.WKAttachmentTests.CopyAndPasteBetweenWebViews as it is now passing again.
        https://bugs.webkit.org/show_bug.cgi?id=204969

        Reviewed by Tim Horton.

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

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

        Rename AccessibilityUIElement::setSelectedVisibleTextRange to setSelectedTextMarkerRange for naming consistency and maintainability.
        https://bugs.webkit.org/show_bug.cgi?id=229290
        <rdar://problem/82128453>

        Reviewed by Chris Fleizach.

        Renamed this method for consistency and to reflect what it is actually
        doing. The goal is to avoid confusion with methods for VisiblePosition,
        VisibleSelection and so forth, which are Core objects not exposed to AX
        clients.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedTextMarkerRangeCallback):
        (AccessibilityUIElement::setSelectedTextMarkerRange):
        (AccessibilityUIElement::getJSClass):
        (setSelectedVisibleTextRangeCallback): Deleted.
        (AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::setSelectedTextMarkerRange):
        (AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setSelectedTextMarkerRange):
        (AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::setSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::setSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::setSelectedTextMarkerRange):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange): Deleted.

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

        [run-webkit-tests] Handle json crash logs (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=229288
        <rdar://problem/77074039>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._parse_darwin_crash_log): Attempt to parse crash logs as json, since Monterey .ips
        (CrashLogs._find_newest_log_darwin.is_crash_log):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:

2021-08-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        document.hasFocus() returns true for unfocused pages
        https://bugs.webkit.org/show_bug.cgi?id=229139

        Reviewed by Adrian Perez de Castro.

        Add a unit tests to check document.hasFocus() returns false when a web view is in the active window, but not focused.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST): Ensure web view is focused as required by credentials container.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewDocumentFocus):
        (beforeAll):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView focus]):

2021-08-18  David Kilzer  <ddkilzer@apple.com>

        Bug 229265: run-webkit-tests --leaks should check for leaks in the GPU process
        <https://webkit.org/b/229265>
        <rdar://problem/82101453>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Include the GPU process PID if it's enabled when sending a
          list of PIDs back to run-webkit-tests.
        (WTR::TestController::gpuProcessName): Add.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::databaseProcessName): Delete.
        - The implementation was removed a while ago.
        (WTR::TestController::gpuProcessName): Add.

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

        [run-webkit-tests] Remember failures when repeating test
        https://bugs.webkit.org/show_bug.cgi?id=229217
        <rdar://problem/81919223>

        Reviewed by Ryan Haddad.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.update_summary_with_result): Replace existing result with unexpected result so
        that unexpected results always take precedence over expected ones.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.add): Do not replace existing result.

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

        REGRESSION(r279169) [WebDriver] WPT Tools now requires python3 to launch the server
        https://bugs.webkit.org/show_bug.cgi?id=229248

        Reviewed by Chris Dumez.

        239066@main updated the layout test WPT tools to
        94d018bb5d7c0d46df7ba1 and this version requires Python3 to run the
        WPT server.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer.start):

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

        Add layout test for WebAccessibilityObjectWrapper handler for attribute AXLineForTextMarker on MacOS.
        https://bugs.webkit.org/show_bug.cgi?id=229220
        <rdar://problem/82057459>

        Reviewed by Chris Fleizach.

        Added AccessibilityUIElement::lineIndexForTextMarker.

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

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

        [git-webkit] "IndexError: list index out of range" using log
        https://bugs.webkit.org/show_bug.cgi?id=229232

        Reviewed by Ryan Haddad.

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

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

        REGRESSION(r280382): [GTK] 2.33.3 does not build with gtk-doc enabled, installs broken pkg-config files
        https://bugs.webkit.org/show_bug.cgi?id=229152

        Reviewed by Philippe Normand.

        * glib/apply-build-revision-to-files.py:
        (main):

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

        [webkitcorepy] Add CallByNeed object
        https://bugs.webkit.org/show_bug.cgi?id=229148
        <rdar://problem/81817705>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, export Defer object.
        * Scripts/libraries/webkitcorepy/webkitcorepy/call_by_need.py: Added.
        (CallByNeed):
        (CallByNeed.__init__):
        (CallByNeed.__getattribute__): Depending on the request attribute, either return it or attempt to
        resolve the underlying value before returning the attribute of the resolved value.
        (CallByNeed.value): Resolve and return underlying object.
        (CallByNeed.__call__): Ditto.
        (CallByNeed.__repr__): Resolve object and return representation.
        (CallByNeed.__str__): Resolve object and return string conversion.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/call_by_need_unittest.py: Added.
        (TestCallByNeed):
        (TestCallByNeed.test_basic):
        (TestCallByNeed.test_string_conversion):
        (TestCallByNeed.test_attribute_forwarding):
        (TestCallByNeed.test_failed_attribute_forwarding):

2021-08-18  Martin Robinson  <mrobinson@webkit.org>

        [Flatpak SDK] Increase the startup performance of webkit-flatpak
        https://bugs.webkit.org/show_bug.cgi?id=229185

        Reviewed by Philippe Normand.

        Improve flatpakutils.py by ensuring that we don't make redundant
        calls to flatpak during initialization of the data structures. This
        saves 5 seconds on every call to build-webkit and run-webkit-tests.

        Before:
            $ time ./Tools/Scripts/webkit-flatpak -c true
            real    0m6,297s
            user    0m0,786s
            sys     0m0,513s

        After:
            $ time ./Tools/Scripts/webkit-flatpak -c true
            real    0m1,243s
            user    0m0,375s
            sys     0m0,162s

        * flatpak/flatpakutils.py:
        (FlatpakPackages.__init__): Separate the update into another
        method so that it can be called directly when a package is installed.
        Add new packages directly to self.packages.
        (FlatpakRepos.__init__): Ensure that we only update our repositories
        and package list once we've initialized our list of repositories.
        (FlatpakRepos.add): Return True if this method actually changed anything
        and accept a parameter determining whether an update is done to
        the repository and package list.
        (FlatpakRepos.is_package_installed): Added this method which replaces
        FlatpakRepo.is_app_installed.
        (FlatpakRepo.__init__): Remove the app registry because it is duplicated
        by FlatpakPackages.
        (FlatpakPackage.is_installed): Now call FlatpakRepos.is_package_installed.
        (WebkitFlatpak._reset_repository): Set up both repositories here and
        pass then as part of the FlatpakRepos constructor.
        (WebkitFlatpak.main): Separate out the check which deletes the Flatpak
        repository from the one that checks if the packages are installed. This
        makes sure we don't install packages and then immediately delete them.
        (WebkitFlatpak.check_installed_packages): rename _get_packages to _get_dependency_packages
        in order to make it clear that it doesn't return installed packages.
        (WebkitFlatpak._get_dependency_packages): Ditto.
        (WebkitFlatpak.install_all): Ditto.
        (FlatpakRepo.is_app_installed): Deleted.
        (WebkitFlatpak._get_packages): Deleted.

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

        [webkitcorepy] Return SourceFileLoader in find_module
        https://bugs.webkit.org/show_bug.cgi?id=229172
        <rdar://problem/82006256>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.find_module): Return SourceFileLoader object in Python 3.

2021-08-17  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Avoid getting stuck searching for revision in some cases
        https://bugs.webkit.org/show_bug.cgi?id=229199

        Reviewed by Philippe Normand.

        With an empty .git/svn, the `git svn info` command might get stuck.

        * glib/apply-build-revision-to-files.py:
        (get_build_revision):

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

        REGRESSION(r281079) [GLIB] API test WebKitWebsiteData/deviceidhashsalt is not waiting for title change
        https://bugs.webkit.org/show_bug.cgi?id=229174

        Reviewed by Carlos Garcia Campos.

        r281079 changed the helper method waitUntilTitleChangedTo to
        immediately return if the current title is already the expected one.

        While this is working fine in other tests, the deviceidhashsalt tries
        to load the same page twice. As the title does not change, the call
        returns right away, before the expected side effects of the load
        happen.

        This commit adds a dummy "about:blank" call between both original
        calls to make sure we track the title change correctly.

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

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

        Expose [WebAccessibilityObjectWrapper lineRectsAndText] on MacOS.
        https://bugs.webkit.org/show_bug.cgi?id=229045
        <rdar://81819301>

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::attributedStringForElement):
        (WTR::AccessibilityUIElement::lineRectsAndText const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::lineRectsAndText const):

2021-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add thread safe version of CanMakeCheckedPtr
        https://bugs.webkit.org/show_bug.cgi?id=229018

        Reviewed by Geoffrey Garen.

        Added a unit test for CanMakeThreadSafeCheckedPtr

        * TestWebKitAPI/Tests/WTF/CheckedPtr.cpp:
        (TestWebKitAPI.ThreadSafeCheckedPtrObject)
        (WTF_CheckedPtr.CanMakeThreadSafeCheckedPtr): Added.

2021-08-16  Alex Christensen  <achristensen@webkit.org>

        Fix Catalyst TestWebKitAPI build
        https://bugs.webkit.org/show_bug.cgi?id=229091

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        Search the correct SDK paths.
        * TestWebKitAPI/Tests/WebKitCocoa/ImageAnalysisTests.mm:
        (TestWebKitAPI::TEST):
        Use soft linking for VisionKitCore like we do elsewyere.

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        [WPE][GTK] Clean build broken with python3 after r280382
        https://bugs.webkit.org/show_bug.cgi?id=228628

        Reviewed by Adrian Perez de Castro.

        The webkitpy autoinstall doesn't reliably work when it's triggered from concurrent
        processes. Replace webkitpy usage in apply-build-revision-to-files.py script with explicit
        calls to svnversion, git svn info or git log -1, depending on the kind of SCM checkout.

        * glib/apply-build-revision-to-files.py:
        (get_build_revision):
        (main):

2021-08-16  David Kilzer  <ddkilzer@apple.com>

        "make analyze" should run clang static analyzer in deep mode
        <https://webkit.org/b/229127>
        <rdar://problem/81960587>

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/Scripts/generate-derived-sources.sh:
        * WebKitTestRunner/Scripts/generate-derived-sources.sh:
        - Treat "analyze" the same as "build" for "ACTION" environment
          variable.

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        [GLib] Enable mediastream setting if it's enabled at build-time
        https://bugs.webkit.org/show_bug.cgi?id=229134

        Reviewed by Adrian Perez de Castro.

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

2021-08-16  David Kilzer  <ddkilzer@apple.com>

        Fix ASan+UBSan builds with Xcode 13
        <https://webkit.org/b/229122>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (XcodeOptions):
        - Use asan+ubsan.xcconfig when both are enabled.
        * sanitizer/asan+ubsan.xcconfig: Add.

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

        Unreviewed, reverting r281077.
        https://bugs.webkit.org/show_bug.cgi?id=229137

        broke GTK/WPE builds

        Reverted changeset:

        "[WPE][GTK] Clean build broken with python3 after r280382"
        https://bugs.webkit.org/show_bug.cgi?id=228628
        https://commits.webkit.org/r281077

2021-08-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test WebKitWebView/page-visibility is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=214804

        Reviewed by Adrian Perez de Castro.

        Do not wait for title change if the title already changed.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewPageVisibility):
        * TestWebKitAPI/glib/TestExpectations.json:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::waitUntilTitleChangedTo):
        (WebViewTest::waitUntilTitleChanged):

2021-08-16  Philippe Normand  <pnormand@igalia.com>

        [WPE][GTK] Clean build broken with python3 after r280382
        https://bugs.webkit.org/show_bug.cgi?id=228628

        Reviewed by Adrian Perez de Castro.

        The webkitpy autoinstall doesn't reliably work when it's triggered from concurrent
        processes. Replace webkitpy usage in apply-build-revision-to-files.py script with explicit
        calls to svnversion, git svn info or git log -1, depending on the kind of SCM checkout.

        * glib/apply-build-revision-to-files.py:
        (get_build_revision):
        (main):

2021-08-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK distcheck build

        * gtk/manifest.txt.in: Add missingImage@3x.png to the tarball.

2021-08-15  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Add API to pass WebKitMemoryPressureHandler parameters to the network processes
        https://bugs.webkit.org/show_bug.cgi?id=228227

        Reviewed by Carlos Garcia Campos.

        Added an API test for webkit_website_data_manager_set_memory_pressure_settings().

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (MemoryPressureTest::setup):
        (MemoryPressureTest::teardown):
        (MemoryPressureTest::loadFailedCallback):
        (MemoryPressureTest::waitUntilLoadFailed):
        (testMemoryPressureSettings):
        (beforeAll):

2021-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 15] editing/selection/ios/select-all-in-readonly-input-does-not-overflow.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=229126
        rdar://80384801

        Reviewed by Tim Horton.

        This test exercises the ability to cause platform selection views to show up after tapping the web view while a
        DOM selection is set. In this codepath, selection views are installed when the web view becomes first responder,
        when we call into `-[UIWKTextInteractionAssistant activateSelection]`; the call to `-becomeFirstResponder`, in
        turn, comes from UIKit's internal `UITextTapRecognizer` gesture, which recognizes the single tap and makes the
        content view first responder.

        In the case where this test fails, the synthesized tap gesture fails to activate the text tap recognizer; this
        happens because the timing of when the `UITextTapRecognizer` gets reset (i.e. `-_resetGestureRecognizer`) races
        against the timing of when the synthesized touch event is sent to the gesture recognizer. When the touch is
        delivered to the gesture *before* the text tap gesture is reset, we end up timing out because the text tap
        gesture's action never fires and makes the content view first responder.

        To ensure that we don't lose this race and time out, we augment the existing mechanism in
        `UIScriptControllerIOS::waitForSingleTapToReset()` to wait for *all* enabled single tap (and single touch)
        gestures to reset, instead of only waiting for the web view's synthetic click gesture. Importantly, this
        includes `UITextTapRecognizer`, which ensures that the touches are delivered to the gesture only after the text
        tap gesture has been reset (and transitions to Possible state).

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

        Instead of using testing SPI (`-_doAfterResettingSingleTapGesture:`) to wait for the single tap to reset, we can
        just directly iterate through all the gestures on the content view and wait for all enabled single tap gestures
        to transition back to Possible state.

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

        [webkitscmpy] Fix SVN relative URL parsing
        https://bugs.webkit.org/show_bug.cgi?id=229075
        <rdar://problem/81868773>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.branch): Check if relative URL path contains local path before stripping local path. 

2021-08-13  Lauro Moura  <lmoura@igalia.com>

        [WPE] WebExtension API test /webkit/WebKitWebView/web-process-crashed is flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=229067

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebKitWebViewProcessCrashed): Make warnings non-fatal while waiting for the crash.
        * TestWebKitAPI/glib/TestExpectations.json: Remove expectation

2021-08-13  Martin Robinson  <mrobinson@webkit.org>

        Get lint-test-expectations passing
        https://bugs.webkit.org/show_bug.cgi?id=228999

        Reviewed by Ryan Haddad.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder._is_test_file): Added a list of patterns for tests to skip
        and ensured that 'boot.xml' and 'root.xml' (spurious files created during
        the run of the WebKit1 bot) are on the list.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        (LayoutTestFinderTests.test_is_test_file): Added a test for the changes.

2021-08-12  Lauro Moura  <lmoura@igalia.com>

        [WPE] Gardening web-process-crashed API test failure

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        REGRESSION (iPadOS 14): [ iPadOS wk2 ] TestWebKitAPI.ServiceWorkers.SuspendNetworkProcess is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=217714
        <rdar://problem/70296664>

        Reviewed by Geoffrey Garen.

        Give the database some time to get written out to disk before we try and suspend the network process, to try
        and address the flakiness.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-08-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [ iOS Debug] 3 editing/pasteboard/smart-paste-paragraph tests are flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=228285
        rdar://81118724

        Reviewed by Tim Horton and Aditya Keerthi.

        These three editing tests occasionally fail when synthesizing a double-tap gesture in order to select a word in
        editable content. This happens because unless UIKit has observed at least one keypress event (e.g. from a
        previous editing test), it presents the software keyboard underneath `-[UIKeyboardImpl showKeyboardIfNeeded]`
        when setting the selection via UITextSelectionInteraction. This causes the input view frame to expand from the
        collapsed (UCB) height of 44pt to the full software keyboard height, which in turn causes the second touch in
        the synthesized double tap gesture to _sometimes_ hit-test to the wrong location, resulting in these test
        failures.

        To mitigate this, ensure that we have consistent behavior in layout tests when changing the text selection in
        editable content by directly setting a TextInput default to make the keyboard behave as if it has previously
        seen a keypress via the hardware keyboard.

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

2021-08-12  Patrick Angle  <pangle@apple.com>

        Add myself (Patrick Angle) to watchlist for Inspector code changes
        https://bugs.webkit.org/show_bug.cgi?id=229046

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/config/watchlist:

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

        Allow testing of the final UIView tree on iOS platforms
        https://bugs.webkit.org/show_bug.cgi?id=229016

        Reviewed by Tim Horton.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::uiViewTreeAsText const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::uiViewTreeAsText const):
        Pipe new _uiViewTreeAsText SPI through to UIScriptController, matching the pattern
        established by scrollingTreeAsText.

2021-08-12  Devin Rousso  <drousso@apple.com>

        Fix some `NSAttributedString` inconsistencies between WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=229013
        <rdar://problem/81215696>

        Reviewed by Timothy Hatcher.

        * TestWebKitAPI/Tests/WebKitCocoa/NSAttributedStringWebKitAdditions.mm: Added.
        (TEST.NSAttributedStringWebKitAdditions.DefaultFontSize):
        (TEST.NSAttributedStringWebKitAdditions.MultipleParagraphs):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

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

        Adopt span in RTCRtpSFrameTransform
        https://bugs.webkit.org/show_bug.cgi?id=229029

        Reviewed by Eric Carlson.

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

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

        Unreviewed API test build fix with recent MacOS SDK.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (verifyCertificateAndPublicKey):

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

        [check-github-mirror-integrity] Differentiate between slow sync and collapsed commits
        https://bugs.webkit.org/show_bug.cgi?id=229004
        <rdar://problem/81795644>

        Reviewed by Aakash Jain.

        * Scripts/check-github-mirror-integrity: Use commit timestamps to differentiate between a slow sync between svn.webkit.org
        and GitHub and git-svn combining commits

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

        [GTK] Simplify TestWebKitAccessibility
        https://bugs.webkit.org/show_bug.cgi?id=229032

        Reviewed by Michael Catanzaro.

        We don't really need to have a different process to test a11y. We can remove AccessibilityTestServer and use the
        same test executable. That way we don't need to spawn a process and use DBus for the communication.

        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::findTestApplication): Find the accessible application corresponding to the test executable.
        (AccessibilityTest::waitUntilChildrenRemoved): Use the WebViewTest main loop.
        (testAtspiBasicHierarchy): Use WebViewTest::loadHtml.
        * TestWebKitAPI/glib/PlatformGTK.cmake:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main): Set the program name to the executable name. It helps to a11y test to find the accessible app.

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

        [GTK] run-gtk-tests always fails to start accessibility daemons
        https://bugs.webkit.org/show_bug.cgi?id=229031

        Reviewed by Michael Catanzaro.

        This is because it uses exec_prefix variable from atspi2 pkg-config file to try to find the executables, but
        atspi2 pkg-config file doesn't have a exec_prefix variable anymore. It was always set to $prefix, so we can just
        use prefix variable instead.

        * Scripts/run-gtk-tests:
        (GtkTestRunner._lookup_atspi2_binary):

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

        Implement SFrameTransform error handling
        https://bugs.webkit.org/show_bug.cgi?id=228947

        Reviewed by Eric Carlson.

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

2021-08-11  Peng Liu  <peng.liu6@apple.com>

        [ BigSur Debug ] TestWebKitAPI.GPUProcess.CrashWhilePlayingAudioViaCreateMediaElementSource is flaky, hitting ASSERTION FAILED: !isInRoutingArbitrationForToken(token)
        https://bugs.webkit.org/show_bug.cgi?id=227728
        <rdar://problem/80237464>

        Reviewed by Jer Noble.

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

2021-08-11  Youenn Fablet  <youenn@apple.com>

        Media element is not always autoplaying when going from background to foreground if it is initially not in viewport
        https://bugs.webkit.org/show_bug.cgi?id=228955
        rdar://81751653

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:

2021-08-11  Lauro Moura  <lmoura@igalia.com>

        [WPE] Handle escape key in wpeKeySymForKeyRef
        https://bugs.webkit.org/show_bug.cgi?id=228981

        Reviewed by Carlos Garcia Campos.

        Some dialog tests were failing due to "escape" key ref being
        translated to the 'e' keysym.

        Covered by existing tests.

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

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

        [webkitpy] Stop relying on device.plist for simulated device state
        https://bugs.webkit.org/show_bug.cgi?id=228974
        <rdar://problem/81749547>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.populate_available_devices): Device state check is now shared between simulators.
        (SimulatedDeviceManager._disambiguate_device_type): Only extract hardware family and type from candidate.
        (SimulatedDevice.__init__): Device state check is now shared between simulators.
        (SimulatedDevice.state): Use 'xcrun simctl list' instead of device.plist.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (SimulatedDeviceTest.change_state_to): Deleted.
        (SimulatedDeviceTest.test_swapping_devices): Deleted.

2021-08-10  Cameron McCormack  <heycam@apple.com>

        Restore color profiles correctly on displays with multiple named modes
        https://bugs.webkit.org/show_bug.cgi?id=228313
        <rdar://problem/81146417>

        Reviewed by Alexey Proskuryakov.

        Look up a device's current color profile by checking the default mode
        rather than assuming it is "1".  The device info dictionary returned
        by ColorSyncDeviceCopyDeviceInfo has this shape:

        {
            CustomProfiles = {
                ModeName1 = "file:///path/to/custom/profile.ics";
            };
            FactoryProfiles = {
                DeviceDefaultProfileID = "ModeName1";
                ModeName1 = {
                    DeviceModeDescription = "Mode Name 1";
                    DeviceProfileURL = "file:///path/to/factory/profile1.ics";
                };
                ModeName2 = {
                    DeviceModeDescription = "Mode Name 2";
                    DeviceProfileURL = "file:///path/to/factory/profile2.ics";
                };
            };
        }

        where CustomProfiles is only present if a custom profile has been
        selected, and the default mode name is "1".  Displays connected over
        HDMI don't use the default mode name.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (colorProfileURLForDisplay):

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

        [resultsdbpy] Add results-summary API
        https://bugs.webkit.org/show_bug.cgi?id=226894
        <rdar://problem/79155181>

        Reviewed by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.__init__): Add aggregate-results endpoint.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (commit_for_query): Add decorator which converts a set of arguments into a single commit.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/test_controller.py:
        (TestController):
        (TestController.summarize_test_results): Given a single commit and suite/test combination, compute
        the liklihood of each potential result.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/test_controller_unittest.py:
        (TestControllerTest.test_summarize_general): Added.
        (TestControllerTest.test_summarize_specific): Added.
        (TestControllerTest.test_summarize_expectations): Added.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context.py:
        (CommitContext.find_commits_in_range): Use ascended table if user only provides lower bound.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context_unittest.py:
        (CommitContextTest.test_stash_commits_before): Verify upper bound.
        (CommitContextTest.test_svn_commits_before): Ditto.
        (CommitContextTest.test_stash_commits_after): Verify lower bound.
        (CommitContextTest.test_svn_commits_after): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/documentation.html: Add aggregate-results
        documentation.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-08-10  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Flexible viewport tests that dump the window size fail because it doesn't match iPad
        https://bugs.webkit.org/show_bug.cgi?id=228964

        Reviewed by Darin Adler.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):
        For platforms where we control the size of the window/scene, resize it
        to match the chosen default testing iPad size (768x1024), but with the
        default testing iPad's status bar subtracted out, and the current platform's
        added in, so that the end result is a WKWebView of identical size to
        one on the default testing iPad.

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

        [git-webkit] Color `log` output
        https://bugs.webkit.org/show_bug.cgi?id=228662
        <rdar://problem/81344181>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, export Terminal.
        * Scripts/libraries/webkitcorepy/webkitcorepy/terminal.py: Added.
        (Terminal):
        (Terminal.assert_writeable_stream): Assert that the provided object is a writable stream.
        (Terminal.supports_color): Check if the provided file supports colored output.
        (Terminal.isatty): Check if a stream is an atty, both according to the stream itself and our override.
        (Terminal.override_atty): Allow callers to override and declare explicitly if a stream is an atty.
        (Terminal.Text): Group text colors and styles.
        (Terminal.Style): Group functions modifying style of a stream.
        (Terminal.Style.enabled): Check if styled printing is enabled on a stream.
        (Terminal.Style.disable): Disable styled printing on a stream.
        (Terminal.Style.enable): Enable styled printing on a stream.
        (Terminal.Style.is_styled): Check if a stream is currently styled.
        (Terminal.Style.__init__): Construct a text style.
        (Terminal.Style.__repr__): Output the terminal characters styling a stream.
        (Terminal.Style.set): Apply style to a stream.
        (Terminal.Style.apply): Apply style to a stream, unapply when exiting context.
        * Scripts/libraries/webkitscmpy/setup.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/blame.py: Pass isatty to child process.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (FilteredCommand.pager): Pass isatty to child process, ask 'more' to display colors.
        (FilteredCommand.main): Color header and error.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/log.py: Pass isatty to child process.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/log_unittest.py: Override atty behavior.

2021-08-10  Ben Nham  <nham@apple.com>

        Fix nested resource load tracepoints
        https://bugs.webkit.org/show_bug.cgi?id=228242

        Reviewed by Alex Christensen.

        Use page and resource ids to properly handle nested main resource and subresource load
        tracepoint intervals.

        * Tracing/SystemTracePoints.plist:

2021-08-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        Scripts/generate-derived-sources.sh: line 19: [: binary operator expected while building Source/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=228908

        Reviewed by Per Arne Vollan.

        * DumpRenderTree/Scripts/generate-derived-sources.sh:
        * WebKitTestRunner/Scripts/generate-derived-sources.sh:
        Quote the use of CC so that future copy-paste does not make the same mistake
        as this bug.

2021-08-10  Devin Rousso  <drousso@apple.com>

        [macOS] REGRESSION(r278850): modifying `playbackRate` via JS on a TouchBar mac only sometimes works and also causes the `defaultPlaybackRate` to change
        https://bugs.webkit.org/show_bug.cgi?id=228939
        <rdar://problem/80427578>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST.VideoControlsManager.VideoControlsManagerDoesNotChangeValuesExposedToJavaScript): Added.

2021-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        caret-color does not work on first click in ios
        https://bugs.webkit.org/show_bug.cgi?id=228859
        rdar://81674787

        Reviewed by Tim Horton.

        Make it possible to test this bug by adding a UIScriptController hook to request the background color of the
        current selection view's caret view, as serialized CSS text. See LayoutTests/ChangeLog for more details.

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

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

        [ews] Limit the size of error context buffer
        https://bugs.webkit.org/show_bug.cgi?id=228900

        Reviewed by Alexey Proskuryakov.

        * CISupport/ews-build/steps.py:
        (BuildLogLineObserver.outLineReceived): Limit the lines for additional context to 50 lines.

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

        [macOS] Web process crashes when detaching Document with uncommitted marked text
        https://bugs.webkit.org/show_bug.cgi?id=228841
        rdar://79960890

        Reviewed by Ryosuke Niwa.

        Make a small adjustment to DumpRenderTree, such that TextInputController targets the selected frame (or the main
        frame, if there is no DOM selection). This behavior matches that of WebKitTestRunner, and allows layout tests
        that use TextInputController to simulate setting marked text inside subframes.

        * DumpRenderTree/mac/TextInputControllerMac.m:
        (-[TextInputController selectedOrMainFrame]):
        (-[TextInputController textInput]):

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

        [ews] Ensure file handle is not leaked in loadConfig.py
        https://bugs.webkit.org/show_bug.cgi?id=228866

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/loadConfig.py:
        (loadBuilderConfig):
        * CISupport/ews-build/loadConfig.py:
        (loadBuilderConfig):

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

        [git-webkit] Add setup function
        https://bugs.webkit.org/show_bug.cgi?id=225985
        <rdar://problem/78226729>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
        (credentials): Key should be pulled from environment variable with key_name in it.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git): Move config regexes.
        (Git.__init__): Add `git remote add`, `git config` and `git fetch fork`.
        (Git.config): Add user.email to default configuration.
        (Git.edit_config): Modify configuration file.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub): Add list of forks.
        (GitHub.__enter__): Correctly mock token.
        (GitHub.request): Add fork check and fork addition.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add setup function.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.credentials): Strip email domain, guide user on token permissions.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/setup.py: Added.
        (Setup.github): Ensure that GitHub credentials are in the keychain.
        (Setup.git): Set the user for the repository, along with merge strategy.
        (Setup.parser):
        (Setup.main):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (test_config): Change user name.
        (test_global_config): Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_unittest.py: Added.
        (TestSetup):
        (TestSetup.setUp):
        (TestSetup.test_svn):
        (TestSetup.test_github):
        (TestSetup.test_git):
        (TestSetup.test_github_checkout):

2021-08-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKitTestRunner] WTR::PlatformWebView leaks m_view (WKViewRef)
        https://bugs.webkit.org/show_bug.cgi?id=228857

        Reviewed by Don Olmstead.

        Windows WebKitTestRunner leaked a lot of object because it leaked
        WebKit::WebView that retains WebKit::WebPageProxy.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::~PlatformWebView): Release m_view.

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

        [GPUP] Test WebKit2.CrashGPUProcessAfterApplyingConstraints fails when Media in GPU Process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=228759
        <rdar://problem/81529641>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        Reenable test.

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

        [ews] Make config.json compact
        https://bugs.webkit.org/show_bug.cgi?id=228862

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/config.json:

2021-08-05  Diego Pino Garcia  <dpino@igalia.com>

        [buildbot] Add new post-commit bot to build WPE on Ubuntu-LTS
        https://bugs.webkit.org/show_bug.cgi?id=228535

        Reviewed by Alexey Proskuryakov.

        Currently we only had a bot to build WebKitGTK on Ubuntu LTS. This is
        not enough to detect build regressions in WPE.

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

2021-08-05  Kate Cheney  <katherine_cheney@apple.com>

        LoadWebArchive.FailNavigation1 test is a false positive
        https://bugs.webkit.org/show_bug.cgi?id=228848
        <rdar://problem/81587448>

        Reviewed by Brent Fulgham.

        Update LoadWebArchive.FailNavigation1 to test the case of a webarchive
        being loaded with a host for better test coverage.

        * TestWebKitAPI/Tests/mac/load-web-archive-1.html:

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

        REGRESSION (r279855): TestWebKitAPI.AppleLanguagesTest.UpdateAppleLanguages is failing
        https://bugs.webkit.org/show_bug.cgi?id=228309

        Unreviewed test gardening.

        This test has been skipped on Apple Silicon because of timeouts, and
        now it is a flaky failure on Intel machines. Disable it outright for
        the time be ing.

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

2021-08-05  Zan Dobersek  <zdobersek@igalia.com>

        run-jsc-stress-tests: detect the riscv64 architecture
        https://bugs.webkit.org/show_bug.cgi?id=228817

        Reviewed by Adrian Perez de Castro.

        * Scripts/run-jsc-stress-tests: Detect the riscv64 architecture when
        examining ELF binaries. For the moment, this architecture should be
        marked as not supporting FTL.

2021-08-04  Peng Liu  <peng.liu6@apple.com>

        [Catalina][GPUP] Some API tests fail after GPU Process features are enabled
        https://bugs.webkit.org/show_bug.cgi?id=228589

        Reviewed by Jer Noble.

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

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

        [check-github-mirror-integrity] Store remote cache in checkout
        https://bugs.webkit.org/show_bug.cgi?id=228792
        <rdar://problem/81527357>

        Reviewed by Aakash Jain.

        * Scripts/check-github-mirror-integrity: Use the local checkout to store the svn.webkit.org, if possible.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn.__init__): Allow caller to define cache path.
        (Svn._cache_path): Deleted.

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

        [check-github-mirror-integrity] Compare current time to canonical time
        https://bugs.webkit.org/show_bug.cgi?id=228787
        <rdar://problem/81524499>

        Reviewed by Aakash Jain.

        * Scripts/check-github-mirror-integrity: If the mirror isn't in line with the canonical repository, we should
        check against the current time, not the time of last commit on the mirror.

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

        [Cocoa] Tweak the formatting for passing NSArrays to TextStreams
        https://bugs.webkit.org/show_bug.cgi?id=228766

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/cocoa/TextStreamCocoa.cpp: Added.
        (TEST):
        * TestWebKitAPI/Tests/WTF/cocoa/TextStreamCocoa.mm: Added.
        (TEST):

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

        [webkitcorepy] Add shared terminal input code
        https://bugs.webkit.org/show_bug.cgi?id=226024
        <rdar://problem/78261645>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Export Terminal object, bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
        (credentials): Use Terminal.input.
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/terminal.py: Added.
        (Terminal):
        (Terminal.input): Mocking input and raw_input requires so specialized knowledge,
        so we should generalize it.
        * Scripts/libraries/webkitcorepy/webkitcorepy/terminal.py: Added.
        (Terminal):
        (Terminal.input): Python 2/3 compatible input function.
        (Terminal.choose): Generic multiple-choice input prompt.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/terminal_unittest.py: Added.
        (TerminalTests):
        (TerminalTests.test_choose_basic):
        (TerminalTests.test_choose_strict):
        (TerminalTests.test_choose_default):
        (TerminalTests.test_choose_triple):
        (TerminalTests.test_choose_number):
        * Scripts/webkitpy/common/system/user.py:
        (User.prompt): Use Terminal.input.
        (User.prompt_with_multiple_lists): Ditto.
        (User.prompt_with_list): Ditto.
        (User.confirm): Ditto.
        * Scripts/webkitpy/common/system/user_mock.py:
        (MockUser.prompt): Use Terminal.input.
        (MockUser.prompt_with_list): Ditto.

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

        Add contributor to accessibility watchlist.
        https://bugs.webkit.org/show_bug.cgi?id=228775

        Reviewed by Chris Fleizach.

        * Scripts/webkitpy/common/config/watchlist: Added andresg_22@apple.com to accessibility watchlist.

2021-08-03  Risul Islam  <risul_islam@apple.com>

        Add functions for parsing URL query string
        https://bugs.webkit.org/show_bug.cgi?id=228122

        Reviewed by Darin Adler.
        
        Added the test functions required for parsing URL query string.

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

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

        [webkitpy] Handle case where no existing simulators are defined
        https://bugs.webkit.org/show_bug.cgi?id=228758
        <rdar://problem/81484040>

        Reviewed by Ryan Haddad.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type): If there are no available devices,
        find the newest device identifier which matches the requested type.

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

        [build.webkit.org] Simulator temp files filling up disk (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=228335
        <rdar://problem/81171840>

        Reviewed by Ryan Haddad.

        * CISupport/kill-old-processes:
        (main): Use tempdir environment variable, link to underlying bug.

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

        WebKitTestRunner should dump current results in the case of a timeout
        https://bugs.webkit.org/show_bug.cgi?id=228706
        <rdar://79154019>

        Reviewed by Jonathan Bedard.

        When WKTR encounters a timeout, it current prints a "PID UNRESPONSIVE" and "FAIL: timed out" message,
        but the WebContent process may not actually be unresponsive; it may just be waiting for an event
        which hasn't fired, or a condition to become true. In these cases, it would be very helpful to see
        the results of the test so far, so as to diagnose what is keeping the test from running to completion.

        When, in the WKTR process, TestInvocation's "waitToDumpWatchdogTimer" fires, first try sending a message
        to the InjectedBundle, requesting it to "ForceImmediateCompletion". Only if this message fails to be
        acted upon will WKTR print the "PID UNRESPONSIVE" message.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::waitToDumpWatchdogTimerFired):
        (WTR::TestInvocation::initializeWaitForPostDumpWatchdogTimerIfNeeded):
        (WTR::TestInvocation::invalidateWaitForPostDumpWatchdogTimer):
        (WTR::TestInvocation::waitForPostDumpWatchdogTimerFired):
        (WTR::TestInvocation::done):
        * WebKitTestRunner/TestInvocation.h:

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

        [webkitpy] Narrow set of terminated simulator processes
        https://bugs.webkit.org/show_bug.cgi?id=228752
        <rdar://problem/81479508>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.initialize_devices): Only check Simulator.app.
        (SimulatedDeviceManager.tear_down): Only kill Simulator.app processes.
        (SimulatedDevice._delete): Print error if `simctl delete` fails, but continue.

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

        [webkitscmpy] Add access to `git config`
        https://bugs.webkit.org/show_bug.cgi?id=228597
        <rdar://problem/81283644>

        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.config): Return git configuration as dictionary.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (test_config): Test repository configuration.
        (test_global_config): Test global configuration.

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

        [check-github-mirror-integrity] Handle slow Svn query
        https://bugs.webkit.org/show_bug.cgi?id=228741

        Reviewed by Aakash Jain.

        * Scripts/check-github-mirror-integrity: Pull commit from GitHub before Subversion.

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

        [WPE][GTK] SVN_REVISION drifting away if bots don't re-run cmake
        https://bugs.webkit.org/show_bug.cgi?id=228290

        Reviewed by Michael Catanzaro.

        The apply-build-revision-to-files.py script wasn't expanding the BUILD_REVISION beyond the
        first run, because it processes files generated by CMake already, and expanding the
        BUILD_REVISION once prevents further expansions. So the proposed solution is to always
        expand BuildRevision.h.in from that script, and for .pc files, to restore the BUILD_REVISION
        template before updating the file.

        * glib/apply-build-revision-to-files.py:
        (main):

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

        [GPUP] RemoteAudioSession::setPreferredBufferSize() does not change its preferredBufferSize
        https://bugs.webkit.org/show_bug.cgi?id=228720

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm:
        (TEST_F):

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

        Don't change invalid baseURLs from loadData or loadHTMLString to about:blank
        https://bugs.webkit.org/show_bug.cgi?id=228717
        <rdar://79909343>

        Reviewed by Chris Dumez.

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

2021-08-02  Kevin Neal  <kevin_neal@apple.com>

        [results.webkit.org] Fix incorrect conditional check
        https://bugs.webkit.org/show_bug.cgi?id=228666

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:

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

        Add CheckedRef
        https://bugs.webkit.org/show_bug.cgi?id=227164

        Reviewed by Geoffrey Garen.

        Added some unit tests for CheckedRef and updated the unit tests
        for CheckedPtr per the removal of makeCheckedPtr.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedPtr.cpp:
        (WTF_CheckedPtr.CheckedRef): Added
        * TestWebKitAPI/Tests/WTF/CheckedRef.cpp: Added.
        (TestWebKitAPI..CheckedObject): Added.
        (TestWebKitAPI..DerivedCheckedObject): Added.
        (WTF_CheckedRef.Basic): Added.
        (WTF_CheckedRef.DerivedClass): Added.
        (WTF_CheckedRef.HashSet): Added.

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

        Add basestring compatibility for Python3 in webkitcorepy.
        https://bugs.webkit.org/show_bug.cgi?id=228707

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitcorepy/setup.py: Bumped version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/string_utils.py: Added
        basestring compatibility for Python3.

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

        [GLIB] Make CORS allowlist test wait for promise resolution
        https://bugs.webkit.org/show_bug.cgi?id=228695

        Reviewed by Michael Catanzaro.

        r278456 introduced a CORS allow list test that tries to fetch a
        resource using the fetch() function, which returns a promise. This is
        working on GTK but in WPE the test fails as the promise is not yet
        resolved by the time the test variable is checked.

        This commit changes the test to actually report the promise failure
        through catch() and wait for its resolution before checking the values.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewCORSAllowlist):

2021-08-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][DumpRenderTree] Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=228692

        Reviewed by Ryosuke Niwa.

        storage/indexeddb/getdatabases.html was failing because it counted
        up the remaining databases of previous tests.

        Mac DRT removes IndexedDB after the testing (Bug 192796, r240358).
        Win DRT also should do it.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Call TestRunner::clearAllDatabases after the testing.

2021-07-31  Alexander Mikhaylenko  <alexm@gnome.org>

        Add myself (Alexander Mikhaylenko) to contributors.json as a committer

        Unreviewed.

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

2021-07-30  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Forward errors from log and blame
        https://bugs.webkit.org/show_bug.cgi?id=228621
        <rdar://problem/81297642>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (FilteredCommand.main): If the exit code is non-zero, print all errors.

2021-07-30  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Not all platforms support more -F
        https://bugs.webkit.org/show_bug.cgi?id=228619
        <rdar://problem/81296290>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (FilteredCommand.pager): Only pass -F to more on Darwin.

2021-07-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][GTK] build broken with python2 after r280382
        https://bugs.webkit.org/show_bug.cgi?id=228629

        Reviewed by Philippe Normand.

        Fix compatibility with python2.

        * glib/apply-build-revision-to-files.py:
        (main):

2021-07-29  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Handle relative paths in filtered commands
        https://bugs.webkit.org/show_bug.cgi?id=228606
        <rdar://problem/81289748>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (FilteredCommand.pager): Child process should use the same current working directory.
        (FilteredCommand.main): Convert any file names to their absolute paths.

2021-07-29  Tim Horton  <timothy_horton@apple.com>

        Simplify ImageDiff SDK logic
        https://bugs.webkit.org/show_bug.cgi?id=228603
        <rdar://problem/81281548>

        Reviewed by Sam Weinig.

        * ImageDiff/Makefile:
        For any non-macOS SDK, build a macOS ImageDiff (because we use it on the host, not the target).

2021-07-29  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Return remote objects from remote() function
        https://bugs.webkit.org/show_bug.cgi?id=226980
        <rdar://problem/79299760>

        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.url): Add function to return remote url directly.
        (Git.remote): Construct the appropriate remote object.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.url): Add function to return the remote url directly.
        (Svn.remote): Construct the appropriate remote object.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_url):
        (TestGit.test_remote):
        (TestGit.test_remote_github):
        (TestGit.test_remote_bitbucket):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_url):
        (TestLocalSvn.test_remote):

2021-07-29  Peng Liu  <peng.liu6@apple.com>

        [Catalina][GPUP] Some API tests fail after GPU Process features are enabled
        https://bugs.webkit.org/show_bug.cgi?id=228589

        Reviewed by Aakash Jain.

        Disable a few API tests while the investigation is ongoing.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AudioBufferSize.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlaying.mm:
        (TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm:
        (TEST_F):

2021-07-29  Aakash Jain  <aakash_jain@apple.com>

        Send email notification when VerifyGitHubIntegrity step fails
        https://bugs.webkit.org/show_bug.cgi?id=228592

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/emails.json:
        * CISupport/ews-build/send_email.py:
        (send_email_to_github_admin):
        * CISupport/ews-build/steps.py:
        (VerifyGitHubIntegrity):
        (VerifyGitHubIntegrity.evaluateCommand):
        (VerifyGitHubIntegrity.send_email_for_github_issue):

2021-07-29  Jonathan Bedard  <jbedard@apple.com>

        [git-webkit] Add identifiers to 'log' and 'blame'
        https://bugs.webkit.org/show_bug.cgi?id=228027
        <rdar://problem/80691164>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.from_path): Pass all kwargs to local SCM object.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Add Blame and Log commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/blame.py: Added.
        (Blame): Invoke pager.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        (FilteredCommand): Shared command that handles replace hashes/revisions in
        an SCM command with identifiers.
        (FilteredCommand.parser): Allow user to change the prefered commit representation.
        (FilteredCommand.pager): Pass output through more if called from a terminal.
        (FilteredCommand.main): Modify output of provided command to replace commit representation
        with the preffered commit representation.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/log.py: Added.
        (Log): Invoke pager.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/log_unittest.py: Added.
        (TestLog):
        (TestLog.setUp):
        (TestLog.test_git):
        (TestLog.test_git_svn):
        (TestLog.test_git):

2021-07-29  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Catch AttributeError when getting password
        https://bugs.webkit.org/show_bug.cgi?id=228590
        <rdar://problem/81278799>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
        (credentials): Catch AttributeError.

2021-07-29  Aakash Jain  <aakash_jain@apple.com>

        [ews] VerifyGitHubIntegrity step fails with an exception
        https://bugs.webkit.org/show_bug.cgi?id=228587

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (VerifyGitHubIntegrity): Fixed the base class.
        (VerifyGitHubIntegrity.getResultSummary): Drive-by fix to improve error message.
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.

2021-07-29  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] .asc file extension is appended to filename of text/plain downloads
        https://bugs.webkit.org/show_bug.cgi?id=228566

        Reviewed by Adrian Perez de Castro.

        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (serverCallback):
        (testDownloadTextPlainMIMEType):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/resources/text: Added.

2021-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        makeWeakPtr should support Ref and RefPtr as the argument
        https://bugs.webkit.org/show_bug.cgi?id=228574

        Reviewed by Wenson Hsieh.

        Added unit tests for makeWeakPtr<T> on Ref<T> and RefPtr<T>.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::BaseObjectWithRefAndWeakPtr): Added.
        (TestWebKitAPI::BaseObjectWithRefAndWeakPtr::create): Added.
        (TestWebKitAPI::BaseObjectWithRefAndWeakPtr::someFunction):
        (TestWebKitAPI::DerivedObjectWithRefAndWeakPtr): Added.
        (TestWebKitAPI::DerivedObjectWithRefAndWeakPtr::create):
        (WTF_WeakPtr.MakeWeakPtrTakesRef): Added.
        (WTF_WeakPtr.MakeWeakPtrTakesRefPtr): Added.

2021-07-28  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add hybridmethod decorator
        https://bugs.webkit.org/show_bug.cgi?id=225991
        <rdar://problem/78230701>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:
        (hybridmethod): Similar to the "classmethod" decorator, except this decorator allows the
        decorated functions to differentiate between being called by the class and an instance
        of the class.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/decorators_unittest.py:
        (TestHybrid):
        (TestHybrid.is_type):
        (TestHybrid.test_type):
        (TestHybrid.test_instance):

2021-07-28  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Fix race condition in TaskPool unittests (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=227455
        <rdar://problem/79873003>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py:
        (TaskPoolUnittest.test_invalid_shutdown): Deleted.

2021-07-28  Jonathan Bedard  <jbedard@apple.com>

        [ews-build.webkit.org] Verify GitHub integrity in commit queue
        https://bugs.webkit.org/show_bug.cgi?id=228563
        <rdar://problem/81230685>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/factories.py:
        (CommitQueueFactory.__init__): Add VerifyGitHubIntegrity.
        * CISupport/ews-build/factories_unittest.py:
        (TestCommitQueueFactory.test_commit_queue_factory):
        * CISupport/ews-build/steps.py:
        (CheckPatchStatusOnEWSQueues.start):
        (VerifyGitHubIntegrity):
        (VerifyGitHubIntegrity.__init__):
        (VerifyGitHubIntegrity.getResultSummary):
        * Scripts/check-github-mirror-integrity: Import webkitscmpy from webkitpy.

2021-07-28  Alex Christensen  <achristensen@webkit.org>

        WebSocket: Safari on iOS 15 beta 3 is sending invalid close frame
        https://bugs.webkit.org/show_bug.cgi?id=228329

        Reviewed by Youenn Fablet.

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

2021-07-28  Philippe Normand  <pnormand@igalia.com>

        [WPE][GTK] SVN_REVISION drifting away if bots don't re-run cmake
        https://bugs.webkit.org/show_bug.cgi?id=228290

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/main.c:
        (main): Use generated BuildRevision.h header.
        * glib/apply-build-revision-to-files.py: Added.
        (main):

2021-07-28  Diego Pino Garcia  <dpino@igalia.com>

        [WPE] Add missing required dependencies to build WPE
        https://bugs.webkit.org/show_bug.cgi?id=228530

        Reviewed by Adrian Perez de Castro.

        Script Tools/wpe/install-dependencies was not installing all the required
        package dependencies necessary to build WPE. There were several
        packages missing or other ones which were only present in the
        WebKitGTK list of package dependencies (moved to GLIB).

        * glib/dependencies/apt:
        * gtk/dependencies/apt:
        * wpe/dependencies/apt:

2021-07-27  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] [macOS] Overflow button still shows as `on` even after contextmenu is dismissed
        https://bugs.webkit.org/show_bug.cgi?id=228310
        <rdar://problem/81124786>

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dismissActiveMenu]):
        (-[TestRunnerWKWebView immediatelyDismissContextMenuIfNeeded]):
        (-[TestRunnerWKWebView _dismissAllContextMenuInteractions]): Added.

2021-07-27  Diego Pino Garcia  <dpino@igalia.com>

        [GTK][WPE] Fix wrong path to GLIB dependencies introduced in r280354.

        Unreviewed follow-up fix.

        * gtk/dependencies/apt:
        * gtk/dependencies/dnf:
        * gtk/dependencies/pacman:
        * wpe/dependencies/apt:
        * wpe/dependencies/dnf:
        * wpe/dependencies/pacman:

2021-07-27  Jonathan Bedard  <jbedard@apple.com>

        [build.webkit.org] Simulator temp files filling up disk
        https://bugs.webkit.org/show_bug.cgi?id=228335
        <rdar://problem/81171840>

        Reviewed by Aakash Jain.

        * CISupport/kill-old-processes:
        (main): Delete stale simulator files.

2021-07-27  Aakash Jain  <aakash_jain@apple.com>

        Add .gitignore file for CISupport
        https://bugs.webkit.org/show_bug.cgi?id=228113

        Reviewed by Jonathan Bedard.

        * CISupport/.gitignore: Added.

2021-07-27  Diego Pino Garcia  <dpino@igalia.com>

        [GTK][WPE] Move WebKitGTK and WPE dependency packages to a common GLIB list
        https://bugs.webkit.org/show_bug.cgi?id=228326

        Reviewed by Adrian Perez de Castro.

        WebKitGTK and WPE share many dependency packages. Until now each port
        maintained its own list of dependencies. It was a common mistake to
        add a new package dependency to one of the ports but not to the other
        one.

        This patch adds a common GLIB for dependency packages, which can help
        prevent mistakes like the one described above.

        * glib/dependencies/apt: Copied from Tools/wpe/dependencies/apt.
        * glib/dependencies/dnf: Copied from Tools/wpe/dependencies/dnf.
        * glib/dependencies/pacman: Copied from Tools/wpe/dependencies/pacman.
        * gtk/dependencies/apt:
        * gtk/dependencies/dnf:
        * gtk/dependencies/pacman:
        * wpe/dependencies/apt:
        * wpe/dependencies/dnf:
        * wpe/dependencies/pacman:

2021-07-27  Kevin Neal  <kevin_neal@apple.com>

        [results.webkit.org] Tooltips should remain visible when hovering over commit representations
        https://bugs.webkit.org/show_bug.cgi?id=228330

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale):

2021-07-27  Diego Pino Garcia  <dpino@igalia.com>

        [GTK][WPE] Organize list of package dependencies into separated files
        https://bugs.webkit.org/show_bug.cgi?id=228276

        Reviewed by Adrian Perez de Castro.

        When deploying a new bot from scratch for Ubuntu LTS, which builds
        using system libraries, I realized the list of package dependencies
        for WPE is not exhaustive.

        This patch refactorizes the package dependencies list putting each
        group of dependencies on its own file depending on platform (apt, dnf,
        pacman and brew).

        On a follow-up step I plan to put in common the WebKitGTK and WPE
        dependencies plus add the missing WPE package dependencies. Also I'll
        remove the duplicated packages that are currently happening in the
        dependencies list of several platforms.

        * gtk/dependencies/apt: Added.
        * gtk/dependencies/brew: Added.
        * gtk/dependencies/dnf: Added.
        * gtk/dependencies/pacman: Added.
        * gtk/install-dependencies:
        * wpe/dependencies/apt: Added.
        * wpe/dependencies/dnf: Added.
        * wpe/dependencies/pacman: Added.
        * wpe/install-dependencies:

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

        [macOS Monterey] Pressing Fn+E should present the emoji picker when editing
        https://bugs.webkit.org/show_bug.cgi?id=228300
        rdar://77558672

        Reviewed by Tim Horton.

        Add a new API test that simulates a keypress for "Fn+E" with a main menu that contains a system menu item for
        that key binding; the test then verifies that text was not inserted into the page as a result.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/KeyboardEventTests.mm: Added.
        (-[KeyboardTestMenu _containsItemMatchingEvent:includingDisabledItems:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView typeCharacter:]):
        (-[TestWKWebView typeCharacter:modifiers:]):

2021-07-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative revert of r280193
        https://bugs.webkit.org/show_bug.cgi?id=228142

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        * TestWebKitAPI/Tests/WTF/Vector.cpp:

2021-07-26  Alex Christensen  <achristensen@webkit.org>

        WKUserContentController.removeAllScriptMessageHandlers() doesn't release the message handlers
        https://bugs.webkit.org/show_bug.cgi?id=228271

        Reviewed by Sihui Liu.

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

2021-07-26  Kate Cheney  <katherine_cheney@apple.com>

        ServiceWorkerRegistration.unregister method fails in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=227524
        <rdar://problem/80264108>

        Reviewed by Youenn Fablet.

        API test coverage. Drive-by fix to remove unnecessary WKWebView
        configuration flags from tests that don't need them.

        Note this will also fix https://bugs.webkit.org/show_bug.cgi?id=227531
        where updating an existing worker fails after registering 3 domains,
        but writing a test for that would require registering service workers
        on 3 domains that are not localhost or a loopback IP address, which
        we currently do not have infrastructure for.

        Testing unregister was only possible because the script URL passed in
        during the unregister job is null, so it does not get caught in the
        localhost/loopback IP address check, unlike the update case.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):
        (-[SWInAppBrowserPrivacyMessageHandler userContentController:didReceiveScriptMessage:]):

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

        [iOS] Unified field is unselected after focusing URL bar if text was selected in a fixed position container
        https://bugs.webkit.org/show_bug.cgi?id=228269
        rdar://80556392

        Reviewed by Tim Horton.

        We already have some very basic support for installing and removing native text fields in the view hierarchy,
        through `TestRunner::(add|remove)ChromeInputField()`. In order to support the new layout test, we additionally
        implement the ability to:

        - Set text inside the native chrome input field that was installed using `addChromeInputField()`.
        - Select all text inside the chrome input field.
        - Query the chrome input field for the currently selected text.

        We only support iOS for the time being, with stubs on other platforms, since the new test that uses this
        functionality is iOS-specific; if needed in the future for a similar test on other platforms, we can implement
        the stubbed testing hooks on TestRunner and PlatformWebView as well.

        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setTextInChromeInputField):
        (TestRunner::selectChromeInputField):
        (TestRunner::getSelectedTextInChromeInputField):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setTextInChromeInputField):
        (TestRunner::selectChromeInputField):
        (TestRunner::getSelectedTextInChromeInputField):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::postSetTextInChromeInputField):
        (WTR::InjectedBundle::postSelectChromeInputField):
        (WTR::InjectedBundle::postGetSelectedTextInChromeInputField):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setTextInChromeInputField):
        (WTR::TestRunner::selectChromeInputField):
        (WTR::TestRunner::getSelectedTextInChromeInputField):
        (WTR::TestRunner::callSetTextInChromeInputFieldCallback):
        (WTR::TestRunner::callSelectChromeInputFieldCallback):
        (WTR::TestRunner::callGetSelectedTextInChromeInputFieldCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setTextInChromeInputField):
        (WTR::PlatformWebView::selectChromeInputField):
        (WTR::PlatformWebView::getSelectedTextInChromeInputField):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::chromeInputField):

        Additionally do some light refactoring by pulling out logic for grabbing the chrome input field (i.e. a view
        with a tag of 1 under the window) out into a separate helper method. Use this helper in a few places below.

        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::setTextInChromeInputField):
        (WTR::PlatformWebView::selectChromeInputField):
        (WTR::PlatformWebView::getSelectedTextInChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setTextInChromeInputField):
        (WTR::PlatformWebView::selectChromeInputField):
        (WTR::PlatformWebView::getSelectedTextInChromeInputField):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::setTextInChromeInputField):
        (WTR::PlatformWebView::selectChromeInputField):
        (WTR::PlatformWebView::getSelectedTextInChromeInputField):
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::setTextInChromeInputField):
        (WTR::PlatformWebView::selectChromeInputField):
        (WTR::PlatformWebView::getSelectedTextInChromeInputField):

2021-07-24  Devin Rousso  <drousso@apple.com>

        [iOS] REGRESSION(r277505): `-[WKWebView underPageBackgroundColor]` also changes the scroll bar color
        https://bugs.webkit.org/show_bug.cgi?id=228259
        <rdar://problem/80116822>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewUnderPageBackgroundColor.mm:
        (TEST.WKWebViewUnderPageBackgroundColor.MatchesScrollView):

2021-07-23  Andres Gonzalez  <andresg_22@apple.com>

        Add a method to WebAccessibilityObjectWrapper so that clients can retrieve the text of each line and their corresponding bounding rectangles.
        https://bugs.webkit.org/show_bug.cgi?id=228251

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::lineRectsAndText const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::lineRectsAndText const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (WTR::makeJSArray):

2021-07-23  Alex Christensen  <achristensen@webkit.org>

        Make WKContentRuleListStore respond to same selectors as _WKUserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=228253

        Reviewed by Brian Weinstein.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (TEST_F):

2021-07-23  Truitt Savell  <tsavell@apple.com>

        Migrate iOS 15 expectations to OpenSource and bump version numbers
        https://bugs.webkit.org/show_bug.cgi?id=228202

        Reviewed by Ryan Haddad.

        * 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):

2021-07-22  Truitt Savell  <tsavell@apple.com>

        Migrate Monterey expectations to OpenSource and bump version numbers
        https://bugs.webkit.org/show_bug.cgi?id=228090

        Reviewed by Ryan Haddad.

        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_monterey_baseline_search_path):
        (MacTest.test_big_sur_baseline_search_path): Deleted.

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

        Micro-optimize innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=228142

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):

2021-07-22  Peng Liu  <peng.liu6@apple.com>

        [ BigSur Debug ] TestWebKitAPI.GPUProcess.CrashWhilePlayingAudioViaCreateMediaElementSource is flaky, hitting ASSERTION FAILED: !isInRoutingArbitrationForToken(token)
        https://bugs.webkit.org/show_bug.cgi?id=227728

        Unreviewed API test gardening.

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

2021-07-22  Frédéric Wang  <fwang@igalia.com>

        nullptr crash in ApplyStyleCommand::applyRelativeFontStyleChange
        https://bugs.webkit.org/show_bug.cgi?id=223974

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp: Update FIXME.

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

        [GLib] Expose API to access/modify capture devices states
        https://bugs.webkit.org/show_bug.cgi?id=227902

        Reviewed by Carlos Garcia Campos.

        The GTK MiniBrowser is now able to show media capture indicators, through the URI entry. A
        new API test was added, checking support for getDisplayMedia().

        * MiniBrowser/gtk/BrowserTab.c:
        (decidePermissionRequest):
        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewMediaCaptureStateChanged):
        (webViewUriEntryIconPressed):
        (browserWindowSwitchTab):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewUserMediaPermissionRequests):
        (testWebViewAudioOnlyUserMediaPermissionRequests):
        (testWebViewDisplayUserMediaPermissionRequests):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (displayCaptureChanged):
        (WebViewTest::waitUntilDisplayCaptureStateChangedTo):
        (microphoneCaptureChanged):
        (WebViewTest::waitUntilMicrophoneCaptureStateChangedTo):
        (cameraCaptureChanged):
        (WebViewTest::waitUntilCameraCaptureStateChangedTo):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2021-07-21  Alexey Proskuryakov  <ap@apple.com>

        MiniBrowser xcconfig should include ccache.xcconfig conditionally
        https://bugs.webkit.org/show_bug.cgi?id=228126

        Reviewed by Tim Horton.

        * MiniBrowser/Configurations/DebugRelease.xcconfig:

2021-07-21  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Allow the user to configure the MemoryPressureHandler inside the web process
        https://bugs.webkit.org/show_bug.cgi?id=222738

        Reviewed by Carlos Garcia Campos.

        Add a test for WebKitMemoryPressureSettings API and to test WebKitWebContext with
        non default WebKitMemoryPressureSettings values.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (MemoryPressureTest::setup):
        (MemoryPressureTest::teardown):
        (MemoryPressureTest::webProcessTerminatedCallback):
        (MemoryPressureTest::waitUntilWebProcessTerminated):
        (testMemoryPressureSettings):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):

2021-07-21  Aditya Keerthi  <akeerthi@apple.com>

        Crash in -[WKWebView takeSnapshotWithConfiguration:completionHandler:] when taking empty snapshots
        https://bugs.webkit.org/show_bug.cgi?id=228134
        rdar://80146087

        Reviewed by Chris Dumez.

        Added a test to verify the crash no longer occurs.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (-[TestSnapshotWrapper takeSnapshotWithWebView:configuration:completionHandler:]):
        (TEST):

2021-07-20  Saam Barati  <sbarati@apple.com>

        Don't run ftl-eager-no-cjit on debug builds
        https://bugs.webkit.org/show_bug.cgi?id=228118

        Reviewed by Mark Lam.

        Many debug JSC stress tests time out intermittently. All I see are under
        the ftl-eager-no-cjit mode.

        * Scripts/run-jsc-stress-tests:

2021-07-20  Ayumi Kojima  <ayumi_kojima@apple.com>

        Adding myself to Contributors.json

        Unreviewed.

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

2021-07-20  Eric Hutchison  <ehutchison@apple.com>

        Adding myself to Contributors.json.

        Unreviewed.

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

2021-07-20  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r278062): Misplaced text in Wikipedia search field
        https://bugs.webkit.org/show_bug.cgi?id=228098
        <rdar://problem/80495165>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cg/GraphicsContextTestsCG.cpp: Added.
        (TestWebKitAPI::greenImage):
        (TestWebKitAPI::TEST):
        Add a test for the issue described in the WebCore ChangeLog.

2021-07-20  Sam Sneddon  <gsnedders@apple.com>

        Change referrer-policy default to strict-origin-when-cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=218909

        Reviewed by Chris Dumez.

        This matches the behavior of other browsers.
        Covered by existing tests and web platform tests we haven't imported yet.

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

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

        EWS should send email notification when a bot goes out of disk space
        https://bugs.webkit.org/show_bug.cgi?id=216489

        Reviewed by Ryan Haddad.

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

2021-07-20  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Update myself (vjaquez) as committer in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=228103

        Unreviewed.

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

2021-07-19  Ryan Haddad  <ryanhaddad@apple.com>

        [build.webkit.org] lldb-webkit-test is failing on Catalina queues
        https://bugs.webkit.org/show_bug.cgi?id=227946

        Reviewed by Aakash Jain.

        The changes to lldb-webkit-test to support the Python 3 version of lldb present in the
        Big Sur-aligned Xcode have made it incompatible with Catalin's Python 2 version.

        Rather than creating and defending the results for two different versions of the lldb-webkit-test
        script, disable this test step for Catalina.

        * CISupport/build-webkit-org/factories.py:
        (TestFactory.__init__):

2021-07-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed infrastructure fix, remove bot that is out for hardware repair.

        * CISupport/ews-build/config.json:

2021-07-18  David Kilzer  <ddkilzer@apple.com>

        Ignore weak external symbols in clang coverage builds using check-for-weak-vtables-and-externals
        <https://webkit.org/b/228063>
        <rdar://problem/80477138>

        Reviewed by Alexey Proskuryakov.

        * Scripts/check-for-weak-vtables-and-externals:
        - Ignore weak symbols from llvm when building with
          coverage enabled.  This fixes the build.
        * coverage/coverage.xcconfig:
        (UNEXPORTED_SYMBOL_LDFLAGS_FOR_COVERAGE): Remove.
        - Can't use -unexported_symbol and -exported_symbol
          together, so remove this.

2021-07-16  Kate Cheney  <katherine_cheney@apple.com>

        WKWebView javascript injection doesn't work if app includes WKAppBoundDomains
        https://bugs.webkit.org/show_bug.cgi?id=227589
        <rdar://problem/80327452>

        Reviewed by Brent Fulgham.

        Added new tests. Removed localhost and 127.0.0.1 from the Info.plist
        to avoid false positive tests. Replace them with other domains so we
        still test the max count.

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

2021-07-16  Alex Christensen  <achristensen@webkit.org>

        Prevent HSTS tracking mitigation for top level navigation requests
        https://bugs.webkit.org/show_bug.cgi?id=227936

        Reviewed by Brady Eidson.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/HSTS.mm: Added.
        (TestWebKitAPI::hasRadar80550123):
        (TestWebKitAPI::hstsWebViewAndDelegate):
        (TestWebKitAPI::hstsServer):
        (TestWebKitAPI::TEST):

2021-07-16  Alex Christensen  <achristensen@webkit.org>

        Network access prevention SPI should prevent preconnecting, and it should first allow injected bundle to change request
        https://bugs.webkit.org/show_bug.cgi?id=228044
        <rdar://72995136>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Preconnect.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeChangingPlugIn.mm: Added.
        (-[SchemeChangingPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[SchemeChangingPlugIn webProcessPlugInBrowserContextController:frame:willSendRequest:redirectResponse:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

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

        Unreviewed, reverting r279916.
        https://bugs.webkit.org/show_bug.cgi?id=228037

        some of tests are timing out

        Reverted changeset:

        "Convert small JIT pool tests into executable fuzzing"
        https://bugs.webkit.org/show_bug.cgi?id=226279
        https://commits.webkit.org/r279916

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

        [webkitscmpy] Provide API to access SVN cache
        https://bugs.webkit.org/show_bug.cgi?id=228000
        <rdar://problem/80646471>

        Reviewed by Dewei Zhu.

        Create a Svn cache with the same API as the Git cache. This allows
        git and svn to share logic when inserting identifiers in `log` and `blame`.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.Cache.path): Path to cahce file.
        (Svn.Cache.populate): Fill cache from `svn log` operation.
        (Svn.Cache.to_hash): Svn is unaware of hashes, and can never map them.
        (Svn.Cache.to_revision): Map identifiers to revisions.
        (Svn.Cache.to_identifier): Map revisions to identifiers.
        (Svn.__init__): Use cache object instead of _metadata_cache.
        (Svn._commit_count): Access cache object.
        (Svn._branch_for): Ditto.
        (Svn.commit): Ditto.
        (Svn._cache_path): Deleted.
        (Svn._cache_revisions): Deleted.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_revision_cache):

2021-07-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] RealtimeMediaSourceCenter and VideoEncoder are not libwebrtc-specific
        https://bugs.webkit.org/show_bug.cgi?id=228020

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py:

2021-07-16  Angelos Oikonomopoulos  <angelos@igalia.com>

        Bundle libraries for remote execution in run-jsc-benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=227579

        Reviewed by Carlos Alberto Lopez Perez.

        Similarly to run-jsc-stress-tests, introduce a bundling step that
        ships all library dependencies to the remote system when using
        run-jsc-benchmarks --remote.

        This patch factors out the code to
        - lookup the ELF interpreter/libraries and to
        - strip the rpath and create a wrapper script
        from generate-bundle and places it webkitpy/binary_bundling.

        It also introduces a simpler script that only bundles a single
        binary (bundle-binary) and switches run-jsc-benchmarks and
        run-jsc-stress-tests to use it.

        It also updates run-jsc-benchmark to propagate any environment
        variables intended for consumption by the JSC binary.

        * Scripts/generate-bundle: Factor out reusable bundling code.
        * Scripts/run-jsc-benchmarks: Do bundling and variable propagation.
        * Scripts/run-jsc-stress-tests: Switch to bundle-binary.
        * Scripts/webkitpy/binary_bundling/__init__.py: Added.
        * Scripts/webkitpy/binary_bundling/bundle.py: Added.
        (BinaryBundler):
        (BinaryBundler.__init__):
        (BinaryBundler.destination_dir):
        (BinaryBundler.copy_and_remove_rpath):
        (BinaryBundler.generate_wrapper_script):
        * Scripts/webkitpy/binary_bundling/ldd.py: Added.
        (SharedObjectResolver):
        (SharedObjectResolver.__init__):
        (SharedObjectResolver._run_cmd_and_get_output):
        (SharedObjectResolver._get_interpreter_objname):
        (SharedObjectResolver._get_libs_and_interpreter):
        (SharedObjectResolver._ldd_recursive_get_libs_and_interpreter):
        (SharedObjectResolver.get_libs_and_interpreter):

        * Scripts/bundle-binary: Added.
        * Scripts/generate-bundle:
        * Scripts/run-jsc-benchmarks:
        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitpy/binary_bundling/__init__.py: Added.
        * Scripts/webkitpy/binary_bundling/bundle.py: Added.
        (BinaryBundler):
        (BinaryBundler.__init__):
        (BinaryBundler.destination_dir):
        (BinaryBundler.copy_and_remove_rpath):
        (BinaryBundler.generate_wrapper_script):
        * Scripts/webkitpy/binary_bundling/ldd.py: Added.
        (SharedObjectResolver):
        (SharedObjectResolver.__init__):
        (SharedObjectResolver._run_cmd_and_get_output):
        (SharedObjectResolver._get_interpreter_objname):
        (SharedObjectResolver._get_libs_and_interpreter):
        (SharedObjectResolver._ldd_recursive_get_libs_and_interpreter):
        (SharedObjectResolver.get_libs_and_interpreter):

2021-07-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] LibWebRTC files should be in libwebrtc/gstreamer
        https://bugs.webkit.org/show_bug.cgi?id=227991

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py:

2021-07-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, update my status in contributors.json to reviewer.

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

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

        Add unit-tests for InstallBuiltProduct step
        https://bugs.webkit.org/show_bug.cgi?id=227990

        Reviewed by Philippe Normand.

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

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

        [iOS]TestWebKitAPI.InAppBrowserPrivacy.AppBoundDomainAllowsServiceWorkers is failing
        https://bugs.webkit.org/show_bug.cgi?id=227918
        <rdar://problem/80535625>

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm: Disabled the test for now to speed up EWS.

2021-07-14  Brent Fulgham  <bfulgham@apple.com>

        [iOS & Mac Big Sur Release] Two SOAuthorizationSubFrame API tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=227925
        <rdar://problem/80543830>

        Reviewed by Kate Cheney.

        In Bug 227729 I added a number of extra tests that an Extensible SSO delegate method
        was called. I did a search/paste and added them to all SSO flows without much detailed
        analysis. Testing shows that on Simulator, these delegate are not always called, perhaps
        because the test case involves loads to live websites that might take longer than the
        hard-coded timeout used to move to the next step of the test.

        Because these failures are slowing down our EWS, I'm removing these two checks. We
        can consider adding them back if we need such checks in the future.

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

2021-07-14  Kevin Neal  <kevin_neal@apple.com>

        [Tools] linkify first line of commit message in tooltip
        https://bugs.webkit.org/show_bug.cgi?id=227968
        <rdar://problem/80596878>

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale):

2021-07-14  Keith Miller  <keith_miller@apple.com>

        Convert small JIT pool tests into executable fuzzing
        https://bugs.webkit.org/show_bug.cgi?id=226279

        Reviewed by Michael Saboff.

        Right now, we try to test our engine on a small JIT pool. This isn't a known configuration for any
        actual ports and causes issues if we run out of JIT memory when we need to compile an OSR exit.
        Instead of testing such a small pool we should just fuzz each executable allocation that says it
        can fail.

        The current fuzzing doesn't do a good job tracking the number of DFG/FTL compiles when allocations
        fail, so when enabled those tests will just exit early. Also, right now we use a random seed picked
        by the engine for these tests, which makes it hard to reproduce crashes on the bots. If we see
        flakiness on the bots we can have the harness pass in a number so it gets logged in the repro command.

        * Scripts/jsc-stress-test-helpers/js-executable-allocation-fuzz:
        * Scripts/run-jsc-stress-tests:

2021-07-14  Aakash Jain  <aakash_jain@apple.com>

        Add step name and description to InstallBuiltProduct build step
        https://bugs.webkit.org/show_bug.cgi?id=227935

        Reviewed by Carlos Alberto Lopez Perez.

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

2021-07-13  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Handle failed `git log` process
        https://bugs.webkit.org/show_bug.cgi?id=227709
        <rdar://problem/80520002>

        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.Cache.populate): Do not populate cache if `git log` fails.

2021-07-13  Alex Christensen  <achristensen@webkit.org>

        >4K Referer should have tailing /
        https://bugs.webkit.org/show_bug.cgi?id=227795

        Reviewed by Chris Dumez.

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

2021-07-13  Said Abou-Hallawa  <said@apple.com>

        [CG] REGRESSION(r278863): The destination rectangle is truncated when the sub-image is used
        https://bugs.webkit.org/show_bug.cgi?id=227614
        <rdar://79840643>

        Reviewed by Simon Fraser.

        Add an API test to test drawing an ImageBuffer into another and both
        have the logicalSize scaled such that they have pixels.

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

2021-07-13  Kevin Neal  <kevin_neal@apple.com>

        [results.webkit.org] linkify urls in commit messages
        https://bugs.webkit.org/show_bug.cgi?id=227549
        <rdar://problem/79988762>

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (thead.tbody.rows.map.):
        (thead.tbody.rows.map):
        (CommitTable):
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/common.js:


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

        [build.webkit.org] Upload layout-tests results immediately after running layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=227889

        Reviewed by Carlos Alberto Lopez Perez.

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

2021-07-13  Kate Cheney  <katherine_cheney@apple.com>

        Allow layout tests to specify app initiated loads or not
        https://bugs.webkit.org/show_bug.cgi?id=227825
        <rdar://problem/80355582>

        Reviewed by Brent Fulgham.

        Add a test option that specifies whether the test should mark the
        main page navigation as app-initiated or not.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        (WTR::TestOptions::keyTypeMapping):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::isAppInitiated const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2021-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Expose support for client certificate auth
        https://bugs.webkit.org/show_bug.cgi?id=200805

        Reviewed by Michael Catanzaro.

        Add a simple implementation in MiniBrowser using a file chooser to ask for the certificate from a file and unit
        tests for the client certificate request. Unfortunately we can't easily test pin certificates.

        * MiniBrowser/gtk/BrowserTab.c:
        (certificateDialogResponse):
        (webViewAuthenticate):
        (browserTabConstructed):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (ClientSideCertificateTest::acceptCertificateCallback):
        (ClientSideCertificateTest::requestStartedCallback):
        (ClientSideCertificateTest::authenticateCallback):
        (ClientSideCertificateTest::ClientSideCertificateTest):
        (ClientSideCertificateTest::~ClientSideCertificateTest):
        (ClientSideCertificateTest::authenticate):
        (ClientSideCertificateTest::acceptCertificate):
        (ClientSideCertificateTest::waitForAuthenticationRequest):
        (testClientSideCertificate):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:
        (WebKitTestServer::soupServer const):

2021-07-12  Filip Pizlo  <fpizlo@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>

        New malloc algorithm
        https://bugs.webkit.org/show_bug.cgi?id=226404

        Reviewed by Yusuke Suzuki.

        Disable the IsoHeap tests if we're using libpas. Libpas has its own tests.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:

2021-07-12  Garrett Davidson  <garrett_davidson@apple.com>

        _WKWebAuthenticationPanel escapes slashes in origin
        https://bugs.webkit.org/show_bug.cgi?id=227724
        rdar://80232742

        Reviewed by Kate Cheney.

        Update both the makeCredential and getAssertion tests to use an origin.

        WebAuthenticationPanel.GetAssertionLA:
        This test wasn't using an origin or RPID. Update it to use both. This means both
        clientDataJSON and authenticatorData changed. Update both to the new expected
        values, using as much plaintext as possible.

        WebAuthenticationPanel.MakeCredentialLA:
        This test should have caught this issue, but the origin being passed here isn't
        valid, because it didn't have a scheme. Per the WebAuthn spec, origins used by
        WebAuthn MUST start with "https://". Also update this test to use plaintext
        instead of base64 for clientDataJSON.

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

2021-07-12  Tim Horton  <timothy_horton@apple.com>

        BifurcatedGraphicsContext can't draw text
        https://bugs.webkit.org/show_bug.cgi?id=227883

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Add a test ensuring that we get DrawGlyphs commands on both contexts.

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

        [run-api-tests] Use Python 3 (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=225427
        <rdar://problem/77584713>

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/steps.py:
        (RunAPITests): Use Python3 to invoke run-api-tests.
        * CISupport/ews-build/steps.py:
        (RunAPITests): Use Python3 to invoke run-api-tests.
        * CISupport/ews-build/steps_unittest.py:

2021-07-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add a new GTK layout tester bot to build.webkit.org that runs with --skip-failing-tests switch
        https://bugs.webkit.org/show_bug.cgi?id=227744

        Reviewed by Jonathan Bedard.

        On the EWS the layout tests run with this switch --skip-failing-tests
        which changes the order in which tests are run (those expected to fail
        are not scheduled). I think this may be causing different results on
        other tests (like unexpected failures or unexpected flakies).
        Having a bot in build.webkit.org running with this switch will help
        to detect and garden those cases.

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

2021-07-12  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Incorrect deprecation declaration for -[WKWebView closeAllMediaPresentations:]
        https://bugs.webkit.org/show_bug.cgi?id=227860
        <rdar://80376777>

        Reviewed by Sam Weinig.

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

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

        [watchOS] Make a few additional adjustments to support system minimum layout margins
        https://bugs.webkit.org/show_bug.cgi?id=227859
        rdar://80113612

        Reviewed by Tim Horton.

        Add support for simulating arbitrary horizontal (trailing and leading) values for `-systemMinimumLayoutMargin`
        in WebKitTestRunner, via a new "horizontalSystemMinimumLayoutMargin" test option. By default, this is 0.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        (WTR::TestOptions::keyTypeMapping):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::horizontalSystemMinimumLayoutMargin const):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[PlatformWebViewController systemMinimumLayoutMargins]):

        Override this UIViewController method and replace the leading and trailing layout margin values with the values
        from test options.

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

        Additionally make a slight adjustment here to avoid calling `-setContentInset` on the scroll view in between
        tests if the content insets aren't changing. This is needed in order for the new layout test to work on watchOS.

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

        SVGImageForContainer reports true for is<SVGImage>() but it doesn't inherit from SVGImage
        https://bugs.webkit.org/show_bug.cgi?id=227807

        Reviewed by Said Abou-Hallawa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/SVGImageCasts.cpp: Added.
        (TestWebKitAPI::TEST):

2021-07-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitcorepy] run-webkit-tests may hang with python2 after r271683
        https://bugs.webkit.org/show_bug.cgi?id=227715

        Reviewed by Philippe Normand.

        When an exception is raised from a worker if the workers are terminated
        via a SIGKILL signal that later causes the task-queue to hang at close().
        The issue is not reproducible with python3. So keep the same behaviour for
        python3, and for python2 just use terminate() to stop the workers.

        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (TaskPool.__exit__):

2021-07-08  Yijia Huang  <yijia_huang@apple.com>

        Add Yijia Huang as a committer
        https://bugs.webkit.org/show_bug.cgi?id=227814

        Unreviewed.

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

2021-07-08  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Expose SPI to opt out of Extensible SSO authentication
        https://bugs.webkit.org/show_bug.cgi?id=227729
        <rdar://problem/75647892>

        Reviewed by Tim Horton.

        Add a new test to confirm that Extenstible SSO authentication flows are bypassed when the new WKPreference
        is used. Updated other tests to confirm that the SSO delegate is called when expected.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate _webView:decidePolicyForSOAuthorizationLoadWithCurrentPolicy:forExtension:completionHandler:]):
        (resetState):
        (TestWebKitAPI::TEST):

2021-07-08  Kate Cheney  <katherine_cheney@apple.com>

        Clean up App Privacy Report code
        https://bugs.webkit.org/show_bug.cgi?id=227326
        <rdar://problem/79696849>

        Reviewed by Brent Fulgham.

        Delete testing functions related to attribution context. Move App
        Privacy Report tests into their own file.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReport.mm: Added.
        (TEST):
        (catch):
        (function):
        (-[SWAppInitiatedRequestMessageHandler userContentController:didReceiveScriptMessage:]):
        * TestWebKitAPI/Tests/WebKitCocoa/AppPrivacyReportPlugIn.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacyPlugIn.mm.
        (-[AppPrivacyReportPlugIn webProcessPlugInBrowserContextController:frame:willSendRequestForResource:request:redirectResponse:]):
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[SWAppBoundRequestMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/app-privacy-report-iframe.html: Added.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::didLoadAppInitiatedRequest):
        (WTR::TestRunner::didLoadNonAppInitiatedRequest):
        (WTR::TestRunner::appBoundRequestContextDataForDomain): Deleted.
        (WTR::TestRunner::callDidReceiveAppBoundRequestContextDataForDomainCallback): Deleted.
        (WTR::TestRunner::didLoadAppBoundRequest): Deleted.
        (WTR::TestRunner::didLoadNonAppBoundRequest): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didLoadAppInitiatedRequest):
        (WTR::TestController::didLoadNonAppInitiatedRequest):
        (WTR::TestController::clearAppPrivacyReportTestingData):
        (WTR::TestController::appBoundRequestContextDataForDomain): Deleted.
        (WTR::TestController::didLoadAppBoundRequest): Deleted.
        (WTR::TestController::didLoadNonAppBoundRequest): Deleted.
        (WTR::TestController::clearAppBoundNavigationData): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveAppBoundRequestContextDataForDomain): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::didLoadAppInitiatedRequest):
        (WTR::TestController::didLoadNonAppInitiatedRequest):
        (WTR::TestController::clearAppPrivacyReportTestingData):
        (WTR::TestController::appBoundRequestContextDataForDomain): Deleted.
        (WTR::TestController::didLoadAppBoundRequest): Deleted.
        (WTR::TestController::didLoadNonAppBoundRequest): Deleted.
        (WTR::TestController::clearAppBoundNavigationData): Deleted.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didLoadAppInitiatedRequest:]):
        (-[TestRunnerWKWebView _didLoadNonAppInitiatedRequest:]):
        (-[TestRunnerWKWebView _appBoundNavigationDataForDomain:completionHandler:]): Deleted.
        (-[TestRunnerWKWebView _didLoadAppBoundRequest:]): Deleted.
        (-[TestRunnerWKWebView _didLoadNonAppBoundRequest:]): Deleted.

2021-07-08  Garrett Davidson  <garrett_davidson@apple.com>

        Update the WebAuthenticationPanel.GetAssertionLA test to expect the right value
        https://bugs.webkit.org/show_bug.cgi?id=227726
        rdar://80073404

        Reviewed by Kate Cheney.

        This test covers the changed code, but expects the wrong value. The existing
        expectation was the base64 encoded string:

        {"challenge":"AQIDBAECAwQBAgMEAQIDBAECAwQBAgMEAQIDBAECAwQ","origin":"","type":"webauthn.create"}

        The "type" field is clearly incorrect here. Update the test to expect the right
        value, and change the expectation to a plaintext string instead of base64 encoded,
        to make issues like this easier to spot in the future.


        While here, also remove an outdated comment.

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

2021-07-07  John Wilander  <wilander@apple.com>

        PCM: Add error logging for CryptoKit operations
        https://bugs.webkit.org/show_bug.cgi?id=227731
        <rdar://80221057>

        Reviewed by Brent Fulgham.

        Resolves three FIXMEs for error logging in PCM's CryptoKit operations.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):
            Now expects an optional string instead of a bool from the function
            calls which means EXPECT_TRUE has become EXPECT_FALSE. The optional
            string is non-nullopt if it carries an error message.
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):
            Now expects an optional string instead of a bool from the function
            calls which means EXPECT_TRUE has become EXPECT_FALSE. The optional
            string is non-nullopt if it carries an error message.

2021-07-07  John Wilander  <wilander@apple.com>

        PCM: API test PrivateClickMeasurement.ValidBlindedSecret is failing on platforms with RSABSSA
        https://bugs.webkit.org/show_bug.cgi?id=227777
        <rdar://80291822>

        Reviewed by Kate Cheney.

        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):
           The test was looking for the value of JSON key "source_secret_token"
           which should be "source_unlinkable_token". This patch fixes that and
           renames the local variable accordingly.

2021-07-07  Ling Ho  <lingho@apple.com>

        Remove proxy server setting from Buildbot configuration
        https://bugs.webkit.org/show_bug.cgi?id=227768

        Reviewed by Aakash Jain.

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

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

        [build.webkit.org] Add unit-tests for RunWebKit1Tests
        https://bugs.webkit.org/show_bug.cgi?id=227658

        Reviewed by Alexey Proskuryakov.

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

2021-07-06  Harshil Ratnu  <hratnu@apple.com>

        Add myself (Harshil Ratnu) to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=227653

        Reviewed by Devin Rousso.

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

2021-07-06  Alex Christensen  <achristensen@webkit.org>

        loadSimulatedRequest: should do same delegate callbacks as loadHTMLString and loadData
        https://bugs.webkit.org/show_bug.cgi?id=227599

        Reviewed by Chris Dumez.

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

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

        [GTK] Installs in wrong directory on the bots
        https://bugs.webkit.org/show_bug.cgi?id=227684

        Reviewed by Aakash Jain.

        The patch landed in r279563 induced a typo in the installation prefix path option passed to
        build-webkit. Then the built-product-archive was failing to find the header andn pkgconfig
        files to pack. This patch fixes the issue.

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

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

        [GTK] Pack header and .pc files in the built-product archive
        https://bugs.webkit.org/show_bug.cgi?id=227526

        Reviewed by Michael Catanzaro.

        The header files and pkg-config files needed to build WebKitGTK apps are now included in the
        built product zip file. As they're text files the impact on the zip size should not be
        significant. In order to support this, two changes are introduced for the GTK build bot:

        - build-webkit is now called with a --prefix option
        - a new build step has been added, which installs the built files in the given prefix directory

        Then built-product-archive can simply pack files from the install prefix directory.

        Additionally the .a (potentially big) files are now excluded from the zip archive.

        * CISupport/build-webkit-org/factories.py:
        (BuildFactory.__init__):
        * CISupport/build-webkit-org/steps.py:
        (CompileWebKit.start):
        (InstallBuiltProduct):
        * CISupport/built-product-archive:
        * Scripts/install-built-product: Added.

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

        [iOS] Augment -_webView:didNotHandleTapAsMeaningfulClickAtPoint: to include meaningful taps
        https://bugs.webkit.org/show_bug.cgi?id=227666
        rdar://80094962

        Reviewed by Tim Horton.

        Update the layout test harness to use the replacement SPI instead of the newly deprecated SPI. See
        WebKit/ChangeLog for more details.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installDidHandleTapCallback):
        (WTR::TestRunner::callDidHandleTapCallback):
        (WTR::TestRunner::installDidNotHandleTapAsMeaningfulClickCallback): Deleted.
        (WTR::TestRunner::callDidNotHandleTapAsMeaningfulClickCallback): Deleted.

        Rename this to just DidHandleTapCallback, and make it take a boolean argument indicating whether the tap was
        handled as a meaningful click.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didHandleTap):
        (WTR::TestController::didNotHandleTapAsMeaningfulClick): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didHandleTap):
        (WTR::TestInvocation::didNotHandleTapAsMeaningfulClick): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didTapAtPoint:withResult:]):
        (-[TestRunnerWKWebView _didNotHandleTapAsMeaningfulClickAtPoint:]): Deleted.

2021-07-04  Ben Nham  <nham@apple.com>

        Add support for parsing Competitive PLT results to compare-results
        https://bugs.webkit.org/show_bug.cgi?id=227470

        Reviewed by Per Arne Vollan.

        Modify the script to understand the competitive PLT JSON results produced by the perf bots.

        * Scripts/compare-results:
        (plt5Breakdown):
        (competitivePLTBreakdown):
        (PLT5Results):
        (detectCompetitivePLT):
        (CompetitivePLTResults):
        (CompetitivePLTResults.calculate_time_for_run):
        (detectBenchmark):
        (biggerIsBetter):
        (main):

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

        Delete unused BuildSlaveSupport symlink
        https://bugs.webkit.org/show_bug.cgi?id=227644

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport: Symlink removed.

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

        Unreviewed, reverting r279494.
        https://bugs.webkit.org/show_bug.cgi?id=227628

        Broke api test
        TestWebKitAPI.WKWebView.LoadSimulatedRequestUpdatesBackForwardList

        Reverted changeset:

        "loadSimulatedRequest: should do same delegate callbacks as
        loadHTMLString and loadData"
        https://bugs.webkit.org/show_bug.cgi?id=227599
        https://commits.webkit.org/r279494

2021-07-02  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] media/event-attributes.html fails if mixer is not at 100%
        https://bugs.webkit.org/show_bug.cgi?id=83704

        Reviewed by Philippe Normand.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): GStreamer
        ports use fakesink to avoid sound output and setting the page
        volume to 0 creates trouble with volume events. Let's avoid it in
        GStreamer ports.

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

        [run-webkit-tests] Set software_variant from runtime
        https://bugs.webkit.org/show_bug.cgi?id=227600
        <rdar://problem/80052263>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType._define_software_variant_from_hardware_family):
        (DeviceType.check_consistency):
        (DeviceType.__contains__):
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_from_string):
        (DeviceTypeTest.test_contained_in):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_device_with_runtime):

2021-07-01  Alex Christensen  <achristensen@webkit.org>

        loadSimulatedRequest: should do same delegate callbacks as loadHTMLString and loadData
        https://bugs.webkit.org/show_bug.cgi?id=227599

        Reviewed by Chris Dumez.

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

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

        [webkitscmpy] Cache identifiers in Git checkouts (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=225616
        <rdar://problem/77789230>

        Reviewed by Dewei Zhu.

        Python 2's Subprocess is 10x slower than Python 3, which means generating
        the cache is impractical in Python 2.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.__init__): Disable cache on Python 2 by default.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (test_cache): Force Git to use cache.
        (test_revision_cache): Ditto.

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

        [clean-webkit] Exclude autoinstalled directory
        https://bugs.webkit.org/show_bug.cgi?id=227588
        <rdar://problem/80033943>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.discard_untracked_files): Never discard the autoinstalled directory.

2021-07-01  Ryan Haddad  <ryanhaddad@apple.com>

        [Stress Test EWS] Temporarily disable GuardMalloc test mode to avoid false positives
        https://bugs.webkit.org/show_bug.cgi?id=227595

        Reviewed by Aakash Jain.

        Since the infrastructure issue in webkit.org/b/227365 is causing false positives on this queue,
        disable it until we can investigate and address the root cause.

        * CISupport/ews-build/factories.py:
        (StressTestFactory.__init__):
        * CISupport/ews-build/factories_unittest.py:
        (TestStressTestFactory.test_stress_test_factory):

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

        Selecting or dragging images that contain recognizable text is difficult in Mail compose
        https://bugs.webkit.org/show_bug.cgi?id=227544

        Reviewed by Devin Rousso.

        See WebKit/ChangeLog for more details.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:

        Link against VisionKitCore on iOS 15+ and macOS 12+.

        * TestWebKitAPI/Configurations/WebKitTargetConditionals.xcconfig:

        Update WebKitTargetConditionals to be consistent with the other target conditions in WebKit, so that we can use
        `IOS_SINCE_15` in TestWebKitAPI.xcconfig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ImageAnalysisTests.mm: Added.

        Add new API tests that trigger the image analysis gesture recognizer and check whether or not we requested image
        analysis from VisionKit.

        (TestWebKitAPI::swizzledLocationInView):
        (TestWebKitAPI::swizzledProcessRequest):

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

        [WPE] Pack Cog modules in built-product archive
        https://bugs.webkit.org/show_bug.cgi?id=227527

        Reviewed by Žan Doberšek.

        * CISupport/built-product-archive: Cog now ships its platform plugins in a dedicated modules
        directory, which we need to include in the zip archive.

2021-06-30  Chris Dumez  <cdumez@apple.com>

        Regression(r278737): WebContent crash when calling [WKWebView loadHTMLString:] with an invalid URL
        https://bugs.webkit.org/show_bug.cgi?id=227560
        <rdar://79815425>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2021-06-30  Saam Barati  <sbarati@apple.com>

        Turn off data ICs by default
        https://bugs.webkit.org/show_bug.cgi?id=227334
        <rdar://problem/79802812>

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

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

        [webkitscmpy] Cache identifiers in Git checkouts
        https://bugs.webkit.org/show_bug.cgi?id=225616
        <rdar://problem/77789230>

        Reviewed by Dewei Zhu.

        Computing identifiers in git can be slow, especially if you need to compute
        multiple. Caching all identifiers for a branch is not much more expensive than calculating a single identifier. Additionally, caching all identifiers
        lets us build a performant subversion mapping, bypassing git-svn.

        * Scripts/libraries/webkitcorepy/setup.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.Cache): Class holding a cache allowing quick mapping between hashes, identifiers and revisions.
        (Git.Cache.__init__): Load cache from json file on disk.
        (Git.Cache.path): Path to location of cache on disk.
        (Git.Cache._fill): Populate revision and hash to identifier dictionaries.
        (Git.Cache.populate): Parse git-log and populate cache.
        (Git.Cache.hash): Given an identifier or revision, find the hash.
        (Git.Cache.revision): Given an identifier or hash, find the revision.
        (Git.Cache.identifier): Given a hash or revision, determine the identifier.
        (Git.__init__): Instantiate cache.
        (Git.commit): Check cache before running expensive commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Add `git log` mock.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_tag): Surpress logging.
        (TestGit.test_checkout): Ditto.
        (TestGit.test_no_log): Ditto.
        (TestGit.test_order): Ditto.
        (test_cache): Verify identifier cache.
        (test_revision_cache): Verify revision cache.
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (SummarizedResultsTest.test_svn_revision_git): Surpress logging.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_commits_for_upload_git_svn): Surpress logging.

2021-06-30  Megan Gardner  <megan_gardner@apple.com>

        Add ID and versioning support for AppHighlights
        https://bugs.webkit.org/show_bug.cgi?id=227279

        Reviewed by Tim Horton.

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

2021-06-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Live Text] "Text from Camera" should not be shown in callout bar when selecting text
        https://bugs.webkit.org/show_bug.cgi?id=227535
        rdar://79936981

        Reviewed by Devin Rousso.

        Add an API test to exercise the change. See WebKit ChangeLog for more detail.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        (canPerformActionWithSender):
        (TEST):

2021-06-30  Zhifei Fang  <zhifei_fang@apple.com>

        [webkit.css] make the active tab more obvious
        https://bugs.webkit.org/show_bug.cgi?id=227515

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.tabs .tab.active .link):

2021-06-29  Zhifei Fang  <zhifei_fang@apple.com>

        Add new argument of device os version for reporting JavaScriptCore test result
        https://bugs.webkit.org/show_bug.cgi?id=227363

        Reviewed by Dewei Zhu.

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

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

        [webkitcorepy] Add NestedFuzzyDict
        https://bugs.webkit.org/show_bug.cgi?id=227150
        <rdar://problem/79475464>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/nested_fuzzy_dict.py: Added.
        (NestedFuzzyDict):
        (NestedFuzzyDict.assert_valid_key): Ensure that the provided key is fuzz-able.
        (NestedFuzzyDict.__init__): Construct the object the same way a dictionary is constructed.
        (NestedFuzzyDict.__getitem__): Split provided keyname and fuzzy match the second part.
        (NestedFuzzyDict.get): Ditto.
        (NestedFuzzyDict.getitem): Return the complete keyname and value.
        (NestedFuzzyDict.__setitem__): Add value to dictionary.
        (NestedFuzzyDict.update): Given a dictionary, insert it's contents into this object.
        (NestedFuzzyDict.keys): Iterate through all keys in the object.
        (NestedFuzzyDict.values): Iterate through all values in the object.
        (NestedFuzzyDict.items): Iterate through all key/value pairs in the object.
        (NestedFuzzyDict.dict): Return a standard dictionary with the contents of this object.
        (NestedFuzzyDict.__repr__):
        (NestedFuzzyDict.__str__):
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/nested_fuzzy_dict_unittest.py: Added.
        (TestNestedFuzzyDict):
        (TestNestedFuzzyDict.test_constructor):
        (TestNestedFuzzyDict.test_index):
        (TestNestedFuzzyDict.test_get):
        (TestNestedFuzzyDict.test_getitem):
        (TestNestedFuzzyDict.test_set):
        (TestNestedFuzzyDict.test_dict):

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

        [webkitcorepy] Add MeasureTime python tool
        https://bugs.webkit.org/show_bug.cgi?id=227313
        <rdar://problem/79689588>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Export MeasureTime object.
        * Scripts/libraries/webkitcorepy/webkitcorepy/measure_time.py: Added.
        (MeasureTime): Provide class which logs time elapsed in context.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/measure_time_unittest.py: Added.
        (MeasureTimeTests):

2021-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r279310): Occasional crash when focusing login fields on iPad with a software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=227472
        rdar://79876040

        Reviewed by Tim Horton.

        Make it possible to induce the crash (prior to the fix) by introducing two new testing primitives on iOS:

        -   `UIScriptController.suppressSoftwareKeyboard`, a readwrite attribute that can be used to suppress the
            appearance of the software keyboard on iOS by calling `-[WKWebView _setSuppressSoftwareKeyboard:]`.

        -   `UIScriptController.willStartInputSessionCallback`, a callback that is invoked when we're about to start a
            UI-process-side input session. On iOS, this corresponds to
            `-[_WKInputDelegate _webView:willStartInputSession:`].

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::suppressSoftwareKeyboard const):
        (WTR::UIScriptController::setSuppressSoftwareKeyboard):
        * TestRunnerShared/UIScriptContext/UIScriptControllerShared.cpp:
        (WTR::UIScriptController::setWillStartInputSessionCallback):
        (WTR::UIScriptController::willStartInputSessionCallback const):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):
        (-[TestRunnerWKWebView _webView:willStartInputSession:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Make sure that we revert `_suppressSoftwareKeyboard` to `NO`, in case a layout test ends while leaving this on,
        to prevent subsequent layout tests from behaving in unexpected ways.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::setWillStartInputSessionCallback):
        (WTR::UIScriptControllerIOS::suppressSoftwareKeyboard const):
        (WTR::UIScriptControllerIOS::setSuppressSoftwareKeyboard):

2021-06-28  W.D. Xiong  <w_xiong@apple.com>

        Add wdx to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=227466

        Unreviewed

        * Scripts/webkitpy/common/config/contributors.json: Add wdx as committer

2021-06-28  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add test suite with temp directory
        https://bugs.webkit.org/show_bug.cgi?id=227327
        <rdar://problem/79697909>

        Reviewed by Stephanie Lewis.

        We had some duplicated code which set up, then cleaned up a temporary
        directory associated with a test. This should really be owned by a
        base class shared between multiple test suites.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/testing.py: Added.
        (PathTestCase): Create a temporary directory before a test starts, delete it after.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:
        (TestCanonicalize): Adopt PathTestCase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/checkout_unittest.py:
        (TestCheckout): Adopt PathTestCase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        (TestFind): Adopt PathTestCase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit): Adopt PathTestCase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/scm_unittest.py:
        (TestScm): Adopt PathTestCase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/setup_git_svn_unittest.py:
        (TestSetupGitSvn): Adopt PathTestCase.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn): Adopt PathTestCase.

2021-06-28  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Fix race condition in TaskPool unittests 
        https://bugs.webkit.org/show_bug.cgi?id=227455
        <rdar://problem/79873003>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py:
        (TaskPoolUnittest.test_invalid_shutdown): Increase worker load to 5 seconds.

2021-06-28  Alex Christensen  <achristensen@webkit.org>

        RELEASE_ASSERT hit in NetworkSessionCocoa::removeWebSocketTask when using WKWebViewConfiguration._attributedBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=227420
        <rdar://79609212>

        Reviewed by Brady Eidson.

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

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

        Add helpers to create Spans from CFDataRef and NSData
        https://bugs.webkit.org/show_bug.cgi?id=227217

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/cf/SpanCF.cpp: Added.
        * TestWebKitAPI/Tests/WTF/cocoa/SpanCocoa.mm: Added.
        Add tests for new asBytes() overloads. 

2021-06-28  Philippe Normand  <pnormand@igalia.com>

        [webkitpy] Test timeouts not properly detected when running layout tests with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=227442

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/driver.py:
        (Driver._check_for_driver_timeout): out_line contains a byte string, so test it as such.

2021-06-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: add an option to enable the web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=227343

        Reviewed by Michael Catanzaro.

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

2021-06-28  Daniel Kolesa  <dkolesa@igalia.com>

        [GTK][WPE] Add libvpx to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=227437

        Reviewed by Philippe Normand.

        * jhbuild/jhbuild-minimal.modules:

2021-06-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] -[NSString _web_widthWithFont:] returns 0
        https://bugs.webkit.org/show_bug.cgi?id=227385
        <rdar://problem/79430938>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/StringWidth.mm: Added.
        (TEST):

2021-06-25  Ziran Sun  <zsun@igalia.com>

        Add myself to contributor list
        https://bugs.webkit.org/show_bug.cgi?id=227400

        Reviewed by Sergio Villar Senin.

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

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

        WKWebView loadSimulatedRequest does not set attribution value for url requests within html content
        https://bugs.webkit.org/show_bug.cgi?id=227266
        <rdar://problem/79316911>

        Reviewed by Brent Fulgham.

        API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-06-24  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB prints error log about blob files when there is no error
        https://bugs.webkit.org/show_bug.cgi?id=227092

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobThenDelete.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobToBeDeleted.html:

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

        [WPE] Uninstalled Cog now requires a COG_MODULEDIR environment variable
        https://bugs.webkit.org/show_bug.cgi?id=227351

        Reviewed by Adrian Perez de Castro.

        Renamed the cog_path() method to cog_path_to() which requires a file_or_directory argument.
        This is useful when setting the COG_MODULEDIR environment variable.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.cog_path_to):
        (WPEPort.browser_name):
        (WPEPort.browser_env):
        (WPEPort.run_minibrowser):
        (WPEPort.cog_path): Deleted.

2021-06-24  Martin Robinson  <mrobinson@webkit.org>

        [css-scroll-snap] Remove ENABLE_SCROLL_SNAP compile-time option
        https://bugs.webkit.org/show_bug.cgi?id=227067

        Reviewed by Simon Fraser.

        Remove compile-time ENABLE_SCROLL_SNAP configuration option.

        * Scripts/webkitperl/FeatureList.pm: Remove the option from the list of features.

2021-06-24  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] media/muted-video-is-playing-audio.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=208321

        Reviewed by Xabier Rodriguez-Calvar.

        Set the WebKitTestRunnerWPE application name on user-agent to ease the
        detection of the WPE port from the layout tests using the isWPE()
        function in platform-helper.js.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformConfigureViewForTest): Set WebKitTestRunnerWPE application name on user-agent.

2021-06-23  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] WebKitGLibAPITestsCore should more explicitly link against library dependencies
        https://bugs.webkit.org/show_bug.cgi?id=227288

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/glib/CMakeLists.txt: Set up the WebKitGLibAPITestsCore_LIBRARIES
        variable, use that for the target_link_libraries() call for the
        WebKitGLibAPITestsCore target.
        * TestWebKitAPI/glib/PlatformWPE.cmake: Extent the new variable to also
        explicitly include Cairo and WPEToolingBackends libraries.

2021-06-23  Kate Cheney  <katherine_cheney@apple.com>

        Migrate App Privacy Report code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227045
        <rdar://problem/74333287>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-06-23  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility support for image text recognition.
        https://bugs.webkit.org/show_bug.cgi?id=224280
        rdar://76348740

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::children const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::children const):
        (WTR::AccessibilityUIElement::imageOverlayElements const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::children const):
        (WTR::AccessibilityUIElement::imageOverlayElements const):

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

        Update WPT tools from upstream
        https://bugs.webkit.org/show_bug.cgi?id=227255

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__):
        The WPT server requires Python v3 to run so fallback to python3 executable if
        the python executable is v2.

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

        [results.webkit.org] XSS vulnerability in configuration
        https://bugs.webkit.org/show_bug.cgi?id=227267
        <rdar://problem/74876210>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/drawer.js: Escape configuration specification.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-06-22  Saam Barati  <sbarati@apple.com>

        jitCompileAndSetHeuristics shouldn't return true when we fail to compile
        https://bugs.webkit.org/show_bug.cgi?id=227155

        Reviewed by Tadeu Zagallo.

        * Scripts/run-jsc-stress-tests:

2021-06-22  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r279083.

        Broke Mac Builds

        Reverted changeset:

        "Migrate App Privacy Report code from WebKitAdditions"
        https://bugs.webkit.org/show_bug.cgi?id=227045
        https://commits.webkit.org/r279083

2021-06-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        Functions dispatched to WorkQueue are sometimes destroyed in the calling thread due to block refcounting
        https://bugs.webkit.org/show_bug.cgi?id=227160

        Reviewed by Antti Koivisto.

        Test that the Function passed to WorkQueue::dispatch
        is always destroyed in the WorkQueue. Test by using the
        knowledge that WorkQueues use threads.
        Start up many WorkQueues to create more thread contention
        to ensure that the dispatched-from thread is sometimes not
        run while the thread of the queue finishes processing
        the dispatch.

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

2021-06-22  Kimmo Kinnunen  <kkinnunen@apple.com>

        Test runner parses the names of value parametrised GTEST tests wrong
        https://bugs.webkit.org/show_bug.cgi?id=227207

        Reviewed by Jonathan Bedard.

        Fix the parsing of test names.
        * Scripts/webkitpy/api_tests/manager_unittest.py:
        Add a test for the parsing.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._test_list_from_output):
        Fix the test name parsing.
        The name is printed as:
          ValueParametrizedTestsSupported/DogGreen  # GetParam() = (Dog, Green)

        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::TestParametersToStringFormatter::operator() const):
        Add a general-purpose formatter for all value-parametrized tests
        to use.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/Misc/TestRunnerTests.cpp: Added.
        (TestWebKitAPI::TEST_P):
        Add a value-parametrized test testing the test runner.

2021-06-21  Chris Dumez  <cdumez@apple.com>

        [WK2] Don't process-swap on navigations within the same non-HTTP(s) protocol
        https://bugs.webkit.org/show_bug.cgi?id=227220
        <rdar://79106461>

        Unreviewed follow-up to fix GTK test that started failing after the behavior
        change in r279079.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionPageID):

2021-06-21  Jonathan Bedard  <jbedard@apple.com>

        [results.webkit.org] XSS vulnerability in test name
        https://bugs.webkit.org/show_bug.cgi?id=227235
        <rdar://problem/77851775>

        Reviewed by Alexey Proskuryakov.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/archiveRouter.js:
        (_ArchiveRouter.prototype.labelFor): Escape any HTML in a potential label.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/common.js:
        (escapeHTML): If an object is undefined, don't attempt to escape it.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.toString): Escape configuration parameters.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/investigate.html:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/search.html:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/suite_results.html:
        * Scripts/libraries/resultsdbpy/setup.py:

2021-06-21  Kate Cheney  <katherine_cheney@apple.com>

        Migrate App Privacy Report code from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=227045
        <rdar://problem/74333287>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-06-21  Chris Dumez  <cdumez@apple.com>

        [WK2] Don't process-swap on navigations within the same non-HTTP(s) protocol
        https://bugs.webkit.org/show_bug.cgi?id=227220

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2021-06-21  Alex Christensen  <achristensen@webkit.org>

        Break ref cycle between API::HTTPCookieStore and WebKit::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=226992

        Reviewed by Chris Dumez.

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

2021-06-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        makeUnique cannot be used to instantiate function-local classes
        https://bugs.webkit.org/show_bug.cgi?id=227163

        Reviewed by Antti Koivisto.

        Test that WTF_MAKE_FAST_ALLOCATED and similar macros work in function
        local classes.

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

2021-06-21  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r275496): WebSocket Message too long when message is larger than 1mb
        https://bugs.webkit.org/show_bug.cgi?id=227030
        <rdar://problem/79370994>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebSocket.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::Connection::receiveBytes const):

2021-06-21  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Adopt autoinstaller (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=227096
        <rdar://problem/79418080>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/resultsdbpy/container: Fix libraries path.
        * Scripts/libraries/resultsdbpy/run: Ditto.
        * Scripts/libraries/resultsdbpy/run-tests: Ditto.

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

        Unreviewed, reverting r278699.
        https://bugs.webkit.org/show_bug.cgi?id=227174

        Regressed JetStream2/WSL

        Reverted changeset:

        "[JSC] Remove useDataICInOptimizingJIT option"
        https://bugs.webkit.org/show_bug.cgi?id=226862
        https://trac.webkit.org/changeset/278699

2021-06-18  Philippe Normand  <pnormand@igalia.com>

        [MSE][GStreamer] Soundcloud serves MP4 audio with empty tfdt boxes
        https://bugs.webkit.org/show_bug.cgi?id=191419

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): Add a test for the soundcloud quirk.

2021-06-17  Mark Lam  <mark.lam@apple.com>

        Define MacroAssemblerARM64E::numberOfPACBits based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH).
        https://bugs.webkit.org/show_bug.cgi?id=227147
        rdar://78785309

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/Packed.cpp:

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

        [Win] WTF.ParseInteger and WTF.ParseIntegerAllowingTrailingJunk are failing
        https://bugs.webkit.org/show_bug.cgi?id=227090

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::AllowMixedSignednessTest::run):

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

        [resultsdbpy] Adopt autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=227096
        <rdar://problem/79418080>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/resultsdbpy/container: Moved from insdie library.
        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Register required libraries.
        * Scripts/libraries/resultsdbpy/resultsdbpy/container: Moved to containing folder.
        * Scripts/libraries/resultsdbpy/resultsdbpy/example/main.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/run: Moved to containing folder.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/view_routes_unittest.py: Use specific imports
        * Scripts/libraries/resultsdbpy/run: Moved from insdie library.
        * Scripts/libraries/resultsdbpy/run-tests: Use autoinstalled libraries.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

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

        [webkitcorepy] Retry downloads in Autoinstall
        https://bugs.webkit.org/show_bug.cgi?id=227134
        <rdar://problem/79462182>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.Archive.download): Retry failed downloads
        (AutoInstall): Allow for a single retry by default

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

        Trying to take empty snapshots of the view should not cause crashes
        https://bugs.webkit.org/show_bug.cgi?id=227133

        Reviewed by Tim Horton.

        Add API test coverage.

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

2021-06-17  W.D. Xiong  <w_xiong@apple.com>

        [iOS 15] Add iOS 15 simulator/device to bot watchers' dashboard
        https://bugs.webkit.org/show_bug.cgi?id=226779

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS15.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS15Simulator.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/Dashboard.js: Added references to iOS 15 device + simulator, shifted ordering down
        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css: Added references to iOS 15 device + simulator
        (table.queue-grid tr.platform.ios-simulator-15 img.logo):
        (table.queue-grid tr.platform.ios-15 img.logo):

2021-06-17  W.D. Xiong  <w_xiong@apple.com>

        [watchOS 8] Add watchOS 8 simulator/device to bot watchers' dashboard
        https://bugs.webkit.org/show_bug.cgi?id=226781

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS8.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator8.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/Dashboard.js: Added references for watchOS 8 device + simulator; shifted order down for Windows platforms to make room
        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css: Added references for watchOS 8 device + simulator
        (table.queue-grid tr.platform.watchos-simulator-8 img.logo):
        (table.queue-grid tr.platform.watchos-8 img.logo):

2021-06-17  W.D. Xiong  <w_xiong@apple.com>

        [tvOS 15] Add tvOS 15 simulator/device to bot watchers' dashboard
        https://bugs.webkit.org/show_bug.cgi?id=226782

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS15.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS15Simulator.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/Dashboard.js: Added references to tvOS 15 device + simulator
        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css: Added references to tvOS 15 device + simulator
        (table.queue-grid tr.platform.tvos-simulator-15 img.logo):
        (table.queue-grid tr.platform.tvos-15 img.logo):

2021-06-17  W.D. Xiong  <w_xiong@apple.com>

        [Monterey] Add Seed 1 to bot watchers' dashboard
        https://bugs.webkit.org/show_bug.cgi?id=226747

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/dashboard/Images/Monterey.png: Added.
        * CISupport/build-webkit-org/public_html/dashboard/Scripts/Dashboard.js: Added Monterey
        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css: Added Monterey
        (table.queue-grid tr.platform.macos-monterey img.logo):

2021-06-17  Per Arne Vollan  <pvollan@apple.com>

        [Win] Exception running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=227114

        Reviewed by Jonathan Bedard.

        Catch exception and print warning message.

        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (TaskPool.__exit__):

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

        Remove empty header WebTypesInternal.h
        https://bugs.webkit.org/show_bug.cgi?id=227094

        Reviewed by Fujii Hironori.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        * DumpRenderTree/mac/TextInputControllerMac.m:

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

        WKScriptMessageHandlerWithReply should raise an exception if replyHandler is called twice
        https://bugs.webkit.org/show_bug.cgi?id=226863

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (-[AsyncScriptMessageHandler userContentController:didReceiveScriptMessage:replyHandler:]):

2021-06-17  Eric Carlson  <eric.carlson@apple.com>

        [Mac EWS] TestWebKitAPI.WebKit.AudioBufferSize is flaky timing out on EWS
        https://bugs.webkit.org/show_bug.cgi?id=227046
        <rdar://problem/79360787>

        Unreviewed, fix broken test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add audio-buffer-size.html 
        to the Copy Resources step so tests can use it.

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

        [ews] Improve build summary about finding flaky test in ReRunWebKitTests
        https://bugs.webkit.org/show_bug.cgi?id=227123

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand):
        * CISupport/ews-build/steps_unittest.py:

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

        REGRESSION (r278536): Wrong comment character used in coverage.xcconfig

        * coverage/coverage.xcconfig:
        - Change '#' to '//' to fix the comment.

2021-06-17  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement logical property groups
        https://bugs.webkit.org/show_bug.cgi?id=226878

        Reviewed by Antti Koivisto.

        Add validator for new codegen property "logical-property-group",
        replacing the old "direction-aware-property".

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.validate_logical_property_group):
        (JSONCSSPropertiesChecker.check_codegen_properties):

2021-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Pass a GTlsCertificate to soup_server_new()
        https://bugs.webkit.org/show_bug.cgi?id=227023

        Reviewed by Michael Catanzaro.

        Instead of using soup_server_set_ssl_cert_file() that will be removed from libsoup soon.

        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer):

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

        [Win] TestWTF.WTF_WeakPtr.WeakHashMapIterators is crashing
        https://bugs.webkit.org/show_bug.cgi?id=227102

        Reviewed by Ryosuke Niwa.

        A heap corruption was detected while a Derived class object was
        destroyed as a Base class object.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::Base::~Base): Made Base class dtor virtual.
        (TestWebKitAPI::Derived::~Derived):

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

        Clean up how platform images are handled in the bot watchers' dashboard
        https://bugs.webkit.org/show_bug.cgi?id=226989

        Patch by W.D. Xiong.

        Renamed the _@2x.png files to _.png and removed old platforms that don't have queues anymore. Also renamed WatchOSSimulator7 to WatchOS7Simulator

        * CISupport/build-webkit-org/public_html/dashboard/Images/BigSur.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/BigSur@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/BigSur@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Catalina.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/Catalina@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Catalina@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/ElCapitan.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/ElCapitan@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/GTK.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/GTK@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/GTK@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/HighSierra.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/HighSierra@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS10.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS10@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS10Simulator.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS10Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS11.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS11@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS11Simulator.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS11Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS12.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS12@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS12Simulator.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS12Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS13.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS13@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS13Simulator.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS13Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS14.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/IOS14@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS14@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS14Simulator.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/IOS14Simulator@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS14Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS9.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS9@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS9Simulator.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOS9Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOSDevice.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/IOSDevice@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOSDevice@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOSSimulator.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/IOSSimulator@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/IOSSimulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Mavericks.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Mavericks@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Mojave.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/Mojave@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Mojave@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/MountainLion.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/MountainLion@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/MountainLion@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/PlatformRing.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/PlatformRing@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/PlatformRing@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Sierra.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Sierra@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/SquirrelFish.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/SquirrelFish@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/SquirrelFish@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS13.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS13@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS13Simulator.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS13Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS14.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/TvOS14@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS14@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS14Simulator.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/TvOS14Simulator@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/TvOS14Simulator@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WPE.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/WPE@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WPE@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS6.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS6@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS7.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS7@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS7@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOS7Simulator.png: Copied from Tools/CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator7@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator6.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator6@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator6@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator7.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WatchOSSimulator7@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Windows10.png: Replaced with Tools/CISupport/build-webkit-org/public_html/dashboard/Images/Windows10@2x.png.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Windows10@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Windows7.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Windows7@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Windows8.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Windows8@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WindowsXP.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/WindowsXP@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Yosemite.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Images/Yosemite@2x.png: Removed.
        * CISupport/build-webkit-org/public_html/dashboard/Styles/Main.css: Applied above changes
        (table.queue-grid td.logo img.ring):
        (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.macos-catalina img.logo):
        (table.queue-grid tr.platform.macos-bigsur img.logo):
        (table.queue-grid tr.platform.wincairo-windows-10 img.logo):
        (table.queue-grid tr.platform.windows-10 img.logo):
        (table.queue-grid tr.platform.windows-7 img.logo):
        (table.queue-grid tr.platform.linux-gtk img.logo):
        (table.queue-grid tr.platform.linux-wpe img.logo):
        (table.queue-grid tr.platform.linux-jsconly img.logo):

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

        [webkitscmpy] Support branch queries in mock git log
        https://bugs.webkit.org/show_bug.cgi?id=225889
        <rdar://problem/78122705>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Add support for branches in
        `git log` commands.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_log):
        (TestGit.test_branch_log):

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

        [webkitscmpy] Cache more Git commands
        https://bugs.webkit.org/show_bug.cgi?id=227082
        <rdar://problem/79405244>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.__init__): Reset branch cache.
        (Git.default_branch): Memoize default_branch call.
        (Git.branch): Prefer branch cache.
        (Git.checkout): Reset branch cache.

2021-06-16  Alicia Boya García  <aboya@igalia.com>

        [WTF] DataMutex: Assert on double locking on the same thread
        https://bugs.webkit.org/show_bug.cgi?id=227069

        Reviewed by Xabier Rodriguez-Calvar.

        Update expectations to include the fixed test.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        Allow legacy SecurityOrigin behavior for x-apple-ql-id2 scheme
        https://bugs.webkit.org/show_bug.cgi?id=226993

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        (TestWebKitAPI::TEST_F):

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

        [git-webkit] Handle auth failures
        https://bugs.webkit.org/show_bug.cgi?id=226999
        <rdar://problem/79313850>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/credentials.py:
        (credentials): We should attempt to retrieve credentials, even if they
        are not requested because retrieving credentials does not prompt the user.
        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.request): In the event we get a 400 error from the GitHub API,
        attempt forcing authentication before reporting an error.

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

        Check for "xn--" in any subdomain when parsing URL hosts
        https://bugs.webkit.org/show_bug.cgi?id=226912

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        These tests used to hit UIDNA_ERROR_LABEL_TOO_LONG which is allowed now.
        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):
        This test, from r262171, needs to verify that non-ASCII characters are not truncated to ASCII values when converting to NSURL.
        It used to use an invalid URL that had a host that ended in U+FE63 (SMALL HYPHEN-MINUS) which would fail because of UIDNA_ERROR_TRAILING_HYPHEN.
        Now that trailing hyphens are allowed, we end in U+0661 and U+06F1 which fail because of UIDNA_ERROR_BIDI which makes this test still verify
        the non-truncated values of an invalid host converted to an NSURL.

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

        [iOS 15] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=227002
        <rdar://problem/79316598>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm: Remove unneeded import.

2021-06-15  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed test gardening. Gardened three API GTK test failures.

        These tests were constant failures in EWS and were slowing down the
        bot. The tests are the following:
          - /WebKit2Gtk/TestContextMenu:/webkit/WebKitWebPage/context-menu.
          - /WebKit2Gtk/TestContextMenu:/webkit/WebKitWebPage/context-menu-node.
          - /TestWTF:WTF_DataMutex.DoubleLockDeathTest.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-06-14  Keith Miller  <keith_miller@apple.com>

        run-javascriptcore-tests should print output when a test binary fails by default
        https://bugs.webkit.org/show_bug.cgi?id=226985

        Reviewed by Mark Lam.

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

2021-06-14  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up an Apple-BigSur-AppleSilicon-Release-Test262-Tests queue
        https://bugs.webkit.org/show_bug.cgi?id=226602

        Reviewed by Aakash Jain.

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

2021-06-14  Kimmo Kinnunen  <kkinnunen@apple.com>

        AcceleratedImageBuffer not instantiated but objects are punned to the type
        https://bugs.webkit.org/show_bug.cgi?id=226917

        Reviewed by Said Abou-Hallawa.

        Add new test
        TestWebKitAPI.ImageBufferTests.ImageBufferSubTypeCreateCreatesSubtypes
        to test that the code compiles.
        Before, it would fail with:
          `error: cannot initialize a member subobject of type 'typename PtrTraits::StorageType' (aka 'WebCore::AcceleratedImageBuffer *') with an
           rvalue of type 'WebCore::ConcreteImageBuffer<WebCore::ImageBufferIOSurfaceBackend> *'`

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ImageBufferTests.cpp: Added.
        (TestWebKitAPI::TEST):

2021-06-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][DumpRenderTree] --no-timeout switch doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=226913

        Reviewed by Don Olmstead.

        r177542 added a variable 'useTimeoutWatchdog', but used nowhere.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setWaitToDump): Check useTimeoutWatchdog to start the timer.

2021-06-11  Ryosuke Niwa  <rniwa@webkit.org>

        Add WeakHashMap
        https://bugs.webkit.org/show_bug.cgi?id=226872

        Reviewed by Geoffrey Garen.

        Added unit tests for WeakHashMap.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::computeSizeOfWeakHashSet): Deleted the unused variant.
        (WTF_WeakPtr.WeakHashSetExpansion): Deleted the superflous for loop.
        (TestWebKitAPI::computeSizeOfWeakHashMap): Added.
        (TestWebKitAPI::ValueObject): Added.
        (TestWebKitAPI::ValueObject::create):
        (TestWebKitAPI::ValueObject::~ValueObject):
        (TestWebKitAPI::ValueObject::ValueObject):
        (WTF_WeakPtr.WeakHashMapBasic): Added.
        (WTF_WeakPtr.WeakHashMapConstObjects): Added.
        (WTF_WeakPtr.WeakHashMapExpansion): Added.
        (WTF_WeakPtr.WeakHashMapRemoveNullReferences): Added.
        (TestWebKitAPI::collectKeyValuePairsUsingIterators): Added.
        (WTF_WeakPtr.WeakHashMapIterators): Added.
        (WTF_WeakPtr.WeakHashMapAmortizedCleanup): Added.

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

        Unreviewed small API test failure fix after r278786.

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

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

        Partition CrossOriginPreflightResultCache by SessionID
        https://bugs.webkit.org/show_bug.cgi?id=226910

        Reviewed by Youenn Fablet.

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

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

        Fix the references to audio-buffer-size.html in project.pbxproj
        https://bugs.webkit.org/show_bug.cgi?id=226932

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-06-11  Jonathan Bedard  <jbedard@apple.com>

        [Monterey] Support building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=226846
        <rdar://problem/79095148>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add CoreCryptoSPI.h.
        * TestWebKitAPI/Tests/WebCore/cocoa/CoreCryptoSPI.h: Added.
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm: Import CoreCryptoSPI.h.
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm: Ditto.

2021-06-11  Devin Rousso  <drousso@apple.com>

        Add an option to Copy WebKit Permalink that automatically opens the URL in the default browser for Sublime Text
        https://bugs.webkit.org/show_bug.cgi?id=226933

        Reviewed by Tim Horton.

        Usually the step right after copying the permalink is to open a browser and enter it. Having
        a setting that causes the plugin to do that automatically would save some time and effort.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py:
        (Settings.automatically_open_in_browser): Added.
        (CopyWebKitPermalinkCommand.run):
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.sublime-settings:

2021-06-11  Jonathan Bedard  <jbedard@apple.com>

        [check-webkit-style] failing in JS checker due to python byte string
        https://bugs.webkit.org/show_bug.cgi?id=226925
        <rdar://problem/79166108>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/style/checkers/jstest.py:
        (map_functions_to_dict): Use byte regexes.
        (strip_trailing_blank_lines_and_comments): Ditto.
        * Scripts/webkitpy/style/checkers/jstest_unittest.py:
        (JSTestCheckerTestCase.test_map_functions_to_dict): Test content should be bytes.

2021-06-11  Truitt Savell  <tsavell@apple.com>

        Remove ews129 instead of ews179
        https://bugs.webkit.org/show_bug.cgi?id=226855

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/config.json:

2021-06-11  Megan Gardner  <megan_gardner@apple.com>

        Rename AppHighlight group to QuickNote to correctly reflect feature.
        https://bugs.webkit.org/show_bug.cgi?id=226888

        Reviewed by Tim Horton.

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

2021-06-11  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r278454): [run-webkit-tests] worker is printed twice for each test in debug logging
        https://bugs.webkit.org/show_bug.cgi?id=226895
        <rdar://problem/79164077>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker.run_tests): Strip process names from debug logs.
        (Worker.stop): Ditto.
        (Worker._kill_driver): Ditto.
        (Worker._clean_up_after_test): Ditto.

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

        Origin is null in http requests when baseURL has custom scheme on iOS 15.0
        https://bugs.webkit.org/show_bug.cgi?id=226760

        Reviewed by Chris Dumez.

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

2021-06-10  Chris Fleizach  <cfleizach@apple.com>

        AX: TestWebKitAPI.WebKit.AccessibilityReduceMotion failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=226758
        <rdar://problem/78984253>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/AccessibilityIncreaseContrast.mm: Added.
        (-[WKPreferenceObserverForTestingIncreaseContrast preferenceDidChange:key:encodedValue:]):
        (TEST):

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

        [webkitcorepy] 6x performance improvement in Memoized
        https://bugs.webkit.org/show_bug.cgi?id=226891
        <rdar://problem/79151940>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:
        (Memoize.__call__.decorator): inspect.getargspec retrieves many bits of
        information about the function we don't care about. Retrieve arguments manually
        (and only do it once) to increase performance of Memoized function calls.

2021-06-10  Philippe Normand  <pnormand@igalia.com>

        [WPE] Enable Cog for developer builds
        https://bugs.webkit.org/show_bug.cgi?id=224360

        Reviewed by Adrian Perez de Castro.

        * PlatformWPE.cmake: Enable X11 support in Cog. Re-enable headless support in Cog. Map
        libsoup configuration in Cog with the one used by the WebKit build.

2021-06-10  Truitt Savell  <tsavell@apple.com>

        Remove Ews179 and bot279 from configs
        https://bugs.webkit.org/show_bug.cgi?id=226855

        Reviewed by Jonathan Bedard.

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

2021-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove useDataICInOptimizingJIT option
        https://bugs.webkit.org/show_bug.cgi?id=226862

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

2021-06-09  Sergio Villar Senin  <svillar@igalia.com>

        Add email address for Igalia's WebKit layout team to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=226829

        Reviewed by Simon Fraser.

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

2021-06-09  Chris Gambrell  <cgambrell@apple.com>

        Add personal email to Tools/Scripts/webkitpy/common/config/contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=226845
        <rdar://problem/79095492>

        Reviewed by Jonathan Bedard.

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

2021-06-09  Dewei Zhu  <dewei_zhu@apple.com>

        HTTP server should run with the same python executable as run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=226834

        Reviewed by Jonathan Bedard.

        'SimpleHTTPServerDriver._ensure_http_server_dependencies' will not work if the
        python version used by run-benchmark is not the same as the one invokes http server.

        Remove python modules no longer needed by http server.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver._ensure_http_server_dependencies):

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

        CISupport/test-result-archive script reports "SyntaxError: invalid syntax" with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=226797

        Reviewed by Jonathan Bedard.

        * CISupport/test-result-archive:
        (archive_test_results): Replaced the old syntax with 'as' for
        'except' clauses.

2021-06-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use DataIC for AccessCase
        https://bugs.webkit.org/show_bug.cgi?id=226072

        Reviewed by Saam Barati and Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2021-06-08  Dewei Zhu  <dewei_zhu@apple.com>

        Increase http server launch timeout on run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=226801

        Reviewed by Ryosuke Niwa.

        Installing twisted module in http server may take longer than 7.5 seconds.
        Increase the timeout to be 31.5 seconds and add an early terminate if http server
        process is not running.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        Removed unused import.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):

2021-06-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        run-webkit-tests: TaskPool reports PicklingError for Windows Python
        https://bugs.webkit.org/show_bug.cgi?id=226710

        Reviewed by Jonathan Bedard.

        Since r278454 changed run-webkit-tests to use TaskPool,
        run-webkit-tests reported PicklingError for Windows Python. It
        couldn't pickle Port object. This issue happened on multi-core PC,
        but on single CPU tester bot machines.

        WrappedPopen couldn't be pickled because it was defined as an
        inner class. It should be defined at the top-level.

        The instance variables _web_platform_test_server,
        _websocket_server_temporary_directory, and
        _websocket_secure_server of Port object aren't pickleable. Make
        them class variables.

        * Scripts/webkitpy/common/system/executive.py:
        (WrappedPopen):
        (Executive.WrappedPopen):
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.__init__):
        (Port.ports_to_forward):
        (Port.is_websocket_server_running):
        (Port.is_wpt_server_running):
        (Port.start_websocket_server):
        (Port.start_web_platform_test_server):
        (Port.stop_websocket_server):
        (Port.stop_web_platform_test_server):

2021-06-08  Antti Koivisto  <antti@apple.com>

        Factor MarkedText collection out of LegacyInlineTextBox
        https://bugs.webkit.org/show_bug.cgi?id=226731

        Reviewed by Sam Weinig.

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

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

        [test-webkit-lldb] 3 dump_class_layout_unittest.TestDumpClassLayout tests failing with Xcode 12.5
        https://bugs.webkit.org/show_bug.cgi?id=226540

        Unreviewed test gardening.

        * lldb/dump_class_layout_unittest.py: Rebaseline tests.

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

        Add copy of std::span so that we can use it pre-moving to c++20
        https://bugs.webkit.org/show_bug.cgi?id=226351

        Reviewed by Alex Christensen.

        Add basic WTF::Span test to make sure things compile and work.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Span.cpp: Added.

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

        Move some hand rolled CSSProperty predicates to be generated based on new CSSProperties.json properties
        https://bugs.webkit.org/show_bug.cgi?id=226768

        Reviewed by Antti Koivisto.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Add new codegen properties to the checker.

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

        [Flatpak SDK] Enable network access in the WPE build sandbox
        https://bugs.webkit.org/show_bug.cgi?id=225914

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Allow network access for WPE build jobs, so that CMake is
        able to git checkout Cog from github.

2021-06-08  Jean-Yves Avenard  <jya@apple.com>

        Update jya's email address
        https://bugs.webkit.org/show_bug.cgi?id=226752

        Reviewed by Tim Horton.

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

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

        [Flatpak SDK] Allow custom build directories
        https://bugs.webkit.org/show_bug.cgi?id=226142

        Reviewed by Adrian Perez de Castro.

        By default the build directory remains WebKitBuild/{GTK,WPE}/{Release,Debug}. Builds done
        with the Flatpak SDK now support the standard WEBKIT_OUTPUTDIR environment variable, eg.
        setting $WEBKIT_OUTPUTDIR to "/path/to/somewhere", the built files will end up in
        /path/to/somewhere/{GTK,WPE}/Release.

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

2021-06-07  Jean-Yves Avenard  <jya@apple.com>

        Update jya's email address
        https://bugs.webkit.org/show_bug.cgi?id=226752

        Reviewed by Tim Horton.

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

2021-06-07  Alex Christensen  <achristensen@webkit.org>

        Adopt SecTrustGetCertificateAtIndex replacement where available
        https://bugs.webkit.org/show_bug.cgi?id=225893

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (verifyCertificateAndPublicKey):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        Upstream WebKit support for Live Text
        https://bugs.webkit.org/show_bug.cgi?id=226706
        <rdar://problem/78933684>

        Reviewed by Tim Horton.

        Replace IMAGE_EXTRACTION with IMAGE_ANALYSIS.

        * TestWebKitAPI/Tests/WebKit/InjectedBundleHitTest.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        * TestWebKitAPI/Tests/mac/ImmediateActionTests.mm:

2021-06-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        Windows Python 2.7 fails to install tblib-1.7.0 due to "TypeError: environment can only contain strings"
        https://bugs.webkit.org/show_bug.cgi?id=226707

        Reviewed by Jonathan Bedard.

        WinCairo port is still using Python 2.7 that has ascii strings and
        unicode strings. WinPort.setup_crash_log_saving modifies
        _NT_SYMBOL_PATH env var to have a unicode string. So, after
        setup_crash_log_saving, AutoInstall failed due to the unicode
        string in os.environ.

        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_crash_log_saving): Convert self._build_path() to a
        ascii string with str().

2021-06-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        run-webkit-test should use python2 for wpt serve until the latest will be imported
        https://bugs.webkit.org/show_bug.cgi?id=226703

        Reviewed by Jonathan Bedard.

        The current imported wpt.py doesn't support Python 3 yet. Use
        Python 2 temporarily.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__):

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

        [Cocoa] Find-in-page should match text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=226704

        Reviewed by Tim Horton.

        Add an API test to verify that text inside image overlays is visible to find-in-page.

        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:

2021-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Signal "window-object-cleared" not emitted unless frame js context is get before
        https://bugs.webkit.org/show_bug.cgi?id=221771

        Reviewed by Michael Catanzaro.

        Update window-object-cleared test to check that the signal is emitted for the WebKitScriptWorld objects created
        by the extension.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (UserMessageTest::sendMessage):
        (UserMessageTest::viewUserMessageReceived):
        (UserMessageTest::waitUntilViewMessagesReceived):
        (UserMessageTest::waitUntilViewMessageReceived):
        (testWebExtensionWindowObjectCleared):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (windowObjectCleared):
        (isolatedWorldWindowObjectCleared):
        (webkit_web_extension_initialize_with_user_data):

2021-06-06  Darin Adler  <darin@apple.com>

        Handle custom identifiers and strings separately, so we can quote strings correctly consistently
        https://bugs.webkit.org/show_bug.cgi?id=226694

        Reviewed by Sam Weinig.

        * TestRunnerShared/TestFeatures.cpp:
        (WTR::parseTestHeader): Fixed a missing quote that made a log message read strangely.

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

        Unexport llvm coverage symbols to fix build
        <https://webkit.org/b/226684>
        <rdar://problem/78906691>

        Reviewed by Darin Adler.

        * Scripts/check-for-weak-vtables-and-externals:
        - Revert change from r278444.  That fixes errors when
          this script is run, but the Generate TAPI build phase
          for some projects still fails due to the new weak
          external symbols.
        * coverage/coverage.xcconfig:
        (UNEXPORTED_SYMBOL_LDFLAGS_FOR_COVERAGE): Add.
        - Linker flags to unexport llvm symbols added by the
          compiler for coverage.
        (OTHER_LDFLAGS):
        - Add $(UNEXPORTED_SYMBOL_LDFLAGS_FOR_COVERAGE) to list
          of switches to unexport the symbols during linking.

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

        FileSystem::readFromFile() should return data as `void*`
        https://bugs.webkit.org/show_bug.cgi?id=226671

        Reviewed by Darin Adler.

        FileSystem::readFromFile() should return data as `void*` instead of `char*`. This is more flexible and
        consistent with FileSystem::writeToFile().

        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        (TestWebKitAPI::readContentsOfFile):

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

        Use Vector<uint8_t> instead of Vector<char> to store bytes in SharedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=226623

        Reviewed by Darin Adler.

        Use Vector<uint8_t> instead of Vector<char> to store bytes in SharedBuffer. Also have SharedBuffer::data()
        return a `const uint8_t*` instead of `const char*`. This is our preferred type to store bytes.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::checkBuffer):

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

        Make attributedBundleIdendifier a property for WKWebViewConfiguration instead of _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=226548

        Reviewed by Brady Eidson.

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

2021-06-04  Martin Robinson  <mrobinson@webkit.org>

        The CMake cache is removed when specifying a build target
        https://bugs.webkit.org/show_bug.cgi?id=226642

        Reviewed by Jonathan Bedard.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): Only remove the CMake cache when arguments
        that start with a dash change.

2021-06-04  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK][WPE] Expose setCORSDisablingPatterns
        https://bugs.webkit.org/show_bug.cgi?id=219995

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewCORSAllowlist):
        (beforeAll):

2021-06-04  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.

        This change does a trade-off between accuracy of queue position vs status-bubble loading time.
        This would reduce the calculations needed for queue position computation, but the position
        might not be accurate if the queue has a backlog of more than 12 hours (which shouldn't be
        the case normally). If the backlog is less than 12 hours, then the queue position will be accurate.

        Also, this patch separates the logic of when to hide the status-bubble. Status-bubble will now be hidden
        after 7 days of no build. However, if patch is waiting for more than 12 hours, but less than 7 days,
        instead of computing the exact queue position, we do not display queue position.
        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        (StatusBubble._build_bubble):
        (StatusBubble._queue_position):

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

        [run-webkit-tests] Use webkitcorepy's TaskPool
        https://bugs.webkit.org/show_bug.cgi?id=226234
        <rdar://problem/78471695>

        Reviewed by Dewei Zhu.

        * Scripts/run-webkit-tests: Stop using multiprocessing_bootstrap.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (setup_shard): Run setup in Worker process.
        (handle_started_test): Notify parent process that a test has started.
        (run_shard): Run test shard in Worker process.
        (handle_finished_test): Notify parent process that a test has finished.
        (teardown_shard): Teardown worker process metadata.
        (LayoutTestRunner.__init__): Make printer public.
        (LayoutTestRunner.run_tests): Use TaskPool to spawn multiple workers.
        (LayoutTestRunner.update_summary_with_result): Renamed from
        _update_summary_with_result, strip unused arguments.
        (LayoutTestRunner._annotate_results_with_additional_failures): Strip
        unused arguments.
        (LayoutTestRunner.start_servers): Make printer public.
        (LayoutTestRunner.stop_servers): Ditto.
        (Worker.setup): Instantiate singleton worker.
        (Worker.teardown): Teardown singleton worker.
        (Worker.__init__): Pass port object, remove unused variable.
        (Worker.run_tests): Use TaskPool process name.
        (Worker.stop): Ditto.
        (Worker._kill_driver): Use port options, use TaskPool process name.
        (Worker._run_test_with_or_without_timeout): Ditto.
        (Worker._clean_up_after_test): Use TaskPool process name.
        (Worker._run_test_in_another_thread): Ditto.
        (Worker._run_test_in_this_thread): Ditto.
        (Worker._run_single_test): Use port options.
        (LayoutTestRunner._worker_factory): Deleted.
        (LayoutTestRunner._handle_did_spawn_worker): Deleted.
        (LayoutTestRunner._update_summary_with_result): Deleted.
        (LayoutTestRunner.handle): Deleted.
        (LayoutTestRunner._handle_started_test): Deleted.
        (LayoutTestRunner._handle_finished_test): Deleted.
        (LayoutTestRunner._handle_finished_test_group): Deleted.
        (Worker.__del__): Deleted.
        (Worker.start): Deleted.
        (Worker.handle): Deleted.
        (Worker._run_test): Deleted.
        (Worker._finished_test_group): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests.test_update_summary_with_result): The runner keeps track of it's state.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: Remove call to main.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.serial_test_basic): Run all tests in the same process.
        (RunTest.test_hung_thread): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.worker_startup_delay_secs): Deleted.
        * Scripts/webkitpy/port/test.py:
        (Port.worker_startup_delay_secs): Deleted.

2021-06-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: add support for saving multiple tabs in session state
        https://bugs.webkit.org/show_bug.cgi?id=225763

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowSaveSession):
        (browserWindowTryClose):
        (browserWindowFinalize):
        (browserWindowDispose):
        (browser_window_load_session):

2021-06-03  Said Abou-Hallawa  <said@apple.com>

        [MotionMark] Controller.filterOutOutliers() sorts the frameLengths array incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=226605
        <rdar://77350238>

        Reviewed by Simon Fraser.

        Update MotionMark 1.1 to use the version r278436.

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

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

        Weak external symbols found when building with Release+Coverage configuration
        <https://webkit.org/b/226562>
        <rdar://problem/78765608>

        Reviewed by Jonathan Bedard.

        * Scripts/check-for-weak-vtables-and-externals:
        - Ignore weak symbols from llvm when building with
          coverage enabled.  This fixes the build.
        * Scripts/webkitdirs.pm:
        (XcodeOptions):
        - Switch to using XcodeCoverageSupportOptions() so
          `make` and `build-webkit` both use the same
          configuration.
        (XcodeCoverageSupportOptions):
        - Remove old Xcode variables from 2008 in favor of
          passing `-xcconfig Tools/coverage/coverage.xcconfig`.
        * coverage/coverage.xcconfig:
        (OTHER_CPLUSPLUSFLAGS):
        - Remove OTHER_CPLUSPLUSFLAGS since this just caused
          duplicate command-line switches to be used when
          compiling C++ sources.

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

        Unreviewed, reverting r278356.
        https://bugs.webkit.org/show_bug.cgi?id=226606

        "Breaks jsc tests".

        Reverted changeset:

        "Convert small JIT pool tests into executable fuzzing"
        https://bugs.webkit.org/show_bug.cgi?id=226279
        https://trac.webkit.org/changeset/278356

2021-06-03  Jean-Yves Avenard  <jya@apple.com>

        Add MediaSessionCoordinator test to ensure that disconnection on the private side is properly handled.
        https://bugs.webkit.org/show_bug.cgi?id=226568
        rdar://problem/78801408

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/MediaSessionCoordinatorTest.mm:
        (-[_WKMockMediaSessionCoordinator sessionStateChanged:]): Add method to signal
        change in coordinator state.
        (TestWebKitAPI::TEST_F): Add test.

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

        Split FillInlinePath/StrokeInlinePath
        https://bugs.webkit.org/show_bug.cgi?id=225687

        Reviewed by Wenson Hsieh.

        Adjust to API new display list items.

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

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

        [webkitcorepy] TaskPool shouldn't fork when 1 process is needed
        https://bugs.webkit.org/show_bug.cgi?id=226506
        <rdar://problem/78724554>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (TaskPool.__init__): Allow user to force fork, even with a single process.
        (TaskPool.__enter__): If only a single worker is needed and the caller is not forcing
        a fork, run the setup function in the parent process.
        (TaskPool.do): If no queue has been constructed, we're running in the parent process.
        (TaskPool.wait): Nothing to wait for if we're running in the parent process.
        (TaskPool.__exit__): If no queue has been constructed, we're running in the parent process,
        so run the teardown in this process and reset the process name.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py:
        (TaskPoolUnittest.test_single): Force fork.
        (TaskPoolUnittest.test_single_no_fork):
        (TaskPoolUnittest.test_exception): Force fork.
        (TaskPoolUnittest.test_exception_no_fork):
        (TaskPoolUnittest.test_invalid_shutdown): Force fork.

2021-06-02  W.D. Xiong  <w_xiong@apple.com>
        
        [resultsdbpy] "legend" is misspelled as "lengend"
        https://bugs.webkit.org/show_bug.cgi?id=226436

        Reviewed by Darin Adler.

        Corrected said misspelling in resultsdbpy

        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/library/css/index.html:
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.legend, .timeline>.content .legend):
        (.legend.horizontal, .timeline>.header .legend):
        (.legend>.item):
        (.legend>.item .dot):
        (.legend>.item .dot img, .legend>.item .dot .text):
        (.legend>.item .dot>img, .legend>.item .dot>.text):
        (.timeline.legend>.item .dot::before):
        (.timeline.legend>.item .dot::after):
        (.legend>.item .label):
        (.lengend, .timeline>.content .lengend): Deleted.
        (.lengend.horizontal, .timeline>.header .lengend): Deleted.
        (.lengend>.item): Deleted.
        (.lengend>.item .dot): Deleted.
        (.lengend>.item .dot img, .lengend>.item .dot .text): Deleted.
        (.lengend>.item .dot>img, .lengend>.item .dot>.text): Deleted.
        (.timeline.lengend>.item .dot::before): Deleted.
        (.timeline.lengend>.item .dot::after): Deleted.
        (.lengend>.item .label): Deleted.

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

        Drop Checked::safeGet()
        https://bugs.webkit.org/show_bug.cgi?id=226537

        Reviewed by Geoffrey Garen.

        Drop Checked::safeGet() and replace with uses of Checked::operator T() or Checked::value().
        safeGet() is a bit akward, having both a return value and an out-parameter.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::CheckedArithmeticTester::run):

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

        MediaSessionCoordinator API test is failing,
        https://bugs.webkit.org/show_bug.cgi?id=226460
        rdar://78680005

        Reviewed by Eric Carlson.

        When leaving a MediaSessionCoordinator from the JS side; there's no callback
        occurring from the MediaSessionCoordinatorPrivate to the MediaSessionCoordinator
        (which is what this test was about). A state change callback should only occur
        when it's the MediaSessionCoordinatorPrivate that leaves.

        * TestWebKitAPI/Tests/WebKit/MediaSessionCoordinatorTest.mm:
        (TestWebKitAPI::TEST_F):

2021-06-02  Garrett Davidson  <davidson.garrettm@gmail.com>


        [Cocoa] _WKAuthenticatorAssertionResponse should specify the attachment type used
        https://bugs.webkit.org/show_bug.cgi?id=225519
        <rdar://problem/76554090>

        Reviewed by Brent Fulgham.

        Update the CTAP tests to specify the new attachment parameter. All of these tests
        assume a cross platform authenticator.

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

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

        Convert small JIT pool tests into executable fuzzing
        https://bugs.webkit.org/show_bug.cgi?id=226279

        Reviewed by Michael Saboff.

        Right now, we try to test our engine on a small JIT pool. This isn't a known configuration for any
        actual ports and causes issues if we run out of JIT memory when we need to compile an OSR exit.
        Instead of testing such a small pool we should just fuzz each executable allocation that says it
        can fail.

        The current fuzzing doesn't do a good job tracking the number of DFG/FTL compiles when allocations
        fail, so when enabled those tests will just exit early. Also, right now we use a random seed picked
        by the engine for these tests, which makes it hard to reproduce crashes on the bots. If we see
        flakiness on the bots we can have the harness pass in a number so it gets logged in the repro command.

        * Scripts/jsc-stress-test-helpers/js-executable-allocation-fuzz:
        * Scripts/run-jsc-stress-tests:

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

        [GitHub] Delete unused scripts
        https://bugs.webkit.org/show_bug.cgi?id=226519

        Reviewed by Aakash Jain.

        * Scripts/configure-github-as-upstream: Removed.
        * Scripts/sync-master-with-upstream: Removed.

2021-05-23  Ryosuke Niwa  <rniwa@webkit.org>

        Add CheckedPtr
        https://bugs.webkit.org/show_bug.cgi?id=226158

        Reviewed by Antti Koivisto.

        Added basic tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedPtr.cpp: Added.
        (TestWebKitAPI::CheckedObject): Added.
        (TestWebKitAPI::DerivedCheckedObject): Added.
        (WTF_CheckedPtr.Basic):
        (WTF_CheckedPtr.DerivedClass):
        (WTF_CheckedPtr.HashSet):

2021-06-01  Darin Adler  <darin@apple.com>

        Remove <wtf/Optional.h>
        https://bugs.webkit.org/show_bug.cgi?id=226437

        Reviewed by Chris Dumez.

        * <many files>: Removed include of <wtf/Optional.h>.

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

        Rename Checked::unsafeGet() to Checked::value()
        https://bugs.webkit.org/show_bug.cgi?id=226514

        Reviewed by Darin Adler.

        Rename Checked::unsafeGet() to Checked::value(). The "unsafeGet" naming is confusing as this
        function isn't really unsafe since it will crash if the value has overflowed. Also add an
        `operator T()` to implicitly convert a Checked to its underlying type without needing to
        call value().

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::CheckedArithmeticTester::run):
        (TestWebKitAPI::AllowMixedSignednessTest::run):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/IntRectTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/IntSizeTests.cpp:
        (TestWebKitAPI::TEST):

2021-06-01  Jean-Yves Avenard  <jya@apple.com>

        MediaSession.coordinator should not be optional, relying on coordinator readyState change instead
        https://bugs.webkit.org/show_bug.cgi?id=226328
        rdar://77461335

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/MediaSessionCoordinatorTest.mm:
        (TestWebKitAPI::MediaSessionCoordinatorTest::createCoordinator): Change test to match new API,
        using coordinatorstatechange event instead.
        * TestWebKitAPI/Tests/WebKitCocoa/media-remote.html:

2021-06-01  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION: (r277971) TestWebKitAPI.WebKit.AccessibilityReduceMotion is timing out
        https://bugs.webkit.org/show_bug.cgi?id=226505
        <rdar://problem/78721462>

        Reviewed by Darin Adler.

        The distributed notification for RM is no longer re-posted within WebKit, so we don't need to listen for it.

        * TestWebKitAPI/Tests/WebKit/AccessibilityReduceMotion.mm:
        (TEST):
        (notificationCallback): Deleted.

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

        [run-webkit-tests] Move helper out of Port instance
        https://bugs.webkit.org/show_bug.cgi?id=226344
        <rdar://problem/78575542>

        Reviewed by Dewei Zhu.

        The "helper" is a popen object, which are not pickleable, and cannot
        belong to an instantiated port object.

        * Scripts/webkitpy/port/base.py:
        (Port): Make helper class variable.
        (Port.__init__):
        (Port.stop_helper): All classes should share the same code to stop the helper process.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper): Use class variable.
        (MacPort.stop_helper): Moved to base class..

2021-06-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Sync Tools/win/DLLLauncher/DLLLauncherMain.cpp with Source/JavaScriptCore/shell/DLLLauncherMain.cpp
        https://bugs.webkit.org/show_bug.cgi?id=226451

        Reviewed by Don Olmstead.

        Tools/win/DLLLauncher/DLLLauncherMain.cpp and
        Source/JavaScriptCore/shell/DLLLauncherMain.cpp should be same.
        But, r231403 changed only JavaScriptCore's one. r178530 changed
        only Tools's one.

        r178530 added flags for Debug CRT Heap. However, WebKit isn't
        using Debug CRT Heap nowadays. And, using _CRTDBG_CHECK_ALWAYS_DF
        flag makes WebKit unbearably slow.

        Just copied JavaScriptCore's one to overwrite Tools's one.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (copyEnvironmentVariable):
        (getStringValue):
        (applePathFromRegistry):
        (appleApplicationSupportDirectory):
        (iTunesDirectory):
        (prependPath):
        (fatalError):
        (directoryExists):
        (modifyPath):
        (getLastErrorString):
        (wWinMain):

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

        REGRESSION (iOS 14.5): Can't go back and render previous page properly after "location.href"
        https://bugs.webkit.org/show_bug.cgi?id=226323
        <rdar://problem/78623536>

        Reviewed by Alex Christensen.

        New API test written by Alex Christensen to cover this case.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Print bot configuration in build.webkit.org builds
        https://bugs.webkit.org/show_bug.cgi?id=226353

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/factories.py:
        (Factory.__init__): Added PrintConfiguration step.
        * CISupport/build-webkit-org/steps.py:
        (PrintConfiguration): Copied from ews code, step to print configuration.
        (PrintConfiguration.__init__):
        (PrintConfiguration.run):
        (PrintConfiguration.convert_build_to_os_name):
        (PrintConfiguration.getResultSummary):
        * CISupport/build-webkit-org/steps_unittest.py: Added unit-tests.

2021-05-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] UI process crashes when deallocating WKWebView in a script message handler during an active touch event
        https://bugs.webkit.org/show_bug.cgi?id=226426
        rdar://75425319

        Reviewed by Darin Adler.

        Add a new API test that exercises the crash.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/TouchEventTests.mm: Added.
        (-[TouchEventScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[WKWebView touchEventGestureRecognizer]):
        (TestWebKitAPI::updateSimulatedTouchEvent):
        (TestWebKitAPI::simulatedTouchEvent):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/active-touch-events.html: Added.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView textInputContentView]):
        (-[TestWKWebView textInputContentView]): Deleted.
        * TestWebKitAPI/ios/UIKitSPI.h:

2021-05-30  Darin Adler  <darin@apple.com>

        Remove WTF::Optional synonym for std::optional, using that class template directly instead
        https://bugs.webkit.org/show_bug.cgi?id=226433

        Reviewed by Chris Dumez.

        * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>.

2021-05-30  Jean-Yves Avenard  <jya@apple.com>

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

        Reviewed by Darin Adler.

        Remove WKViewDelegate test. This test specifically tests the old, C-API
        delegate callback that’s not exposed as API and no one uses. This feature
        is explicitly deprecated and no-one uses it.

        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm: Delete test

2021-05-29  Ryan Haddad  <ryanhaddad@apple.com>

        [webkitpy] Add a delay between successive iOS simulator boots
        https://bugs.webkit.org/show_bug.cgi?id=226376

        Reviewed by Darin Adler.

        In certain configurations, rapidly attempting to boot multiple
        iOS simulators can cause them to fail to boot. Add a 10 second
        delay to ensure that each one has a chance to initialize before
        moving to the next one.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._boot_device):

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

        Adopt clang thread safety annotations in WTF::DataMutex
        https://bugs.webkit.org/show_bug.cgi?id=226431

        Reviewed by Darin Adler.

        Update API test due to DataMutex API changes.

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

2021-05-29  Sam Weinig  <weinig@apple.com>

        Split calc() related files into 1-class per file structure
        https://bugs.webkit.org/show_bug.cgi?id=226421

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        Update test to include additonal header now needed.

2021-05-28  Darin Adler  <darin@apple.com>

        Clients of optional should use has_value instead of relying on hasValue macro
        https://bugs.webkit.org/show_bug.cgi?id=226395

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp: Use has_value.
        * TestWebKitAPI/Tests/WebCore/CBORWriterTest.cpp: Ditto.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp: Ditto.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (AudioRenderingWebViewTest::handleStart): Ditto.
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::setPosition): Ditto.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView canPerformAction:withSender:]): Ditto.

2021-05-28  Alex Christensen  <achristensen@webkit.org>

        Punycode encode U+0BE6 when not in context of other Tamil characters
        https://bugs.webkit.org/show_bug.cgi?id=226409
        <rdar://78160926>

        Reviewed by Tim Horton.

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

2021-05-28  Zhifei Fang  <zhifei_fang@apple.com>

        [JSC] Escape $ only when run with SSH
        https://bugs.webkit.org/show_bug.cgi?id=226385

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

2021-05-28  Matt Gilligan  <matthew_gilligan@apple.com>

        Prevent resetting scroll position in unnecessary cases during page load
        https://bugs.webkit.org/show_bug.cgi?id=226338
        rdar://75334651

        Reviewed by Simon Fraser.

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

2021-05-28  Zhifei Fang  <zhifei_fang@apple.com>

        [JSC] Fix run-jsc-stress-tests missing escape $
        https://bugs.webkit.org/show_bug.cgi?id=226385

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

2021-05-27  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: allow snapshotting of elements with CSS animations/transitions if they're paused
        https://bugs.webkit.org/show_bug.cgi?id=226313
        <rdar://problem/78534076>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (waitForSampledPageTopColorToChange): Added.
        (waitForSampledPageTopColorToChangeForHTML):
        (TEST.SampledPageTopColor.HitTestBeforeCSSTransition): Added.
        (TEST.SampledPageTopColor.HitTestDuringCSSTransition): Added.
        (TEST.SampledPageTopColor.HitTestAfterCSSTransition): Added.
        (TEST.SampledPageTopColor.HitTestBeforeCSSAnimation): Added.
        (TEST.SampledPageTopColor.HitTestDuringCSSAnimation): Added.
        (TEST.SampledPageTopColor.HitTestAfterCSSAnimation): Added.
        (TEST.SampledPageTopColor.HitTestCSSAnimation): Deleted.

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

        [webkitcorey] Gracefully handle CNTRL-C in TaskPool
        https://bugs.webkit.org/show_bug.cgi?id=226238
        <rdar://problem/78472148>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (_BiDirectionalQueue.close): Tear-down queue objects while suppressing any logging.
        (_Process.handler): Both SIGTERM and SIGINT signals should stop worker processes.
        (_Process.main): Add SIGINT handler, explicitly close queue.
        (TaskPool.__init__): Defer worker and queue construction to context manager so that we
        do not have an instantiated but invalid queue if pipes are broken by children processes.
        (TaskPool.__enter__): Construct worker processes.
        (TaskPool.do): Only catch Queue.Empty exception.
        (TaskPool.__exit__): Explicitly close queue, reset workers and queue.

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

        Next step toward using std::optional directly instead of through WTF::Optional typedef
        https://bugs.webkit.org/show_bug.cgi?id=226280

        Reviewed by Chris Dumez.

        * Scripts/do-webcore-rename: Use script to rename valueOr, WTF::nullopt, WTF::nullopt_t,
        WTF::Optional, WTF::makeOptional, and makeOptional. Other renamings can't necessarily
        be done by the script and so will be done in later passes.

        * <many files>: Accept the renaming done by do-webcore-rename.

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

        [webkitpy] Use existing signal handler when printing stacktrace
        https://bugs.webkit.org/show_bug.cgi?id=226236
        <rdar://problem/78471882>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/interrupt_debugging.py:
        (log_stack_trace_on_signal): Use the same implementation for SIGTERM and SIGINT signals, call existing
        handler after logging stack trace.
        (log_stack_trace_on_term): Deleted.
        (log_stack_trace_on_ctrl_c): Deleted.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Use the new log_stack_trace_on_signal function.

2021-05-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [run-webkit-tests][Win] Strip PHP support from webserver
        https://bugs.webkit.org/show_bug.cgi?id=226287

        Reviewed by Jonathan Bedard.

        We don't have any PHP tests now.

        * Scripts/webkitpy/port/base.py:
        (Port._apache_version):
        (Port._apache_config_file_name_for_platform):
        (Port._win_php_version): Deleted.
        * Scripts/webkitpy/port/port_testcase.py:

2021-05-27  Tim Horton  <timothy_horton@apple.com>

        Introduce BifurcatedGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=226318

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cg/BifurcatedGraphicsContextTestsCG.cpp: Added.
        (TestWebKitAPI::TEST):

2021-05-27  Peng Liu  <peng.liu6@apple.com>

        Calling -[WKWebView _closeAllMediaPresentations] crashes
        https://bugs.webkit.org/show_bug.cgi?id=226305

        Reviewed by Chris Dumez.

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

2021-05-27  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Implement high-level retry loop for run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=225803

        Reviewed by Adrian Perez de Castro.

        Now that we have information on which tests produced a result and
        which tests were never heard of, introduce retry logic for the
        incomplete tests. This should only modify the behavior when using
        --gnu-parallel-runner.

        The issue here is that the MIPS boards currently in use for JSC
        testing routinely crash and, often enough, end up with filesystem
        corruption and need to have their R/W storage reinitialized.

        Work around this by re-executing the tests that we weren't able to get
        a result for. When some tests failed to complete, go through the
        process of remote initilization (copying over and unpacking the
        bundle) from scratch, so that remotes that had their remoteDirectory
        wiped will get back into play.

        To make this more efficient, introduce in-band signaling to let
        run-jsc-stress-tests know that a remote lost its state. In response,
        we kill the GNU parallel process and re-initialize all boards. This
        helps for buildbot workers that only have a few remote boards assigned
        and apparently also works around a bug in GNU parallel 20161222
        (currently the most widely deployed version) which causes it to run
        out of open files and get stuck in a busy loop.

        While here, make run-jsc-stress-tests more robust against corrupted
        status files, i.e. ignore empty ones (observed in practice) and use a
        regex to verify the contents of non-empty state files.

        For consistency, use the same logic for parsing status files when
        doing local runs.

        In testing with two remotes, run-jsc-stress-tests was able to recover
        from either one or both of its remotes rebooting and wiping their
        local storage in the middle of a test run.

        * Scripts/run-jsc-stress-tests:

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

        Make MediaSession readystate enums all lowercase
        https://bugs.webkit.org/show_bug.cgi?id=226213
        <rdar://problem/78437011>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/MediaSessionCoordinatorTest.mm:
        (TestWebKitAPI::TEST_F):

2021-05-26  Stephan Szabo  <stephan.szabo@sony.com>

        Cleanup temporary directory after TestWTF's FileSystemTests
        https://bugs.webkit.org/show_bug.cgi?id=226300

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp: move to deleteNonEmptyDirectory during test cleanup

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

        [CMake] Support USE_ANGLE_EGL on additional platforms
        https://bugs.webkit.org/show_bug.cgi?id=224888
        <rdar://problem/77280211>

        Reviewed by Ken Russell.

        Generate source listings for Metal and OpenGL ANGLE backends.

        * Scripts/update-angle:

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

        [webkitpy] Refactor SimulatorDevice (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=225158

        Unreviewed follow-up fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): When no UI Manager service is defined, we should early exit.

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

        Do not skip SetCommitQueueMinusFlagOnPatch step on EWS test instances
        https://bugs.webkit.org/show_bug.cgi?id=226289

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (SetCommitQueueMinusFlagOnPatch.start):
        (SetCommitQueueMinusFlagOnPatch.doStepIf): Deleted.

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

        [run-webkit-tests] Strip php support from webserver (Apache)
        https://bugs.webkit.org/show_bug.cgi?id=226032
        <rdar://problem/78269181>

        Reviewed by Adrian Perez de Castro.

        * Scripts/webkitpy/port/base.py:
        (Port._apache_config_file_name_for_platform): Use explicit Darwin httpd.conf.
        (Port._is_darwin_php_version_7): Deleted.
        (Port._darwin_php_version): Deleted.

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

        [test-lldb-webkit] Update for Xcode 12.5
        https://bugs.webkit.org/show_bug.cgi?id=226115
        <rdar://problem/78331664>

        Reviewed by Darin Adler.

        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFStringImpl_SummaryProvider_8bit_string): Use unicode directly.
        (TestSummaryProviders.serial_test_WTFStringImpl_SummaryProvider_16bit_string): Ditto.
        (TestSummaryProviders.serial_test_WTFString_SummaryProvider_8bit_string): Ditto.
        (TestSummaryProviders.serial_test_WTFString_SummaryProvider_16bit_string): Ditto.

2021-05-26  Sam Sneddon  <gsnedders@apple.com>

        Fix remaining test-webkitpy{,-python2} --all --integration-tests failures
        https://bugs.webkit.org/show_bug.cgi?id=226242

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitTest.test_remote_branch_ref): Allow main
        (GitTest.test_native_branch):  Allow main
        (SVNTest.clean_bogus_dir): Deleted.
        (SVNTest.test_diff_for_file_with_existing_bogus_dir): Deleted.
        (SVNTest.test_diff_for_file_with_missing_bogus_dir): Deleted.
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN._setup_bogus_dir): Use tempfile
        (SVN._teardown_bogus_dir): Make no-op when no bogus dir exists
        (SVN._bogus_dir_name): Deleted.

2021-05-25  Chris Fleizach  <cfleizach@apple.com>

        AX: Improve string conversion in AccessibilityController::injectAccessibilityPreference
        https://bugs.webkit.org/show_bug.cgi?id=226239

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::injectAccessibilityPreference):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/StringFunctionsCocoa.h: Added.
        (WTR::toWK):

2021-05-25  Tim Horton  <timothy_horton@apple.com>

        Virtualize GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=226170

        Reviewed by Simon Fraser.

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

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

        Raise jitMemoryReservationSize for ftl-no-cjit-small-pool* tests.
        https://bugs.webkit.org/show_bug.cgi?id=226205

        Rubber-stamped by Saam Barati.

        The bump to 75K didn't relieve the jsc EWS bot.  Trying a bump to 100K this time.

        * Scripts/run-jsc-stress-tests:

2021-05-25  Keith Miller  <keith_miller@apple.com>

        Wasm low memory tests should have a larger executable pool
        https://bugs.webkit.org/show_bug.cgi?id=226233

        Reviewed by Saam Barati.

        With some other recent JSC changes we can sometimes go over the allocation pool we set aside. Let's bump the number.

        * Scripts/run-jsc-stress-tests:

2021-05-25  Sam Sneddon  <gsnedders@apple.com>

        Run webkitpy integration tests under pytest by default
        https://bugs.webkit.org/show_bug.cgi?id=226017

        Reviewed by Jonathan Bedard.

        This involves adding a variety of new xfail annotations and moving some tests to
        be serial to avoid flakiness.

        * Scripts/webkitpy/common/config/committers_unittest.py:
        (CommittersTest):
        * Scripts/webkitpy/conftest.py:
        (pytest_addoption): Remove --run-integration
        (pytest_collection_modifyitems): Remove --run-integration
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.serial_test_basic):
        (RunTest.serial_test_batch_size):
        (RunTest.serial_test_dryrun):
        (RunTest.serial_test_full_results_html):
        (RunTest.serial_test_no_order_with_directory_entries_in_natural_order):
        (RunTest.serial_test_gc_between_tests):
        (RunTest.serial_test_check_for_world_leaks):
        (RunTest.serial_test_complex_text):
        (RunTest.serial_test_threaded):
        (RunTest.serial_test_run_force):
        (RunTest.serial_test_run_singly):
        (RunTest.serial_test_skip_failing_tests):
        (RunTest.serial_test_run_singly_actually_runs_tests):
        (RunTest.serial_test_stderr_is_saved):
        (RunTest.serial_test_results_directory_absolute):
        (RunTest.serial_test_results_directory_default):
        (RunTest.serial_test_results_directory_relative):
        (RunTest.serial_test_run_order__inline):
        (RunTest.serial_test_additional_platform_directory):
        (RunTest.serial_test_no_http_and_force):
        (RunTest.serial_test_no_http_tests):
        (RunTest.serial_test_platform_tests_are_found):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (BaseTest):
        (HTTPServerTest):
        (HTTPServerTest.integration_test_server__normal):
        (HTTPServerTest.integration_test_server__fails):
        (HTTPServerTest.integration_test_port_and_root):
        (WebsocketserverTest):
        (WebsocketserverTest.integration_test_server__normal):
        (WebsocketserverTest.integration_test_server__fails):
        (WebsocketserverTest.integration_test_port_and_root):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase):
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest):
        * Scripts/webkitpy/test/markers.py:
        (skip): Add skip
        * Scripts/webkitpy/tool/steps/haslanded_unittest.py:
        (HasLandedTest): Always skip this, as it seems to fail always

2021-05-24  Darin Adler  <darin@apple.com>

        Switch from WTF::Optional to std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211674

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/style/checker.py: Removed exceptions from the WTF::Optional
        style rule for WebRTC.

        * Scripts/webkitpy/style/checkers/cpp.py: Removed check_wtf_optional.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Removed test_wtf_optional.
        * TestWebKitAPI/CMakeLists.txt: Removed Optional.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/Optional.cpp: Removed.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp: Updated test to not rely on non-standard
        aspects of moving from an optional. Instead check the retain count to make sure we
        have moved successfully.
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Ditto.

2021-05-25  Lauro Moura  <lmoura@igalia.com>

        [WebDriver][WPE] Support running w3c webdriver tests with Cog
        https://bugs.webkit.org/show_bug.cgi?id=226203

        Reviewed by Adrian Perez de Castro.

        Using the same infrastructure as the MiniBrowser, through ENABLE_COG.

        Selenium not yet supported, as the browserName capability is hardcoded
        as MiniBrowser in selenium's test codebase.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.browser_env): Factored out of run_minibrowser to be used in the WebDriver driver module.
        (WPEPort.run_minibrowser):
        * Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py:
        (WebDriverWPE.browser_args):
        (WebDriverWPE.browser_env):

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

        Stop using UncheckedLock in Condition API tests
        https://bugs.webkit.org/show_bug.cgi?id=226198

        Reviewed by Sam Weinig.

        Stop using UncheckedLock in Condition API tests. This is a step towards phasing out UncheckedLock
        in favor the Lock so that we can benefit from Clang Thread Safety Analysis.

        * TestWebKitAPI/Tests/WTF/Condition.cpp:

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

        Raise jitMemoryReservationSize for ftl-no-cjit-small-pool* tests.
        https://bugs.webkit.org/show_bug.cgi?id=226205

        Reviewed by Saam Barati.

        Raise jitMemoryReservationSize for ftl-no-cjit-small-pool* tests from 50000 to
        75000.  The 50000 number was picked years ago to be a size that is small, but is
        still large enough for JSC tests to pass.  50000 appears to not be sufficient
        anymore.  This has caused some JSC tests to fail intermittently on the EWS bots.

        Raising the size to 75000 to give the tests a little more room to work in.

        * Scripts/run-jsc-stress-tests:

2021-05-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Fix build failure for WK API WTF::String usage
        https://bugs.webkit.org/show_bug.cgi?id=226204
        <rdar://problem/78428840>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::injectAccessibilityPreference):

2021-05-24  Sam Weinig  <weinig@apple.com>

        Convert DestinationColorSpace from an enum to class wrapping a platform color space (CGColorSpaceRef for CG ports, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=226143

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Upate test to use new DestinationColorSpace type.

2021-05-24  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Update scripts for JSC test changes
        https://bugs.webkit.org/show_bug.cgi?id=226181

        Reviewed by Ross Kirsling.

        Update the scripts to pass the status file location and
        unique test id into the runner for handling some crash
        cases, and update the status command because the status
        is written as a number in our case rather than being
        the return type from executing the program directly.

        * Scripts/webkitruby/jsc-stress-test-writer-playstation.rb:

2021-05-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
        https://bugs.webkit.org/show_bug.cgi?id=225909

        Reviewed by Per Arne Vollan.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::injectAccessibilityPreference):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::injectAccessibilityPreference):

2021-05-24  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendLiteral
        https://bugs.webkit.org/show_bug.cgi?id=226137

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Use append instead of appendLiteral.
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        (TestWebKitAPI::createCommand): Use makeString instead of StringBuilder.
        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::TEST_F): Made lots of fixes to code inside #if TEST_OUTPUT,
        which hasn't compiled in a long time. Still not 100% there, but closer.
        * TestWebKitAPI/Tests/WebCore/TextCodec.cpp:
        (TestWebKitAPI::testDecode): Use append instead of appendLiteral.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::helpText const): Ditto.

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

        Unreviewed, reverting r277940.
        https://bugs.webkit.org/show_bug.cgi?id=226182

        Caused Safari crash under IPC::typeFromCFTypeRef

        Reverted changeset:

        "Convert DestinationColorSpace from an enum to class wrapping
        a platform color space (CGColorSpaceRef for CG ports, etc.)"
        https://bugs.webkit.org/show_bug.cgi?id=226143
        https://trac.webkit.org/changeset/277940

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

        Drop CheckedLock / CheckedCondition aliases
        https://bugs.webkit.org/show_bug.cgi?id=226176

        Reviewed by Kate Cheney.

        Drop CheckedLock / CheckedCondition aliases now that they are the default.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedConditionTest.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/CheckedLockTest.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AXThread::createThreadIfNeeded):

2021-05-24  Angelos Oikonomopoulos  <angelos@igalia.com>

        Be resilient against remote failure when determining the native architecture
        https://bugs.webkit.org/show_bug.cgi?id=226009

        Reviewed by Jonathan Bedard.

        Change determineNativeArchitecture to not return an empty string if the
        first remote host happens to be down. Instead, check every remote host in turn
        until one responds.

        Returning an empty string ended up passing an empty parameter to --arch when
        invoking run-jsc-stress-tests, which resulted in an inappropriate set of tests
        being selected, leading to occasional partial but massive test failures.

        * Scripts/run-javascriptcore-tests:
        (runTest):
        (runJSCStressTests):
        * Scripts/webkitdirs.pm:
        (determineNativeArchitecture):
        (determineArchitecture):
        (nativeArchitecture):

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

        Make CheckedLock the default Lock
        https://bugs.webkit.org/show_bug.cgi?id=226157

        Reviewed by Darin Adler.

        Make CheckedLock the default Lock so that we get more benefits from Clang
        Thread Safety Analysis. Note that CheckedLock 100% relies on the existing
        Lock implementation and merely adds the clang anotations for thread 
        safety.

        That this patch does is:
        1. Rename the Lock class to UncheckedLock
        2. Rename the CheckedLock class to Lock
        3. Rename the Condition class to UncheckedCondition
        4. Rename the CheckedCondition class to Condition
        5. Update the types of certain variables from Lock / Condition to
           UncheckedLock / UncheckedCondition if I got a build failure. Build 
           failures are usually caused by the following facts:
           - Locker<CheckedLock> doesn't subclass AbstractLocker which a lot of
             JSC code passes as argument
           - Locker<CheckedLock> has no move constructor
           - Locker<CheckedLock> cannot be constructed from a lock pointer, only
             a reference

        For now, CheckedLock and CheckedCondition remain as aliases to Lock and 
        Condition, in their respective CheckedLock.h / CheckedCondition.h headers.
        I will drop them in a follow-up to reduce patch size.

        I will also follow-up to try and get rid of as much usage of UncheckedLock
        and UncheckedCondition as possible. I did not try very hard in this patch
        to reduce patch size. 

        * TestWebKitAPI/Tests/WTF/CheckedConditionTest.cpp:
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AXThread::createThreadIfNeeded):

2021-05-23  Sam Weinig  <weinig@apple.com>

        Convert DestinationColorSpace from an enum to class wrapping a platform color space (CGColorSpaceRef for CG ports, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=226143

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Upate test to use new DestinationColorSpace type.

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

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::waitMyTurn):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::yieldToThread):

2021-05-22  Adrian Perez de Castro  <aperez@igalia.com>

        [Tools][run-webkit-tests] Remove more leftover tests webserver PHP remains
        https://bugs.webkit.org/show_bug.cgi?id=226089

        Reviewed by Alexey Proskuryakov.

        Remove leftover PHP module configurations used on Linux now that PHP is not used anymore.

        * Scripts/webkitpy/port/base.py:
        (Port._debian_php_version): Removed.
        (Port._fedora_php_version): Removed.
        (Port._is_fedora_php_version_7): Removed.
        (Port._apache_config_file_name_for_platform): Modofied to not use the removed
        helper methods.
        * gtk/install-dependencies: Remove PHP packages.
        * wpe/install-dependencies: Ditto.

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

        Unreviewed, reverting r277913.
        https://bugs.webkit.org/show_bug.cgi?id=226140

        Caused multiple layout-test crash on mac debug queues

        Reverted changeset:

        "Replace LockHolder with Locker in local variables"
        https://bugs.webkit.org/show_bug.cgi?id=226133
        https://trac.webkit.org/changeset/277913

2021-05-22  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        [ Debug ] TestWebKitAPI.IPCTestingAPI.CanDetectNilReplyBlocks (API-tests) is a constant crash
        https://bugs.webkit.org/show_bug.cgi?id=226125

        Reviewed by Ryosuke Niwa.

        Turn this test off for Debug.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:

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

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::waitMyTurn):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::yieldToThread):

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

        Stop using holdLock() in WebKit/WebKitLegacy/Tools as it is not compatible with Clang thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=226127

        Reviewed by Alex Christensen.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_lock_guard):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_lock_guard):
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::testThreadGroup):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AXThread::dispatch):
        (WTR::AXThread::dispatchFunctionsFromAXThread):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AXThread::initializeRunLoop):

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

        Run layout tests in stress mode for 10 iterations on regular EWS layout-test queues
        https://bugs.webkit.org/show_bug.cgi?id=226097

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/factories.py:
        * CISupport/ews-build/factories_unittest.py:
        * CISupport/ews-build/steps.py:
        (AnalyzePatch.getResultSummary):
        (FindModifiedLayoutTests.__init__):
        (FindModifiedLayoutTests.start):
        (RunWebKitTestsInStressMode):
        (RunWebKitTestsInStressMode.__init__):
        (RunWebKitTestsInStressMode.setLayoutTestCommand):
        (RunWebKitTestsInStressMode.doStepIf):
        * CISupport/ews-build/steps_unittest.py:

2021-05-21  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Update AudioSession buffer size handling
        https://bugs.webkit.org/show_bug.cgi?id=225927
        rdar://76920375

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WebKit/audio-buffer-size.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/AudioBufferSize.mm: Added.
        (TestWebKitAPI::waitForBufferSizeChange):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm:
        (TEST_F):

2021-05-21  Sam Sneddon  <gsnedders@apple.com>

        Fix Python 3.6+ DeprecationWarnings about unknown escapes
        https://bugs.webkit.org/show_bug.cgi?id=226018

        Reviewed by Jonathan Bedard.

        Fix Python 3.6+ DeprecationWarnings about unknown escapes

        * CISupport/build-webkit-org/loadConfig.py:
        (getTagsForBuilder):
        * CISupport/build-webkit-org/steps.py:
        (RunGLibAPITests.commandComplete):
        (RunWebDriverTests.commandComplete):
        * CISupport/ews-app/ews/common/bugzilla.py:
        (BugzillaBeautifulSoup._parse_attachment_ids_request_query):
        * CISupport/ews-app/ews/common/buildbot.py:
        (Buildbot._get_display_name_from_builder_name):
        * CISupport/ews-build/loadConfig.py:
        (getTagsForBuilder):
        * CISupport/ews-build/steps.py:
        (CleanUpGitIndexLock.start):
        (FindModifiedLayoutTests):
        (BuildLogLineObserver.__init__):
        (PushCommitToWebKitRepo):
        * CISupport/ews-build/steps_unittest.py:
        * Scripts/ic-stats.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn):
        * Scripts/webkitpy/common/checkout/changelog.py:
        (parse_bug_id_from_changelog):
        (ChangeLogEntry):
        (update_with_unreviewed_message):
        (set_reviewer):
        * Scripts/webkitpy/common/checkout/diff_parser.py:
        (git_diff_to_svn_diff):
        * Scripts/webkitpy/common/checkout/diff_test_data.py:
        * Scripts/webkitpy/common/checkout/scm/commitmessage.py:
        (_first_non_empty_line_after_index):
        (CommitMessage.description):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.commit_success_regexp):
        (Git.timestamp_of_revision):
        (Git.git_commit_from_svn_revision):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.strip_r_from_svn_revision):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.commit_success_regexp):
        (SVN.revisions_changing_file):
        * Scripts/webkitpy/common/checksvnconfigfile.py:
        (check):
        * Scripts/webkitpy/common/config/contributionareas.py:
        (ContributionAreas._split_camelcase):
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.assert_filesystem_normalizes):
        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        (Bug.commit_revision):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries._parse_attachment_ids_request_query):
        (Bugzilla._parse_bug_id_from_attachment_page):
        (Bugzilla._parse_attachment_id_from_add_patch_to_bug_response):
        (Bugzilla._check_create_bug_response):
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (BuildBot._parse_current_build_cell):
        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._parse_security_tool_output):
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        (ParsedJSONResultsTest):
        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.get_timestamp_from_log):
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.available_sdks):
        * Scripts/webkitpy/common/system/user.py:
        (User._wait_on_list_response):
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._rule_definitions_as_set):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser._parse_modifiers):
        (TestExpectationParser._tokenize_line):
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest):
        * Scripts/webkitpy/port/base.py:
        (Port._natural_sort_key):
        * Scripts/webkitpy/port/driver.py:
        (DriverOutput):
        (Driver._check_for_driver_timeout):
        (Driver._check_for_driver_crash_or_unresponsiveness):
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._read):
        * Scripts/webkitpy/port/win.py:
        (WinPort.write_registry_value):
        * Scripts/webkitpy/pytest.ini:
        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._should_skip_file_path):
        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_entry):
        * Scripts/webkitpy/style/checkers/cmake.py:
        (CMakeChecker._process_line):
        (CMakeChecker._check_no_space_cmds):
        (CMakeChecker._check_one_space_cmds):
        (CMakeChecker._check_non_lowercase_cmd):
        (CMakeChecker._check_list_order):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (FileInfo.repository_name):
        (check_for_non_standard_constructs):
        (check_spacing):
        (check_language):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        * Scripts/webkitpy/style/checkers/jstest.py:
        (map_functions_to_dict):
        (strip_trailing_blank_lines_and_comments):
        * Scripts/webkitpy/style/checkers/messagesin.py:
        (MessagesInChecker.check_WTF_prefix):
        * Scripts/webkitpy/style/patchreader.py:
        (PatchReader.check):
        * Scripts/webkitpy/test/runner.py:
        * Scripts/webkitpy/test/runner_unittest.py:
        (FakeLoader.__init__):
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        (AnalyzeChangeLog._enumerate_changelogs):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintBaselines.__init__):
        (FindResolvedBugs.execute):
        * Scripts/webkitpy/tool/commands/upload.py:
        (MarkBugFixed._determine_bug_id_and_svn_revision):
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        (PromptForBugOrTitle.run):
        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.read_webkit_prefixed_css_property_list):
        (_W3CTestConverter.legacy_read_webkit_prefixed_css_property_list):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.support_files):
        * lldb/lldb_dump_class_layout.py:
        (LLDBDebuggerInstance._get_first_file_architecture):

2021-05-20  Julian Gonzalez  <julian_a_gonzalez@apple.com>

        WKRemoteObjectRegistry  _invokeMethod needs to check for nil completionHandlers
        https://bugs.webkit.org/show_bug.cgi?id=225941

        Reviewed by Ryosuke Niwa.

        Add an IPC test with a nil (really malformed) completion handler
        that makes sure the invocation is not performed.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (-[IPCTestingAPIDelegate sayHello:completionHandler:]):
        (-[IPCTestingAPIDelegate sayHelloWasCalled]):
        (TEST):

2021-05-20  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r277606.
        rdar://78283324

        Need to wait for more projects to migrate

        Reverted changeset:

        "[Cocoa] Remove prototype loadSimulatedRequest methods"
        https://bugs.webkit.org/show_bug.cgi?id=223658
        https://commits.webkit.org/r277606

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

        Mark ServiceWorkerThreadProxy with a default app-bound value
        https://bugs.webkit.org/show_bug.cgi?id=223201
        <rdar://problem/77664416>

        Reviewed by Youenn Fablet.

        Test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[SWAppBoundRequestMessageHandler userContentController:didReceiveScriptMessage:]):

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

        Use Python 3 for running various scripts on EWS
        https://bugs.webkit.org/show_bug.cgi?id=226041

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py: Use Python 3.
        (CleanBuild):
        (TriggerCrashLogSubmission):
        (WaitForCrashCollection):
        (ArchiveBuiltProduct):
        (ExtractBuiltProduct):
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.

2021-05-20  Robin Morisset  <rmorisset@apple.com>

        The test of SmallSet.cpp should pass the right HashTrait to the HashSet it uses as a reference
        https://bugs.webkit.org/show_bug.cgi?id=226027

        Reviewed by Mark Lam.

        SmallSet allows all values except for the max value.
        So we test it on small values, including 0.

        HashSet by default forbids 0, so it made the test crash.
        We can trivially fix it by passing UnsignedWithZeroKeyHashTraits, which allows everything which is not max() or max()-1

        * TestWebKitAPI/Tests/WTF/SmallSet.cpp:
        (TestWebKitAPI::testSmallSetOfUnsigned):

2021-05-20  Sam Sneddon  <gsnedders@apple.com>

        Add tox file for webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=226016

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tox.ini: Added.

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

        Unreviewed contributor name update.

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

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

        [webkitpy] Forward booted simulators to children processes
        https://bugs.webkit.org/show_bug.cgi?id=225933
        <rdar://problem/78169900>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/api_tests/runner.py:
        (setup_shard): Set DeviceManager global variable from parent process.
        (Runner.command_for_port): Use Port's device manager instead of simulated device manager.
        (Runner.run): Pass DeviceManager details to children processes.

2021-05-20  Sam Sneddon  <gsnedders@apple.com>

        Store whether a test is slow on TestInput
        https://bugs.webkit.org/show_bug.cgi?id=224563

        Reviewed by Jonathan Bedard.

        Additionally, notably, this makes a TestResult store a TestInput rather than a
        test_name string. With that there, we then don't need to punch through multiple
        layers to find out whether a test is slow or not. Note that replacing the
        test_name with a Test or TestInput as part of removing the 1:1 relationship
        between files and tests.

        With this done, we don't have to pass around a test_is_slow_fn, as we can directly
        look at the result to determine whether or not it is slow.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__): Remove test_is_slow_fn argument
        (LayoutTestRunner._mark_interrupted_tests_as_skipped): Remove test_is_slow argument
        (LayoutTestRunner._update_summary_with_result): Remove test_is_slow argument
        (Worker._run_test_in_another_thread): Remove test_is_slow argument
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests._runner): Remove test_is_slow_fn argument
        (LayoutTestRunnerTests.test_update_summary_with_result): TestResult arg rename
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager): Improve docstring
        (Manager.__init__): Tidy up reading tests-options.json
        (Manager._test_input_for_file): Set is_slow
        (Manager.run): Remove test_is_slow_fn argument
        (Manager._look_for_new_crash_logs): Remove test_is_slow_fn/test_is_slow argument
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Store TestInput object
        (SingleTestRunner._test_name): Replacement getter
        (SingleTestRunner._should_run_pixel_test): Replacement getter
        (SingleTestRunner._should_dump_jsconsolelog_in_stderr): Replacement getter
        (SingleTestRunner._reference_files): Replacement getter
        (SingleTestRunner._timeout): Replacement getter
        (SingleTestRunner._compare_output): Pass TestInput to TestResult
        (SingleTestRunner._run_reftest): Pass TestInput to TestResult
        (SingleTestRunner._compare_output_with_reference): Pass TestInput to TestResult
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput): Add is_slow boolean
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__): Rename test_name -> test_input, construct TestInput if we must
        (TestResult.test_name): Replacement getter
        * Scripts/webkitpy/layout_tests/models/test_results_unittest.py:
        (TestResultsTest.test_pickle_roundtrip): TestResult arg rename
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.add): Remove test_is_slow argument, look at TestResult
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results): Remove test_is_slow argument
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_tests_options): Add a test that test-options.json works

2021-05-19  Devin Rousso  <drousso@apple.com>

        Add a way to create `"wheel"` events from gesture/touch events
        https://bugs.webkit.org/show_bug.cgi?id=225788
        <rdar://problem/76714308>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::scaleGestureStart): Added.
        (WTR::EventSendingController::scaleGestureChange): Added.
        (WTR::EventSendingController::scaleGestureEnd): Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (EventSenderCGGesturePhaseFromNSEventPhase):
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        (-[EventSenderSyntheticEvent initMagnifyEventAtLocation:globalLocation:magnification:phase:time:eventNumber:window:]): Added.
        (-[EventSenderSyntheticEvent magnification]): Added.
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::sendMouseDownToStartPressureEvents):
        (WTR::EventSenderProxy::beginPressureEvent):
        (WTR::EventSenderProxy::pressureChangeEvent):
        (WTR::EventSenderProxy::mouseForceClick):
        (WTR::EventSenderProxy::startAndCancelMouseForceClick):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::scaleGestureStart): Added.
        (WTR::EventSenderProxy::scaleGestureChange): Added.
        (WTR::EventSenderProxy::scaleGestureEnd): Added.
        Allow tests to synthesize scale (a.k.a. magnify) gesture events.

        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        (WTR::EventSenderProxy::EventSenderProxy):
        Drive-by: Rename `eventNumber` to `m_eventNumber` since it's a member variable.

        * DumpRenderTree/Scripts/generate-derived-sources.sh:
        * DumpRenderTree/DerivedSources.make:
        * WebKitTestRunner/Scripts/generate-derived-sources.sh:
        * WebKitTestRunner/DerivedSources.make:
        Make sure to pass all feature flags when generating JS files from IDL files.

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

        Unreviewed, try to fix the internal build after r277740

        It seems `keyData` was intended to be a `String` rather than a `Vector<uint8_t>`.

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

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

        Drop "get" prefix from SQLiteStatement member functions as well as out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=225971

        Reviewed by Darin Adler.

        Add API test coverage for new Vector constructor.

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

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

        Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF
        https://bugs.webkit.org/show_bug.cgi?id=225839

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/SaturatedArithmeticOperations.cpp: Updated
        tests for changes to SaturatedArithmetic.h.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: Updated tests for changes
        to StringBuilder.
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::wkMediaCaptureStateString): Ditto.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        Added include of StringConcatenateCF.h.
        Added StringTypeAdapter for WKStringRef.
        (WTR::styleDecToStr): Use ASCIILiteral instead of StringBuilder.
        (WTR::string): Removed unneeded toWTFString since the WKStringRef
        StringTypeAdapter takes care of it.
        (WTR::string): Renamed from frameToStr. Use makeString.
        (WTR::dumpResourceURL): Use append instead of appendLiteral.
        (WTR::dumpFrameDescriptionSuitableForTestResult): Deleted.
        (WTR::dumpLoadEvent): Use makeString.
        (WTR::string): Renamed from a longer name. Return a String
        instead of building in a StringBuilder. Use makeString.
        (WTR::string): Ditto.
        (WTR::dumpErrorDescriptionSuitableForTestResult): Removed
        unneeded toWTFString.
        (WTR::dumpFrameScrollPosition): Ditto.
        (WTR::dumpDescendantFramesText): Ditto.
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive): Removed an
        unneeded local variable.
        (WTR::InjectedBundlePage::dump): Removed unneeded toWTFString.
        (WTR::InjectedBundlePage::didReceiveTitleForFrame): Ditto.
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame):
        Updated for functon name change.
        (WTR::InjectedBundlePage::willSendRequestForFrame): Ditto.
        Also use variadic append. Also use makeString.
        (WTR::InjectedBundlePage::didReceiveResponseForResource): Ditto.
        (WTR::InjectedBundlePage::didFinishLoadForResource): Ditto.
        (WTR::InjectedBundlePage::didFailLoadForResource): Ditto.
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction): Ditto.
        (WTR::InjectedBundlePage::decidePolicyForResponse): Ditto.
        (WTR::InjectedBundlePage::willAddMessageToConsole): Ditto.
        (WTR::InjectedBundlePage::willSetStatusbarText): Ditto.
        (WTR::InjectedBundlePage::willRunJavaScriptPrompt): Ditto.
        (WTR::InjectedBundlePage::didExceedDatabaseQuota): Ditto.
        (WTR::InjectedBundlePage::shouldInsertNode): Ditto.
        (WTR::InjectedBundlePage::shouldInsertText): Ditto.
        (WTR::InjectedBundlePage::shouldDeleteRange): Ditto.
        (WTR::InjectedBundlePage::shouldChangeSelectedRange): Ditto.
        (WTR::InjectedBundlePage::shouldApplyStyle): Ditto.
        (WTR::InjectedBundlePage::didBeginEditing): Ditto.
        (WTR::InjectedBundlePage::didEndEditing): Ditto.
        (WTR::InjectedBundlePage::didChange): Ditto.
        (WTR::InjectedBundlePage::didChangeSelection): Ditto.
        (WTR::InjectedBundlePage::dumpHistory): Ditto.

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

        Use Python 3 for running various scripts on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=225929

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py: Use Python 3. Also removed ./ from invocation to match with ews code.
        (TriggerCrashLogSubmission):
        (WaitForCrashCollection):
        (CleanBuildIfScheduled):
        (DeleteStaleBuildFiles):
        (ArchiveBuiltProduct):
        (ArchiveMinifiedBuiltProduct):
        (ExtractBuiltProduct):
        * CISupport/build-webkit-org/steps_unittest.py: Updated unit-tests.
        (TestCleanBuildIfScheduled.test_success):
        (TestCleanBuildIfScheduled.test_failure):
        * CISupport/built-product-archive: Updated shebang to Python 3.
        * CISupport/clean-build:
        * CISupport/delete-stale-build-files:
        * CISupport/trigger-crash-log-submission:
        * CISupport/wait-for-crash-collection:

2021-05-19  Sam Weinig  <weinig@apple.com>

        Update Base64 encoding/decoding to match more modern WebKit conventions
        https://bugs.webkit.org/show_bug.cgi?id=225920

        Reviewed by Chris Dumez.

        Update to use updated base64 and defaultWebCryptoMasterKey() related
        functions.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::startSecureConnection):
        (TestWebKitAPI::TCPServer::testCertificate):
        (TestWebKitAPI::TCPServer::testPrivateKey):
        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/PrivateClickMeasurementCocoa.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/SerializedCryptoKeyWrap.mm:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (testIdentity2):
        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SSLKeyGenerator.mm:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::Connection::webSocketHandshake):

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

        [webkitpy] Deprecate webkitpy/tool/grammar.py
        https://bugs.webkit.org/show_bug.cgi?id=225943
        <rdar://problem/78180111>

        Reviewed by Stephanie Lewis.

        * Scripts/bisect-builds:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_found):
        (Printer.print_workers_and_shards):
        (Printer._print_one_line_summary):
        * Scripts/webkitpy/test/printer.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (FlakyTestReporter._lookup_bug_for_flaky_test):
        (FlakyTestReporter._create_bug_for_flaky_test):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchProcessingCommand.execute):
        (ProcessBugsMixin._fetch_list_of_patches_to_process):
        (ProcessURLsMixin._fetch_list_of_patches_to_process):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/queries.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations._print_nominations):
        (SuggestNominations._print_counts):
        * Scripts/webkitpy/tool/commands/upload.py:
        (CleanPendingCommit._flags_to_clear_on_patch):
        (PostCommits.execute):
        * Scripts/webkitpy/tool/grammar.py: Removed.
        * Scripts/webkitpy/tool/grammar_unittest.py: Removed.
        * Scripts/webkitpy/tool/multicommandtool.py:
        * Scripts/webkitpy/tool/steps/obsoletepatches.py:
        (ObsoletePatches.run):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert._message_for_revert):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        * Scripts/webkitpy/tool/steps/reopenbugafterrevert.py:
        (ReopenBugAfterRevert.run):

2021-05-19  Jonathan Bedard  <JonWBedard@gmail.com>

        [webkitscmpy] Apply logging options to every command
        https://bugs.webkit.org/show_bug.cgi?id=225939

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:
        (main): Specify help for the LoggingGroup, apply logging group to all subparsers.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/__init__.py:
        (Canonicalize.parser): Remove LoggingGroup.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:
        (Info.parser): Remove LoggingGroup.

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

        Unreviewed, reverting r277444.
        https://bugs.webkit.org/show_bug.cgi?id=225967

        Broke api tests on iOS

        Reverted changeset:

        "[run-api-tests] Use Python 3 (Part 1)"
        https://bugs.webkit.org/show_bug.cgi?id=225427
        https://trac.webkit.org/changeset/277444

2021-05-18  Robin Morisset  <rmorisset@apple.com>

        Make AirAllocateRegistersByGraphColoring use less memory
        https://bugs.webkit.org/show_bug.cgi?id=225848

        Reviewed by Filip Pizlo.

        Simply added some tests for SmallSet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/SmallSet.cpp: Added.
        (TestWebKitAPI::testSmallSetOfUnsigned):
        (TestWebKitAPI::testSmallSetOfPointers):
        (TestWebKitAPI::testVectorsOfSmallSetsOfUnsigned):
        (TestWebKitAPI::TEST):

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

        Unreviewed, reverting r277675.
        https://bugs.webkit.org/show_bug.cgi?id=225954

        Broke Mac API tests trying to fix iOS

        Reverted changeset:

        "[webkitpy] Forward booted simulators to children processes"
        https://bugs.webkit.org/show_bug.cgi?id=225933
        https://trac.webkit.org/changeset/277675

2021-05-18  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 Darin Adler.

        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):
        (ParentWhileScrolled):
        (ScrollWithTitlebarAdjacency):
        (ScrollWithoutTitlebarAdjacency):

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

        [webkitpy] Forward booted simulators to children processes
        https://bugs.webkit.org/show_bug.cgi?id=225933
        <rdar://problem/78169900>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/api_tests/runner.py:
        (setup_shard): Set DeviceManager global variable from parent process.
        (Runner.command_for_port): Use Port's device manager instead of simulated device manager.
        (Runner.run): Pass DeviceManager details to children processes.

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

        [ews] Style fixes in steps_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=225932

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps_unittest.py:

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

        [lint-test-expectations] Change shebang to Python 3
        https://bugs.webkit.org/show_bug.cgi?id=225898
        <rdar://problem/78130334>

        Reviewed by Aakash Jain.

        * Scripts/lint-test-expectations: Change shebang, remove version check.

2021-05-18  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Fix PlayStation port
        https://bugs.webkit.org/show_bug.cgi?id=225913

        Reviewed by Don Olmstead.

        Fix PlayStation port

        * MiniBrowser/playstation/CMakeLists.txt: Rename
        PLAYSTATION_COPY_SHARED_LIBRARIES to PLAYSTATION_COPY_REQUIREMENTS.

        * MiniBrowser/playstation/WebViewWindow.cpp:
        (WebViewWindow::updateTitle): Add nullptr check.
        (WebViewWindow::updateURL): Add nullptr check.

2021-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [GPU Process] Object identifiers with the deleted value should cause MESSAGE_CHECKs
        https://bugs.webkit.org/show_bug.cgi?id=225886
        rdar://78114708

        Reviewed by Chris Dumez.

        Adjust an existing API test to verify that the deleted object identifier value triggers an inline item decoding
        failure.

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

2021-05-17  Kate Cheney  <katherine_cheney@apple.com>

        WebFrameLoaderClient::dispatchWillSendRequest sometimes resets app-bound value
        https://bugs.webkit.org/show_bug.cgi?id=225829
        <rdar://problem/78034595>

        Reviewed by Alex Christensen.

        API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacyPlugIn.mm: Added.
        (-[InAppBrowserPrivacyPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[InAppBrowserPrivacyPlugIn webProcessPlugInBrowserContextController:frame:willSendRequestForResource:request:redirectResponse:]):

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

        Unreviewed, reverting r277605.

        Broke iOS tests

        Reverted changeset:

        "Remove _WKUserContentFilter and _WKUserContentExtensionStore"
        https://bugs.webkit.org/show_bug.cgi?id=224391
        https://commits.webkit.org/r277605

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

        [webkitscmpy] Support testing on machines without svn installed
        https://bugs.webkit.org/show_bug.cgi?id=225891
        <rdar://problem/78126369>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:
        (Scm.executable): Ensure whichcraft import support mock.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__enter__): Mock git executable location.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__enter__): Mock svn executable location.

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

        Remove API::Object::Type::BundlePageGroup
        https://bugs.webkit.org/show_bug.cgi?id=225611

        Reviewed by Brady Eidson.

        Some tests were trying to encode a page group, but it was unused so I just removed them.

        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen.cpp:
        (TestWebKitAPI::TEST):

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

        Style checker should check for non-inclusive terminology
        https://bugs.webkit.org/show_bug.cgi?id=213088

        Reviewed by Jonathan Bedard.

        Style checker should check for non-inclusive terminology so that we can avoid unintentional addition
        of non-inclusive terminology in our codebase.
        * Scripts/webkitpy/style/checkers/inclusive_language.py: Added inclusive language checker.
        (InclusiveLanguageChecker):
        (InclusiveLanguageChecker.check):
        * Scripts/webkitpy/style/checkers/changelog.py: Check for inclusive language.
        * Scripts/webkitpy/style/checkers/cpp.py: Ditto.
        * Scripts/webkitpy/style/checkers/js.py: Ditto.
        * Scripts/webkitpy/style/checkers/python.py: Ditto.
        * Scripts/webkitpy/style/checkers/text.py: Ditto.
        * Scripts/report-non-inclusive-language: Ignore the newly added inclusive_language.py file.

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

        Fix clean build after r277606
        https://bugs.webkit.org/show_bug.cgi?id=223658

        * TestWebKitAPI/Tests/WebKitCocoa/ContentSecurityPolicy.mm:
        (TEST):
        Use API instead of removed API.
        Why EWS didn't find this, we may never know.

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

        [Cocoa] Remove prototype loadSimulatedRequest methods
        https://bugs.webkit.org/show_bug.cgi?id=223658

        Reviewed by Geoffrey Garen.

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

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

        Remove _WKUserContentFilter and _WKUserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=224391

        Reviewed by Darin Adler.

        * MiniBrowser/mac/ExtensionManagerWindowController.m:
        (-[ExtensionManagerWindowController init]):
        (-[ExtensionManagerWindowController add:]):
        (-[ExtensionManagerWindowController remove:]):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKUserContentExtensionStore.mm: Removed.
        These tests had already been copied to a version that uses WKContentRuleList.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::resetContentExtensions):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):

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

        MediaSessionCoordinator survives page reload/navigation
        https://bugs.webkit.org/show_bug.cgi?id=225822

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/MediaSessionCoordinatorTest.mm:
        (-[_WKMockMediaSessionCoordinator trackIdentifierChanged:]):

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

        Modernize / Optimize SQLiteStatement creation and preparation
        https://bugs.webkit.org/show_bug.cgi?id=225791

        Reviewed by Sam Weinig.

        Update code base now that the SQLiteDatabase & SQLiteStatement API has changed.
        Also use more ASCIILiterals.

        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        (TestWebKitAPI::addToDatabasesTable):

2021-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Delete WebSQL code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=225739

        Reviewed by Sihui Liu.

        * MiniBrowser/playstation/WebContext.cpp:
        (WebContext::WebContext):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::configureWebsiteDataStoreTemporaryDirectories):

2021-05-15  Sam Weinig  <weinig@apple.com>

        Allow conditionally enabling OffscreenCanvas only for non-worker contexts
        https://bugs.webkit.org/show_bug.cgi?id=225845

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Match current behavior of ENABLE_OFFSCREEN_CANVAS and OffscreenCanvasEnabled
        for ENABLE_OFFSCREEN_CANVAS_IN_WORKERS and OffscreenCanvasInWorkersEnabled.

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

        Remove _WKWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=224293

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[CustomJavaScriptUserAgentDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomNavigatorPlatformDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[PopUpPoliciesDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[PopUpPoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): Deleted.
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): Deleted.
        (-[CustomNavigatorPlatformDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): Deleted.
        (-[PopUpPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.

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

        report-non-inclusive-language should skip node_modules directory
        https://bugs.webkit.org/show_bug.cgi?id=225827

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language: Skip node_modules directory as it contains external code.

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

        Drop FileSystem::fileMetadata() / fileMetadataFollowingSymlinks()
        https://bugs.webkit.org/show_bug.cgi?id=225820

        Reviewed by Darin Adler.

        Update the FileSystem API tests accordingly.

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

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

        [WebKitTestRunner] Forward WebContent termination reason
        https://bugs.webkit.org/show_bug.cgi?id=225818
        <rdar://problem/78027164>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage): Use didTerminate callback instead of didCrash callback.
        (WTR::TestController::createWebViewWithOptions): Ditto.
        (WTR::TestController::webProcessDidTerminate):
        (WTR::TestController::processDidCrash): Renamed webProcessDidTerminate.
        * WebKitTestRunner/TestController.h: Replace processDidCrash with webProcessDidTerminate.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformRunUntil):

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

        [run-webkit-tests] Handle missing simulator state plist
        https://bugs.webkit.org/show_bug.cgi?id=225833
        <rdar://problem/78036930>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.state): If no device plist is found, assume the device is shut down.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:

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

        Fix iOS 14.5 embedded build
        https://bugs.webkit.org/show_bug.cgi?id=225835
        <rdar://problem/78039315>

        Reviewed by Dewei Zhu.

        * Scripts/configure-xcode-for-embedded-development: Add mach.h, mach_error.h and task.h.

2021-05-14  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: move logic out of `Document`
        https://bugs.webkit.org/show_bug.cgi?id=225480
        <rdar://problem/77984539>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (TEST.SampledPageTopColor.MainDocumentChange): Added.

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

        Port WTF::FileSystem::realPath() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225828

        Reviewed by Darin Adler.

        Add API test coverage.

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

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

        Drop "get" prefix from WTF::FileSystem's getFileModificationTime() / getFileCreationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225812

        Reviewed by Darin Adler.

        Update code base due to WTF API change.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::runGetFileModificationTimeTest):
        (TestWebKitAPI::TEST_F):

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

        Rename FileSystem::getVolumeFreeSpace() to FileSystem::volumeFreeSpace()
        https://bugs.webkit.org/show_bug.cgi?id=225811

        Reviewed by Darin Adler.

        Update code base due to API change.

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

2021-05-14  Jean-Yves Avenard  <jya@apple.com>

        TestWebKitAPI.Fullscreen.WKViewDelegate is timing out
        https://bugs.webkit.org/show_bug.cgi?id=223282
        rdar://75495585

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST): Use WkView/NSWindow directly instead of using a
        PlatformWebView. A PlatformWebView uses an OffscreenWindow which is a
        NSWindow placed with a -10000 offset. This configuration appears to fail
        to go into full screen in automation.

2021-05-14  Sam Weinig  <weinig@apple.com>

        REGRESSION(r277313): [ Debug ] 2 TestWebKitAPI.IPCTestingAPI (API-Tests) are constant timeouts
        https://bugs.webkit.org/show_bug.cgi?id=225816
        <rdar://problem/78025515>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        Update test for rename from ImageData to PixelBuffer.

2021-05-14  Devin Rousso  <drousso@apple.com>

        Promote `-[WKWebView _pageExtendedBackgroundColor]` SPI to `-[WKWebView underPageBackgroundColor]` API
        https://bugs.webkit.org/show_bug.cgi?id=225615
        <rdar://problem/76568094>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewUnderPageBackgroundColor.mm: Renamed from PageExtendedBackgroundColor.mm.
        (defaultBackgroundColor): Added.
        (TEST.WKWebViewUnderPageBackgroundColor.OnLoad):
        (TEST.WKWebViewUnderPageBackgroundColor.SingleSolidColor): Added.
        (TEST.WKWebViewUnderPageBackgroundColor.SingleBlendedColor): Added.
        (TEST.WKWebViewUnderPageBackgroundColor.MultipleSolidColors): Added.
        (TEST.WKWebViewUnderPageBackgroundColor.MultipleBlendedColors): Added.
        (-[WKWebViewUnderPageBackgroundColorObserver initWithWebView:]): Added.
        (-[WKWebViewUnderPageBackgroundColorObserver observeValueForKeyPath:ofObject:change:context:]): Added.
        (TEST.WKWebViewUnderPageBackgroundColor.KVO):
        (TEST.WKWebViewUnderPageBackgroundColor.MatchesScrollView): Added.
        (TEST.WKWebViewUnderPageBackgroundColor.MultipleStyles): Deleted.
        (-[WKWebViewPageExtendedBackgroundColorObserver initWithWebView:]): Deleted.
        (-[WKWebViewPageExtendedBackgroundColorObserver observeValueForKeyPath:ofObject:change:context:]): Deleted.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (createWebViewWithSampledPageTopColorMaxDifference):
        (TEST.SampledPageTopColor.ExperimentalUseSampledPageTopColorForScrollAreaBackgroundColor): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewThemeColor.mm:
        (createWebView): Deleted.
        (TEST.WKWebView.ExperimentalUseThemeColorForScrollAreaBackgroundColor): Deleted.
        Remove the experimental settings `UseSampledPageTopColorForScrollAreaBackgroundColor` and
        `UseThemeColorForScrollAreaBackgroundColor` now that clients can override the default
        overscroll area background color using `-[WKWebView setUnderPageBackgroundColor:]`.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-05-14  Devin Rousso  <drousso@apple.com>

        [iOS] contextmenu hints can be clipped by the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=224204
        <rdar://problem/77089174>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuHintPreviewContainerUIDelegate webView:contextMenuWillPresentForElement:]): Added.
        (-[TestContextMenuHintPreviewContainerUIDelegate _contextMenuHintPreviewContainerViewForWebView:]): Added.
        (TEST.ContextMenu.HintPreviewContainer): Added.

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

        Introduce FileSystem::updateFileModificationTime()
        https://bugs.webkit.org/show_bug.cgi?id=225810

        Reviewed by Darin Adler.

        Add API test coverage.

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

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

        [run-api-tests] Use Python 3 (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=225427
        <rdar://problem/77584713>

        Reviewed by Aakash Jain.

        * Scripts/run-api-tests: Change she-bang to Python 3.

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

        Rename FileSystem::getFileSize() to FileSystem::fileSize()
        https://bugs.webkit.org/show_bug.cgi?id=225798

        Reviewed by Alex Christensen.

        Update code path to due to the API change.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        (TestWebKitAPI::TEST):

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

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName()
        https://bugs.webkit.org/show_bug.cgi?id=225806

        Reviewed by Alex Christensen.

        Rename FileSystem::pathGetFileName() to FileSystem::pathFileName(), as we avoid "get" prefixes in WebKit.

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

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

        [webkitpy] Remove unused imports
        https://bugs.webkit.org/show_bug.cgi?id=225776
        <rdar://problem/77982408>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/benchmark_runner/benchmark_json_merge.py:
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        * Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        * Scripts/webkitpy/common/net/layouttestresults_unittest.py:
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        * Scripts/webkitpy/common/system/zipfileset_unittest.py:
        * Scripts/webkitpy/common/test_expectations_unittest.py:
        * Scripts/webkitpy/inspector/main.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        * Scripts/webkitpy/layout_tests/views/printing.py:
        * Scripts/webkitpy/minibrowser/run_webkit_app.py:
        * Scripts/webkitpy/performance_tests/perftest.py:
        * Scripts/webkitpy/port/base.py:
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/port/config_unittest.py:
        * Scripts/webkitpy/results/upload_unittest.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        * Scripts/webkitpy/style/checkers/text_unittest.py:
        * Scripts/webkitpy/style/filereader_unittest.py:
        * Scripts/webkitpy/style/optparser.py:
        * Scripts/webkitpy/test/printer.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py:
        * Scripts/webkitpy/tool/commands/queuestest.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/main.py:
        * Scripts/webkitpy/tool/mocktool.py:
        * Scripts/webkitpy/tool/multicommandtool_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        * Scripts/webkitpy/tool/steps/updatechangelogswithreviewer.py:
        * Scripts/webkitpy/tool/steps/wptchangeexport.py:
        * Scripts/webkitpy/w3c/wpt_runner.py:
        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        * Scripts/webkitpy/webdriver_tests/webdriver_test_result.py:
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:

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

        test-lldb-webkit failing with import of lldb
        https://bugs.webkit.org/show_bug.cgi?id=225792
        <rdar://problem/77993980>

        Reviewed by Dewei Zhu.

        * CISupport/build-webkit-org/steps.py:
        (RunLLDBWebKitTests): Invoke test-lldb-webkit with Python 3.
        * CISupport/build-webkit-org/steps_unittest.py:
        * Scripts/test-lldb-webkit: Change shebang to Python 3.

2021-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK] Fix make distcheck

        Update library version now that we build with soup3 by default.

        * Scripts/make-dist:
        (Distcheck.check_symbols):
        (ensure_version_if_possible):

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

        report-non-inclusive-language should skip symlinks
        https://bugs.webkit.org/show_bug.cgi?id=225789

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language: Skip symlinks since most likely the linked file would be checked 
        directly by the script while iterating the directory structure and would result in it being counted twice.
        Also the script fails with an error if there is a symlink pointing to a non-existing file.

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

        [ews] Style fixes in steps.py
        https://bugs.webkit.org/show_bug.cgi?id=225784

        Reviewed by Dewei Zhu.

        * CISupport/ews-build/steps.py:
        (CheckOutSource.__init__):
        (ShowIdentifier.hideStepIf):
        (BugzillaMixin.get_bugzilla_api_key):
        (RunJavaScriptCoreTests.commandComplete):
        (AnalyzeJSCTestsResults.send_email_for_pre_existing_failure):
        (AnalyzeLayoutTestsResults._report_flaky_tests):
        (DownloadBuiltProduct):
        (AnalyzeAPITestsResults.analyzeResults.getAPITestFailures):
        (AnalyzeAPITestsResults.send_email_for_pre_existing_failure):

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

        Tweak ServiceWorkers.SuspendServiceWorkerProcessBasedOnClientProcesses to find out source of timeout
        https://bugs.webkit.org/show_bug.cgi?id=225770

        Reviewed by Alexey Proskuryakov.

        Wait for conditions with our own timeout so that the test fails with useful errors instead
        of just a generic timeout. This just help us find out where in the test things go wrong.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-05-13  Alex Christensen  <achristensen@webkit.org>

        Add unit test using WKHTTPCookieStoreObserver and cookies received from HTTP
        https://bugs.webkit.org/show_bug.cgi?id=225773

        Reviewed by Chris Dumez.

        We only had tests that added cookies through the API, not through the network.
        I thought it was broken but it isn't.  Still worth adding the test.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (deleteAllCookies):
        (TEST):

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

        Rename FileSystem::directoryName() to FileSystem::parentPath()
        https://bugs.webkit.org/show_bug.cgi?id=225768

        Reviewed by Darin Adler.

        Rename FileSystem::directoryName() to FileSystem::parentPath() for clarity and
        consistency with std::filesystem::parent_path() which is used internally.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):
        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::moduleDirectory):

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

        Rename FileSystem::fileIsDirectory(path, followSymlinks) to isDirectory(path) / isDirectoryFollowingSymlinks(path)
        https://bugs.webkit.org/show_bug.cgi?id=225772

        Reviewed by Darin Adler.

        Update code base due to API naming change.

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

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

        Introduce FileSystem::hardLinkCount()
        https://bugs.webkit.org/show_bug.cgi?id=225767

        Reviewed by Darin Adler.

        Add API test coverage.

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

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

        [run-api-tests] Use Python 3 (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=225427
        <rdar://problem/77584713>

        Reviewed by Aakash Jain.

        * CISupport/build-webkit-org/steps.py:
        (RunAPITests): Use Python3 to invoke run-api-tests.
        * CISupport/ews-build/steps.py:
        (RunAPITests): Use Python3 to invoke run-api-tests.
        * CISupport/ews-build/steps_unittest.py:

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

        Few webkitpy unit-tests fails in non-PST timezones
        https://bugs.webkit.org/show_bug.cgi?id=225741

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py: Ditto.
        (Svn.request): Serve SVN content from California time (like our SVN server)

2021-05-13  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendNumber
        https://bugs.webkit.org/show_bug.cgi?id=225732

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Test append with a number instead of appendNumber.

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        Use append instead of appendNumber.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpResponseDescriptionSuitableForTestResult): Use append instead
        of appendNumber.
        (WTR::dumpFrameScrollPosition): Ditto.
        (WTR::InjectedBundlePage::didFinishDocumentLoadForFrame): Use makeString
        instead of StringBuilder.
        (WTR::InjectedBundlePage::shouldCacheResponse): Ditto.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributesOfElement): Use append instead of appendNumber.
        (WTR::AccessibilityUIElement::attributedStringForRange): Ditto.
        (WTR::stringAtOffset): Ditto.

2021-05-13  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        Add dbezhetskov as a commiter
        https://bugs.webkit.org/show_bug.cgi?id=225742

        Reviewed by Caio Araujo Neponoceno de Lima.

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

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

        ResizeReversePaginatedWebView fails on some OS versions on some hardware
        https://bugs.webkit.org/show_bug.cgi?id=224699
        <rdar://76782199>

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::didLayout):
        This test does *not* care about the specific number of pages that are
        generated; the key to the test is the scroll position check.

        Since the page-count check in this test has caused lots of trouble
        in the past (see the history) just remove it and replace it with a
        check that we ended up paginated at all.

2021-05-12  Simon Fraser  <simon.fraser@apple.com>

        Update the MotionMark 1.1 plan file

        Unreviewed.
        
        Update MotionMark 1.1 to use the version from r277406, which removes the
        Focus subtest.

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

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

        [MotionMark] Update plan file after r277406
        https://bugs.webkit.org/show_bug.cgi?id=225721

        Rubber-stamped by Geoffrey Garen.

        Just update the plan.

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

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

        [build.webkit.org] Bots should automatically recover from svn checkout is already locked issue
        https://bugs.webkit.org/show_bug.cgi?id=225717

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/steps.py:
        (CheckOutSource): Set haltOnFailure to False so that cleanup step can run. Also set the step name while we are at it.
        (CheckOutSource.__init__): Also set logEnviron to False.
        (CheckOutSource.getResultSummary): Run SVNCleanup step in case of failure.
        (SVNCleanup):
        (SVNCleanup.__init__):
        (SVNCleanup.evaluateCommand):
        * CISupport/build-webkit-org/steps_unittest.py: Added unit-tests for the new step.

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

        Unreviewed follow-up to r277376.

        Enable the API tests only if ENABLE(NOTIFICATIONS). It is important since
        notifications are enabled on macOS but not iOS currently.

        * TestWebKitAPI/Tests/WebKitCocoa/NotificationAPI.mm:

2021-05-12  Sihui Liu  <sihui_liu@apple.com>

        [ BigSur Release ] TestWebKitAPI.IndexedDB.KillWebProcessWithOpenConnection is a constant failure
        https://bugs.webkit.org/show_bug.cgi?id=225372
        <rdar://problem/77532291>

        Reviewed by Chris Dumez.

        Ensure IDB data is cleared before test and make error logging more detailed.

        * TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-1.html:
        * TestWebKitAPI/Tests/WebKitCocoa/KillWebProcessWithOpenConnection-2.html:
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm: Listen to version change event because it 
        indicates that server starts handling second open request in KillWebProcessWithOpenConnection-2.html.
        (-[IndexedDBWebProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):
        (getNextMessage):
        (TEST):

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

        [TestWebKitAPI] Explicitly exit after completing tests
        https://bugs.webkit.org/show_bug.cgi?id=225703
        <rdar://problem/77673980>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/ios/mainIOS.mm:
        (main): Explicitly exit the testing process.

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

        Queue notification permission requests for the same origin on WebKit side
        https://bugs.webkit.org/show_bug.cgi?id=225701
        <rdar://76804977>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NotificationAPI.mm: Added.
        (-[NotificationPermissionMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[NotificationPermissionUIDelegate initWithHandler:]):
        (-[NotificationPermissionUIDelegate _webView:requestNotificationPermissionForSecurityOrigin:decisionHandler:]):
        (TestWebKitAPI::runRequestPermissionTest):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::runParallelPermissionRequestsTest):

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

        Port WTF::FileSystem::listDirectory to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225633

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::createTestFile):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        (TestWebKitAPI::removeDirectoryAndAllContents):

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

        Add SPI to suspend / resume a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=225333
        <rdar://77462543>

        Reviewed by Geoff Garen.

        Add API test coverage.

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

2021-05-11  Darin Adler  <darin@apple.com>

        Remove the String::toInt family of functions
        https://bugs.webkit.org/show_bug.cgi?id=225599

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/CMakeLists.txt: Added StringToIntegerConversion.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.

        * TestWebKitAPI/Tests/WTF/StringToIntegerConversion.cpp: Added.
        Contains tests moved and adapted from the files below so we don't
        lose test coverage. We and and should add many more tests.

        * TestWebKitAPI/Tests/WTF/StringView.cpp: Removed tests for parseUInt16
        and StringView::toIntStrict.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp: Removed tests for String::toInt.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm: Use
        parseInteger<uint64_t> instead of StringView::toUInt64Strict.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm: Ditto.

2021-05-11  Devin Rousso  <drousso@apple.com>

        [macCatalyst] should have CSS `hover: hover` and `pointer: fine`
        https://bugs.webkit.org/show_bug.cgi?id=225672

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (TEST.iOSMouseSupport.MouseAlwaysConnected):
        * TestWebKitAPI/Tests/WebKitCocoa/iOSStylusSupport.mm:

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

        Unreviewed, reverting r277341.
        https://bugs.webkit.org/show_bug.cgi?id=225685

        Caused WK2 layout tests to exit with an exception

        Reverted changeset:

        "Add SPI to suspend / resume a WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=225333
        https://trac.webkit.org/changeset/277341

2021-05-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Mail compose web view doesn't scroll to reveal the selection in certain configurations
        https://bugs.webkit.org/show_bug.cgi?id=225675
        rdar://77095886

        Reviewed by Tim Horton.

        Rename some testing SPI. See WebKit/ChangeLog for more information.

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

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

        Unreviewed, reverting r277319.
        https://bugs.webkit.org/show_bug.cgi?id=225680

        Always enabling AsyncOverflowScrolling made many tests fail or
        crash

        Reverted changeset:

        "[GTK] compositing/overflow/dynamic-composited-scrolling-
        status.html is failing"
        https://bugs.webkit.org/show_bug.cgi?id=225644
        https://trac.webkit.org/changeset/277319

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

        Use one VM per thread for IDB serialization work
        https://bugs.webkit.org/show_bug.cgi?id=225658

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (-[DatabaseProcessKillMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

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

        Add SPI to suspend / resume a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=225333
        <rdar://77462543>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

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

        Add SPI to restrict networking to a set of hosts
        https://bugs.webkit.org/show_bug.cgi?id=225426
        <rdar://77571521>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):
        (webSocketAcceptValue): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::Connection::webSocketHandshake):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::Connection::webSocketHandshake):

2021-05-11  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] compositing/overflow/dynamic-composited-scrolling-status.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=225644

        Reviewed by Carlos Garcia Campos.

        The test started failing in r277258, which makes WebKitGTK to use
        always async scrolling in AC mode. After this change, WebKitTestRunner
        should always enable AsyncOverflowScrolling.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const): Enable AsyncOverflowScrolling.

2021-05-11  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] detect infrastructure failure for remote stress tests
        https://bugs.webkit.org/show_bug.cgi?id=222601

        Reviewed by Mark Lam.

        run-jsc-stress-tests currently detects failures by the absence of
        a failure file (that is generated by each failing test). This is
        fragile to begin with, as it assumes that tests that fail to run
        (e.g. because of an error in the runner script) are successful by
        default.

        However, the main motivation for this patch is to make execution
        more robust when using remote hosts. Currently,
        --gnu-parallel-runner will transparently reschedule jobs on a
        different host when a remote host goes away. But detectFailures
        expects to be able to connect to all hosts and fetch the failure
        files, which fails if a remote host is still down when the run
        finishes.

        Instead, this patch changes the runners to always generate a status
        file with the exit code. detectFailures then fetches all status
        files from all hosts that are live on exit. Tests that failed to
        run are explicitly accounted for as 'noreport' and are set to
        ERROR in the final report.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:

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

        Use non-throwing std::filesystem API in TestRunner
        https://bugs.webkit.org/show_bug.cgi?id=225632

        Reviewed by Darin Adler.

        * TestRunnerShared/TestCommand.cpp:
        (WTR::testPath):
        (WTR::testURLString):
        * TestRunnerShared/TestFeatures.cpp:
        (WTR::parseTestHeader):

2021-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Allow immediate action gestures to begin when force clicking text inside image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225600
        <rdar://problem/77792365>

        Reviewed by Tim Horton.

        Add new API tests to exercise these changes by grabbing the immediate action `NSGestureRecognizer` from
        `WKWebView` and calling into its delegate. This patch adds two basic immediate action tests by simulating the
        immediate action over text and the body element, and includes a third test that installs an image overlay using
        an injected `internals` object, and verifies that the immediate action in an image overlay matches that of
        regular text on the page.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/ImmediateActionTests.mm: Added.
        (swizzledImmediateActionLocationInView):
        (-[WKWebViewForTestingImmediateActions _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
        (-[WKWebViewForTestingImmediateActions immediateActionGesture]):
        (-[WKWebViewForTestingImmediateActions simulateImmediateAction:]):
        (TestWebKitAPI::TEST):

2021-05-10  Kate Cheney  <katherine_cheney@apple.com>

        Preflight requests not properly attributed as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=225596
        <rdar://problem/77664272>

        Reviewed by Brent Fulgham.

        Add test infrastructure.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::didLoadAppBoundRequest):
        (WTR::TestRunner::didLoadNonAppBoundRequest):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didLoadAppBoundRequest):
        (WTR::TestController::didLoadNonAppBoundRequest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::didLoadAppBoundRequest):
        (WTR::TestController::didLoadNonAppBoundRequest):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didLoadAppBoundRequest:]):
        (-[TestRunnerWKWebView _didLoadNonAppBoundRequest:]):

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

        [iOS] Pages with service workers do not suspend promptly
        https://bugs.webkit.org/show_bug.cgi?id=225598
        <rdar://problem/77753717>

        Reviewed by Youenn Fablet.

        Update WebKit API test accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Add ObjC API similar to WKBundlePageCopyGroupIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=225477

        Reviewed by Chris Dumez.

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

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

        [build.webkit.org] Rename master_buildbot2.cfg to master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=222600

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/buildbot.tac:
        * CISupport/build-webkit-org/master.cfg: Moved from Tools/CISupport/build-webkit-org/master_buildbot2.cfg.
        * CISupport/build-webkit-org/master_buildbot2.cfg: Removed.

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Add unit test for r274129
        https://bugs.webkit.org/show_bug.cgi?id=224021

        Reviewed by Chris Dumez.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn sendAwakener:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/TestAwakener.h: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/TestAwakener.mm: Added.
        (-[TestAwakener awakeAfterUsingCoder:]):
        (-[TestAwakener initWithValue:]):
        (-[TestAwakener value]):
        (+[TestAwakener supportsSecureCoding]):
        (-[TestAwakener encodeWithCoder:]):
        (-[TestAwakener initWithCoder:]):

2021-05-10  Devin Rousso  <drousso@apple.com>

        Add support for a `media` attribute on `<meta name="theme-color" content="...">`
        https://bugs.webkit.org/show_bug.cgi?id=224389
        <rdar://problem/74991621>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewThemeColor.mm:
        (TEST.WKWebViewThemeColor.MetaElementValidNameAndColor): Added.
        (TEST.WKWebViewThemeColor.MetaElementValidNameAndColorAndMedia): Added.
        (TEST.WKWebViewThemeColor.MetaElementInvalidName): Added.
        (TEST.WKWebViewThemeColor.MetaElementInvalidColor): Added.
        (TEST.WKWebViewThemeColor.MetaElementInvalidMedia): Added.
        (TEST.WKWebViewThemeColor.MetaElementMultipleValid): Added.
        (TEST.WKWebViewThemeColor.MetaElementValidSubframe): Added.
        (-[WKWebViewThemeColorObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST.WKWebViewThemeColor.KVO):
        (TEST.WKWebViewThemeColor.MetaElementOnLoad): Deleted.
        (TEST.WKWebViewThemeColor.MetaElementMultipleTags): Deleted.

2021-05-09  Darin Adler  <darin@apple.com>

        Remove all remaining uses of the String::toInt family of functions
        https://bugs.webkit.org/show_bug.cgi?id=225580

        Reviewed by Sam Weinig.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::numberAttributeValue): Use
        parseIntegerAllowingTrailingJunk<int> instead of String::toInt.
        (WTR::AccessibilityUIElement::hierarchicalLevel const): Ditto.

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        css-display-none actions from WKContentRuleList should apply to pages loaded with loadData and loadHTMLString
        https://bugs.webkit.org/show_bug.cgi?id=225493
        <rdar://77331789>

        Reviewed by Darin Adler.

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

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

        Fix potential races in AppleLanguagesTest.UpdateAppleLanguages API test
        https://bugs.webkit.org/show_bug.cgi?id=225429

        Reviewed by Darin Adler.

        Calling [TestWKWebView performAfterReceivingAnyMessage] registers a MessageHandler which sends an
        async WebUserContentController::AddUserScriptMessageHandlers IPC to the WebProcess. We want to
        make sure that that message handler is registered in the WebProcess before the JS on the page
        calls `webkit.messageHandlers.testHandler.postMessage()`. To address this issue, I moved the
        call to `[TestWKWebView performAfterReceivingAnyMessage]` before the call to evaluateJavaScript
        that registers the event listener that may call `webkit.messageHandlers.testHandler.postMessage()`.

        Also make sure the PreferenceObserver has been allocated after sending the
        "NSApplicationDidBecomeActiveNotification" and before proceeding with the test.

        I am also adding an extra check at the end to make sure that the value of navigator.language is
        correct and to make sure that WKPreferenceObserver.preferenceDidChange was called. This was done
        to help diagnose flakiness issues on the bots that I cannot reproduce locally.

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

2021-05-10  Aditya Keerthi  <akeerthi@apple.com>

        [iPadOS] Do not present custom input peripherals when switching back to a tab with a focused element
        https://bugs.webkit.org/show_bug.cgi?id=225541
        <rdar://problem/77537795>

        Reviewed by Wenson Hsieh.

        Updated a UIScriptController hook that simulates attaching a hardware
        keyboard to also swizzle [UIKeyboard isInHardwareKeyboardMode].

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

        Moved the default swizzling behavior into this method so that it remains
        consistent across tests.

        Unfortunately, the default swizzling behavior contrasts with the default
        value of GSEventSetHardwareKeyboardAttached. However, this is an existing
        inconsistency, and should be looked at more carefully in a separate
        investigation.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::returnYes):
        (WTR::returnNo):
        (WTR::UIScriptControllerIOS::setHardwareKeyboardAttached):

2021-05-10  Alex Christensen  <achristensen@webkit.org>

        Remove WKBundlePageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=225471

        Reviewed by Darin Adler.

        Also use some smart pointers instead of raw pointers to keep things safe.

        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::InjectedBundleController):
        (TestWebKitAPI::InjectedBundleController::initialize):
        (TestWebKitAPI::InjectedBundleController::didInitializePageGroup): Deleted.
        * TestWebKitAPI/InjectedBundleController.h:
        (TestWebKitAPI::InjectedBundleController::bundle const):
        * TestWebKitAPI/InjectedBundleTest.h:
        (TestWebKitAPI::InjectedBundleTest::willDestroyPage):
        (TestWebKitAPI::InjectedBundleTest::Register::create):
        (TestWebKitAPI::InjectedBundleTest::didInitializePageGroup): Deleted.
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen_Bundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        (WTR::InjectedBundle::didCreatePage):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::reportLiveDocuments):
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::beginTesting):
        (WTR::InjectedBundle::statisticsNotifyObserver):
        (WTR::InjectedBundle::didInitializePageGroup): Deleted.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::bundle const):
        (WTR::InjectedBundle::pageGroup const): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserStyleSheetEnabled):
        (WTR::TestRunner::setAsynchronousSpellCheckingEnabled):

2021-05-09  Khem Raj  <raj.khem@gmail.com>

        [Tools] Generate marshalling code without source reference
        https://bugs.webkit.org/show_bug.cgi?id=225283

        Reviewed by Carlos Alberto Lopez Perez.

        * MiniBrowser/gtk/CMakeLists.txt:

2021-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should have the ability to send and receive shared memory
        https://bugs.webkit.org/show_bug.cgi?id=225576

        Reviewed by Wenson Hsieh.

        Added tests for sending and receiving shared memory in the IPC testing API.
        Also added a test to send semaphore, which was missing in r277199.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (IPCTestingAPI.CanReceiveSharedMemory): Added.
        (IPCTestingAPI.CanCreateSharedMemory): Added.
        (IPCTestingAPI.CanSendSemaphpre): Added after r277199.
        (IPCTestingAPI.CanSendSharedMemory): Added.

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

        [GPU Process] Simplify DisplayList::Iterator part 6: Migrate ItemBufferWritingClient from ItemHandle to a const Variant&
        https://bugs.webkit.org/show_bug.cgi?id=224270

        Reviewed by Wenson Hsieh.

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

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

        REGRESSION (r276797?): [ macOS/iOS ] TestWebKitAPI.URLSchemeHandler.Exceptions is flakey crashing
        https://bugs.webkit.org/show_bug.cgi?id=225373

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        (runUntilTasksInFlight):

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

        Port Filesystem::pathByAppendingComponent() & Filesystem:: pathByAppendingComponents() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225550

        Reviewed by Darin Adler.

        Add API test coverage.

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

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

        Port FileSystem::pathGetFileName() & Filesystem::directoryName() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225524

        Reviewed by Darin Adler.

        Add API test coverage.

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

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Make AccessibilityReduceMotion test case work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=225244
        <rdar://problem/77589455>

        Reviewed by Per Arne Vollan.

        New tests for Accessibility-related features were added in Bug 215664, but only for macOS.
        We support these same features on iOS, and should have test coverage.

        * TestWebKitAPI/Tests/WebKit/AccessibilityReduceMotion.mm:
        (notificationCallback):
        (TEST):

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

        Unreviewed, reverting r277201.
        https://bugs.webkit.org/show_bug.cgi?id=225542

        Includes project file change.

        Reverted changeset:

        "[iOS] Make AccessibilityReduceMotion test case work on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=225244
        https://trac.webkit.org/changeset/277201

2021-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Do not try to remove and already removed node while deleting selection
        https://bugs.webkit.org/show_bug.cgi?id=224893

        Reviewed by Ryosuke Niwa.

        Add new API to allow tests to trigger a force repaint on load finished.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::frameDidChangeLocation):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::displayOnLoadFinish):
        (WTR::TestRunner::shouldDisplayOnLoadFinish):

2021-05-07  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Make AccessibilityReduceMotion test case work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=225244
        <rdar://problem/77589455>

        New tests for Accessibility-related features were added in Bug 215664, but only for macOS.
        We support these same features on iOS, and should have test coverage.

        Reviewed by Per Arne Vollan.

        * TestWebKitAPI/Tests/WebKit/AccessibilityReduceMotion.mm:
        (notificationCallback):
        (TEST):

2021-05-07  Ryosuke Niwa  <rniwa@webkit.org>

        IPC testing API should have the ability to create and receive IPC::Semaphore
        https://bugs.webkit.org/show_bug.cgi?id=225537

        Reviewed by Wenson Hsieh.

        Added tests to make sure IPC testing API allows creation of a semaphore,
        and receiving one as a reply to an IPC message.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (IPCTestingAPI.CanReceiveIPCSemaphore): Added.
        (IPCTestingAPI.CanCreateIPCSemaphore): Added.

2021-05-07  Aakash Jain  <aakash_jain@apple.com>

        Use test-tube emoji for EWS status bubbles for tester queues
        https://bugs.webkit.org/show_bug.cgi?id=225517

        Reviewed by Alan Bujtas.

        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):

2021-05-07  Chris Dumez  <cdumez@apple.com>

        Add API test for FileSystem::fileExists() and FileSystem::fileMetadata() when dealing with symlinks to symlinks
        https://bugs.webkit.org/show_bug.cgi?id=225491

        Reviewed by Sam Weinig.

        Update FileSystemTest::SetUp() to use a valid path when constructing the test symlink
        (tempFileSymlinkPath). Add API test for FileSystem::fileExists() and FileSystem::fileMetadata()
        when dealing with symlinks to symlinks.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):

2021-05-07  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE gardening

        * TestWebKitAPI/glib/TestExpectations.json: Unflag test, wpebackend-fdo was downgraded in
        the SDK revision r277166.

2021-05-06  Chris Dumez  <cdumez@apple.com>

        Port Filesystem::fileMetadata() & Filesystem::getFileModificationTime() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225362

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::runGetFileModificationTimeTest):

2021-05-06  Lauro Moura  <lmoura@igalia.com>

        [WPE] Garden web-process-crashed API test flakiness after SDK update

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-05-06  Chris Dumez  <cdumez@apple.com>

        Regression(r254389?) navigator.languages returns all lowercase languages for ports using CF
        https://bugs.webkit.org/show_bug.cgi?id=225461

        Reviewed by Darin Adler.

        Update existing API tests to reflect behavior change.

        * TestWebKitAPI/Tests/WebKit/OverrideAppleLanguagesPreference.mm:
        (TEST):
        (TEST_F):

2021-05-06  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: make hit tests consider elements with `pointer-events: none`
        https://bugs.webkit.org/show_bug.cgi?id=225419

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (TEST.SampledPageTopColor.HitTestCSSPointerEventsNone): Added.

2021-05-06  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: don't snapshot if the hit test location is a canvas
        https://bugs.webkit.org/show_bug.cgi?id=225418

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (TEST.SampledPageTopColor.HitTestHTMLCanvasWithoutRenderingContext): Added.
        (TEST.SampledPageTopColor.HitTestHTMLCanvasWithRenderingContext): Added.

2021-05-06  Jonathan Bedard  <jbedard@apple.com>

        [webkit-patch] setup-git-clone uses master instead of main
        https://bugs.webkit.org/show_bug.cgi?id=225460
        <rdar://problem/77616439>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute): Pair the remote branch ref with the Svn remote.

2021-05-06  Chris Dumez  <cdumez@apple.com>

        Add API test for FileSystem::fileExists() on a broken symbolic link
        https://bugs.webkit.org/show_bug.cgi?id=225476

        Reviewed by Darin Adler.

        Add API test for FileSystem::fileExists() on a broken symbolic link since this is a special
        case. FileSystem::fileExists() currently tries to follow symbolic links and will thus return
        false. The behavior is a little odd but I have verified that this is what our access()-based
        implementation was returning also before I ported FileSystem::fileExists() to std::filesystem.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):

2021-05-06  Filip Pizlo  <fpizlo@apple.com>

        Make it easy to pass __XPC variables to run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=225473

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (config_argument_parser):

2021-05-06  Aakash Jain  <aakash_jain@apple.com>

        EWS bubbles should show current status after pressing 'Retry failed builds' button
        https://bugs.webkit.org/show_bug.cgi?id=225411

        Reviewed by Jonathan Bedard.

        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):

2021-05-06  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Add API to efficiently create a sequence of commits
        https://bugs.webkit.org/show_bug.cgi?id=224890
        <rdar://problem/76975733>

        Rubber-stamped by Aakash Jain.

        While it is possible to simple iterate through a range of commits to define them,
        every API we use to define commits has much more efficient techniques.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor): Add revision to SVN_AUTHOR_RE and add regex without lines.
        (Contributor.from_scm_log): Strip leading whitespace from author.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git._args_from_content):
        (Git.commits): Use `git log` to efficiently compute a range of commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn._args_from_content):
        (Svn.commits): Use `svn log` to efficiently compute a range of commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:
        (Git.__init__): Add `git log` mock.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/svn.py:
        (Svn.__init__): Add `svn log` mock and more explicit `svn info` mock.
        (Svn._log_range):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub._commits_response): Return all parent commits to provided ref.
        (GitHub.request):
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/svn.py:
        (Svn.range): More efficiently compute the range.
        (Svn.request):
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.request): Allow caller to disable pagination.
        (GitHub.commit): Reduce number of requests required to compute order.
        (GitHub.commits): Using the `commits` endpoint, more efficiently
        compute a range of commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn): Generalize HISTORY_RE to match any single-line SVN XML response.
        (Svn._cache_revisions): Replace HISTORY_RE with DATA_RE.
        (Svn.commits): Use svn/rvr to efficiently compute a range of commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase._commit_range): Return a pair of commits representing the range
        the caller is requesting, and preform some basic sanity checks.
        (ScmBase.commits): Declare function implemented by decedents.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGit.test_commits):
        (TestGit.test_commits_branch):
        (TestGitHub.test_commits):
        (TestGitHub.test_commits_branch):
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestLocalSvn.test_commits):
        (TestLocalSvn.test_commits_branch):
        (TestRemoteSvn.test_commits):
        (TestRemoteSvn.test_commits_branch):

2021-05-06  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r272414?): [macOS] TestWebKitAPI.GPUProcess.CrashWhilePlayingVideo is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=221742
        <rdar://problem/74220428>

        Reviewed by Youenn Fablet.

        Check that video.currentTime is changing to determine if the video is playing, instead of
        relying on [webView _isPlayingAudio]. Also use a test page with a single video element instead
        of multiple. I am hoping this will make the test more reliable or at least shade some light on
        why this is flaky.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-05-06  Sam Sneddon  <gsnedders@apple.com>

        mark all SCM tests using SVN as slow, a couple as xfail; enable SCM
        https://bugs.webkit.org/show_bug.cgi?id=225156

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SVNTest): Mark all tests with @slow
        (GitSVNTest): Mark all tests with @slow
        * Scripts/webkitpy/conftest.py:
        (pytest_configure): Define the "slow" marker
        (pytest_addoption): Add --run-slow to opt-in
        (pytest_collection_modifyitems): Implement --run-slow
        * Scripts/webkitpy/pytest.ini: remove "not scm_unitest"
        * Scripts/webkitpy/test/markers.py:
        (slow): add our own wrapper around the pytest mark function

2021-05-05  Diego Pino Garcia  <dpino@igalia.com>

        [build.webkit.org] Add new post-commit builder WPE-Linux-64-bit-Release-Non-Unified-Build
        https://bugs.webkit.org/show_bug.cgi?id=225385

        Reviewed by Aakash Jain.

        This new post-commit builder will build WPE with Unified builds disabled.

        By default, builders build WebKit using Unified sources to speed up
        time compilation. Unfortunately, unified source compilation may hide
        compilation errors sometimes. A common hidden error are missing headers
        in some source files. This hidden compilation errors might be discovered
        later when a group of source files are stashed together in a different 
        manner.
        
        Having a Non-Unified source post-commit builder will help to detect 
        regressions in unified source compilation for a certain WebKit port, 
        in this case WPE Release. Usually when these regressions happen they 
        tend to happen too in other ports such as WebKitGTK, Win or PlayStation.

        * CISupport/build-webkit-org/config.json:

2021-05-05  Jonathan Bedard  <jbedard@apple.com>

        [run-api-tests] Use webkitcorepy's TaskPool
        https://bugs.webkit.org/show_bug.cgi?id=225221
        <rdar://problem/77352465>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (TaskPool.__enter__): Ensure that mock has been imported before spawning child processes.
        * Scripts/run-api-tests: Moved from webkitpy/api_tests/run_api_tests.py.
        * Scripts/webkitpy/api_tests/run_api_tests.py: Moved to run-api-tests.
        * Scripts/webkitpy/api_tests/runner.py:
        (_Worker): Representation of Worker process.
        (_Worker.setup): Pass port object to worker process.
        (_Worker.teardown): Un-set port object on worker process.
        (_Worker.__init__): Construct object to hold a Worker process's variables.
        (_Worker._run_single_test): Log test results, post results to parent.
        (_Worker.run): Run shard with and post results to parent process.
        (setup_shard): Run setup in Worker process.
        (run_shard): Run test shard in Worker process.
        (report_result): Receive result in the parent process.
        ((teardown_shard): Tear down Worker process.
        (Runner.__init__):
        (Runner.command_for_port):
        (Runner._shard_tests): Split tests into shards to be efficiently run.
        (Runner.run): Use TaskPool to run tests in sub processes.
        (Runner.callback): Save results in parent process.
        (Runner.result_map_by_status):
        (Runner.handle): Deleted.
        (_Worker._run_shard_with_binary): Deleted.
        (_Worker.post): Deleted.
        (_Worker.handle): Deleted.

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: don't snapshot if the hit test location is an image or has an animation
        https://bugs.webkit.org/show_bug.cgi?id=225338

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (TEST.SampledPageTopColor.HitTestHTMLImage):
        (TEST.SampledPageTopColor.HitTestCSSBackgroundImage):
        (TEST.SampledPageTopColor.HitTestCSSAnimation):

2021-05-05  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Add a build step to set appropriate permissions on uploaded test results
        https://bugs.webkit.org/show_bug.cgi?id=225415

        Reviewed by Dewei Zhu.

        * CISupport/build-webkit-org/factories.py:
        (TestFactory.__init__): Added the build-step.
        * CISupport/build-webkit-org/steps.py:
        (ExtractTestResults.resultDirectoryURL):
        (SetPermissions): Build step to set permissions on uploaded test result directory.

2021-05-05  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] WebKitMediaSrc rework v2
        https://bugs.webkit.org/show_bug.cgi?id=225192

        Reviewed by Xabier Rodriguez-Calvar.

        WebKitMediaSrc is a GObject class and needs to follow some GObject
        conventions that conflict with WebKit's. Make the checker aware of
        this.

        * Scripts/webkitpy/style/checker.py:

2021-05-05  Devin Rousso  <drousso@apple.com>

        Sampled Page Top Color: take additional snapshots further down the page to see if the sampled top color is more than just a tiny strip
        https://bugs.webkit.org/show_bug.cgi?id=225323

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm:
        (createWebViewWithSampledPageTopColorMaxDifference):
        (createHTMLGradientWithColorStops):
        (TEST.SampledPageTopColor.ZeroMaxDifference):
        (TEST.SampledPageTopColor.NegativeMaxDifference):
        (TEST.SampledPageTopColor.SolidColor):
        (TEST.SampledPageTopColor.DifferentColorsWithoutOutlierBelowMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsWithLeftOutlierAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsWithMiddleOutlierAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsWithRightOutlierAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsIndividuallyAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsCumulativelyAboveMaxDifference):
        (TEST.SampledPageTopColor.VerticalGradientBelowMaxDifference): Added.
        (TEST.SampledPageTopColor.VerticalGradientAboveMaxDifference): Added.
        (TEST.SampledPageTopColor.DISABLED_DisplayP3):
        (TEST.SampledPageTopColor.ExperimentalUseSampledPageTopColorForScrollAreaBackgroundColor):

2021-05-05  Sam Weinig  <weinig@apple.com>

        Add preliminary support for specifying a color space for 2D canvas
        https://bugs.webkit.org/show_bug.cgi?id=225286

        Reviewed by Dean Jackson.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Add CanvasColorSpaceEnabled for windows.

2021-05-05  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r276985.

        This test is still failing on Apple Silicon

        Reverted changeset:

        "Unreviewed, try and re-enable
        AppleLanguagesTest.UpdateAppleLanguages on Apple Silicon."
        https://commits.webkit.org/r276985

2021-05-05  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r272414?): [macOS] TestWebKitAPI.GPUProcess.CrashWhilePlayingVideo is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=221742
        <rdar://problem/74220428>

        Reviewed by Youenn Fablet.

        Make sure the video is looping so that it cannot stop playing before the end of the test.
        This is a speculative fix since I haven't been able to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-05-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Wrong cookie timestamp in case of long expire time
        https://bugs.webkit.org/show_bug.cgi?id=225389

        Reviewed by Adrian Perez de Castro.

        Add a test case.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerLongExpires):
        (beforeAll):

2021-05-04  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Find a way to validate source_secret_token and source_secret_token_signature
        https://bugs.webkit.org/show_bug.cgi?id=224321
        <rdar://problem/76695542>

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        Uses RSA-PSS with SHA-384 to verify the signature.

2021-05-04  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Scope classes used in TaskPool to object
        https://bugs.webkit.org/show_bug.cgi?id=225361
        <rdar://problem/77514131>

        Reviewed by Dewei Zhu.

        The classes used by TaskPool must be stand-alone because they are passed between processes.
        However, it makes sense that those classes are scoped to the TaskPool object since their
        usage should always be associated with the TaskPool object

        * Scripts/libraries/webkitcorepy/setup.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (_Message): Renamed from Message.
        (_Task): Renamed from Task.
        (_Result): Renamed from Result.
        (_Log): Renamed from Log.
        (_Print): Renamed from Print.
        (_State): Renamed from State.
        (_ChildException): Renamed from ChildException.
        (_BiDirectionalQueue): Renamed from BiDirectionalQueue.
        (_Process): Renamed from Process.
        (TaskPool):
        (TaskPool.do):
        (Message): Renamed to _Message..
        (Task): Renamed to _Task.
        (Result): Renamed to _Result.
        (Log): Renamed to _Log.
        (Print): Renamed to _Print.
        (State): Renamed to _State.
        (ChildException): Renamed to _ChildException.
        (BiDirectionalQueue): Renamed to _BiDirectionalQueue.
        (Process): Renamed to _Process.

2021-05-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, try and re-enable AppleLanguagesTest.UpdateAppleLanguages on Apple Silicon.

        The test has been updated and it may be passing now or at least fail with a more useful output.

        * TestWebKitAPI/Tests/WebKit/OverrideAppleLanguagesPreference.mm:

2021-05-04  Alex Christensen  <achristensen@webkit.org>

        localStorage changes aren't reflected between WKWebViews using WKWebViewConfiguration._groupIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=225344
        <rdar://77496721>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST):

2021-05-04  Aakash Jain  <aakash_jain@apple.com>

        [ews] Ensure file handles are not leaked in unit tests
        https://bugs.webkit.org/show_bug.cgi?id=225360

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/email_unittest.py:
        (EmailsDotJSONTest.test_valid_emails_json):
        (EmailsDotJSONTest.test_emails_json_required_categories_present):
        * CISupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.get_config):

2021-05-04  Kate Cheney  <katherine_cheney@apple.com>

        Unreviewed, adding myself as a reviewer.

        * Scripts/webkitpy/common/config/contributors.json:

2021-05-03  Kimmo Kinnunen  <kkinnunen@apple.com>

        [GPUP] Move GPUProcess WebGL to Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=222836
        rdar://75048190

        Reviewed by Brent Fulgham.

        Move the setting for WebGL in GPU process
        to experimental features but disable it by default,
        even on layout tests.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-05-03  Chris Dumez  <cdumez@apple.com>

        Restore pre-r276879 behavior for FileSystem::moveFile()
        https://bugs.webkit.org/show_bug.cgi?id=225307

        Reviewed by Sam Weinig.

        Add API test to make sure that FileSystem::moveFile() is able to move directories since this
        was the case prior to r276879.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):

2021-05-03  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Support pickling platforminfo
        https://bugs.webkit.org/show_bug.cgi?id=225230
        <rdar://problem/77384913>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Define default arguments.
        (PlatformInfo.display_name): Use default platform module if platform_module undefined.
        (PlatformInfo._win_version_str): Ditto.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_real_code):
        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.__init__): Use default platforminfo sys and platform modules.

2021-05-03  Alex Christensen  <achristensen@webkit.org>

        WKWebView: WKURLSchemeHandler request don't have Range headers for custom scheme videos
        https://bugs.webkit.org/show_bug.cgi?id=203302
        <rdar://63750321>

        Reviewed by Jer Noble and Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2021-05-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r275810): [WebKitTestRunner] fast/text/basic/004.html fails after running fast/layoutformattingcontext tests
        https://bugs.webkit.org/show_bug.cgi?id=225087

        Reviewed by Don Olmstead.

        fast/layoutformattingcontext tests enable some internal debug
        settings by using the test file header. These settings weren't
        reset after running the tests.

        r275810 changed resetPreferencesToConsistentValues not to call
        WKPreferencesResetAllInternalDebugFeatures.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Call WKPreferencesResetAllInternalDebugFeatures.

2021-05-03  Tim Nguyen  <ntim@apple.com>

        Add committer status for "Tim Nguyen" in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=225320

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2021-05-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        editing/selection/ios/become-key-window-when-focusing-editable-area.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=225274
        rdar://77042575

        Reviewed by Tim Horton.

        This test is timing out on recent versions of iOS because the `-becomeKeyWindow` subclassing hook is no longer
        invoked when calling `-makeKeyWindow`, in the case where the `UIWindow` was already the key window. The iOS
        version of WebKitTestRunner on iOS was dependent on this behavior because `setWindowIsKey(false)` on
        `PlatformWebView` did not actually cause the test runner window to resign from being the key window. Instead, it
        only set the boolean flag `PlatformWebView::m_windowIsKey`, which `WebKitTestRunnerWindow` then uses to override
        the value of `-[WebKitTestRunnerWindow isKeyWindow]` (effectively side-stepping platform key window state).

        We can fix this by refactoring `PlatformWebView::setWindowIsKey` to actually make the `WebKitTestRunnerWindow`
        resign key window when calling `setWindowIsKey(false)`. Compared to macOS, doing this on iOS is a bit tricky
        since `-[UIWindow resignKeyWindow]` is purely a subclassing hook that is invoked when the window loses its
        status as the key window. However, we can work around this limitation by creating a separate `UIWindow` and
        making that window key instead (which implicitly makes our current `WebKitTestRunnerWindow` resign key window).

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::setWindowIsKey):

        Install the other `UIWindow` and make it key in order to resign the current key window. Note that this window is
        placed just offscreen, so that simulated taps and other gestures will continue to go to the original window.

        (-[WebKitTestRunnerWindow isKeyWindow]): Deleted.

        Stop overriding the platform key window state with the simulated test runner state, since we now correctly
        update platform key window state when setting `m_windowIsKey`. This adjustment is also necessary to ensure that
        we actually end up in the `!isKey && m_window.keyWindow` case above.

2021-05-03  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Pass logging level to child processes
        https://bugs.webkit.org/show_bug.cgi?id=225311
        <rdar://problem/77457646>

        Reviewed by Stephanie Lewis.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (Process.main): Set root logging level.
        (TaskPool.__init__): Pass logging level to child process.

2021-05-03  Chris Dumez  <cdumez@apple.com>

        Restore pre-r276879 behavior for FileSystem::deleteFile() and FileSystem::deleteEmptyDirectory()
        https://bugs.webkit.org/show_bug.cgi?id=225289

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):

2021-05-03  Sam Weinig  <weinig@apple.com>

        Remove default parameter values for color space and pixel format from ImageBuffer::create to make it clear everwhere we are explicitly requesting SRGB/BGRA8 buffers
        https://bugs.webkit.org/show_bug.cgi?id=225288

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):
        Pass arguments explicitly that were previously default values.

2021-05-03  Aakash Jain  <aakash_jain@apple.com>

        Remove unused gtk_im_multicontext_get_slave from valgrind/suppressions.txt
        https://bugs.webkit.org/show_bug.cgi?id=225300

        Reviewed by Žan Doberšek.

        * Scripts/valgrind/suppressions.txt:

2021-05-03  Youenn Fablet  <youenn@apple.com>

        Use OptionSet for MediaProducer::MutedStateFlags
        https://bugs.webkit.org/show_bug.cgi?id=224550
        <rdar://problem/76960294>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):

2021-05-01  Chris Dumez  <cdumez@apple.com>

        Start leveraging std::filesystem in WTF::FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=225255

        Reviewed by Sam Weinig.

        Add API test coverage for the FileSystem API that was modified.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::FileSystemTest::tempFilePath const):
        (TestWebKitAPI::FileSystemTest::tempFileSymlinkPath const):
        (TestWebKitAPI::FileSystemTest::tempEmptyFolderPath const):
        (TestWebKitAPI::FileSystemTest::tempEmptyFolderSymlinkPath const):
        (TestWebKitAPI::FileSystemTest::tempEmptyFilePath const):
        (TestWebKitAPI::FileSystemTest::spaceContainingFilePath const):
        (TestWebKitAPI::FileSystemTest::bangContainingFilePath const):
        (TestWebKitAPI::FileSystemTest::quoteContainingFilePath const):
        (TestWebKitAPI::TEST_F):

2021-05-01  Aakash Jain  <aakash_jain@apple.com>

        start-local-buildbot-server should fail gracefully for Python 2
        https://bugs.webkit.org/show_bug.cgi?id=225268

        Reviewed by Alexey Proskuryakov.

        * CISupport/start-local-buildbot-server:

2021-05-01  Aakash Jain  <aakash_jain@apple.com>

        Disable search engine crawling on build.webkit.org webpages
        https://bugs.webkit.org/show_bug.cgi?id=225252

        Reviewed by Jonathan Bedard.

        Referencec: https://developers.google.com/search/docs/advanced/robots/create-robots-txt

        * CISupport/build-webkit-org/public_html/robots.txt:

2021-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        App highlight UI should be disabled when selecting text in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225260
        rdar://77359313

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:

        Add a new API test to verify the behavior of `-targetForAction:withSender:` in `WKContentView`.

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        (WTR::TestOptions::keyTypeMapping):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::appHighlightsEnabled const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

        Add support for a new `TestOption` that enables app highlights. See the new layout test for more information.

2021-04-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [tools] Make run-buildbot-test compatible with buildbot 2.10.5
        https://bugs.webkit.org/show_bug.cgi?id=222540

        Reviewed by Aakash Jain.

        This renames the previous tool run-buildbot-test to start-buildbot-server-virtualenv
        and it makes several changes to it:
        - Use python3 and refactor the code.
        - Make it also work with the EWS config (previously it only worked for the build.webkit.org config).
        - Use newer buildbot configs.
        - Instead of hardcoding values try to automatically detect the values from the config dir.
        - Instead of starting Nth workers by default start only one round-robin worker (local-worker).

        It also modifies the configuration of the EWS server to add a force scheduler in order
        to allow to manually trigger builds (only in test mode).

        * CISupport/build-webkit-org/run-buildbot-test.py: Removed.
        * CISupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * CISupport/ews-build/steps.py:
        (ApplyPatch.start):
        * CISupport/start-local-buildbot-server: Added.
        (check_tcp_port_open):
        (create_tempdir):
        (print_if_error_stdout_stderr):
        (cmd_exists):
        (BuildbotTestRunner):
        (BuildbotTestRunner.__init__):
        (BuildbotTestRunner._get_config_tcp_ports):
        (BuildbotTestRunner.start):
        (BuildbotTestRunner._wait_for_server_ready):
        (BuildbotTestRunner._create_mock_worker_passwords_dict):
        (BuildbotTestRunner._setup_server_workdir):
        (BuildbotTestRunner._setup_virtualenv):
        (BuildbotTestRunner._upgrade_db_needed):
        (BuildbotTestRunner._start_server):
        (BuildbotTestRunner._get_list_workers):
        (BuildbotTestRunner._start_worker):
        (BuildbotTestRunner._clean):

2021-04-30  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Always extend access to local process HTTP/3 cache directory
        https://bugs.webkit.org/show_bug.cgi?id=225171
        <rdar://problem/76287224>

        Reviewed by Alex Christensen.

        Since we always create the directory (even if HTTP/3 is turned off) we should expect that it is
        created after loading a page.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2021-04-30  Kyle Piddington  <kpiddington@apple.com>

        Add kpiddington to commiters list
        https://bugs.webkit.org/show_bug.cgi?id=225253

        Reviewed by Dean Jackson.

        * Scripts/webkitpy/common/config/contributors.json:

2021-04-30  Jonathan Bedard  <jbedard@apple.com>

        [webkitcmpy] Better document inner-workings of identifier generation
        https://bugs.webkit.org/show_bug.cgi?id=225241

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit):
        (Git.find):
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn.commit):
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/bitbucket.py:
        (BitBucket.commit):
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
        (GitHub.commit):

2021-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add a heuristic to determine whether a synthetic click triggered any meaningful changes
        https://bugs.webkit.org/show_bug.cgi?id=225240
        rdar://77221196

        Reviewed by Tim Horton.

        Add test runner plumbing to test the new heuristic. Note that we can't just utilize the `WKUIDelegatePrivate`
        method directly, since we end up overriding the web view's `UIClient` via `WKPageSetPageUIClient`, so the call
        to `m_uiClient->didNotHandleTapAsMeaningfulClickAtPoint(point);` ends up being a no-op.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installDidNotHandleTapAsMeaningfulClickCallback):
        (WTR::TestRunner::callDidNotHandleTapAsMeaningfulClickCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didNotHandleTapAsMeaningfulClick):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didNotHandleTapAsMeaningfulClick):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _didNotHandleTapAsMeaningfulClickAtPoint:]):

2021-04-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276846.
        https://bugs.webkit.org/show_bug.cgi?id=225242

        Breaks test execution in GTK and WPE ports

        Reverted changeset:

        "[webkitpy] Support pickling platforminfo"
        https://bugs.webkit.org/show_bug.cgi?id=225230
        https://trac.webkit.org/changeset/276846

2021-04-30  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Properly recover from unresponsive web processes
        https://bugs.webkit.org/show_bug.cgi?id=224533

        Reviewed by Carlos Garcia Campos.

        Add unit tests for the new webkit_web_view_terminate_web_process GLib API method. Also move
        the methods used to wait for responsiveness changes to WebViewTest, as they are used by more
        than a single test.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewIsWebProcessResponsive):
        (testWebViewTerminateWebProcess):
        (testWebViewTerminateUnresponsiveWebProcess):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (isWebProcessResponsiveChanged):
        (WebViewTest::waitUntilIsWebProcessResponsiveChanged):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2021-04-30  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Support pickling platforminfo
        https://bugs.webkit.org/show_bug.cgi?id=225230
        <rdar://problem/77384913>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Define default arguments.
        (PlatformInfo.display_name): Use default platform module if platform_module undefined.
        (PlatformInfo._win_version_str): Ditto.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_real_code):
        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.__init__): Use default platforminfo sys and platform modules.

2021-04-30  Aakash Jain  <aakash_jain@apple.com>

        report-non-inclusive-language should skip buildstream directory
        https://bugs.webkit.org/show_bug.cgi?id=225212

        Reviewed by Alexey Proskuryakov.

        * Scripts/report-non-inclusive-language:

2021-04-30  Jonathan Bedard  <jbedard@apple.com>

        [webkitscpy] Support arguments to TaskPool setup and teardown
        https://bugs.webkit.org/show_bug.cgi?id=225220
        <rdar://problem/77352340>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py:
        (Process.main): Accept setup and teardown arguments to child processes.
        (TaskPool.__init__): Pass setup and teardown arguments to child processes.
        * Scripts/libraries/webkitcorepy/webkitcorepy/tests/task_pool_unittest.py:
        (setup): Acception optional argument.
        (teardown): Ditto.
        (TaskPoolUnittest.test_setup_arguments):
        (TaskPoolUnittest.test_teardown_arguments):

2021-04-29  Darin Adler  <darin@apple.com>

        Extend SortedArrayMap further to work on case-folded strings, use in MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=224968

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added SortedArrayMap.cpp,
        and removed references to non-existent FullscreenRemoveNodeBeforeEnter.h and
        FloatQuadTests.h.
        * TestWebKitAPI/Tests/WTF/SortedArrayMap.cpp: Added.

2021-04-29  Roy Reapor  <rreapor@apple.com>

        [webkitcorepy] Allow user to specify interpreter used by autoinstall.py to install imported dependencies
        https://bugs.webkit.org/show_bug.cgi?id=225172

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitcorepy/setup.py: Version bump.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Version bump.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): AUTOINSTALL_PYTHON_EXECUTABLE environment variable can override python interpreter used by this module.

2021-04-29  Aakash Jain  <aakash_jain@apple.com>

        [webkitpy] Remove deprecated slave-config-json-path parameter in perftestsrunner.py
        https://bugs.webkit.org/show_bug.cgi?id=225106

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_parse_deprecated_args): Deleted.

2021-04-29  Aakash Jain  <aakash_jain@apple.com>

        Remove unused slave parameter from run-jsc-benchmarks script
        https://bugs.webkit.org/show_bug.cgi?id=225153

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-benchmarks:

2021-04-29  Sam Sneddon  <gsnedders@apple.com>

        Make sure webkitpy tests pass on Linux and on more Python versions
        https://bugs.webkit.org/show_bug.cgi?id=225157

        Reviewed by Jonathan Bedard.

        This gets us passing the webkitpy tests, run under pytest, on Linux,
        under Python 2.7, 3.6, 3.7, 3.8, 3.9, and alpha 3.10.

        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py:
        Conditionally install setuptools 56 on Python 3, keep setuptools
        44.1.1 on Python 2. (44.1.1 is the last release supporting Python 2,
        but due to removals doesn't install on Python 3.10.)
        * Scripts/webkitpy/browserperfdash/browserperfdash_unittest.py:
        (FakeBrowserDriver): Implement a FakeBrowserDriver which does nothing.
        (FakeBrowserDriver.__init__):
        (FakeBrowserDriver.prepare_env):
        (FakeBrowserDriver.prepare_initial_env):
        (FakeBrowserDriver.restore_env):
        (FakeBrowserDriver.restore_env_after_all_testing):
        (FakeBrowserDriver.close_browsers):
        (FakeBrowserDriver.launch_url):
        (FakeBrowserDriver.launch_webdriver):
        (BrowserPerfDashRunnerTest.test_can_construct_runner_object_minimum_parameters):
        Use the FakeBrowserRunner rather than the platform/browser
        default. (This fixes this test on Linux when no minibrowser-gtk is
        available.)
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitTest.setUp): Set user.name/user.email to ensure they're set.
        (GitSVNTest._setup_git_checkout): Set user.name/user.email to ensure
        they're set.
        * Scripts/webkitpy/common/net/credentials.py: Conditionally import
        keyring; the rest of the code already supports keyring being
        None. (keyring doesn't have any release supporting both Python 2 and
        3.10, but updating keyring pulls in new dependencies and is left as
        future work.)
        * Scripts/webkitpy/common/prettypatch_unittest.py:
        (PrettyPatchTest.check_ruby): Also check Ruby version.
        (test_pretty_diff_encodings): Explicitly skip; don't just return.
        (test_pretty_print_empty_string): Explicitly skip; don't just return.
        * Scripts/webkitpy/common/system/logtesting.py:
        (TestLogStream.write): Python 3.6's logging appears to put new lines
        following a message in a new message, which breaks many tests.
        * Scripts/webkitpy/pytest.ini: Broaden ignored warnings.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.normalize): collections -> collections.abc for Py3.10
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_device_with_runtime): Use modern
        plistlib API.
        (SimulatedDevice.state): Use modern plistlib API.

2021-04-28  Devin Rousso  <drousso@apple.com>

        experiment with averaging sampling colors across the top of the page as the scroll area background
        https://bugs.webkit.org/show_bug.cgi?id=224987
        <rdar://problem/76251889>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/SampledPageTopColor.mm: Added.
        (-[TestKVOWrapper initWithObservable:keyPath:callback:]):
        (-[TestKVOWrapper dealloc]):
        (-[TestKVOWrapper observeValueForKeyPath:ofObject:change:context:]):
        (createWebViewWithSampledPageTopColorMaxDifference):
        (waitForSampledPageTopColorToChangeForHTML):
        (createHTMLGradientWithColorStops):
        (TEST.SampledPageTopColor.ZeroMaxDifference):
        (TEST.SampledPageTopColor.NegativeMaxDifference):
        (TEST.SampledPageTopColor.SolidColor):
        (TEST.SampledPageTopColor.DifferentColorsWithoutOutlierBelowMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsWithLeftOutlierAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsWithMiddleOutlierAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsWithRightOutlierAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsIndividuallyAboveMaxDifference):
        (TEST.SampledPageTopColor.DifferentColorsCumulativelyAboveMaxDifference):
        (TEST.SampledPageTopColor.DisplayP3):
        (TEST.SampledPageTopColor.ExperimentalUseSampledPageTopColorForScrollAreaBackgroundColor):

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-04-28  Jonathan Bedard  <jbedard@apple.com>

        [webkitpy] Refactor SimulatorDevice
        https://bugs.webkit.org/show_bug.cgi?id=225158

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._get_device_identifier_for_type): Handle partially defined device types.
        (SimulatedDevice.is_usable): Place Home Screen services into dictionary.

2021-04-28  Ryosuke Niwa  <rniwa@webkit.org>

        When IPC testing API is enabled, GPU process shouldn't kill Web Process
        https://bugs.webkit.org/show_bug.cgi?id=225143
        <rdar://70692277>

        Reviewed by Chris Dumez.

        Added tests for sending IPC messages to GPU process via IPC testing API.

        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:
        (IPCTestingAPI.CanSendInvalidAsyncMessageToUIProcessWithoutTermination): Renamed from
        CanSendInvalidAsyncMessageWithoutTermination.
        (IPCTestingAPI.CanSendInvalidSyncMessageToUIProcessWithoutTermination): Renamed from
        CanSendInvalidMessageWithoutTermination.
        (IPCTestingAPI.CanSendSyncMessageToGPUProcess): Added.
        (IPCTestingAPI.CanSendAsyncMessageToGPUProcess): Added.
        (IPCTestingAPI.CanSendInvalidAsyncMessageToGPUProcessWithoutTermination): Added.

2021-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fine-tune some more selection behaviors in image overlays
        https://bugs.webkit.org/show_bug.cgi?id=225121

        Reviewed by Tim Horton.

        Add an API test to verify that selected text inside image overlays is dragged out as plain text only.

        * TestWebKitAPI/Tests/WebKit/simple-image-overlay.html:
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        (TEST):

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        Add SPI to query whether a URL would be upgraded to HTTPS
        https://bugs.webkit.org/show_bug.cgi?id=225154
        <rdar://77269904>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm:
        (TEST):

2021-04-28  Jonathan Bedard  <jbedard@apple.com>

        [configure-xcode-for-embedded-development] Support Xcode 12.5
        https://bugs.webkit.org/show_bug.cgi?id=225127

        Reviewed by Stephanie Lewis.

        * Scripts/configure-xcode-for-embedded-development: Add definition of
        com.apple.package-type.mach-o-executable and com.apple.product-type.tool instead
        of copying from the MacOS SDK.

2021-04-28  Alex Christensen  <achristensen@webkit.org>

        Remove support for NPAPI plugins in WebView
        https://bugs.webkit.org/show_bug.cgi?id=224449

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-04-28  Kimmo Kinnunen  <kkinnunen@apple.com>

        Asserting that function or variable is accessed in a certain thread should be simpler and more robust
        https://bugs.webkit.org/show_bug.cgi?id=224971

        Reviewed by Darin Adler.

        Add simple tests to make sure code in ThreadAssertions.h
        compiles.

        * Scripts/generate-gpup-webgl:
        Use ThreadAssertions in RemoteGraphicsContextGL implementation
        as an example.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ThreadAssertionsTest.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::WTF_REQUIRES_LOCK):

2021-04-27  Aakash Jain  <aakash_jain@apple.com>

        Delete unused iExploder
        https://bugs.webkit.org/show_bug.cgi?id=225118

        Rubber-stamped by Alexey Proskuryakov.

        * iExploder: Removed.

2021-04-27  Kimmo Kinnunen  <kkinnunen@apple.com>

        Add a Condition type that supports thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=224970

        Reviewed by Darin Adler.

        A simple test for CheckedCondition to make sure
        it compiles.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedConditionTest.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/CheckedLockTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/CheckedLockTest.cpp:

2021-04-27  Sam Sneddon  <gsnedders@apple.com>

        Make TestInput immutable
        https://bugs.webkit.org/show_bug.cgi?id=224989

        Reviewed by Jonathan Bedard.

        The main point here is moving computing reference_files and
        should_run_pixel_test to when we initially construct TestInput, as at
        this point this happens in the some process and thread (since bug
        221577), hence there's no real reason for it to happen later.

        In doing this, I've eliminated Port.should_run_as_pixel_test on the
        basis that no port actually overrode this to apply any different logic,
        especially given it seems unlikely that any port would want to use
        different logic here. (Note that ports still have some control through
        Port.default_pixel_tests.)

        With this done, it should then be possible to make TestInput immutable,
        which should help make things easier to understand.

        Expect, as it happens, there was a reason for it to happen later: we
        previously generated all the TestInputs twice, once to find out how
        many workers we need and then another time to actually run them (plus
        potentially a third time for retries!). There's no actual reason to do
        this, so move the creation to Manager.run and pass that list around
        instead of the Tests.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests): Don't update TestInput.
        (LayoutTestRunner._update_test_input): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._test_input_for_file): Moved from _update_test_input and
        Port.should_run_as_pixel_test.
        (Manager._get_test_inputs): Deleted.
        (Manager._multiply_test_inputs): Simplify code used to generated
        repeated/rerun test inputs.
        (Manager._update_worker_count): Don't create TestInputs; take
        test_inputs as arg.
        (Manager._set_up_run): Rename test_names to test_inputs.
        (Manager.run): Create TestInput objects here.
        (Manager._run_test_subset): Take TestInputs not Tests, generate new
        TestInputs for retry if needed.
        (Manager._run_tests): Don't create TestInputs; take test_inputs as arg.
        * Scripts/webkitpy/layout_tests/models/test.py: Fly-by: use __slots__.
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput): Migrate to attrs.
        (TestInput.__init__): Deleted.
        (TestInput.__repr__): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.should_run_as_pixel_test): Deleted.
        (Port._should_run_as_pixel_test): Deleted.

2021-04-27  Sam Sneddon  <gsnedders@apple.com>

        Optimize Port._expected_baselines_for_suffixes
        https://bugs.webkit.org/show_bug.cgi?id=225115

        Reviewed by Jonathan Bedard.

        This takes out the join() and splitext() calls from the inner loop as
        they are loop invariant, and account for a large proportion of the
        function's execution time. After this, exists() account for almost
        all.

        * Scripts/webkitpy/port/base.py:
        (Port._expected_baselines_for_suffixes):

2021-04-27  Ryan Haddad  <ryanhaddad@apple.com>

        [ews] Configure bots for stress test queue
        https://bugs.webkit.org/show_bug.cgi?id=225000

        Reviewed by Aakash Jain.

        * CISupport/ews-build/config.json: Add ews181 and ews182.

2021-04-27  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r275912.
        rdar://77179042

        Broke internal client

        Reverted changeset:

        "Remove support for NPAPI plugins in WebView"
        https://bugs.webkit.org/show_bug.cgi?id=224449
        https://commits.webkit.org/r275912

2021-04-27  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Autoscale jobs for remote boards
        https://bugs.webkit.org/show_bug.cgi?id=225100

        Reviewed by Mark Lam.

        When using --gnu-parallel-runner, let GNU parallel handle the number of jobs
        unless the user has explicitly requested a specific number of remote processes.

        Previously, run-jsc-stress-tests would set numChildProcesses by querying the
        first remote, under the assumption that the remotes are homogeneous. The number
        of jobs inferred by looking at the CPUs of the first remote may be
        inappropriate for the rest of the remotes.

        * Scripts/run-jsc-stress-tests:

2021-04-27  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Don't use FORWARDING_HEADERS_DIR for GTK WebKit headers
        https://bugs.webkit.org/show_bug.cgi?id=225006

        Reviewed by Michael Catanzaro.

        Use WebKit2Gtk_FRAMEWORK_HEADERS_DIR and WebKit2Gtk_DERIVED_SOURCES_DIR for WebKit2 GTK
        headers instead of FORWARDING_HEADERS_DIR and DERIVED_SOURCES_DIR.

        * MiniBrowser/gtk/CMakeLists.txt:
        * TestWebKitAPI/glib/PlatformGTK.cmake:

2021-04-27  Aakash Jain  <aakash_jain@apple.com>

        Rename slave to worker in TestFailures
        https://bugs.webkit.org/show_bug.cgi?id=225079

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/public_html/TestFailures/scripts/Builder.js:
        * CISupport/build-webkit-org/public_html/TestFailures/scripts/builders_unittests.js:
        * CISupport/build-webkit-org/public_html/TestFailures/scripts/results_unittests.js:

2021-04-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Subdivide image overlay text into one or more elements per line
        https://bugs.webkit.org/show_bug.cgi?id=225038
        rdar://75505043

        Reviewed by Tim Horton and Devin Rousso.

        Adjust several existing layout tests after changing `internals.installImageOverlay`. See WebCore ChangeLog for
        more details. Additionally, rename a WebCore geometry helper method.

        * TestWebKitAPI/Tests/WebCore/FloatQuadTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/simple-image-overlay.html:

2021-04-26  Kate Cheney  <katherine_cheney@apple.com>

        ResourceLoadStatisticsDatabaseStore::aggregatedThirdPartyData() hangs for a long time
        https://bugs.webkit.org/show_bug.cgi?id=225063
        <rdar://problem/76248557>

        Reviewed by Brent Fulgham.

        Test coverage. Currently API testing is the only way to test data
        migration and schema changes in the ITP database because we can load
        a pre-seeded database and check the correct values after migration.
        We should add some ability for unit testing in the future.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Update Mac-specific CMake files
        https://bugs.webkit.org/show_bug.cgi?id=225064

        Rubber-stamped by Tim Horton.

        * MiniBrowser/mac/CMakeLists.txt:

2021-04-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should only display important messages in pop-over - part 4
        https://bugs.webkit.org/show_bug.cgi?id=225076

        Reviewed by Jonathan Bedard.

        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):

2021-04-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Modernize WebKit GLib testing
        https://bugs.webkit.org/show_bug.cgi?id=225052

        Reviewed by Adrian Perez de Castro.

        Set values on targets directly rather than the older add_definitions and
        include_directories style. Clean up the code and format it properly.

        A NO_GTEST_USAGE definition is used to prevent gtest from being included when an alternate
        testing framework is used.

        * TestWebKitAPI/config.h:
        * TestWebKitAPI/glib/CMakeLists.txt:

2021-04-26  Don Olmstead  <don.olmstead@sony.com>

        Fix includes for some GTK/GLib headers
        https://bugs.webkit.org/show_bug.cgi?id=225020

        Reviewed by Adrian Perez de Castro.

        Update include paths to use their correct <> path.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:

2021-04-26  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] media/track/in-band/ layout tests introduced in r154908 are failing
        https://bugs.webkit.org/show_bug.cgi?id=120665

        Reviewed by Philippe Normand.

        Fix media/track/in-band/tests

        Add libkate as dependency, so gst-plugins-bad detects it and can build the GstKateDec element.
        This isn't actually needed when using Flatpak (the dependency has been added there), but is still
        useful when using jhbuild and is also coherent with the need of other multimedia dependencies
        such as libvpx.

        * gtk/install-dependencies:
        * wpe/install-dependencies:

2021-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Add an option to not enable all experimental features in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=225041

        Reviewed by Wenson Hsieh.

        Added --no-enable-all-experimental-features to DumpRenderTree as we did
        for WebKitTestRunner in r276559. 

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        (initializeGlobalsFromCommandLineOptions):

2021-04-25  Darin Adler  <darin@apple.com>

        Fix handling of overflow of /= and *= operators with double over Checked<uint64_t> and other 64-bit types.
        https://bugs.webkit.org/show_bug.cgi?id=224835

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        Removed tests of the "/=" operator with floating point arguments, no longer supported.

2021-04-25  Tyler Wilcock  <twilco.o@protonmail.com>

        jsonchecker.py validate_string uses Python 2 basestring type instead of Python 2/3 str type
        https://bugs.webkit.org/show_bug.cgi?id=224978

        Reviewed by Darin Adler.

        validate_string uses the Python 2 basestring type instead of the Python 2/3
        str type.  This causes the check to exit early the first time it validates
        a string with this error:

        name 'basestring' is not defined

        This resulted in jsonchecker not checking the file beyond the first
        string validation.  

        I believe this caused jsonchecker to miss a bug in one of my previous
        patches in which I put the "settings-flag" property in the wrong
        place:

        https://bugs.webkit.org/show_bug.cgi?id=224718#c20

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.validate_string):
        validate_string with Python 2 / 3 str type instead of Python 2
        basestring.

2021-04-24  Aakash Jain  <aakash_jain@apple.com>

        Rename slave to worker in webkitpy - part 2
        https://bugs.webkit.org/show_bug.cgi?id=224988

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/system/crashlogs_unittest.py:

2021-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add an option to not enable all experimental features in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=224958

        Reviewed by Tim Horton.

        Added --no-enable-all-experimental-features to run-webkit-tests and WebKitTestRunner.

        It causes a crash in DumpRenderTree for now. We should rectify this in the future
        when we align the behaviors of WebKitTestRunner and DumpRenderTree.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Added --no-enable-all-experimental-features.
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line): Pass along the option to WebKitTestRunner.
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionNoEnableAllExperimentalFeatures): Added.
        (WTR::OptionsHandler::OptionsHandler): Added --no-enable-all-experimental-features.
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.h:

2021-04-24  Tyler Wilcock  <twilco.o@protonmail.com>

        Refactor ValueRange from enum to enum class
        https://bugs.webkit.org/show_bug.cgi?id=224981

        Reviewed by Sam Weinig.

        ValueRange has been refactored from enum to enum class : uint8_t to
        make it smaller and harder to misuse.

        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):
        Refactor ValueRangeAll and ValueRangeNonNegative to ValueRange::All
        and ValueRange::NonNegative.

2021-04-23  Aakash Jain  <aakash_jain@apple.com>

        Delete unused buildbot.css and default.css
        https://bugs.webkit.org/show_bug.cgi?id=224997

        Reviewed by Alexey Proskuryakov.

        * CISupport/build-webkit-org/public_html/buildbot.css: Removed.
        * CISupport/build-webkit-org/public_html/default.css: Removed.

2021-04-23  Sam Sneddon  <gsnedders@apple.com>

        Add a conftest.py to run existing webkitpy tests in pytest
        https://bugs.webkit.org/show_bug.cgi?id=224687

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_run_in_parallel): Deal with the fact that pytest
        running the tests might be not be the same version as the autoinstalled version,
        and not API compatible.
        * Scripts/webkitpy/conftest.py: Added.
        (pytest_configure): Define the markers the plugins in conftest use
        (pytest_addoption): Add --run-integration to allow them to be disabled by default.
        (pytest_pycollect_makeitem): Rename serial/integration tests so pytest finds them.
        (pytest_collection_modifyitems): Mark tests as skipped when needed per the above.
        * Scripts/webkitpy/pytest.ini: Added.
        * Scripts/webkitpy/test/main_unittest.py:
        (TestStubs): Stop these from being picked up by pytest as tests.
        * Scripts/webkitpy/test/markers.py: Fix this so pytest is technically optional,
        even though it is always present because of the autoinstalled copy.

2021-04-23  Aakash Jain  <aakash_jain@apple.com>

        Make report-non-inclusive-language ignore .db files
        https://bugs.webkit.org/show_bug.cgi?id=224979

        Reviewed by Darin Adler.

        * Scripts/report-non-inclusive-language:

2021-04-23  Youenn Fablet  <youenn@apple.com>

        Fix KVO for camera/microphone capture state WKWebView API
        https://bugs.webkit.org/show_bug.cgi?id=224922
        <rdar://problem/77008199>

        Reviewed by Eric Carlson.

        Add tests for capture state API.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (-[MediaCaptureObserver observeValueForKeyPath:ofObject:change:context:]):
        (TestWebKitAPI::waitUntilCameraState):
        (TestWebKitAPI::waitUntilMicrophoneState):
        (TestWebKitAPI::TEST):

2021-04-22  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse @counter-style descriptors
        https://bugs.webkit.org/show_bug.cgi?id=224718

        Reviewed by Darin Adler.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Fix typo (missing 's').  CSSCounterStyleAtRulesEnabled, not
        CSSCounterStyleAtRuleEnabled.

2021-04-22  BJ Burg  <bburg@apple.com>

        [Cocoa] re-enable test case WKInspectorDelegate.InspectorConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=224577
        <rdar://70505272>

        Reviewed by Devin Rousso.

        Trigger a fetch of a resource that uses a custom URL scheme handler in
        order to test that custom scheme handlers registered in an _WKInspectorConfiguration
        are getting used as expected.

        Add an -inspectorFrontendLoaded: delegate method to -WKInspectorDelegate.
        This is mainly used to prevent tests from progressing with a half-loaded inspector.

        To make it possible to do this fetch(), there are some CSP related changes
        that were made for Main.html so that fetching from a registered custom scheme is allowed.

        Drive-by, per post-commit comments, add a better fix for the memory leak reported in
        https://bugs.webkit.org/show_bug.cgi?id=223899. Thanks Joe!

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (resetGlobalState):
        (-[InspectorDelegate inspectorFrontendLoaded:]):
        (TEST):
        (-[UIDelegate _webView:didAttachLocalInspector:]):
        (-[UIDelegate _webView:willCloseLocalInspector:]):
        (-[UIDelegate _webViewDidEnableInspectorBrowserDomain:]):
        (-[UIDelegate _webViewDidDisableInspectorBrowserDomain:]):

2021-04-22  Lauro Moura  <lmoura@igalia.com>

        Unreviewed. Gardening TestSSL flakiness

        * TestWebKitAPI/glib/TestExpectations.json:

2021-04-22  Simon Fraser  <simon.fraser@apple.com>

        Add trace points for WKWebView snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=224943

        Reviewed by Tim Horton.

        New snapshot descriptions.

        * Tracing/SystemTracePoints.plist:

2021-04-22  Tim Nguyen  <ntim@apple.com>

        Add "Tim Nguyen" to contributors.json.
        https://bugs.webkit.org/show_bug.cgi?id=224936

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/contributors.json:

2021-04-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WTR] eventSender.leapForward doesn't work as expected
        https://bugs.webkit.org/show_bug.cgi?id=224918

        Reviewed by Don Olmstead.

        fast/events/click-count.html was failing because
        eventSender.leapForward didn't work as expected.

        Use Sleep() API to implement it as well as DRT does.

        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::dispatchMessage):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::leapForward):

2021-04-22  BJ Burg  <bburg@apple.com>

        v2: REGRESSION(r266890): [Cocoa] Fix API::InspectorClient leak
        https://bugs.webkit.org/show_bug.cgi?id=223899
        <rdar://problem/75249282>

        Reviewed by Devin Rousso.

        Address post-review feedback.

        * TestWebKitAPI/Tests/WebKitCocoa/WKInspectorDelegate.mm:
        (TEST):

2021-04-22  Sam Sneddon  <gsnedders@apple.com>

        Ensure all non-local AutoInstalled libraries specify version
        https://bugs.webkit.org/show_bug.cgi?id=224872

        Reviewed by Jonathan Bedard.

        Currently on Python 3 running test-webkitpy fails due to us attempting to
        install flask 2.0.0rc1, recently released. We shouldn't, however, be installing
        the latest possible version of flask, but rather specifying one. We do actually
        attempt to specify one in webkitflaskpy, but we pass the Version object to the
        wrong place.

        Now actually specifying the versions, we need to change some of them to the
        latest version which supports Python 2 to be able to install them to run
        test-webkitpy-python2.

        To ensure we don't repeat this, this makes AutoInstall.register raise if you try
        to register a non-local package without specifying a version.

        Additionally, require AutoInstall.register's package argument be a Package by
        passing moving the lookup to AutoInstall.install and requiring it to be
        successful.

        Finally, while I'm touching this, make registering 'autoinstalled' an outright
        failure, and make installing a local package fail if it cannot be found.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (AutoInstall.register):
        (AutoInstall.install):
        * Scripts/libraries/webkitflaskpy/webkitflaskpy/__init__.py:

2021-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] The Look Up text service popover should avoid covering selected text
        https://bugs.webkit.org/show_bug.cgi?id=224915
        rdar://75891746

        Reviewed by Megan Gardner.

        Add a new API test to exercise the change.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/TextServicesTests.mm: Added.
        (TestWebKitAPI::handleLookup):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h: Add SPI declarations for UIWKTextInteractionAssistant.

2021-04-22  Aakash Jain  <aakash_jain@apple.com>

        Services EWS should run for webkitscmpy and webkitcorepy changes
        https://bugs.webkit.org/show_bug.cgi?id=223941

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CheckPatchRelevance):
        * CISupport/ews-build/steps_unittest.py: Added unit-test.

2021-04-22  Sam Sneddon  <gsnedders@apple.com>

        Add an xfail marker for webkitpy's tests; get SCM passing
        https://bugs.webkit.org/show_bug.cgi?id=224886

        Reviewed by Jonathan Bedard.

        Also:

        Delete the old, unused skip_if decorator.

        Fix our runner to detect unexpected-success and report them as failures.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitSVNTest.test_rebase_in_progress):
        (GitTestWithMock.test_create_patch):
        * Scripts/webkitpy/test/markers.py:
        (xfail):
        (xfail.decorator):
        * Scripts/webkitpy/test/runner.py:
        (Runner.handle):
        (_Worker.handle):
        (TestResult):
        (TestResult.__init__):
        (TestResult.addSuccess):
        * Scripts/webkitpy/test/runner_unittest.py:
        (FakeTestCase):
        (FakeTestCase.__init__):
        (FakeTestCase.id):
        (FakeModuleSuite.run):
        * Scripts/webkitpy/test/skip.py: Removed.
        * Scripts/webkitpy/test/skip_unittest.py: Removed.

2021-04-22  Sam Sneddon  <gsnedders@apple.com>

        server_process_unittest.py's MockFile should all be bytes
        https://bugs.webkit.org/show_bug.cgi?id=224877

        Reviewed by Jonathan Bedard.

        This fixes the test when run under pytest on Python 3.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (MockFile.read):

2021-04-22  Sam Sneddon  <gsnedders@apple.com>

        Fix potential flakiness when running webkitpy tests
        https://bugs.webkit.org/show_bug.cgi?id=224887

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_run_in_parallel): Increase the delay to ensure it's
        much greater than the VM spawn time, as the current time is a bit marginal when
        the system is under load and we're using the spawn multiprocessing start method
        * Scripts/webkitpy/test/main.py:
        (Tester.run): Allow argv to be passed through for testing
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found): Explicitly pass argv to avoid using sys.argv
        * Scripts/webkitpy/w3c/test_parser_unittest.py:
        (TestParserTest.test_analyze_pixel_test_all_true): Reset options after test
        (TestParserTest.test_analyze_pixel_test_all_false): Reset options after test
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (SimulatedDeviceTest.reset_simulated_device_manager): _device_identifier_to_name
        is a dict, and should remain one

2021-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Web processes recreated after crashing are not created with the right contentSizeCategory
        https://bugs.webkit.org/show_bug.cgi?id=224916

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/TextStyleFontSize.mm: Added.
        (-[TextStyleFontSizeWebView _contentSizeCategory]):
        (TEST):

2021-04-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276380 and r276386.
        https://bugs.webkit.org/show_bug.cgi?id=224912

        Caused WPT css/css-counter-styles/cssom test crashes on macOS
        WK1 with ASan

        Reverted changesets:

        "[css-counter-styles] Parse @counter-style descriptors"
        https://bugs.webkit.org/show_bug.cgi?id=224718
        https://trac.webkit.org/changeset/276380

        "CSSComputedStyleDeclaration.cpp should use C++ style
        comments"
        https://bugs.webkit.org/show_bug.cgi?id=224875
        https://trac.webkit.org/changeset/276386

2021-04-21  Chris Dumez  <cdumez@apple.com>

        Regression(r275887) open.spotify.com says Safari is not supported
        https://bugs.webkit.org/show_bug.cgi?id=224905
        <rdar://76982108>

        Reviewed by Eric Carlson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-04-21  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Disable unused parameters in force build dialog box
        https://bugs.webkit.org/show_bug.cgi?id=224544

        Unreviewed minor infrastructure fix.

        * CISupport/build-webkit-org/loadConfig.py:

2021-04-21  Don Olmstead  <don.olmstead@sony.com>

        [Python 3] Update gni-to-cmake.py
        https://bugs.webkit.org/show_bug.cgi?id=224880

        Reviewed by Kenneth Russell.

        Update script to use the `--prepend` argument.

        * Scripts/update-angle:

2021-04-21  Chris Dumez  <cdumez@apple.com>

        GPUProcess launches unnecessarily when loading the amazon front page
        https://bugs.webkit.org/show_bug.cgi?id=224843

        Reviewed by Eric Carlson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-04-21  Sam Sneddon  <gsnedders@apple.com>

        Always pass --no-abbrev-commit to git-log/show
        https://bugs.webkit.org/show_bug.cgi?id=224879

        Reviewed by Jonathan Bedard.

        Currently some of the SCM tests fail with git's log.abbrevCommit; we should
        avoid any risk of the tests failing or functionality being broken by always
        asking for the unabbreviated commit.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.local_commits):
        (Git.exists):
        (Git._changes_files_for_commit):
        (Git.revisions_changing_file):
        (Git._most_recent_log_matching):
        (Git._most_recent_log_for_revision):
        (Git.git_commit_from_svn_revision):
        (Git.contents_at_revision):
        (Git.show_head):
        (Git.committer_email_for_revision):

2021-04-21  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse @counter-style descriptors
        https://bugs.webkit.org/show_bug.cgi?id=224718

        Reviewed by Darin Adler.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Fix typo (missing 's').  CSSCounterStyleAtRulesEnabled, not
        CSSCounterStyleAtRuleEnabled.

2021-04-21  Sam Sneddon  <gsnedders@apple.com>

        Handle os.getenv returning None
        https://bugs.webkit.org/show_bug.cgi?id=224869

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVNRepository.has_authorization_for_realm): This entirely replaces reading
        $HOME with a call to os.path.expanduser. Notably, the stdlib function both
        handles cases on Unix-like OSes when $HOME is undefined and on Windows (where
        $HOME is undefined by default) correctly constructs the path.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_all): Handle $USER being undefined by just attempting to kill
        all processes regardless of owner.

2021-04-21  Simon Fraser  <simon.fraser@apple.com>

        Enhance scrolling-related trace points
        https://bugs.webkit.org/show_bug.cgi?id=224852

        Reviewed by Tim Horton.

        Update trace point descriptions.

        * Tracing/SystemTracePoints.plist:

2021-04-21  Lauro Moura  <lmoura@igalia.com>

        [WPE] Allow defining custom repo and branch for Cog checkout
        https://bugs.webkit.org/show_bug.cgi?id=224739

        Reviewed by Philippe Normand.

        Use cmake args "-DWPE_COG_REPO=<repo>" and "-DWPE_COG_TAG=<tag>" to
        build different cog versions without having to edit the cmake files.

        There might be the need to wipe the checked-out dir from time to time,
        as only CMake 3.18 introduced different checkout strategies. Previous
        cmakes try to rebase the previously checked out branch which might
        lead to conflicts.

        This commit also allows selecting between Cog and MiniBrowser with the
        WPE_BROWSER envvar.

        * PlatformWPE.cmake:
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.cog_path):
        (WPEPort):
        (WPEPort.browser_name):
        (WPEPort.run_minibrowser):
        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest.test_default_upload_configuration):
        (WPEPortTest):
        (WPEPortTest.test_browser_name_default):
        (WPEPortTest.test_browser_name_with_cog_built):
        (WPEPortTest.test_browser_name_override_minibrowser_with_cog_built):
        (WPEPortTest.test_browser_name_override_cog_without_cog_built):
        (WPEPortTest.test_browser_name_override_unknown):
        * Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py:
        (WebDriverWPE.browser_name): Make it cog-aware.
        (WebDriverWPE.browser_path): Ditto.

2021-04-21  Tim Horton  <timothy_horton@apple.com>

        Long-pressing a data detectors link causes the link to be followed
        https://bugs.webkit.org/show_bug.cgi?id=224847
        <rdar://problem/72889738>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
        (TEST):
        Add tests ensuring that we get a click event for completed touches, and not for cancelled touches.

2021-04-21  Megan Gardner  <megan_gardner@apple.com>

        Support scrolling to a selected AppHighlight
        https://bugs.webkit.org/show_bug.cgi?id=224773

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAppHighlights.mm:
        (TestWebKitAPI::TEST):

2021-04-20  Devin Rousso  <drousso@apple.com>

        Parse `theme_color` in web application manifests and pass it along to `-[WKWebView themeColor]`
        https://bugs.webkit.org/show_bug.cgi?id=224796

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (ApplicationManifestParserTest::testThemeColor): Added.
        (TEST_F.ApplicationManifestParserTest.ThemeColor): Added.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm:
        (TEST.ApplicationManifestBasic):
        (TEST.ApplicationManifestCoding):

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewThemeColor.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/HTMLMetaThemeColor.mm.
        (TEST.WKWebViewThemeColor.ApplicationManifest):
        (TEST.WKWebViewThemeColor.MetaElementOverridesApplicationManifest):
        Rename this file now that it also deals with web application manifest (in addition to `<meta name="theme-color">`).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-04-20  Tim Horton  <timothy_horton@apple.com>

        MacCatalyst tests crash on NSInternalInconsistencyException, reason: NSApplication has not been created yet
        https://bugs.webkit.org/show_bug.cgi?id=224606

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Link UIKitMacHelper in macCatalyst builds.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/ios/UIKitMacHelperSPI.h: Added.
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        Call UINSApplicationInstantiate to keep the tests limping along until we create an actual UIApp.

        * TestWebKitAPI/Configurations/TestWTF.xcconfig:
        Also, fix the TestWTF configuration to not link Cocoa in macCatalyst builds.

2021-04-20  Kate Cheney  <katherine_cheney@apple.com>

        Preconnect tasks and preflight checks do not correctly mark app-bound context string
        https://bugs.webkit.org/show_bug.cgi?id=224779
        <rdar://problem/76738879>

        Reviewed by Brent Fulgham.

        We should clear data between tests to avoid flakiness or failures.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::clearAppBoundNavigationData):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::clearAppBoundNavigationData):

2021-04-20  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Remove warnings for unused parameter.
        https://bugs.webkit.org/show_bug.cgi?id=224830

        Reviewed by Darin Adler.

        * MiniBrowser/playstation/main.cpp:
        (main):

2021-04-20  Kimmo Kinnunen  <kkinnunen@apple.com>

        gtest.a exports symbols, causing link-time warning: direct access in function ... means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
        https://bugs.webkit.org/show_bug.cgi?id=224812

        Reviewed by Alexey Proskuryakov.

        Compile and use gtest as a static library that does not export any symbols.
        Fixes link-time warnings about mismatch of symbol visibility. The error occurs when
        gtest.a is compiled exporting symbols with default visibility, but the clients use the library
        and hide the symbols via ld flags.

        * TestWebKitAPI/Configurations/TestWTF.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Compile the gtest clients with GTEST_API_=

2021-04-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Don't use FORWARDING_HEADERS_DIR for JSC GLib headers
        https://bugs.webkit.org/show_bug.cgi?id=224821

        Reviewed by Michael Catanzaro.

        Use JavaScriptCoreGLib_FRAMEWORK_HEADERS_DIR and JavaScriptCoreGLib_DERIVED_SOURCES_DIR
        for GLib JSC headers instead of FORWARDING_HEADERS_DIR and DERIVED_SOURCES_DIR.

        * MiniBrowser/wpe/CMakeLists.txt:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/PlatformWPE.cmake:

2021-04-20  Aakash Jain  <aakash_jain@apple.com>

        Switch commit-queue back to git.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=224762

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/factories.py:
        (CommitQueueFactory.__init__): Use git.webkit.org for Commit-Queue.
        * CISupport/ews-build/factories_unittest.py:
        (TestCommitQueueFactory.test_commit_queue_factory): Updated unit-tests.
        * CISupport/ews-build/steps.py:
        (CheckOutSource.__init__):
        (PushCommitToWebKitRepo.evaluateCommand):

2021-04-20  Alex Christensen  <achristensen@webkit.org>

        Fix use-after-move introduced in r275407
        https://bugs.webkit.org/show_bug.cgi?id=224045

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/Geolocation.mm:
        (-[FakeWebGeolocationPolicyDecider receivedRequest]):
        (-[FakeWebGeolocationPolicyDecider decidePolicyForGeolocationRequestFromOrigin:requestingURL:window:listener:]):
        (fakeWebGeolocationPolicyDecider):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2021-04-20  Marco Felsch  <m.felsch@pengutronix.de>

        [WPE][Qt] Fix build failure after r270690
        https://bugs.webkit.org/show_bug.cgi?id=223070

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py:

        Add exception for WPE QT wrapper library to use system alloc instead
        of WTF. 

2021-04-19  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r276189): GPUProcess.WebProcessTerminationAfterTooManyGPUProcessCrashes is crashing
        https://bugs.webkit.org/show_bug.cgi?id=224790
        <rdar://problem/76869318>

        Reviewed by Darin Adler.

        Re-enable API test now that it is no longer crashing.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-04-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed, temporarily disable GPUProcess.DISABLED_WebProcessTerminationAfterTooManyGPUProcessCrashes
        https://bugs.webkit.org/show_bug.cgi?id=224790

        It is crashing. I will renable it with the fix at Bug 224790.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-04-19  Aakash Jain  <aakash_jain@apple.com>

        [ews] Enabled detailed error log when unit-tests fails
        https://bugs.webkit.org/show_bug.cgi?id=224789

        Unreviewed minor unit-test fix.

        * CISupport/ews-build/factories_unittest.py:
        (TestCase): Set maxDiff to None.

2021-04-19  BJ Burg  <bburg@apple.com>

        Can't use Web Inspector on web views made by TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=147073
        <rdar://problem/76708379>

        Reviewed by Devin Rousso.

        It is necessary to spin a nested run loop at the point in the test where you would
        like to remote inspect a WebView. Messages from the remote connection are dispatched
        through UIProcess, so if lldb has paused UIProcess, WebInspectorUI will not be able to
        get any data from the inspected WebView.

        * TestWebKitAPI/DebugUtilities.h: Added.
        Add macros to wait for a remote inspector to attach or detach, then drop into
        the debugger when it has done so.

        * TestWebKitAPI/PlatformUtilities.h: Add missing `#pragma once`.
        * TestWebKitAPI/WTFStringUtilities.h: Force the build to fail noisily if we have
        attempted to redefine WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING. Force the correct
        ordering between "WTFStringUtilities.h" and <wtf/text/StringConcatenate.h>.

2021-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename FloatQuad::isEmpty() to boundingBoxIsEmpty() and reimplement isEmpty()
        https://bugs.webkit.org/show_bug.cgi?id=224769

        Reviewed by Tim Horton.

        Add an API test to exercise the new `FloatQuad::isEmpty()` method.

        * TestWebKitAPI/Tests/WebCore/FloatQuadTests.cpp:
        (TestWebKitAPI::checkIsEmpty):
        (TestWebKitAPI::TEST):

2021-04-19  Tim Horton  <timothy_horton@apple.com>

        Fix the macCatalyst TestWebKitAPI build
        https://bugs.webkit.org/show_bug.cgi?id=224780

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Unreviewed build fix; link PDFKit since we now enable it.

2021-04-19  Chris Dumez  <cdumez@apple.com>

        SVG Images launch the GPUProcess unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=224770

        Reviewed by Eric Carlson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-04-19  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE Minibrowser build warning fix.

        * MiniBrowser/wpe/main.cpp: No need to use typedef for this struct declaration.

2021-04-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        Enable -Wthread-safety, add attributes to custom lock classes, and provide macros to declare guards
        https://bugs.webkit.org/show_bug.cgi?id=221614
        <rdar://problem/74396781>

        Reviewed by David Kilzer.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        Add -Wthread-safety to compile flags.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CheckedLock.cpp: Added.
        (TestWebKitAPI::TEST):
        Implement a test for testing that CheckedLock compiles.

2021-04-18  Zalan Bujtas  <zalan@apple.com>

        Update name in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=224731

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2021-04-17  Chris Dumez  <cdumez@apple.com>

        GPUConnectionToWebProcess::allowsExitUnderMemoryPressure() should check if libWebRTCCodecsProxy is used
        https://bugs.webkit.org/show_bug.cgi?id=224709

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (runMemoryPressureExitTest):
        (waitUntilCaptureState):
        (TEST):

2021-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove PromisedAttachmentInfo::blobURL and adjacent code
        https://bugs.webkit.org/show_bug.cgi?id=224720

        Reviewed by Ryosuke Niwa.

        Rebaseline a couple of iOS WKAttachment tests that are failing on recent versions of the iOS SDK. The content
        type of text files that are inserted as attachments is now a MIME type rather than a UTI, which is still valid
        since it is valid for the content type of an attachment to be either a MIME type or UTI.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2021-04-17  Aakash Jain  <aakash_jain@apple.com>

        Do not configure Janitor to delete old logs in local testing mode
        https://bugs.webkit.org/show_bug.cgi?id=224552

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/master_buildbot2.cfg:
        * CISupport/ews-build/master.cfg:

2021-04-16  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r276164) [GTK] WKPreferencesDefaults API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=224710

        Reviewed by Alex Christensen.

        As of r276164, Mac/iOS disabled application cache by default but other
        ports are still enabling it.

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST): Add missing WPE guard and test against expected
        port value instead of enforcing a single value for every port.
        * TestWebKitAPI/glib/TestExpectations.json: Remove WPE expected
        failure.

2021-04-16  Brent Fulgham  <bfulgham@apple.com>

        Perform port blocking earlier in the load
        https://bugs.webkit.org/show_bug.cgi?id=224525
        <rdar://problem/75440591>

        Reviewed by Darin Adler.

        Update URLScheme test to use a non-prohibited port for the test. Tests of
        failed fetches are already handled in WPT and other tests, so using a valid
        port here should continue to be a valid test.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[FrameSchemeHandler webView:startURLSchemeTask:]): Use allowed port or the test
        instead of 123.

2021-04-16  Chris Dumez  <cdumez@apple.com>

        RemoteAudioDestinationProxy should not launch / relaunch the GPUProcess unless it is actually rendering
        https://bugs.webkit.org/show_bug.cgi?id=224691

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/audio-context-playing.html:

2021-04-16  Jiewen Tan  <jiewen_tan@apple.com>

        Pass credential name to the WebAuthn UI during registration
        https://bugs.webkit.org/show_bug.cgi?id=224697
        <rdar://75803352>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):

2021-04-16  Kate Cheney  <katherine_cheney@apple.com>

        Disable app-bound request API tests on specific OS versions
        https://bugs.webkit.org/show_bug.cgi?id=223692
        <rdar://problem/75787288>

        Reviewed by Brent Fulgham.

        These test rely on internal additions only available on certain OS
        versions. We should disable them on other versions.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-04-16  Alex Christensen  <achristensen@webkit.org>

        Disable ApplicationCache with linkedOnOrAfter check
        https://bugs.webkit.org/show_bug.cgi?id=224629

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-04-16  Tyler Wilcock  <twilco.o@protonmail.com>

        [css-counter-styles] Parse and add feature flag for @counter-style
        https://bugs.webkit.org/show_bug.cgi?id=223150

        Reviewed by Darin Adler.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        Add `false` defaults for CSSCounterStyleAtRulesEnabled and
        CSSCounterStyleAtRuleImageSymbolsEnabled flags.

2021-04-16  Chris Dumez  <cdumez@apple.com>

        Exit the GPUProcess when under memory pressure if it is not being used
        https://bugs.webkit.org/show_bug.cgi?id=224556

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (runMemoryPressureExitTest):
        (TEST):

2021-04-16  Aakash Jain  <aakash_jain@apple.com>

        [ews] Improve step description when layout-tests step is skipped
        https://bugs.webkit.org/show_bug.cgi?id=224666

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests.getResultSummary):
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.

2021-04-16  Manuel Rego Casasnovas  <rego@igalia.com>

        Avoid converting HTML chars in _W3CTestConverter
        https://bugs.webkit.org/show_bug.cgi?id=224658

        Reviewed by Adrian Perez de Castro.

        There has been a change in Python HTMLParser in version 3.5 that makes convert_charrefs to be True by default:
        https://docs.python.org/3/library/html.parser.html

        This is causing that we're modifying the tests that have HTML characters, which is something
        we shouldn't change and was not happening in previous Python 3 versions, or Python 2.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.__init__): Set convert_charrefs to False.
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Update test to include HTML chars and check that they're not modified.

2021-04-16  Youenn Fablet  <youenn@apple.com>

        Promote WKWebView device orientation permission delegate to API
        https://bugs.webkit.org/show_bug.cgi?id=223919

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (-[DeviceOrientationPermissionUIDelegate webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        (-[DeviceOrientationPermissionValidationDelegate webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationUIDelegate webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):

2021-04-15  Aakash Jain  <aakash_jain@apple.com>

        Pass -d parameter to git clean in commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=224636

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CleanGitRepo):
        * CISupport/ews-build/steps_unittest.py:

2021-04-15  Sam Sneddon  <gsnedders@apple.com>

        scm_unittest.py fails at import-time on Python 2
        https://bugs.webkit.org/show_bug.cgi?id=224627

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.__repr__): Add a __repr__ for debug friendliness
        * Scripts/webkitpy/__init__.py: pathlib2 never provides pathlib
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: ditto

2021-04-15  Jonathan Bedard  <jbedard@apple.com>

        style checker should warn about adding new PHP files
        https://bugs.webkit.org/show_bug.cgi?id=223905
        <rdar://problem/76112036>

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher.is_valid_file): Check if a file has a file extension for an unsupported language.
        (StyleProcessor.should_process): If a file has an extension of an unsupported language, report a
        style error.
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.test_text_paths): php files are now invalid extensions.
        (CheckerDispatcherDispatchTest.test_none_paths): php files have no checker.
        (StyleProcessor_CodeCoverageTest.MockDispatcher.is_valid_file):
        (StyleProcessor_CodeCoverageTest.test_invalid_file): Check that an error is returned when checking
        a file with an invalid extension.
        * Scripts/webkitpy/style/checkers/cpp.py:
        (CppChecker): Add a language rule.

2021-04-15  Sam Sneddon  <gsnedders@apple.com>

        webkitpy classes need not define loads/dumps helpers for pickle
        https://bugs.webkit.org/show_bug.cgi?id=224620

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (TestFailure.loads): Deleted.
        (TestFailure.dumps): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_failures_unittest.py:
        (TestFailuresTest.assert_pickle_roundtrip):
        (TestFailuresTest.test_pickle_roundtrip):
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.loads): Deleted.
        (TestResult.dumps): Deleted.
        * Scripts/webkitpy/layout_tests/models/test_results_unittest.py:
        (TestResultsTest.test_pickle_roundtrip):

2021-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKContentView should become focused without requiring -[WKWebView canBecomeFocused] to return YES
        https://bugs.webkit.org/show_bug.cgi?id=224613
        <rdar://problem/76710314>

        Reviewed by Tim Horton.

        Adjust an existing API test so that it adopts the new UI delegate method.

        * TestWebKitAPI/Tests/ios/UIFocusTests.mm:
        (-[UIFocusDelegate _webViewCanTakeFocus:]):
        (-[UIFocusDelegate _webView:takeFocus:]):
        (TestWebKitAPI::TEST):
        (-[UIFocusTestWKWebView canBecomeFocused]): Deleted.

2021-04-15  Jonathan Bedard  <jbedard@apple.com>

        [results.webkit.org] Fully report git commits
        https://bugs.webkit.org/show_bug.cgi?id=224519
        <rdar://problem/76619007>

        Reviewed by Aakash Jain.

        Rather than allowing the back-end to fully define commits associated with a test,
        define those commits client side and post the result.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Handle fully qualified commits.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Fully define git commits.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_commits_for_upload_git_svn):

2021-04-15  Brady Eidson  <beidson@apple.com>

        Move WKURLSchemeTask redirect API to SPI
        https://bugs.webkit.org/show_bug.cgi?id=224581

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[TaskSchemeHandler webView:startURLSchemeTask:]):
        (-[HTTPRedirectTest webView:startURLSchemeTask:]): Deleted.
        (-[HTTPRedirectTest webView:stopURLSchemeTask:]): Deleted.

2021-04-15  Aakash Jain  <aakash_jain@apple.com>

        Allow fast-cq as a prefix for patch name for fast-cq mode on commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=224580

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (BugzillaMixin):
        (BugzillaMixin._is_patch_obsolete):
        * CISupport/ews-build/steps_unittest.py: Updated unit-test.

2021-04-14  Devin Rousso  <drousso@apple.com>

        Promote `-[WKWebView _themeColor]` SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=224571
        <rdar://problem/75231602>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/HTMLMetaThemeColor.mm:
        (TEST.HTMLMetaThemeColor.OnLoad):
        (TEST.HTMLMetaThemeColor.MultipleTags):
        (-[WKWebViewThemeColorObserver initWithWebView:]):
        (TEST.HTMLMetaThemeColor.KVO):
        (TEST.HTMLMetaThemeColor.ExperimentalUseThemeColorForScrollAreaBackgroundColor):

2021-04-14  Youenn Fablet  <youenn@apple.com>

        Update WKPageSet implementation according new MediaProducer::MutedState values
        https://bugs.webkit.org/show_bug.cgi?id=224548

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::doCaptureMuteTest):
        (TestWebKitAPI::TEST):

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Don't block proxy authentication challenges
        https://bugs.webkit.org/show_bug.cgi?id=224564

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::proxyAuthenticationServer):
        (TestWebKitAPI::webViewAndDelegate):
        (TestWebKitAPI::TEST):

2021-04-14  Jonathan Bedard  <jbedard@apple.com>

        [GitHub] Add script to verify integrity of the mirror
        https://bugs.webkit.org/show_bug.cgi?id=224514
        <rdar://problem/76613576>

        Reviewed by Aakash Jain.

        * Scripts/check-github-mirror-integrity: Added.

2021-04-14  Jonathan Bedard  <jbedard@apple.com>

        [results.webkit.org] Document ref API argument
        https://bugs.webkit.org/show_bug.cgi?id=224435
        <rdar://problem/76599481>

        Reviewed by Aakash Jain.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/documentation.html:
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.

2021-04-14  Kate Cheney  <katherine_cheney@apple.com>

        Service worker soft-update loads not being marked app-bound
        https://bugs.webkit.org/show_bug.cgi?id=223200
        <rdar://problem/75438555>

        Reviewed by Youenn Fablet.

        API test coverage. Refactor to avoid code duplication in other tests.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        A soft update might be delayed after the synthetic response comes
        back. We should wait until we receive the test data indicating that
        a soft update has occurred before checking the app-bound values.

2021-04-14  Aakash Jain  <aakash_jain@apple.com>

        Add support for using local-worker for build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=224551

        Reviewed by Carlos Alberto Lopez Perez.

        * CISupport/build-webkit-org/loadConfig.py:
        (loadBuilderConfig): Added local-worker support.
        * CISupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Removed use_localhost_worker variable.

2021-04-14  Aakash Jain  <aakash_jain@apple.com>

        Commit queue isn't skipping builds and test on revert patches
        https://bugs.webkit.org/show_bug.cgi?id=224477

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (BugzillaMixin): Changed preamble to lower-case to match with new logic.
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.

2021-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Use a while loop in PlatformWebView::dismissAllPopupMenus()
        https://bugs.webkit.org/show_bug.cgi?id=224534

        Reviewed by Philippe Normand.

        The child might be destroyed during the loop iteration. Using a while loop we ensure we get the next sibling
        before the current child is destroyed.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::dismissAllPopupMenus):

2021-04-14  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Add a property to the WebKitWebView indicating whether the web process is responsive
        https://bugs.webkit.org/show_bug.cgi?id=224359

        Reviewed by Adrian Perez de Castro.

        Added unit test for web process responsiveness API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewIsWebProcessResponsive):
        (beforeAll):

2021-04-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 4: Move DisplayList::Iterator to its own .h/.cpp files
        https://bugs.webkit.org/show_bug.cgi?id=224146

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove support for NPAPI plugins in WebView
        https://bugs.webkit.org/show_bug.cgi?id=224449

        Reviewed by Chris Dumez.

        Keep them on in tests until we remove the code.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove support for NPAPI plugins in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=224451

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/Copying.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PlugInDelegate _webView:unavailablePlugInButtonClickedWithReason:plugInInfo:]): Deleted.

2021-04-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add Vector&& move constructor / assignment to FixedVector and RefCountedArray
        https://bugs.webkit.org/show_bug.cgi?id=224475

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WTF/FixedVector.cpp:
        (TestWebKitAPI::TEST):

2021-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove SharedBuffer's equality operators with Ref<SharedBuffer>
        https://bugs.webkit.org/show_bug.cgi?id=224464

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):

2021-04-13  Devin Rousso  <drousso@apple.com>

        [iOS] Only use the theme color if it's valid when `UseThemeColorForScrollAreaBackgroundColor` is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224455

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/HTMLMetaThemeColor.mm:
        (createWebView): Added.
        (TEST.HTMLMetaThemeColor.ExperimentalUseThemeColorForScrollAreaBackgroundColor): Added.

2021-04-12  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r275792): [ iOS wk2 ] TestWebKitAPI.IndexedDB.DatabaseProcessKill is a flakey timeout
        https://bugs.webkit.org/show_bug.cgi?id=224454

        Reviewed by Brady Eidson, Sihui Liu.

        This test was racey; the content ran script immediately, and it was possible for
        the first set of messages to be received before -_test_waitForDidFinishNavigation
        returned; the test would then stall because nothing triggered any more messages.

        Fix by removing the call to -_test_waitForDidFinishNavigation and setting
        receivedScriptMessage to false after waiting for the previous message.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill-1.html:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):

2021-04-13  Sam Sneddon  <gsnedders@apple.com>

        Test objects should know if they need servers
        https://bugs.webkit.org/show_bug.cgi?id=224442

        Reviewed by Jonathan Bedard.

        This also removes the unused Manager.needs_servers

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.__init__): Move known paths from Manager.__init__
        (LayoutTestFinder.find_tests_by_path):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._is_http_test): Deleted.
        (Manager._is_websocket_test): Deleted.
        (Manager._needs_web_platform_test): Deleted.
        (Manager._http_tests): Deleted.
        (Manager._tests_to_run):
        (Manager._test_input_for_file):
        (Manager.needs_servers): Deleted.
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_needs_servers): Deleted.
        (ManagerTest.integration_test_needs_servers): Deleted.
        * Scripts/webkitpy/layout_tests/models/test.py:
        (Test):
        (Test.needs_http_server):
        (Test.needs_websocket_server):
        (Test.needs_wpt_server):
        (Test.needs_any_server):

2021-04-13  Chris Dumez  <cdumez@apple.com>

        The GPUProcess should only launch when it is needed
        https://bugs.webkit.org/show_bug.cgi?id=224461

        Reviewed by Eric Carlson.

        Add layout test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
        (TEST):

2021-04-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] WTR crash in PlatformWebView::dismissAllPopupMenus()
        https://bugs.webkit.org/show_bug.cgi?id=224487

        Reviewed by Philippe Normand.

        This is because we are using a for loop to iterate children that are destroyed. We should not be destroying the
        children, though, we should just hide them, since they are owned by the web view.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::dismissAllPopupMenus):

2021-04-13  Aakash Jain  <aakash_jain@apple.com>

        Delete various old EWS specific scripts
        https://bugs.webkit.org/show_bug.cgi?id=224460

        Reviewed by Alexey Proskuryakov.

        * EWSTools/Start-Queue.ps1: Removed.
        * EWSTools/boot.sh: Removed.
        * EWSTools/build-boot-cmd.sh: Removed.
        * EWSTools/screen-config: Removed.
        * EWSTools/start-queue-mac.sh: Removed.
        * EWSTools/start-queue-win.sh: Removed.
        * EWSTools/start-queue.sh: Removed.
        * EWSTools/ubuntu-ews-packages: Removed.

2021-04-12  Aakash Jain  <aakash_jain@apple.com>

        Make Commit Queue robust by adding few git commands to clean up repository
        https://bugs.webkit.org/show_bug.cgi?id=224444

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CleanGitRepo): Build step to run few commands to cleanup git repository.
        (CleanGitRepo.run):
        (CleanGitRepo.getResultSummary): Custom failure message.
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.
        * CISupport/ews-build/factories.py:
        (CommitQueueFactory.__init__):
        * CISupport/ews-build/factories_unittest.py:
        (TestCommitQueueFactory.test_commit_queue_factory): Updated unit-test.

2021-04-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275801.
        https://bugs.webkit.org/show_bug.cgi?id=224423

        run-jsc-stress-tests output includes a lot of texts

        Reverted changeset:

        "[JSC] detect infrastructure failure for remote stress tests"
        https://bugs.webkit.org/show_bug.cgi?id=222601
        https://trac.webkit.org/changeset/275801

2021-04-11  Sam Weinig  <weinig@apple.com>

        Simplify WebKitTestRunner preference reset to be more like DRT
        https://bugs.webkit.org/show_bug.cgi?id=224410

        Reviewed by Darin Adler.

        - Use boolWebPreferenceFeatures consistently for accessibilityIsolatedTreeMode
        - Adopt new WKPreferencesStartBatchingUpdates/WKPreferencesEndBatchingUpdates
          to ensure all preferences updates are batched.
        - Move all preference overrides that can be moved (two still require some
          specialized handling for now) to TestOptions defaults.
        - Remove now unnecessary platformResetPreferencesToConsistentValues()
          platform configuration point.

        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionAccessibilityIsolatedTreeMode):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::batchUpdatePreferences):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::accessibilityIsolatedTreeMode const): Deleted.
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::accessibilityIsolatedTreeMode const):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformResetPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformResetPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::platformResetPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformResetPreferencesToConsistentValues): Deleted.

2021-04-10  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] detect infrastructure failure for remote stress tests
        https://bugs.webkit.org/show_bug.cgi?id=222601

        Reviewed by Yusuke Suzuki.

        run-jsc-stress-tests currently detects failures by the absence of
        a failure file (that is generated by each failing test). This is
        fragile to begin with, as it assumes that tests that fail to run
        (e.g. because of an error in the runner script) are successful by
        default.

        However, the main motivation for this patch is to make execution
        more robust when using remote hosts. Currently,
        --gnu-parallel-runner will transparently reschedule jobs on a
        different host when a remote host goes away. But detectFailures
        expects to be able to connect to all hosts and fetch the failure
        files, which fails if a remote host is still down when the run
        finishes.

        Instead, this patch changes the runners to always generate a status
        file with the exit code. detectFailures then fetches all status
        files from all hosts that are live on exit. Tests that failed to
        run are explicitly accounted for as 'noreport' and are set to
        ERROR in the final report.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:

2021-04-10  Aakash Jain  <aakash_jain@apple.com>

        Improve step description when compile-webkit step is skipped
        https://bugs.webkit.org/show_bug.cgi?id=224373

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (CompileWebKit.getResultSummary): Set custom summary when this step is skipped.
        * CISupport/ews-build/steps_unittest.py: Updated unit-tests.

2021-04-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r271660): Tap highlight no longer shows when tapping clickable elements without touch event listeners
        https://bugs.webkit.org/show_bug.cgi?id=224385
        <rdar://problem/76462370>

        Reviewed by Tim Horton.

        Add plumbing to expose the frame of the tap highlight view via `UIScriptController`.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::tapHighlightViewRect const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::tapHighlightViewRect const):

2021-04-09  Aakash Jain  <aakash_jain@apple.com>

        git-webkit find doesn't work well with unicode characters in author name (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=223686

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:
        (Info.main): Updated the error message.

2021-04-09  Sam Sneddon  <gsnedders@apple.com>

        Make TestInput take a Test object, not a path
        https://bugs.webkit.org/show_bug.cgi?id=224329

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests): Remove test_to_skip argument; skipped tests aren't for the runner.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests._run_tests): TestInput expects a Test.
        (LayoutTestRunnerTests.test_interrupt_if_at_failure_limits): TestInput expects a Test.
        (SharderTests.get_test_input): TestInput expects a Test.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._collect_tests):
        Move duplicated code from Manager.run and Manager.print_expectations here.
        (Manager._tests_to_run):
        Renamed from Manager._prepare_lists; now just gives tests to run.
        (Manager._test_input_for_file): Now takes a Test, not a str; device_type changes behaviour and shouldn't have any default.
        (Manager._test_is_slow): device_type changes behaviour and shouldn't have any default.
        (Manager._test_should_dump_jsconsolelog_in_stderr): device_type changes behaviour and shouldn't have any default.
        (Manager._get_test_inputs): device_type changes behaviour and shouldn't have any default.
        (Manager._update_worker_count): device_type changes behaviour and shouldn't have any default.
        (Manager._set_up_run): device_type changes behaviour and shouldn't have any default.
        (Manager.run):
        Largely just change for Manager._collect_tests, also renaming the sets to match their
        clearer names in print_expectations.
        Additionally, now generate skip results here, as they aren't to do with actually running
        tests, they're about test selection.
        (Manager._run_test_subset): Remove tests_to_skip argument, devie_type is required.
        (Manager._run_tests): Remove tests_to_skip argument, devie_type is required.
        (Manager._print_expectation_line_for_test): Now takes a Test, not a str; device_type changes behaviour and shouldn't have any default.
        (Manager._print_expectations_for_subset): Change default of tests_to_skip to avoid set/dict oddness.
        (Manager.print_expectations): Largely change for Manager._collect_tests.
        * Scripts/webkitpy/layout_tests/models/test.py:
        (Test): Use attrs to avoid having to define cmp, hash, repr, etc.
        * Scripts/webkitpy/layout_tests/models/test_input.py:
        (TestInput.__init__): Take a Test, not a str.
        (TestInput.test_name): Maintain compatibility with code reading TestInput.test_name for now.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.merge): Fix merging of dicts-of-sets, rather than overwriting the sets.
        (TestRunResults.merge.merge_dict_sets): Implement the merging.

2021-04-09  Aditya Keerthi  <akeerthi@apple.com>

        [iOS][FCR] Use context menus for text input datalist dropdowns
        https://bugs.webkit.org/show_bug.cgi?id=224287
        <rdar://problem/76351317>

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::isShowingDataListSuggestions const):

        Use the exposed information from the webview to determine whether the
        datalist suggestions are visible, rather than traversing the view
        hierarchy.

2021-04-08  Jiewen Tan  <jiewen_tan@apple.com>

        PCM: Write more blinded secret tests
        https://bugs.webkit.org/show_bug.cgi?id=222018
        <rdar://problem/74674160>

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebKitCocoa/EventAttribution.mm:
        (TestWebKitAPI::TEST):
        Adds the new test.

2021-04-08  Alex Christensen  <achristensen@webkit.org>

        Serialize URL instead of entire challenge for informing client that modern TLS was negotiated
        https://bugs.webkit.org/show_bug.cgi?id=224346

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (-[TLSNavigationDelegate waitForDidNegotiateModernTLS]):
        (-[TLSNavigationDelegate _webView:didNegotiateModernTLSForURL:]):
        (TestWebKitAPI::TEST):
        (-[TLSNavigationDelegate _webView:didNegotiateModernTLS:]): Deleted.

2021-04-08  Tim Horton  <timothy_horton@apple.com>

        Safari unit tests sometimes fail an ASSERTion in IOSurface.mm's optionsFor32BitSurface()
        https://bugs.webkit.org/show_bug.cgi?id=224351
        <rdar://problem/76405354>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/NavigationSwipeTests.mm:
        (TEST):
        Add a test that taking navigation snapshots for a 0x0 WKWebView doesn't assert.

2021-04-08  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r273541) WKWebView can't load NSURLRequest subclasses
        https://bugs.webkit.org/show_bug.cgi?id=224338

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (respond):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        (-[TestURLRequest initWithURL:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TestURLSchemeHandler.h:

2021-04-08  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r275150): set-webkit-configuration is too aggressive at deleting config files when coverage/sanitizer switch is not set
        <https://webkit.org/b/224343>

        Reviewed by Mark Lam.

        * Scripts/set-webkit-configuration:
        (updateOrDeleteConfigurationFile):
        - Change to take enabled and disabled arguments, and only
          reset (unlink) a config file if the --no-<option> is
          explicitly set.

2021-04-08  Kate Cheney  <katherine_cheney@apple.com>

        Add test infrastructure for app bound request context string
        https://bugs.webkit.org/show_bug.cgi?id=224311
        <rdar://problem/76229003>

        Reviewed by Brent Fulgham.

        Layout test infrastructure.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::appBoundRequestContextDataForDomain):
        (WTR::TestRunner::callDidReceiveAppBoundRequestContextDataForDomainCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::appBoundRequestContextDataForDomain):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveAppBoundRequestContextDataForDomain):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::appBoundRequestContextDataForDomain):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _appBoundNavigationDataForDomain:completionHandler:]):

2021-04-08  Aakash Jain  <aakash_jain@apple.com>

        Add webkit-patch support for fast-cq mode
        https://bugs.webkit.org/show_bug.cgi?id=224286

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/steps/options.py:
        (Options): Added --fast-cq parameter.
        * Scripts/webkitpy/tool/steps/postdiff.py:
        (PostDiff.options):
        (PostDiff.run): Set the patch name appropriately for fast-cq mode.
        * Scripts/webkitpy/common/net/bugzilla/attachment.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py: Added unit test.

2021-04-08  Aakash Jain  <aakash_jain@apple.com>

        EWS should keep working when Bugzilla is down
        https://bugs.webkit.org/show_bug.cgi?id=224336

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (BugzillaMixin.get_patch_json):
        (BugzillaMixin.get_bug_json):

2021-04-08  Adam Roben  <aroben@apple.com>

        prepare-ChangeLog fails to find deleted functions in files with spaces in their path in Git repositories
        https://bugs.webkit.org/show_bug.cgi?id=224303

        Reviewed by Sam Weinig.

        It would also print a bunch of errors like this on stderr:

            fatal: ambiguous argument 'Foo/Bar.cpp': unknown revision or path not in the working tree.
            Use '--' to separate paths from revisions, like this:
            'git <command> [<revision>...] -- [<file>...]'

        * Scripts/prepare-ChangeLog:
        (originalFile): Quote the file path in the `git show` command we
        construct.

2021-04-08  Truitt Savell  <tsavell@apple.com>

        Repalce bot187 with bot178 for CLoop tester. 
        rdar://76009577

        Unreviewed infrustructure fix. 

        * CISupport/build-webkit-org/config.json:

2021-04-08  Sihui Liu  <sihui_liu@apple.com>

        Remove logging for investigating http/tests/IndexedDB/storage-limit-1.html failure
        https://bugs.webkit.org/show_bug.cgi?id=223086
        <rdar://problem/75591816>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setQuotaLoggingEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setQuotaLoggingEnabled): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-04-08  Simon Fraser  <simon.fraser@apple.com>

        Copy-constructed Vectors should not have excess capacity
        https://bugs.webkit.org/show_bug.cgi?id=224313

        Reviewed by Darin Adler.

        New API tests for testing capacity on copy-construct, with tests for copy-constructing
        with various configs of inline capacity.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):

2021-04-08  Youenn Fablet  <youenn@apple.com>

        Update SFrame implementation to latest version
        https://bugs.webkit.org/show_bug.cgi?id=224276

        Reviewed by Eric Carlson.

        Update tests according new way of deriving keys and generating the signature.

        * TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp:
        (TestWebKitAPI::TEST):

2021-04-07  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Handle multiple double-branch commits
        https://bugs.webkit.org/show_bug.cgi?id=224251
        <rdar://problem/76288547>

        Reviewed by Dewei Zhu.

        There are a few cases, namely on the safari-607-branch, where some commits where made both
        on trunk and on a branch. In one notable case, two sequential commits were made this way.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:
        (Svn._cache_revisions): Handle multiple double-branch commits.
        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/svn.py:
        (Svn._cache_revisions): Handle multiple double-branch commits.

2021-04-07  Aakash Jain  <aakash_jain@apple.com>

        commit-queue should perform git reset --hard between retry attempts
        https://bugs.webkit.org/show_bug.cgi?id=224300

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (GitResetHard): Build step to perform git reset --hard.
        (GitResetHard.start):
        (PushCommitToWebKitRepo.evaluateCommand):
        * CISupport/ews-build/steps_unittest.py: Added unit-test.

2021-04-07  Jonathan Bedard  <jbedard@apple.com>

        [build.webkit.org] Commit queue should post the identifier
        https://bugs.webkit.org/show_bug.cgi?id=223829
        <rdar://problem/75908321>

        Reviewed by Aakash Jain.

        * CISupport/ews-build/steps.py:
        (PushCommitToWebKitRepo.url_for_revision): Use COMMITS_INFO_URL.
        (PushCommitToWebKitRepo.url_for_identifier): Convert identifier
        to commits.webkit.org URL.
        (PushCommitToWebKitRepo.identifier_for_revision): Convert a commit
        revision to an identifier string.
        (PushCommitToWebKitRepo.comment_text_for_bug): Consult commits.webkit.org
        to convert revision to identifier.
        * CISupport/ews-build/steps_unittest.py:

2021-04-07  Aakash Jain  <aakash_jain@apple.com>

        git-webkit find doesn't work well with unicode characters in author name
        https://bugs.webkit.org/show_bug.cgi?id=223686

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:
        (Info.main): Added a try except block while printing author, since the script should still print rest of the info.

2021-04-07  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION(r274366): webkitscmpy.test.svn_unittest.TestRemoteSvn.test_info fails in non-PDT timezones
        https://bugs.webkit.org/show_bug.cgi?id=223606

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/svn_unittest.py:
        (TestRemoteSvn.test_info): Use utc shifted into PDT for consistency across timezones.

2021-04-07  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::gtest target
        https://bugs.webkit.org/show_bug.cgi?id=224203

        Reviewed by Adrian Perez de Castro.

        Use the WebKit::gtest target. Remove uses of ${THIRDPARTY_DIR}/gtest/include since the
        target propagates those. Also remove the hack to get gtest definitions.

        Don't include gtest with the TestJSC executable since it just uses GLib's testing
        capabilities.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/config.h:

2021-04-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Videos start playing muted in epiphany with no unmute icon visible in tab, webkit_web_view_get_is_muted() returns incorrect results
        https://bugs.webkit.org/show_bug.cgi?id=223195

        Reviewed by Michael Catanzaro.

        Adapt is-playing test, after muting the page, webkit_web_view_is_playing_audio() should
        still return TRUE.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (IsPlayingAudioWebViewTest::periodicallyCheckIsPlayingForAWhile):
        (testWebViewIsPlayingAudio):

2021-04-07  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Enable LLVM extension
        https://bugs.webkit.org/show_bug.cgi?id=223882

        Reviewed by Adrian Perez de Castro.

        The clang shipped by default in the FDO SDK is not usable for ASan, UBSan (and I guess TSan)
        builds, but the Flatpak extension shipping LLVM11 allows this, even though UBSan builds
        still fail (linking errors in JSC and WTF) and will require further investigation. Still,
        having clang-11 in the SDK is an improvement.

        This patch also adds support for cleaning up unused toolchain archives.

        * flatpak/flatpakutils.py:
        (run_sanitized):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.main):
        (WebkitFlatpak.purge_unused_toolchains):
        (WebkitFlatpak.pack_toolchain):
        (WebkitFlatpak._get_packages):

2021-04-07  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Wrong frame scrolled when view is horizontally scrolled with async scrolling enabled
        https://bugs.webkit.org/show_bug.cgi?id=222900

        Reviewed by Žan Doberšek.

        We were not testing the async code path for WPE, it is important
        we do it because it is the default option.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        Activating AsyncOverflowScrollingEnabled.

2021-04-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 5: Tweak the return type of DisplayList::Iterator::operator*()
        https://bugs.webkit.org/show_bug.cgi?id=224148

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::TEST):

2021-04-06  Jean-Yves Avenard  <jya@apple.com>

        Add jya@apple.com as committer.
        https://bugs.webkit.org/show_bug.cgi?id=224254

        Reviewed by Eric Carlson

        * Scripts/webkitpy/common/config/contributors.json:

2021-04-06  Alex Christensen  <achristensen@webkit.org>

        Add U+0581 and U+0585 to list of Armenian characters that look like Latin characters
        https://bugs.webkit.org/show_bug.cgi?id=224219

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2021-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r274610): Unable to drag images when image extraction is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224211
        <rdar://problem/76229563>

        Reviewed by Tim Horton.

        Add support for some new testing infrastructure; see below for more details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::isAnimatingDragCancel const):

        Add a new testing hook to return whether or not the web view's drag interaction is currently animating a drag
        cancel (i.e., the drag preview is animating back to its original frame).

        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::defaults):
        (WTR::TestOptions::keyTypeMapping):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::dragInteractionPolicy const):

        Add a test option that allows tests to override the drag interaction policy to "always-allow",
        "always-disallow", and the default value. This option allows us to force drag and drop to be enabled when
        testing on iPhone simulator.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::dragInteractionPolicy):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::isAnimatingDragCancel const):

2021-04-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce FixedVector and use it for FixedOperands
        https://bugs.webkit.org/show_bug.cgi?id=224171

        Reviewed by Mark Lam.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/FixedVector.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::DestructorObserver::DestructorObserver):
        (TestWebKitAPI::DestructorObserver::~DestructorObserver):
        (TestWebKitAPI::DestructorObserver::operator=):

2021-04-06  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Add MediaSessionCoordinator API test
        https://bugs.webkit.org/show_bug.cgi?id=224140
        <rdar://problem/76171173>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme:
        * TestWebKitAPI/Tests/WebKit/MediaSessionCoordinatorTest.mm: Added.
        (-[_WKMockMediaSessionCoordinator lastStateChange]):
        (-[_WKMockMediaSessionCoordinator lastMethodCalled]):
        (-[_WKMockMediaSessionCoordinator identifier]):
        (-[_WKMockMediaSessionCoordinator joinWithCompletion:]):
        (-[_WKMockMediaSessionCoordinator leave]):
        (-[_WKMockMediaSessionCoordinator seekTo:withCompletion:]):
        (-[_WKMockMediaSessionCoordinator playWithCompletion:]):
        (-[_WKMockMediaSessionCoordinator pauseWithCompletion:]):
        (-[_WKMockMediaSessionCoordinator setTrack:withCompletion:]):
        (-[_WKMockMediaSessionCoordinator positionStateChanged:]):
        (-[_WKMockMediaSessionCoordinator readyStateChanged:]):
        (-[_WKMockMediaSessionCoordinator playbackStateChanged:]):
        (-[_WKMockMediaSessionCoordinator coordinatorStateChanged:]):
        (-[_WKMockMediaSessionCoordinator seekSessionToTime:]):
        (-[_WKMockMediaSessionCoordinator playSession]):
        (-[_WKMockMediaSessionCoordinator pauseSession]):
        (-[_WKMockMediaSessionCoordinator setSessionTrack:]):
        (TestWebKitAPI::MediaSessionCoordinatorTest::createCoordinator):
        (TestWebKitAPI::MediaSessionCoordinatorTest::webView const):
        (TestWebKitAPI::MediaSessionCoordinatorTest::coordinator const):
        (TestWebKitAPI::MediaSessionCoordinatorTest::loadPageAndBecomeReady):
        (TestWebKitAPI::MediaSessionCoordinatorTest::runScriptWithUserGesture):
        (TestWebKitAPI::MediaSessionCoordinatorTest::play):
        (TestWebKitAPI::MediaSessionCoordinatorTest::pause):
        (TestWebKitAPI::MediaSessionCoordinatorTest::listenForEventMessages):
        (TestWebKitAPI::MediaSessionCoordinatorTest::eventListenerWasCalled):
        (TestWebKitAPI::MediaSessionCoordinatorTest::clearEventListenerState):
        (TestWebKitAPI::MediaSessionCoordinatorTest::executeUntil):
        (TestWebKitAPI::MediaSessionCoordinatorTest::waitForEventListenerToBeCalled):
        (TestWebKitAPI::MediaSessionCoordinatorTest::listenForMessagesPosted):
        (TestWebKitAPI::MediaSessionCoordinatorTest::clearMessagesPosted):
        (TestWebKitAPI::MediaSessionCoordinatorTest::listenForSessionHandlerMessages):
        (TestWebKitAPI::MediaSessionCoordinatorTest::sessionHandlerWasCalled):
        (TestWebKitAPI::MediaSessionCoordinatorTest::waitForSessionHandlerToBeCalled):
        (TestWebKitAPI::MediaSessionCoordinatorTest::listenForPromiseMessages):
        (TestWebKitAPI::MediaSessionCoordinatorTest::clearPromiseMessages):
        (TestWebKitAPI::MediaSessionCoordinatorTest::promiseWasResolved):
        (TestWebKitAPI::MediaSessionCoordinatorTest::promiseWasRejected):
        (TestWebKitAPI::MediaSessionCoordinatorTest::waitForPromise):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/media-remote.html:

2021-04-06  David Kilzer  <ddkilzer@apple.com>

        set-webkit-configuration should print current settings
        <https://webkit.org/b/224190>

        Reviewed by Mark Lam.

        * Scripts/set-webkit-configuration:
        - Reorder switches to put sanitizers together.
        - Declare subroutines.
        - Call printCurrentSettings() or printUsage() as needed.
        (printCurrentSettings): Add.
        (printUsage): Add.
        * Scripts/webkitdirs.pm:
        - Reorder switch variables to match other code.
        (coverageIsEnabled): Add for set-webkit-configuration.

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [WPE] Enable Cog's GTK4 backend
        https://bugs.webkit.org/show_bug.cgi?id=224099

        Reviewed by Adrian Perez de Castro.

        The Cog GTK4 platform plugin is more suitable for developer builds on desktop, compared to
        the fdo backend which provides no window decorations on most Wayland compositors.

        * PlatformWPE.cmake:
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.run_minibrowser):

2021-04-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][Integration] Enable inline box support (RenderInline)
        https://bugs.webkit.org/show_bug.cgi?id=220148
        <rdar://problem/72768785>

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):

2021-04-06  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Test harness should use a mock audio output device
        https://bugs.webkit.org/show_bug.cgi?id=223888

        Reviewed by Adrian Perez de Castro.

        Prioritize the new fakeaudiosink over other platform sinks when running the layout and API
        tests. Mute and volume handling will still be tested (mocked, actually) but no actual
        rendering will be performed.

        The pulseaudio "sanitizer" can't work with a pipewire-pulse server because dynamic module
        (un)loading is heavily restricted in this new wrapper. Moreover relying on the default sinks
        when running on desktop machines easily triggers unintended beeps when running the tests.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort.setup_test_run):
        (GtkPort.setup_environ_for_server):
        (GtkPort.clean_up_test_run): Deleted.
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest):
        (GtkPortTest.make_port): Deleted.
        * Scripts/webkitpy/port/pulseaudio_sanitizer.py: Removed.
        * Scripts/webkitpy/port/pulseaudio_sanitizer_mock.py: Removed.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest):
        (WPEPortTest.make_port): Deleted.

2021-04-06  Aakash Jain  <aakash_jain@apple.com>

        [resultsdbpy] Remove obsolete BuildbotEightURLFactory
        https://bugs.webkit.org/show_bug.cgi?id=223796

        Reviewed by Jonathan Bedard.

        * Scripts/libraries/resultsdbpy/resultsdbpy/example/environment.py:
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/ci_context.py:
        (BuildbotEightURLFactory): Deleted.
        (BuildbotEightURLFactory.__init__): Deleted.
        (BuildbotEightURLFactory.url): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/ci_context_unittest.py:
        (URLFactoryTest.test_old_builder_url): Deleted.
        (URLFactoryTest.test_old_worker_url): Deleted.

2021-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Disable WebSQL in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=224144

        Reviewed by Sihui Liu.

        Disabled WebSQL in WebKitTestRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r267763) NetworkProcess never terminates
        https://bugs.webkit.org/show_bug.cgi?id=224191
        <rdar://problem/76124590>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=224084

        Reviewed by Tim Horton.

        * TestWebKitAPI/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2021-04-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 1: Require encoding/decoding delegates for non-inline display list items
        https://bugs.webkit.org/show_bug.cgi?id=223849

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:

2021-04-05  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Enable Service Worker tests
        https://bugs.webkit.org/show_bug.cgi?id=223591

        Reviewed by Fujii Hironori.

        Ignore cert errors with downloads and fix an issue with windows paths.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:

2021-04-05  Lauro Moura  <lmoura@igalia.com>

        [GLIB] Garden API test failure and flakiness after r275267

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2021-04-02  Brady Eidson  <beidson@apple.com>

        Add WKURLSchemeTask redirect API.
        https://bugs.webkit.org/show_bug.cgi?id=224119

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[TaskSchemeHandler webView:startURLSchemeTask:]):
        (TEST):
        (-[HTTPRedirectTest webView:startURLSchemeTask:]):
        (-[HTTPRedirectTest webView:stopURLSchemeTask:]):

2021-04-02  Jonathan Bedard  <jbedard@apple.com>

        [check-webkit-style] Check python files in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=224079
        <rdar://problem/76122813>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher.should_skip_without_warning): Never skip style checks on .py files.
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherSkipTest.test_should_skip_without_warning__false):

2021-04-02  Chris Fleizach  <cfleizach@apple.com>

        AX: textRectsFromMarkers always fails
        https://bugs.webkit.org/show_bug.cgi?id=223556
        <rdar://74256003>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):

2021-04-02  Youenn Fablet  <youenn@apple.com>

        [MacOS] Enable NSURLSession WebSocket code path in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=220973
        <rdar://problem/73655870>

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2021-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce RobinHoodHashTable
        https://bugs.webkit.org/show_bug.cgi?id=223895

        Reviewed by Fil Pizlo.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/DeletedAddressOfOperator.h:
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::testMovingUsingEnsure):
        (TestWebKitAPI::testMovingUsingAdd):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::generateTestCapacityUpToSize<0>):
        (TestWebKitAPI::generateTestCapacityUpToSize):
        * TestWebKitAPI/Tests/WTF/MoveOnly.h:
        * TestWebKitAPI/Tests/WTF/RobinHoodHashMap.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/HashMap.cpp.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::bucketForKey):
        (TestWebKitAPI::ZeroHash::hash):
        (TestWebKitAPI::ObjectWithRefLogger::ObjectWithRefLogger):
        (TestWebKitAPI::testMovingUsingEnsure):
        (TestWebKitAPI::testMovingUsingAdd):
        (TestWebKitAPI::DerefObserver::ref):
        (TestWebKitAPI::DerefObserver::deref):
        (TestWebKitAPI::TestObjectWithCustomDestructor::TestObjectWithCustomDestructor):
        (TestWebKitAPI::TestObjectWithCustomDestructor::~TestObjectWithCustomDestructor):
        * TestWebKitAPI/Tests/WTF/RobinHoodHashSet.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp.
        (TestWebKitAPI::capacityForSize):
        (TestWebKitAPI::testInitialCapacity):
        (TestWebKitAPI::generateTestCapacityUpToSize<0>):
        (TestWebKitAPI::generateTestCapacityUpToSize):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::DerefObserver::ref):
        (TestWebKitAPI::DerefObserver::deref):

2021-04-01  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r272469) QuickLook previews broken in some places on macOS
        https://bugs.webkit.org/show_bug.cgi?id=224086

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        (TestWebKitAPI::TEST_F):

2021-04-01  Aakash Jain  <aakash_jain@apple.com>

        Enable ews status bubble for stress tests ews
        https://bugs.webkit.org/show_bug.cgi?id=224069

        Reviewed by Jonathan Bedard.

        * CISupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):

2021-04-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] REGRESSION(r272999): User-installed fonts no longer work in Mail
        https://bugs.webkit.org/show_bug.cgi?id=223985
        <rdar://problem/75975210>

        Reviewed by Per Arne Vollan.

        * TestWebKitAPI/Tests/WebKit/FontRegistrySandboxCheck.mm:
        (TEST):

2021-04-01  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Improve git-svn-id regex
        https://bugs.webkit.org/show_bug.cgi?id=224008
        <rdar://problem/76062561>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:
        (Git.commit): Strip leading spaces before parsing the commit message.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py: Ensure that git-svn-id lines
        are printed to stdout with leading spaces.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase): Only match git-svn-id lines if they are at the beginning of a line.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:

2021-04-01  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Support case where contributor did not define email
        https://bugs.webkit.org/show_bug.cgi?id=224005
        <rdar://problem/76058258>

        Rubber-stamped by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
        (Contributor):
        (Contributor.Mapping.create): An email of 'None' should not be indexed.
        (Contributor.from_scm_log): Handle case where contributor is defined, but email isn't.

2021-03-31  Chris Dumez  <cdumez@apple.com>

        Add API test for Bug 224022
        https://bugs.webkit.org/show_bug.cgi?id=224024

        Reviewed by Alex Christensen.

        The way to reproduce the bug was to make sure that the NetworkProcessProxy was not associated
        with any datastore at the time of the crash, then construct a new view and do a load, which
        would hang.

        If the NetworkProcessProxy was associated with a datastore and the WKWebSiteDataStore's
        m_networkProcess was not null, then WebsiteDataStore::networkProcessCrashed() would take
        care of calling `m_networkProcess->didTerminate()`, which would destroy the NetworkProcessProxy
        singleton.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:
        (TEST):

2021-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        List of extents should be bounds-checked when iterating display list items
        https://bugs.webkit.org/show_bug.cgi?id=224019
        <rdar://problem/71851600>

        Reviewed by Tim Horton.

        Rename `InvalidItem` to `InvalidItemOrExtent`.

        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):

2021-03-31  BJ Burg  <bburg@apple.com>

        Style checker should warn about use of future OS versions in WK_API_AVAILABLE
        https://bugs.webkit.org/show_bug.cgi?id=223881

        Reviewed by Jonathan Bedard.

        Add some more brains to the WK_API_AVAILABLE style checker. It is now more
        fussy and won't allow anything except a valid version string or a TBA macro.
        There is also a mechanism to prevent adding version numbers that exceed the
        publicly available SDK version for the relevant OS.

        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.mapping_for_platform): Add 'macos' as an alias for 'mac'.
        (VersionNameMap.max_public_version): Added.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_arguments_for_wk_api_available):
        (check_arguments_for_wk_api_available.max_version_for_platform):
        (check_arguments_for_wk_api_available.check_version_string):
        (check_style):
        (check_min_versions_of_wk_api_available): Deleted.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest):

2021-03-31  Aakash Jain  <aakash_jain@apple.com>

        EWS should stress test newly added tests
        https://bugs.webkit.org/show_bug.cgi?id=223938

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/config.json:
        * CISupport/ews-build/factories.py:
        (Factory):
        (StressTestFactory):
        * CISupport/ews-build/factories_unittest.py: Added unit-tests.
        * CISupport/ews-build/loadConfig.py:

2021-03-31  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r275150): set-webkit-configuration is too aggressive at deleting config files when switch is not set
        <https://webkit.org/b/224009>

        Reviewed by Mark Lam.

        * Scripts/set-webkit-configuration:
        - Partially revert changes in r275150 when the config file
          wasn't always deleted for $architecture, $configuration,
          $forceOptimizationLevel and $ltoMode.

2021-03-31  Alex Christensen  <achristensen@webkit.org>

        Add deprecation macros.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (verifyCertificateAndPublicKey):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2021-03-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKContentView should support UIKit protocol methods for becoming focused
        https://bugs.webkit.org/show_bug.cgi?id=224003
        <rdar://problem/75313658>

        Reviewed by Megan Gardner.

        Add a test to verify that the vaue of `-[WKContentView canBecomeFocused]` can be overridden by subclassing
        `-[WKWebView canBecomeFocused]`.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/UIFocusTests.mm: Added.
        (-[UIFocusTestWKWebView canBecomeFocused]):

2021-03-31  Alex Christensen  <achristensen@webkit.org>

        Add test for SOCKS5 proxy SPI
        https://bugs.webkit.org/show_bug.cgi?id=223964

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):

2021-03-31  Aakash Jain  <aakash_jain@apple.com>

        Add build step to run layout tests for multiple iterations in guard malloc mode
        https://bugs.webkit.org/show_bug.cgi?id=224002

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests):
        (RunWebKitTests.setLayoutTestCommand):
        (RunWebKitTestsInStressGuardmallocMode):
        * CISupport/ews-build/steps_unittest.py:

2021-03-31  Aakash Jain  <aakash_jain@apple.com>

        Add build step to run layout tests for multiple iterations
        https://bugs.webkit.org/show_bug.cgi?id=223950

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunWebKitTestsInStressMode):
        (RunWebKitTestsInStressMode.setLayoutTestCommand):
        (RunWebKitTestsInStressMode.evaluateCommand):
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.

2021-03-31  Aakash Jain  <aakash_jain@apple.com>

        Add a fast-cq mode for commit-queue which will skip build and test
        https://bugs.webkit.org/show_bug.cgi?id=223954

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py: Enable fast-cq mode when patch name on bugzilla starts with [fast-cq].
        (BugzillaMixin):
        (BugzillaMixin._is_patch_obsolete):
        (CompileWebKit.doStepIf): Skip building on commit-queue when fast_commit_queue property is set.
        (RunWebKitTests.doStepIf): Skip testing on commit-queue when fast_commit_queue property is set.
        * CISupport/ews-build/steps_unittest.py:

2021-03-31  Youenn Fablet  <youenn@apple.com>

        Apply permission policy to geolocation
        https://bugs.webkit.org/show_bug.cgi?id=223248

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[GeolocationDelegateNew setValidationHandler:]):
        (-[GeolocationDelegateNew _webView:requestGeolocationPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        (-[GeolocationPermissionMessageHandler userContentController:didReceiveScriptMessage:]):

2021-03-30  Chris Dumez  <cdumez@apple.com>

        Service Worker scripts use too much memory in the network process
        https://bugs.webkit.org/show_bug.cgi?id=223808
        <rdar://75637093>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-4.sqlite3: Removed.
        Drop outdated pre-baked service worker registration database as it is no longer
        needed and it is a pain to keep up to date.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):
        Add API test coverage for FileSystem::deleteNonEmptyDirectory(). It is not a new API but it
        had no tests, it used more in this patch and we now have an implementation on all supported
        platforms.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        - Tweak service worker tests so that they expect a version 6 database instead of version 5,
          since I updated the database scheme and bumped the version.
        - Update test that was relying on a pre-baked service worker database file (with old schema) and
          have it dynamically generate the database instead by loading a page that registers a service
          worker.

2021-03-30  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Return new-style commits (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=223262
        <rdar://problem/75483361>

        Unreviewed follow-up fix.

        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (CommitController.register): Allow branch in commit uploads.

2021-03-30  Jessie Berlin  <jberlin@webkit.org>

        Reinstate my committer status.

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-30  Aakash Jain  <aakash_jain@apple.com>

        [ews] Make RunWebKitTests class easy to extend
        https://bugs.webkit.org/show_bug.cgi?id=223939

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (RunWebKitTests):
        (RunWebKitTests.setLayoutTestCommand): Separated out code to set the layout-test command.
        (RunWebKitTests.start):

2021-03-29  Simon Fraser  <simon.fraser@apple.com>

        Allow non-60fps display updates to be driven by DisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=223912

        Reviewed by Sam Weinig.

        New API tests for preferredFramesPerSecond() and
        DisplayUpdate::relevantForUpdateFrequency(), and duplicate existing tests for the "use
        display nominal FPS" vs "use near-60 FPS" settings.

        * TestWebKitAPI/Tests/WebCore/AnimationFrameRate.cpp:
        (TestWebKitAPI::TEST):

2021-03-30  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to find list of layout tests modified by a patch
        https://bugs.webkit.org/show_bug.cgi?id=223890

        Reviewed by Jonathan Bedard.

        * CISupport/ews-build/steps.py:
        (AnalyzePatch): Created common base class for CheckPatchRelevance and FindModifiedLayoutTests.
        (AnalyzePatch._get_patch): Moved to base class.
        (AnalyzePatch._addToLog): Ditto.
        (AnalyzePatch.getResultSummary): Ditto.
        (CheckPatchRelevance):
        (FindModifiedLayoutTests): Build step to find list of layout tests modified by the patch being processed.
        (FindModifiedLayoutTests.find_test_names_from_patch):
        (FindModifiedLayoutTests.start):
        * CISupport/ews-build/steps_unittest.py: Added unit-tests.

2021-03-29  Cameron McCormack  <heycam@apple.com>

        Avoid calling `xcodebuild -showsdks` where possible.
        https://bugs.webkit.org/show_bug.cgi?id=223727

        Reviewed by Sam Weinig.

        run-minibrowser needs to know what port it's running on, since that
        affects the build directory to look in to find the MiniBrowser binary.
        On macOS, webkitdirs.pm's determinePortName ends up running
        `xcodebuild -showsdks` to see if the current SDK has an internal
        variant available, but this is slow.  But we don't need to know the
        exact SDK name here, just the SDK platform name, to determine the
        port name.

        So we shuffle some code around to avoid calling `xcodebuild -showsdks`
        where we can.  This reduces the time spent in run-minibrowser before
        MiniBrowser is launched (crudely measured with `time run-minibrowser
        --help`) from 2s to 0.6s on this machine.

        * Scripts/webkitdirs.pm:
        (readXcodeUserDefault):
        (determineArchitecture):
        (argumentsForConfiguration):
        (availableXcodeSDKs):
        (isValidXcodeSDKPlatformName):
        (determineXcodeSDKPlatformName):
        (determineXcodeSDK):
        (setXcodeSDK):
        (xcodeSDKPlatformName):
        (determinePortName):

2021-03-29  Jonathan Bedard  <jbedard@apple.com>

        [resultsdbpy] Return new-style commits
        https://bugs.webkit.org/show_bug.cgi?id=223262
        <rdar://problem/75483361>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/resultsdbpy/resultsdbpy/__init__.py: Bump version.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit.py: Removed.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (_find_comparison): Replace id with ref.
        (uuid_range_for_commit_range_query): Support both id and ref in REST API.
        (uuid_range_for_query): Ditto.
        (CommitController._find): Ditto.
        (CommitController.register): Return webkitscmpy.Commit object.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_controller_unittest.py:
        (CommitControllerTest.test_branches): WebKit's default branch is now main.
        (CommitControllerTest.test_register_with_full_commit): Registered commits should be webkitscmpy Commit objects.
        (CommitControllerTest.test_find_range_id): Returned revisions are now integers.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/commit_unittest.py: Removed.
        * Scripts/libraries/resultsdbpy/resultsdbpy/controller/upload_controller_unittest.py:
        (UploadControllerPostTest.test_upload): WebKit commits are under-pinned by Git now.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext.register): Use webkitscmpy Commit objects.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/ci_context.py:
        (CIContext.register): Use webkitscmpy Commit objects.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context.py:
        (CommitContext.CommitModel): Renamed from CommitModelMk2.
        (CommitContext.CommitByUuidAscending): Renamed from CommitByUuidAscendingMk2.
        (CommitContext.CommitByUuidDescending): Renamed from CommitByUuidDescendingMk2.
        (CommitContext.__init__): Remove old tables.
        (CommitContext.timestamp_to_uuid): Use webkitscmpy Commit objects.
        (CommitContext.branch_keys_for_commits): All default branches should be treated the same.
        (CommitContext.find_commits_by_ref): Find commits by revision, hash and identifier.
        (CommitContext.register):
        (CommitContext.register_commit): Save commit to new tables.
        (CommitContext.url): Pass commit object to repository url generator.
        (CommitContext.CommitByID): Deleted.
        (CommitContext.CommitModelMk2): Renamed to CommitModel.
        (CommitContext.CommitByUuidAscendingMk2): Renamed to CommitByUuidAscending.
        (CommitContext.CommitByUuidDescendingMk2): Renamed to CommitByUuidDescending.
        (CommitContext.find_commits_by_id): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/commit_context_unittest.py:
        (CommitContextTest): Use ref instead of id.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/failure_context.py:
        (FailureContext.register): Use webkitscmpy Commit objects.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory):
        (MockModelFactory.webkit): Mock both Subversion and GitHub for WebKit.
        (MockModelFactory.create):
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository.py:
        (Repository.commit): By default, fully define commits.
        (StashRepository.commit): Ditto.
        (StashRepository.url_for_commit): Create a URL for a commit object.
        (WebKitRepository.__init__): Use both GitHub and Subversion.
        (WebKitRepository.commit): Determine which remote to use based on provided arguments.
        (WebKitRepository.url_for_commit): Create a URL for a commit object.
        (WebKitRepository.representations): WebKit commits can be represented by hashes.
        (Repository.commit_for_id): Deleted.
        (StashRepository.commit_for_id): Deleted.
        (WebKitRepository.commit_for_id): Deleted.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/repository_unittest.py:
        (RepositoryTest.test_svn): WebKit default branch is now main.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/suite_context.py:
        (SuiteContext.register): Use webkitscmpy Commit objects.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/test_context.py:
        (TestContext.register): Use webkitscmpy Commit objects.
        * Scripts/libraries/resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext.UploadsByConfigurationLegacy.unpack): Use webkitscmpy Commit objects.
        (UploadContext.UploadsByConfiguration.unpack): Ditto.
        (UploadContext._do_job_for_key): Ditto.
        (UploadContext.upload_test_results): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/archive_view_unittest.py:
        (ArchiveViewUnittest.register_archive): Use webkitscmpy Commit objects.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/commit_view.py:
        (CommitView.commit): Use webkitscmpy Commit objects.
        (CommitView.info): Ditto.
        (CommitView.previous): Ditto.
        (CommitView.next): Ditto.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (Commit): 
        (Commit.prototype.label): Only print identifier/hash/revision if they are defined.
        (_CommitBank.prototype._loadSiblings): Use ref over id.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/drawer.js: main is a default branch.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Only print author if the author exists.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/commit.html: prefer ref over id, use
        webkitscmpy Commit object in Jinja template.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/documentation.html: Update documentation
        to match webkitscmpy Commit object.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/investigate.html: main is a default branch.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/search.html: Correct CommitRepresentation callback.
        * Scripts/libraries/resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.
        * Scripts/libraries/resultsdbpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/setup.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
        (Commit.Encoder.default): Handle dict and list in JSON correctly.
        (Commit.uuid): uuid should be 'None' when timestamp is 'None'.
        (Commit.__repr__): Return a ? for an undefined commit.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/bitbucket.py:
        (BitBucket.request): Do not add git-svn-id for undefined revision.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub._commit_response): Fix unit tests.
        * Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:
        (ScmBase): Do not mach git-svn ID with a space before it.

2021-03-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a way for internal clients to hit-test for selectable text in user agent shadow roots
        https://bugs.webkit.org/show_bug.cgi?id=223894
        <rdar://problem/75968068>

        Reviewed by Tim Horton.

        Add a new API test to exercise `-[WKWebProcessPlugInFrame hitTest:options:]`.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/InjectedBundleHitTest.mm: Added.
        (-[WKWebViewWithHitTester hasSelectableTextAt:]):
        (TestWebKitAPI::createWebViewWithHitTester):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/simple-responsive-page.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/InjectedBundleHitTestPlugIn.mm: Added.
        (-[InjectedBundleHitTestPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[InjectedBundleHitTestPlugIn webProcessPlugInBrowserContextController:didClearWindowObjectForFrame:inScriptWorld:]):
        (-[InjectedBundleHitTestPlugIn webProcessPlugInBrowserContextController:didFinishLoadForFrame:]):
        (-[InjectedBundleHitTestPlugIn hasSelectableTextAt:completionHandler:]):
        (-[InjectedBundleHitTestPlugIn dealloc]):
        * TestWebKitAPI/Tests/WebKitCocoa/InjectedBundleHitTestProtocol.h: Added.

2021-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [GPU Process] Simplify DisplayList::Iterator part 2: Rename setItemBufferClient to setItemBuffer{Writing,Reading}Client
        https://bugs.webkit.org/show_bug.cgi?id=223863

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/DisplayListTests.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
        (TestWebKitAPI::TEST):

2021-03-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r275170.

        Broke the build

        Reverted changeset:

        "[Big Sur arm64]
        TestWebKitAPI.WebKit.AccessibilityReduceMotion is a flaky
        crash"
        https://bugs.webkit.org/show_bug.cgi?id=222824
        https://commits.webkit.org/r275170

2021-03-26  Ryan Haddad  <ryanhaddad@apple.com>

        [Big Sur arm64] TestWebKitAPI.WebKit.AccessibilityReduceMotion is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=222824

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit/AccessibilityReduceMotion.mm: Disable the test for arm64 Macs.

2021-03-29  Alex Christensen  <achristensen@webkit.org>

        Migrate _WKUserContentExtension and older versions of WKContentRuleList to WKContentRuleList during lookup
        https://bugs.webkit.org/show_bug.cgi?id=223831

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (respond):
        (TEST):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFailProvisionalNavigation]):

2021-03-29  Youenn Fablet  <youenn@apple.com>

        Promote WKWebView getUserMedia SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=223806

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (-[UserMediaCaptureUIDelegateForParameters webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (-[DeviceOrientationPermissionUIDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        (-[DeviceOrientationPermissionValidationDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
        (-[SpeechRecognitionUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[GeolocationDelegateNew _webView:requestGeolocationPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (-[SimulateFailedSandboxUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:]):
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.h:
        * TestWebKitAPI/cocoa/UserMediaCaptureUIDelegate.mm:
        (-[UserMediaCaptureUIDelegate init]):
        (-[UserMediaCaptureUIDelegate setAudioDecision:]):
        (-[UserMediaCaptureUIDelegate setVideoDecision:]):
        (-[UserMediaCaptureUIDelegate webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:]):

2021-03-28  Cameron McCormack  <heycam@apple.com>

        Enable AspectRatioOfImgFromWidthAndHeightEnabled for WebKitLegacy.
        https://bugs.webkit.org/show_bug.cgi?id=223815

        Reviewed by Sam Weinig.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-03-27  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug that http server for run-benchmark script does not work on python3.
        https://bugs.webkit.org/show_bug.cgi?id=223839

        Reviewed by Ryosuke Niwa.

        Fix encoding issue on run-benchmark http server.
        Extract argument parser configure code for run-benchmark so that we can reuse it elsewhere.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        (ServerControl.render_POST):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (config_argument_parser): Extract argument parser configure code so that we can reuse it elsewhere.
        (parse_args):
        (main):

2021-03-28  Sam Weinig  <weinig@apple.com>

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS, it seems like it is on for all ports
        https://bugs.webkit.org/show_bug.cgi?id=223810

        Reviewed by Simon Fraser.

        * Scripts/webkitperl/FeatureList.pm:
        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS from FeatureList.pm.

2021-03-28  David Kilzer  <ddkilzer@apple.com>

        Compile WebKit with UBSan
        <https://webkit.org/b/176131>
        <rdar://problem/34174018>

        Reviewed by Alexey Proskuryakov.

        * Scripts/set-webkit-configuration:
        - Add support for --[no-]ubsan command-line switch.
        - Add warning when enabling ASan and TSan together.
        (updateOrDeleteConfigurationFile):
        - Extract common code for updating configuration files.

        * Scripts/webkitdirs.pm:
        (readSanitizerConfiguration): Add.
        - Extract common code for reading sanitizer configuration files.
        (determineASanIsEnabled):
        (determineTSanIsEnabled):
        (determineUBSanIsEnabled): Add.
        - Make use of readSanitizerConfiguration().
        (ubsanIsEnabled): Add.
        (XcodeOptions):
        - Add command-line switches for UBSan.
        (generateBuildSystemFromCMakeProject): Ditto.

        * sanitizer/ubsan.xcconfig: Add.
        - Contains Xcode settings for enabling UBSan.

2021-03-27  Kate Cheney  <katherine_cheney@apple.com>

        PCM: Send report to both click source and attribution destination website
        https://bugs.webkit.org/show_bug.cgi?id=223615
        <rdar://problem/75849443>

        Reviewed by Brent Fulgham.

        Update API tests to check for a valid time to send for both the source
        and destination site.

        * TestWebKitAPI/Tests/WebCore/PrivateClickMeasurement.cpp:
        (TestWebKitAPI::TEST):

2021-03-26  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r275111) [GLIB] Fix build with new derived sources and forwarding headers scheme
        https://bugs.webkit.org/show_bug.cgi?id=223834

        Unreviewed build fix.

        * TestWebKitAPI/glib/CMakeLists.txt: Add some missing variables with
        needed include headers.

2021-03-26  Tyler Wilcock  <twilco.o@protonmail.com>

        Fix TypeError: Can't mix strings and bytes in path components in Tools/Scripts/dump-class-layout
        https://bugs.webkit.org/show_bug.cgi?id=223819

        Reviewed by Jonathan Bedard.

        Prior to this patch, I received this error when trying to run the
        dump-class-layout script.  This happens because `webkit_build_dir()` returns
        bytes rather than a string.

        $ dump-class-layout -c Release WebCore Pair
        Traceback (most recent call last):
          File "/home/twilco/projects/webkit/Tools/Scripts//dump-class-layout", line 88, in <module>
            main()
          File "/home/twilco/projects/webkit/Tools/Scripts//dump-class-layout", line 80, in main
            target_path = os.path.join(build_dir, args.config, args.framework + ".framework", args.framework);
          File "/usr/lib/python3.9/posixpath.py", line 90, in join
            genericpath._check_arg_types('join', a, *p)
          File "/usr/lib/python3.9/genericpath.py", line 155, in _check_arg_types
            raise TypeError("Can't mix strings and bytes in path components") from None
        TypeError: Can't mix strings and bytes in path components

        * Scripts/dump-class-layout:
        Update `webkit_build_dir()` to decode its output into a UTF-8 string.

2021-03-26  Jonathan Bedard  <jbedard@apple.com>

        System installing webkitcorepy can break certain scripts
        https://bugs.webkit.org/show_bug.cgi?id=223822
        <rdar://problem/75905163>

        Rubber-stamped by Alan Coon.

        * Scripts/libraries/resultsdbpy/resultsdbpy/example/environment.py:
        * Scripts/test-lldb-webkit: Replace sys.path.append with sys.path.insert.
        * Scripts/webkitpy/__init__.py: Only put webkitcorepy path into sys.path if it isn't already there.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        Replace sys.path.append with sys.path.insert.
        * Scripts/webkitpy/common/system/executive_unittest.py: Ditto.
        * Scripts/webkitpy/port/config_standalone.py: Ditto.

2021-03-26  Jonathan Bedard  <jbedard@apple.com>

        [webkit-patch] Use commit.webkit.org instead of remote SVN to compute identifier
        https://bugs.webkit.org/show_bug.cgi?id=223820
        <rdar://problem/75902125>

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.mock_svn_remote): Replace mock Svn with mock requests.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/comments.py:
        (bug_comment_from_svn_revision): Use commits.webkit.org instead of svn.webkit.org.
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest.test_empty_state): Replace mock Svn with mock requests.

2021-03-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Deprecate using DERIVED_SOURCES_DIR/FOWARDING_HEADERS_DIR directly
        https://bugs.webkit.org/show_bug.cgi?id=223763

        Reviewed by Michael Catanzaro.

        Remove any usages of DERIVED_SOURCES_DIR and FOWARDING_HEADERS_DIR.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/mac/CMakeLists.txt:
        * WebKitTestRunner/PlatformMac.cmake:
        * wpe/backends/CMakeLists.txt:

2021-03-26  Zalan Bujtas  <zalan@apple.com>

        [MiniBrowser] Remove redundant "Disable Simple Line Layout" menu item
        https://bugs.webkit.org/show_bug.cgi?id=223812

        Reviewed by Simon Fraser.

        SLL was replaced by IFC integration a while ago.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController initWithMenu:]):
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleSimpleLineLayoutEnabled:]): Deleted.
        (-[SettingsController simpleLineLayoutEnabled]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2021-03-26  Kate Cheney  <katherine_cheney@apple.com>

        Implement PCM SQLite changes based on spec review
        https://bugs.webkit.org/show_bug.cgi?id=223726
        <rdar://problem/75818526>

        Reviewed by Brent Fulgham.

        Add API test coverage to check that renaming and adding columns works.
        Data migration was tested manually.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PrivateClickMeasurement.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutFraudPreventionDatabase.db: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutFraudPreventionDatabase.db-shm: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutFraudPreventionDatabase.db-wal: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutReportingColumns.db: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutReportingColumns.db-shm: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/pcmWithoutReportingColumns.db-wal: Added.

2021-03-26  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, reverting r275081.

        Broke Apple Internal builds

        Reverted changeset:

        "Avoid calling `xcodebuild -showsdks` where possible."
        https://bugs.webkit.org/show_bug.cgi?id=223727
        https://commits.webkit.org/r275081

2021-03-26  Jean-Yves Avenard  <jya@apple.com>

        Fix NowPlayingInfoArtwork operator== logic.
        https://bugs.webkit.org/show_bug.cgi?id=223730
        <rdar://problem/75822687>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/NowPlayingInfoTests.cpp: Added.
        (TestWebKitAPI::testEmptyArtwork):
        (TestWebKitAPI::TEST):

2021-03-25  Cameron McCormack  <heycam@apple.com>

        Avoid calling `xcodebuild -showsdks` where possible.
        https://bugs.webkit.org/show_bug.cgi?id=223727

        Reviewed by Sam Weinig.

        run-minibrowser needs to know what port it's running on, since that
        affects the build directory to look in to find the MiniBrowser binary.
        On macOS, webkitdirs.pm's determinePortName ends up running
        `xcodebuild -showsdks` to see if the current SDK has an internal
        variant available, but this is slow.  But we don't need to know the
        exact SDK name here, just the SDK platform name, to determine the
        port name.

        So we shuffle some code around to avoid calling `xcodebuild -showsdks`
        where we can.  This reduces the time spent in run-minibrowser before
        MiniBrowser is launched (crudely measured with `time run-minibrowser
        --help`) from 2s to 0.6s on this machine.

        * Scripts/webkitdirs.pm:
        (readXcodeUserDefault):
        (determineArchitecture):
        (argumentsForConfiguration):
        (availableXcodeSDKs):
        (isValidXcodeSDKPlatformName):
        (determineXcodeSDKPlatformName):
        (determineXcodeSDK):
        (xcodeSDKPlatformName):
        (determinePortName):

2021-03-25  Alex Christensen  <achristensen@webkit.org>

        Allow WKContentRuleList to block only in frames or only in main frame
        https://bugs.webkit.org/show_bug.cgi?id=219001

        Reviewed by Ben Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):

2021-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        It should be possible to drag images with overlay content
        https://bugs.webkit.org/show_bug.cgi?id=223766
        <rdar://problem/75856030>

        Reviewed by Tim Horton.

        Add an API test to verify that the top part of the image (with an overlay) doesn't trigger a `dragstart` when
        dragged, but the bottom part of the image does.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/simple-image-overlay.html: Added.

        Add a test page that installs an image overlay for testing purposes (assuming that the web view injects the
        global `internals` object).

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator containsDraggedType:]):

        Add a helper method to return whether or not the simulated drag resulted in the given type being written to the
        "drag pasteboard" (in the case of iOS, this just means any of the source item providers).

        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):

        Make a minor adjustment to ensure that the drag pasteboard is cleared out before starting a simulated drag.

        (-[DragAndDropSimulator containsDraggedType:]):

2021-03-25  Andres Gonzalez  <andresg_22@apple.com>

        AX: Consider implementing @aria-details.
        https://bugs.webkit.org/show_bug.cgi?id=165842
        rdar://30725491

        Reviewed by Chris Fleizach.

        Added AccessibilityUIElement::detailsElements.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::detailsElements const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::detailsElements const):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::detailsElements const):

2021-03-25  John Wilander  <wilander@apple.com>

        PCM: Rename attributeOn to attributionDestination and change the IDL data type of attributionSourceId to unsigned long
        https://bugs.webkit.org/show_bug.cgi?id=223661
        <rdar://problem/75762075>

        Reviewed by Brent Fulgham.

        The PR review of the update of the PCM spec lead WebKit, Mozilla, and Google to decide on two changes:
        1. Rename attributeOn to attributionDestination
        2. Change the IDL data type of attributionSourceId from DOMString to unsigned long

        The spec change can be seen in this commit:
        https://github.com/privacycg/private-click-measurement/pull/75/commits/8623b5df5e899e6652bc5b00313585f7eeafa797

        * 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::setPrivateClickMeasurementAttributionReportURLsForTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setPrivateClickMeasurementAttributionReportURLsForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2021-03-25  Alex Christensen  <achristensen@webkit.org>

        WKContentRuleList first-party should include other subdomains of the current registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=223728

        Reviewed by John Wilander.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (TEST):

2021-03-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] JSC crashes if a function expects a parameter but doesn't receive any
        https://bugs.webkit.org/show_bug.cgi?id=223646

        Reviewed by Adrian Perez de Castro.

        Add test cases.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (valueToString):
        (testJSCFunction):
        (testJSCClass):

2021-03-25  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add unit-test to ensure that config.json doesn't have tab characters
        https://bugs.webkit.org/show_bug.cgi?id=223440

        Reviewed by Jonathan Bedard.

        * CISupport/build-webkit-org/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_tab_character): Unit-test to ensure that there are no tab characters.
        * CISupport/ews-build/config.json:
        * CISupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_tab_character):

2021-03-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274826 and r274968.
        https://bugs.webkit.org/show_bug.cgi?id=223746

        Added broken layout test

        Reverted changesets:

        "AX: textRectsFromMarkers always fails"
        https://bugs.webkit.org/show_bug.cgi?id=223556
        https://trac.webkit.org/changeset/274826

        "AX: Add functions rectsForTextMarkerRange for testing"
        https://bugs.webkit.org/show_bug.cgi?id=223705
        https://trac.webkit.org/changeset/274968

2021-03-24  Jonathan Bedard  <jbedard@apple.com>

        Autoinstalling keyring-7.3.1 is failing with Python 2
        https://bugs.webkit.org/show_bug.cgi?id=223677
        <rdar://problem/75800504>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Bump version, add setuptools_scm.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Always install setuptools_scm.

2021-03-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Add functions rectsForTextMarkerRange for testing
        https://bugs.webkit.org/show_bug.cgi?id=223705
        <rdar://problem/75797361>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::rectsForTextMarkerRange):

2021-03-24  Chris Dumez  <cdumez@apple.com>

        Address undefined behavior found by UBSan in StringToIntegerConversion.h
        https://bugs.webkit.org/show_bug.cgi?id=223694

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):

2021-03-24  Kate Cheney  <katherine_cheney@apple.com>

        Followup to https://trac.webkit.org/changeset/274928/webkit

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-03-24  Brent Fulgham  <bfulgham@apple.com>

        [Cocoa] Revise loadSimulatedRequest API with final review comments (223657)
        https://bugs.webkit.org/show_bug.cgi?id=223657
        <rdar://75757727>

        Reviewed by Alex Christensen.

        Update tests to use the final API, while still exercising the existing API.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewLoadAPIs.mm:
        (TEST):

2021-03-23  Kate Cheney  <katherine_cheney@apple.com>

        Service worker loads are not marked as app-bound
        https://bugs.webkit.org/show_bug.cgi?id=222635
        <rdar://problem/74395950>

        API test coverage for fetched and synthetic responses to make sure
        they are marked as app-bound or not based on the main request.

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2021-03-23  Chris Dumez  <cdumez@apple.com>

        DerivedSources/WebKitTestRunner/JSAccessibilityUIElement.cpp:802:72: runtime error: -1 is outside the range of representable values of type 'unsigned int'
        https://bugs.webkit.org/show_bug.cgi?id=223650

        Reviewed by Darin Adler.

        The bindings generator used by WebKitTestRunner was converting all numbers into double and
        passing that to the implementation, no matter the IDL type (e.g. unsigned long). As a result,
        there may be a type mismatch between the value the bindings are passing and the implementation
        function getting called. This implicit conversion has undefined behavior in some cases and it
        triggers UBSan errors. To address the issue, we now call clampTo<NativeNumberType>() on the
        double before passing it to the implementation. This makes sure we pass the implementation
        the type it expects and that the conversion is well-defined.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateImplementationFile):
        (_nativeNumericType):
        (_platformType):
        (_platformTypeConstructor):
        (_platformTypeVariableDeclaration):

2021-03-23  Jiewen Tan  <jiewen_tan@apple.com>

        Provide a way to specify platform vs security key when requesting an assertion in the SPI
        https://bugs.webkit.org/show_bug.cgi?id=223547
        <rdar://74034746>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (TestWebKitAPI::TEST):
        Adds the test case.

2021-03-23  Chris Dumez  <cdumez@apple.com>

        wtf/text/IntegerToStringConversion.h:54:104: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
        https://bugs.webkit.org/show_bug.cgi?id=223614

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):

2021-03-23  Jonathan Bedard  <jbedard@apple.com>

        [webkitcorepy] Print output of setup.py when install fails
        https://bugs.webkit.org/show_bug.cgi?id=223589
        <rdar://problem/75700606>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitcorepy/setup.py: Bump version.
        * Scripts/libraries/webkitcorepy/webkitcorepy/__init__.py: Ditto.
        * Scripts/libraries/webkitcorepy/webkitcorepy/autoinstall.py:
        (Package.install): Print stdout and stderr of setup.py when install fails.

2021-03-22  Cameron McCormack  <heycam@apple.com>

        Fix ordering of my email addresses in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=223622

        The first must be the email used for scm access.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-22  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Base GitHub mock links on provided remote
        https://bugs.webkit.org/show_bug.cgi?id=223611
        <rdar://problem/75713760>

        Reviewed by Dewei Zhu.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
        (GitHub.__init__): Standardize mock GitHub path.
        (GitHub._parents_of_request): Base link path on GitHub remote.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:
        (TestGitHub):

2021-03-22  Devin Rousso  <drousso@apple.com>

        Remove unused JS and CSS files of media controls
        https://bugs.webkit.org/show_bug.cgi?id=214955
        <rdar://problem/66604040>

        Reviewed by Eric Carlson.

        Cocoa platforms are already using modern media controls so there's no reason to keep the old
        media controls resources/logic around any longer. It just wastes space.

        The non-iOS Apple controls must be kept though as they are still used on Windows.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformSpecificFeatureDefaultsForTest const):
        Replace `ModernMediaControlsEnabled` setting with `ENABLE_MODERN_MEDIA_CONTROLS` build flag.

2021-03-22  Cameron McCormack  <heycam@apple.com>

        Restore my committer status.
        https://bugs.webkit.org/show_bug.cgi?id=223600

        Per email sent to webkit-committers@.

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-22  Rob Buis  <rbuis@igalia.com>

        [css-contain] Parse CSS contain property
        https://bugs.webkit.org/show_bug.cgi?id=223252

        Reviewed by Darin Adler.

        Add support for disabling aspect-ratio in win wk1.

        * DumpRenderTree/TestOptions.cpp:
        (WTR::TestOptions::defaults):

2021-03-22  Jonathan Bedard  <jbedard@apple.com>

        [webkitscmpy] Allow user to force canonicalization for a specific set of commits
        https://bugs.webkit.org/show_bug.cgi?id=223579
        <rdar://problem/75693154>

        Reviewed by Aakash Jain.

        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
        * Scripts/libraries/webkitscmpy/webkitscmpy/program/canonicalize/__init__.py:
        (Canonicalize.parser): Add --number argument.
        (Canonicalize.main): Use --number to set the number of commits to be canonicalized.
        * Scripts/libraries/webkitscmpy/webkitscmpy/test/canonicalize_unittest.py:
        (TestCanonicalize.test_number):

2021-03-22  Tyler Wilcock  <twilco.o@protonmail.com>

        AppleWin can't start due to "Failed to determine path to AAS directory." because iTunes changed the registry key
        https://bugs.webkit.org/show_bug.cgi?id=219015

        Reviewed by Alex Christensen.

        It appears that iTunes no longer sets the Apple Application Support
        registry entry.  Fallback to trying to find the iTunes installation
        directory if the AAS directory is not present.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (iTunesDirectory): Added.
        (modifyPath):

2021-03-19  Darin Adler  <darin@apple.com>

        [Cocoa] Make it possible to release a WKWebView on a non-main thread without a crash due to WKScriptMessage race
        https://bugs.webkit.org/show_bug.cgi?id=222336

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        Use _close instead of WKWebView deallocation to trigger a call to stopURLSchemeTask,
        since such delegate methods will intentionally no longer be delivered if triggered by deallocation.

2021-03-22  Youenn Fablet  <youenn@apple.com>

        Implement RTCDataChannel transfer out of process
        https://bugs.webkit.org/show_bug.cgi?id=223443

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2021-03-22  Youenn Fablet  <youenn@apple.com>

        Remove some spurious logging lines appearing in WebRTC tests
        https://bugs.webkit.org/show_bug.cgi?id=223502

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip):

2021-03-22  Jean-Yves Avenard  <jya@apple.com>

        Add Jean-Yves Avenard to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=223555

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-19  BJ Burg  <bburg@apple.com>

        Update filter-build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=223528

        Reviewed by Simon Fraser.

        - Remove a bunch of informational messages that clog up output.
        - Remove some linker/loader warnings that are non-actionable.
        - Generalize a few existing filters to work with more targets.
        - Remove super-noisy and meaningless device preparation warnings.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):

2021-03-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        update-webgl-conformance-tests script should use webgl/1.0.x and webgl/2.0.y directories
        https://bugs.webkit.org/show_bug.cgi?id=223516

        Reviewed by Kenneth Russell.

        Import the tests to 1.0.x/2.0.y instead of 1.0.4/2.0.1 since we track the development
        versions, not the upcoming snapshots.

        * Scripts/webkitpy/update_webgl_conformance_tests_lib/main.py:
        (_generate_webkit_webgl_tests):
        (main):

2021-03-19  Youenn Fablet  <youenn@apple.com>

        Custom scheme handled origins should be considered secure
        https://bugs.webkit.org/show_bug.cgi?id=223423

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[URLSchemeHandlerMessageHandler userContentController:didReceiveScriptMessage:]):

2021-03-19  Aakash Jain  <aakash_jain@apple.com>

        Fix broken contributors.json after r274720

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-19  Angelos Oikonomopoulos  <angelos@igalia.com>

        Add myself as to contributors.json as a committer.

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-19  Caio Lima  <ticaiolima@gmail.com>

        Update Caio's status to reviewer
        https://bugs.webkit.org/show_bug.cgi?id=223509

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2021-03-19  Youenn Fablet  <youenn@apple.com>

        Disable SFrame compatibility mode for audio senders and receivers
        https://bugs.webkit.org/show_bug.cgi?id=223391
        <rdar://problem/75538500>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/RTCRtpSFrameTransformerTests.cpp:
        (TestWebKitAPI::createVideoTransformer):
        (TestWebKitAPI::createAudioTransformer):
        (TestWebKitAPI::TEST):

== Rolled over to ChangeLog-2021-03-18 ==
