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