2019-12-02  Sihui Liu  <sihui_liu@apple.com>

        Cross-thread version StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=203971
        <rdar://problem/57290349>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp: Removed as we have a different StorageQuotaManager 
        implementation now.
        * WebKitTestRunner/TestController.cpp: reset StorageQuotaManager's quota between tests.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::resetQuota):
        * WebKitTestRunner/TestController.h:

2019-12-02  Saam Barati  <sbarati@apple.com>

        run-jsc should exit with the same signal or exit status that the `jsc` shell does
        https://bugs.webkit.org/show_bug.cgi?id=204778

        Reviewed by Keith Miller.

        * Scripts/run-jsc:

2019-12-02  Aakash Jain  <aakash_jain@apple.com>

        Revert - [EWS] Do not retry layout-tests build if the flaky test failures are also present in clean tree run
        https://bugs.webkit.org/show_bug.cgi?id=204704

        Reverting this, a more generic fix for handling flakiness would be made in Bug 204769.

2019-12-02  Louie Livon-Bemel  <llivonbemel@apple.com>

        Add helper methods for description and equality to text manipulation SPI
        https://bugs.webkit.org/show_bug.cgi?id=204758
        <rdar://problem/57438200>

        Reviewed by Wenson Hsieh.

        Add tests for the new methods. Most are equality tests for various situations, and are moved over from the
        Safari unit tests I had for the category methods that had the same purpose.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):
            - Add test to make sure the content isn't included in the regular -description, but the identifier is. And
              That -debugDescription does include the contents.
            - Add many tests equality for various situations, testing both with and without content equality.
        (TestWebKitAPI::createTextManipulationToken):
            Add a helper for creating a token in one line.

2019-12-02  Daniel Bates  <dabates@apple.com>

        REGRESSION (r195080): prepare-ChangeLog does not emit function list for file paths that contain a space
        https://bugs.webkit.org/show_bug.cgi?id=204236

        Reviewed by Brian Burg.

        Revert the filename escape logic added in <http://trac.webkit.org/changeset/195080> as it broke
        function list generation in file paths that contain space characters. Function list generation
        broke because the escaping was performed after line range dictionaries were built up keyed off
        the unescaped file path. Subsequent code would try to query these dictionaries to build up the
        changed function list using the escaped file path and never a match. The escaping logic was not
        necessary to fix the originally reported bug. All that was needed was to use the three-argument
        open() call that took a mode. So, remove the escape logic.

        * Scripts/prepare-ChangeLog:
        (actuallyGenerateFunctionLists):

2019-11-30  Ross Kirsling  <ross.kirsling@sony.com>

        test262-runner should dump YAML with correct encoding
        https://bugs.webkit.org/show_bug.cgi?id=204493

        Reviewed by Saam Barati.

        Even though we spit out correctly-encoded output to the terminal, Perl's YAML module insists upon *re*-encoding
        to UTF-8 when dumping to file. This works out in the end because an analogous double-decode occurs when loading
        from file. Still, it's really annoying that expectations.yaml has garbled (i.e. double-encoded) text.

        We shouldn't modify libraries directly, but we can copy-paste DumpFile/LoadFile into Runner.pm and tweak!

        * Scripts/test262/Runner.pm:
        (DumpFile):
        (LoadFile):
        Add custom versions of DumpFile/LoadFile which do not execute `binmode $OUT, ':utf8';`.

2019-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (2648 new tests -> 3980).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for hyphenate-limit-lines
        https://bugs.webkit.org/show_bug.cgi?id=204712
        <rdar://problem/57536727>

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-11-30  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Do not retry layout-tests build if the flaky test failures are also present in clean tree run
        https://bugs.webkit.org/show_bug.cgi?id=204704

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_flaky_and_inconsistent_failures_with_clean_tree_failures): Changed expected outcome to SUCCESS.
        (TestAnalyzeLayoutTestsResults.test_flaky_and_consistent_failures_with_clean_tree_failures): Ditto.

2019-11-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for hyphenate-limit-before and hyphenate-limit-after
        https://bugs.webkit.org/show_bug.cgi?id=204710
        <rdar://problem/57535210>

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-11-29  Antti Koivisto  <antti@apple.com>

        Add mechanism for enabling internal and experimental features from run-webkit-test command line
        https://bugs.webkit.org/show_bug.cgi?id=204702

        Reviewed by Antoine Quint.

        Add --internal-feature and --experimental-feature flags to TestRunner and run-webkit-tests.
        This is useful for running existing tests with different feature enabled without modifying
        anything else. For example:

        run-webkit-tests --internal-feature LayoutFormattingContextRenderTreeIntegrationEnabled

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.internal_feature):
        (Port):
        (Port.experimental_feature):
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionExperimentalFeature):
        (WTR::handleOptionInternalFeature):
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::testOptionsForTest const):
        * WebKitTestRunner/TestController.h:

2019-11-29  Aakash Jain  <aakash_jain@apple.com>

        Add a unit-test to new EWS for scenario when there is flakiness with patch and also on clean tree
        https://bugs.webkit.org/show_bug.cgi?id=204707
        <rdar://problem/57533998>

        Unreviewed unit-test.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_mildly_flaky_patch_with_some_tree_redness_and_flakiness):

2019-11-29  Aakash Jain  <aakash_jain@apple.com>

        Add a unit-test to old EWS for scenario when there is flakiness with patch and also on clean tree
        https://bugs.webkit.org/show_bug.cgi?id=204707

        Unreviewed unit-test.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2019-11-29  Paulo Matos  <pmatos@igalia.com>

        Move jsc-i386 from old to new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204667

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * QueueStatusServer/config/queues.py:

2019-11-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove ENABLE_KEYBOARD_CODE_ATTRIBUTE and ENABLE_KEYBOARD_KEY_ATTRIBUTE macros
        https://bugs.webkit.org/show_bug.cgi?id=204666

        Reviewed by Ross Kirsling and Don Olmstead.

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

2019-11-28  Aakash Jain  <aakash_jain@apple.com>

        Rename 'submit to new EWS' to 'Submit for EWS analysis'
        https://bugs.webkit.org/show_bug.cgi?id=204692

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:

2019-11-28  Aakash Jain  <aakash_jain@apple.com>

        Old EWS is showing 'Submit to old EWS' button on every patch
        https://bugs.webkit.org/show_bug.cgi?id=204691

        Unreviewed minor fix.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble.get): Disabled Submit to old EWS button since almost all the queues
        have been removed from old EWS.

2019-11-28  Diego Pino Garcia  <dpino@igalia.com>

        test262-runner ends with SIGPIPE signal
        https://bugs.webkit.org/show_bug.cgi?id=194816

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/test262/Runner.pm:
        (main):

2019-11-28  Aakash Jain  <aakash_jain@apple.com>

        Removed ENABLED_QUEUES logic from ews-app
        https://bugs.webkit.org/show_bug.cgi?id=204683

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Removed ENABLED_QUEUES.
        (StatusBubble._build_bubbles_for_patch):
        (StatusBubble._should_show_bubble_for_queue): Deleted.

2019-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews] Enable Windows queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204243

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled windows queue bubble on new EWS.
        * BuildSlaveSupport/ews-build/config.json: Enabled the scheduler for windows queue. Removed the disabled Try_Userpass scheduler.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Removed windows ews queue from bot-watcher's dashboard.
        * QueueStatusServer/config/queues.py: Removed windows queue from old EWS.

2019-11-28  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Move GL video sink to its own GstBin sub-class
        https://bugs.webkit.org/show_bug.cgi?id=204624

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py: White-list the new GLVideoSinkGStreamer GObject implementation.

2019-11-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt: These tests were passing accidentally.

2019-11-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [AppleWin] run-webkit-tests is failing to find bin32/DumpRenderTree since r252834
        https://bugs.webkit.org/show_bug.cgi?id=204571

        Reviewed by Ross Kirsling.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests.start): Replaced 'bin32' with 'bin64'.

2019-11-25  Kent Tamura  <tkent@chromium.org>

        Remove tkent@ from watchlist
        https://bugs.webkit.org/show_bug.cgi?id=204599

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/common/config/watchlist: Remove tkent@

2019-11-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Dragged images are only available as .tiff when dropping onto macCatalyst apps
        https://bugs.webkit.org/show_bug.cgi?id=204598
        <rdar://problem/57093920>

        Reviewed by Tim Horton.

        Verify that WKWebView is able to provide data in non-TIFF formats when dragging several types of images using a
        new API test.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:

2019-11-25  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Ensure MiniBrowser can be built with !ENABLE(WEBKIT_LEGACY)
        https://bugs.webkit.org/show_bug.cgi?id=204592

        Reviewed by Don Olmstead.

        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::WndProc):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * PlatformWin.cmake:

2019-11-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add DefaultHash<OptionSet<T>> and HashTrait<OptionSet<T>> specializations
        https://bugs.webkit.org/show_bug.cgi?id=204562

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        Added a new test WTF_OptionSet.HashSet.

2019-11-25  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] xserver build fails
        https://bugs.webkit.org/show_bug.cgi?id=204577

        Reviewed by Žan Doberšek.

        * gtk/jhbuild.modules: Bump libdrm and add implicit dependency to
        it via mesa for the xserver recipe.

2019-11-25  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Flatten MediaPlayerPrivateGStreamer into MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=204352

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py: The base class no longer
        exists, perform the check on the player private.

2019-11-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] libgpg-error fails to build with gawk 5
        https://bugs.webkit.org/show_bug.cgi?id=204568

        Reviewed by Frédéric Wang.

        Gawk 5 throws errors when compiling libgpg-error. To avoid those, we
        have to bump libgpg-error to the latest 1.36 version and have the
        upstream fix applied on top of that.

        Autoreconf has to be invoked to regenerate automake files. Because
        autogen.sh script (which is present in the release tarballs) falters
        under jhbuild, we invoke autoreconf directly for libgpg-error builds.

        * gtk/jhbuild.modules:
        * gtk/patches/libgpg-error-prepare-for-gawk-5-0.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/patches/libgpg-error-prepare-for-gawk-5-0.patch: Added.

2019-11-23  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Allow multiple third-party cookie blocking settings
        https://bugs.webkit.org/show_bug.cgi?id=204389
        <rdar://problem/57344054>

        Reviewed by Brent Fulgham.

        This change allows the existing TestRunner function
        setStatisticsShouldBlockThirdPartyCookies() to set an optional boolean
        parameter onlyOnSitesWithoutUserInteraction to opt in to that behavior.

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

2019-11-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r252805.
        https://bugs.webkit.org/show_bug.cgi?id=204553

        Caused test failures and ASan crashes (Requested by ap on
        #webkit).

        Reverted changeset:

        "Cross-thread version StorageQuotaManager"
        https://bugs.webkit.org/show_bug.cgi?id=203971
        https://trac.webkit.org/changeset/252805

2019-11-23  Per Arne Vollan  <pvollan@apple.com>

        Archive step is failing after r252827
        https://bugs.webkit.org/show_bug.cgi?id=204548

        Reviewed by Alexey Proskuryakov.

        After https://trac.webkit.org/changeset/252827/webkit, the archive step is failing.

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

2019-11-23  Andres Gonzalez  <andresg_22@apple.com>

        Run LayoutTests/accessibility/mac/primary-screen-height.html on secondary accessibility thread.
        https://bugs.webkit.org/show_bug.cgi?id=204391

        Reviewed by Chris Fleizach.

        Added AccessibilityController::execute to execute any
        AccessibilityUIElement call into AccessibilityObjectWrapper on the
        secondary accessibility thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement): leftover from previous review.
        (WTR::AccessibilityController::execute): added this to execute any AccessibilityUIElement method on the appropriate thread.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::getChildrenWithRange): Runs on secondary thread.
        (WTR::AccessibilityUIElement::numberAttributeValue): Runs on secondary thread.

2019-11-22  Per Arne Vollan  <pvollan@apple.com>

        Set 64-bit as default architecture on Windows
        https://bugs.webkit.org/show_bug.cgi?id=204477

        Reviewed by Ross Kirsling.

        This will make 64-bit building and testing the default.

        * Scripts/webkitdirs.pm:
        (determineIsWin64):
        * Scripts/webkitpy/port/win.py:
        (WinPort):

2019-11-22  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Failure to determine configuration for reporting is fatal
        https://bugs.webkit.org/show_bug.cgi?id=204526

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Use uname as the default upload configuration 

2019-11-22  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org/api/failures should return an error when no test-run is found for specified criteria
        https://bugs.webkit.org/show_bug.cgi?id=204385
        <rdar://problem/57334389>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/failure_controller.py:
        (FailureController.failures): Return a 404 error if no test runs are found.
        * resultsdbpy/resultsdbpy/controller/failure_controller_unittest.py:
        (FailureControllerTest):
        (FailureControllerTest.test_no_runs):
        * resultsdbpy/resultsdbpy/model/failure_context.py:
        (FailureContext._failures): Return 'None' if no test runs are found.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py:
        (FailureContextTest):
        (FailureContextTest.test_no_test_runs):

2019-11-22  Chris Dumez  <cdumez@apple.com>

        HTTPHeaderMap's operator== is not fully correct
        https://bugs.webkit.org/show_bug.cgi?id=204361

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HTTPHeaderMap.cpp: Added.
        (TestWebKitAPI::TEST):

2019-11-22  Sihui Liu  <sihui_liu@apple.com>

        Cross-thread version StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=203971
        <rdar://problem/57290349>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp: Removed as we have a different StorageQuotaManager 
        implementation now.
        * WebKitTestRunner/TestController.cpp: reset StorageQuotaManager's quota between tests.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::resetQuota):
        * WebKitTestRunner/TestController.h:

2019-11-22  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r252791.

        Cannot use key on scalar in some perl versions

        Reverted changeset:

        "run-javascriptcore-tests: Failure to determine configuration
        for reporting is fatal"
        https://bugs.webkit.org/show_bug.cgi?id=204526
        https://trac.webkit.org/changeset/252791

2019-11-22  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Failure to determine configuration for reporting is fatal
        https://bugs.webkit.org/show_bug.cgi?id=204526

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Return empty hash if no configuration is available.
        (uploadResults): Soft-fail upload if configuration is empty.

2019-11-22  Aakash Jain  <aakash_jain@apple.com>

        Setup EWS queue for JSConly i386
        https://bugs.webkit.org/show_bug.cgi?id=204523

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-11-22  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add KillOldProcesses step before running JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204525

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

2019-11-22  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Hide the output of binaries behind --verbose
        https://bugs.webkit.org/show_bug.cgi?id=204386

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (runTest): Do not log binary output by default, always log test failures.

2019-11-22  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add basic commit-queue support in new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204517

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/loadConfig.py:

2019-11-22  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Failing to run spindump shouldn't be fatal
        https://bugs.webkit.org/show_bug.cgi?id=204518
        <rdar://problem/57397417>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Catch script error.

2019-11-22  Paulo Matos  <pmatos@igalia.com>

        Remove JSC 32bit ARMv7 and MipsEl old EWS queues
        https://bugs.webkit.org/show_bug.cgi?id=204344

        Reviewed by Aakash Jain.

        Remove JSC armv7 and mips from old EWS queue and fix bubbles
        by removing them from old ews and adding them to new ews.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * QueueStatusServer/config/queues.py:

2019-11-22  Paulo Matos  <pmatos@igalia.com>

        Support JSCOnly platform in test reporting
        https://bugs.webkit.org/show_bug.cgi?id=204495

        Reviewed by Carlos Garcia Campos.

        Add JSCOnly to possible platforms.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload):

2019-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] RemoteInspector: use sockets instead of DBus
        https://bugs.webkit.org/show_bug.cgi?id=204503

        Reviewed by Žan Doberšek.

        Update the unit tests to not use DBus.

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:

2019-11-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Web process crashes when attempting to request document context in a textarea
        https://bugs.webkit.org/show_bug.cgi?id=204455
        <rdar://problem/57383975>

        Reviewed by Tim Horton.

        Add a test to verify that we don't crash (and are still able to retrieve character rects).

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[UIWKDocumentContext markedTextRects]):
        (-[UIWKDocumentContext textRects]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-21  Matt Lewis  <jlewis3@apple.com>

        Fix triggers for catalina debug and webgl testers.
        https://bugs.webkit.org/show_bug.cgi?id=204456

        Reviewed by Jonathan Bedard.

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

2019-11-21  Jonathan Bedard  <jbedard@apple.com>

        build.webkit.org: Forward results database credentials to jsc test runs
        https://bugs.webkit.org/show_bug.cgi?id=204453

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.__init__): Do not log environment with credentials in it.
        (RunJavaScriptCoreTests.start): Add results database API key to environment.
        (RunLLINTCLoopTests.__init__): Do not log environment with credentials in it.
        (RunLLINTCLoopTests.start): Add results database API key to environment.
        (Run32bitJSCTests.__init__): Do not log environment with credentials in it.
        (Run32bitJSCTests.start): Add results database API key to environment.

2019-11-21  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Clean-up simulator processes after tearing down simulators
        https://bugs.webkit.org/show_bug.cgi?id=204416

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.running_pids): Make function Python 3 compatible.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Kill any CoreSimulator processes.

2019-11-21  Pablo Saavedra  <psaavedra@igalia.com>

        Fix Tools/Scripts/run-javascriptcore-tests after r252490
        https://bugs.webkit.org/show_bug.cgi?id=204452

        Rubber-stamped by Philippe Normand

        Regression introduced in:

          results.webkit.org: Report JSC tests to the results database
          https://bugs.webkit.org/show_bug.cgi?id=204091
          <rdar://problem/49778900>

        WebKitGTK and WPE build environment is defined by the dependencies
        policy document [1] as a Debian Stable. For Debian the `uname` binary
        is installed in the `/bin/` directory and this directory is included
        in the `$PATH` for any regular or system user. This fix removes the
        path for the `uname` command in the run-javascriptcore-tests script.
        
        [1] https://trac.webkit.org/wiki/WebKitGTK/DependenciesPolicy

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload):

2019-11-20  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Make usability test on booting simulators more robust
        https://bugs.webkit.org/show_bug.cgi?id=204423
        <rdar://problem/57364735>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Use regular expressions to find home-screen service.

2019-11-20  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Do not create global SystemHost objects
        https://bugs.webkit.org/show_bug.cgi?id=204426

        Reviewed by Aakash Jain.

        If created, SystemHost objects should be created on-demand, not globally
        shared between all instances of a function.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):
        (SimulatedDeviceManager.available_devices):
        (SimulatedDeviceManager.device_by_filter):
        (SimulatedDeviceManager._create_or_find_device_for_request):
        (SimulatedDeviceManager._boot_device):
        (SimulatedDeviceManager.device_count_for_type):
        (SimulatedDeviceManager.initialize_devices):
        (SimulatedDeviceManager.max_supported_simulators):
        (SimulatedDeviceManager.swap):
        (SimulatedDeviceManager.tear_down):

2019-11-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Correct argument types in UIScriptController::activateDataListSuggestion after r252062
        https://bugs.webkit.org/show_bug.cgi?id=203116

        Reviewed by Tim Horton.

        Use `unsigned` to represent `unsigned long` arguments declared in the IDL.

        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::activateDataListSuggestion):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):

2019-11-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        run-api-tests reports AssertionError os.pathsep not in value in _append_value_colon_separated in Cygwin Python
        https://bugs.webkit.org/show_bug.cgi?id=204400

        Reviewed by Jonathan Bedard.

        r249500 changed Port.environment_for_api_tests to use
        Port._append_value_colon_separated to append a build path to some
        enviroment variables. _append_value_colon_separated has a
        assertion to ensure the given value doesn't iclude ':'. However,
        Port._build_path contains ':' on Cygwin Python.

        Those enviroment variables are only for macOS and iOS. Move the code to darwin.py.

        * Scripts/webkitpy/port/base.py:
        (Port.environment_for_api_tests):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.environment_for_api_tests):

2019-11-20  Jonathan Bedard  <jbedard@apple.com>

        [WebGL] Add `--webgl-test-suite` flag for run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=204327

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Add the --webgl macro command, which is the equivalent of:
        'Run-webkit-tests --additional-expectations=LayoutTests/webgl/TestExpectations webgl'

2019-11-20  ChangSeok Oh  <changseok@webkit.org>

        Reactivate my committer status.

        Unreviewed.

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

2019-11-20  Matt Lewis  <jlewis3@apple.com>

        Add trigger for WebGL bot to config.

        RS config fix by Jonathan Bedard.

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

2019-11-19  Matt Lewis  <jlewis3@apple.com>

        Bring up WebGL Test Queue.
        https://bugs.webkit.org/show_bug.cgi?id=204374

        Reviewed by Jonathan Bedard.

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

2019-11-20  Jonathan Bedard  <jbedard@apple.com>

        [EWS] iOS layout-tests fails with 30+ failures on re-run and on clean-tree
        https://bugs.webkit.org/show_bug.cgi?id=204409

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPerlTests.evaluateCommand): Add killOldProcesses before running test suite.
        (RunJavaScriptCoreTests.evaluateCommand): Ditto.
        (ReRunJavaScriptCoreTests.evaluateCommand): Ditto.
        (RunWebKitTests.evaluateCommand): Ditto.
        (ReRunWebKitTests.evaluateCommand): Ditto.
        (RunAPITests.evaluateCommand): Ditto.
        (ReRunAPITests.evaluateCommand): Ditto.

2019-11-20  Jonathan Bedard  <jbedard@apple.com>

        kill-old-processes: Log currently running processes
        https://bugs.webkit.org/show_bug.cgi?id=204415

        Unreviewed infrastructure management.

        * BuildSlaveSupport/kill-old-processes:
        (main): Log 'ps aux' for Mac and Linux.

2019-11-19  Saam Barati  <sbarati@apple.com>

        Remove runNullishAwareOperatorsEnabled

        Rubber-stamped by Keith Miller.

        * Scripts/run-jsc-stress-tests:

2019-11-19  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Have build.webkit.org report JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204364

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests):
        (RunWebKitTests):
        (RunAPITests):
        (RunPythonTests):
        (RunLLINTCLoopTests):
        (Run32bitJSCTests):

2019-11-19  Aakash Jain  <aakash_jain@apple.com>

        Disable reporting EWS test failures from clean-tree to results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=204369

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTestsWithoutPatch):
        (RunAPITestsWithoutPatch.evaluateCommand):
        (RunWebKitTestsWithoutPatch.start): Deleted.
        (RunAPITestsWithoutPatch.start): Deleted.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.
        * BuildSlaveSupport/ews-build/loadConfig.py:

2019-11-19  Brian Burg  <bburg@apple.com>

        [Cocoa] Add WKUIDelegate SPI to inform clients when a _WKInspector attaches to a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=204300
        <rdar://problem/57136993>

        Reviewed by Devin Rousso.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[InspectorDelegate _webView:didAttachInspector:]):
        (TEST): Add new test to ensure the delegate is called as expected.

2019-11-19  Sihui Liu  <sihui_liu@apple.com>

        Update expectations for bufferedAmount-unchanged-by-sync-xhr.any.worker.html
        https://bugs.webkit.org/show_bug.cgi?id=204313

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):

2019-11-19  Paulo Matos  <pmatos@igalia.com>

        Setup EWS queues for JSConly 32bits ARMv7 and MIPSel
        https://bugs.webkit.org/show_bug.cgi?id=203946

        Reviewed by Aakash Jain.

        Naming of queues follow old EWS: jsc-mips for MIPSel
        and jsc-armv7 for ARMv7.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.start):
        (PrintConfiguration.run):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.test_remote_success):

2019-11-18  John Wilander  <wilander@apple.com>

        Check if ITP is on before applying third-party cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=204322
        <rdar://problem/57120772>

        Reviewed by Chris Dumez and Alexey Proskuryakov.

        This is test infrastructure to allow a layout test to
        disable ITP in the network process.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsEnabled):
        (WTR::TestRunner::setStatisticsDebugMode):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsEnabled):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-11-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] kill-old-processes should kill WebKitWebProcess.exe and WebKitNetworkProcess.exe
        https://bugs.webkit.org/show_bug.cgi?id=204337

        Reviewed by Ross Kirsling.

        * BuildSlaveSupport/kill-old-processes:
        (main): Removed WebKit2WebProcess.exe, and added WebKitWebProcess.exe and WebKitNetworkProcess.exe to
        tasksToKillWin.

2019-11-18  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Support run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=204252

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._collect_tests): Use items over iteritems.
        (Manager._print_tests_result_with_status): Use compatible iteritems.
        (Manager.run): Use range over xrange, use compatible iteritems.
        * Scripts/webkitpy/api_tests/runner.py:
        (Runner.run): Use compatible iteritems.
        (Runner.result_map_by_status): Ditto.
        (_Worker._run_single_test): Server process returns byte arrays, not strings.
        (_Worker.handle): Use items over iteritems, use range over xrange.
        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.run): Use range over xrange.
        (_MessagePool._start_workers): Ditto.
        * Scripts/webkitpy/common/multiprocessing_bootstrap.py: Remove version check.
        * Scripts/webkitpy/port/base.py:
        (Port.check_api_test_build):Use items over iteritems.
        (Port.commits_for_upload): Ditto.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._reset): Use byte array over string.
        (ServerProcess._pop_stdout_line_if_ready): Check for bytes newline.
        (ServerProcess._pop_stderr_line_if_ready): Ditto.

2019-11-18  Andres Gonzalez  <andresg_22@apple.com>

        Run AccessibilityController::rootElement on secondary thread to simulate HIServices during LayoutTests.
        https://bugs.webkit.org/show_bug.cgi?id=204226

        Reviewed by Chris Fleizach.

        HIServices _AXUIElementUseSecondaryAXThread and _AXUIElementRequestServicedBySecondaryAXThread
        do not work for WebKitTestRunner since this is calling directly into
        WebCore/accessibility via JavaScript without going through HIServices.
        Thus to simulate the behavior of HIServices, AccessibilityController is
        spawning a secondary thread to service the JavaScript requests.
        The very first request needs to be serviced in the main thread,
        and all subsequent requests in the secondary thread. this is what
        the behavior would be if using HIServices.
        Once the IsolatedTree would be enabled, the first request has to be
        served in the main thread in order to build the AXIsolatedTree.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement):
        (WTR::AXThread::AXThread):
        (WTR::AXThread::isCurrentThread):
        (WTR::AXThread::dispatch):
        (WTR::AXThread::dispatchBarrier):
        (WTR::AXThread::singleton):
        (WTR::AXThread::createThreadIfNeeded):
        (WTR::AXThread::dispatchFunctionsFromAXThread):
        (WTR::AXThread::initializeRunLoop):
        (WTR::AXThread::wakeUpRunLoop):
        (WTR::AXThread::threadRunLoopSourceCallback):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AXThread::initializeRunLoop):
        (WTR::AXThread::wakeUpRunLoop):
        (WTR::AXThread::threadRunLoopSourceCallback):

2019-11-18  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Uncollapsed failures shouldn't include runs with no failures
        https://bugs.webkit.org/show_bug.cgi?id=204315

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/failure_context.py:
        (FailureContext): Do not include test runs which have no failed tests.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py:
        (FailureContextTest):
        (FailureContextTest.test_no_failures):

2019-11-18  Aakash Jain  <aakash_jain@apple.com>

        Dedicate ews116 to macOS-High-Sierra-Debug-Build-EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=204256

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-11-18  Chris Dumez  <cdumez@apple.com>

        TestWebKitAPI.ProcessSwap.QuickBackForwardNavigationWithPSON is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=199645
        <rdar://problem/52856112>

        Reviewed by Alex Christensen.

        Make sure the test waits for the history navigations to complete before checking the
        back/forward list.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-11-18  Keith Rollin  <krollin@apple.com>

        Move jsc from Resources to Helpers
        https://bugs.webkit.org/show_bug.cgi?id=203970
        <rdar://problem/55917748>

        Reviewed by Keith Miller.

        'jsc' is a supporting application or tool, not a resource. As such, it
        should go into Helpers, per
        <https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG201>

        * Scripts/run-jsc-stress-tests:
        * Scripts/run-layout-jsc:
        * Scripts/sunspider-compare-results:
        (pathToSystemJSC):
        * Scripts/test262/Runner.pm:
        (getBuildPath):
        * Scripts/webkitdirs.pm:
        (jscPath):

2019-11-18  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.layout_tests.views
        https://bugs.webkit.org/show_bug.cgi?id=204227

        Reviewed by Aakash Jain.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.views.
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_unexpected_results): Use compatible iteritems.
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:
        (BuildBotPrinterTests.get_printer): Use compatible StringIO object.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.__init__): Use maxsize instead of maxint.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.setUp): Use compatible StringIO, remove buflist.
        (RegularTest.test_logging_not_included): Ditto.
        (RegularTest._basic): Remove buflist.
        (RegularTest.test_basic): Compare against stream value instead of buflist.
        (RegularTest._log_after_update): Remove buflist.
        (RegularTest.test_log_after_update): Compare against stream value
        instead of buflist.
        (RegularTest.test_log_args): Ditto.
        (RegularTest.test_unicode): We can't join unicode strings and standard strings
        in Python 2.
        (RegularTest.test_stream_with_encoding): Use compatible StringIO, Python 3 uses
        unicode strings.
        (TtyTest.test_basic): Compare against stream value instead of buflist.
        (TtyTest.test_log_after_update): Ditto.
        (VerboseTest.test_basic): Ditto.
        (VerboseTest.test_log_after_update): Ditto.
        (VerboseTest.test_log_args): Ditto.
        (VerboseWithOutTimestamp.test_basic): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.assertWritten): Use stream value instead of buflist.
        (Testprinter.reset): Use Python 3 compatible steam reset.
        (Testprinter.get_printer): Use compatible StringIO.
        (Testprinter.test_print_one_line_summary): Compare against stream value instead
        of buflist.
        (Testprinter.test_test_status_line): Ditto.
        (Testprinter.test_print_found): Ditto.

2019-11-18  Simon Fraser  <simon.fraser@apple.com>

        Fix alpha value rounding to match the CSS Color spec
        https://bugs.webkit.org/show_bug.cgi?id=203597
        <rdar://problem/56728546>

        Reviewed by Tim Horton.

        Fix the test for rounding.

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

2019-11-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [UIWKDocumentContext] Add the ability to request all marked text rects
        https://bugs.webkit.org/show_bug.cgi?id=204278
        <rdar://problem/56527803>

        Reviewed by Tim Horton.

        Add an API test to exercise the new request option.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[UIWKDocumentContext markedTextRects]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-15  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Audio capture fails when a track is unmuted
        https://bugs.webkit.org/show_bug.cgi?id=204202
        <rdar://problem/57005820>

        Reviewed by Jer Noble.
        
        Make WebKit2.CaptureMute failures easier to diagnose.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::wkMediaCaptureStateString):
        (TestWebKitAPI::waitUntilCaptureState):
        (TestWebKitAPI::TEST):

2019-11-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Apple] Enable variation fonts on all Apple platforms
        https://bugs.webkit.org/show_bug.cgi?id=198100

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-11-15  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Update windows bots in config.json
        https://bugs.webkit.org/show_bug.cgi?id=204245

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-11-15  Aakash Jain  <aakash_jain@apple.com>

        Windows EWS should not upload archives
        https://bugs.webkit.org/show_bug.cgi?id=204229

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

2019-11-15  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Report JSC tests to the results database
        https://bugs.webkit.org/show_bug.cgi?id=204091
        <rdar://problem/49778900>

        Reviewed by Aakash Jain.

        Upload results to the specified results database.

        DEMONSTRATION OF FAILURE IN EWS BEHAVIOR, DO NOT LAND!

        * Scripts/run-javascriptcore-tests:
        (runTest): Parse binary output to mark individual tests as passing
        or failing.
        (uploadConfiguration): Return a hash map representing the configuration
        For this specific test run.
        (uploadResults): If a report URL is defined, upload test results to that URL.
        * Scripts/webkitdirs.pm:
        (splitVersionString): splitVersionString is supposed to be a generally used
        function, so should not set a global variable.
        (determineOSXVersion): Remove newline from version number.

2019-11-15  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests loads committers.py 4 times, taking about 40ms
        https://bugs.webkit.org/show_bug.cgi?id=204211

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry): Don't create CommitterList on import.
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        (CommitInfo.__init__): Ditto.

2019-11-15  Aakash Jain  <aakash_jain@apple.com>

        [ews] Perform validation of patch before retrying JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204222

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.evaluateCommand): Add a ValidatePatch step before retrying.
        (ReRunJavaScriptCoreTests.evaluateCommand): Ditto.

2019-11-14  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.layout_tests.layout_package
        https://bugs.webkit.org/show_bug.cgi?id=204212

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.layout_package.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (convert_trie_to_flat_paths): Use compatible iteritems.
        (JSONResultsGenerator._insert_failure_summaries): Use compatible iterkeys.
        (JSONResultsGenerator._convert_json_to_current_version): Use compatible iteritems.
        (JSONResultsGenerator._convert_tests_to_trie): Use compatible iterkeys.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest._verify_json_results): Use items instead of iteritems.
        (JSONGeneratorTest.test_test_timings_trie): Python 3's json decoder is sensitive to ordering.

2019-11-14  Alex Christensen  <achristensen@webkit.org>

        Flaky API Test TestWebKitAPI.ServiceWorkers.ThrottleCrash
        https://bugs.webkit.org/show_bug.cgi?id=203734

        Reviewed by Youenn Fablet.

        Some API tests using TCPServer have multiple concurrent HTTP requests in flight at the same time.
        When this happens, sometimes NSURLSession will make multiple TCP connections to the same server.
        TCPServer is not the right tool for this because it handles all its connections manually.
        To make the test server agnostic to how many connections are initiated, I introduce HTTPServer,
        which uses the Network framework to handle as many responses and as many connections as happen.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h: Added.
        (TestWebKitAPI::HTTPServer::HTTPResponse::HTTPResponse):
        * TestWebKitAPI/cocoa/HTTPServer.mm: Added.
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        (TestWebKitAPI::HTTPServer::port const):
        (TestWebKitAPI::HTTPServer::request const):
        * TestWebKitAPI/config.h:

2019-11-14  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.layout_tests.servers
        https://bugs.webkit.org/show_bug.cgi?id=204209

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.servers.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Use compatible iteritems.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config): Ditto.

2019-11-14  Megan Gardner  <megan_gardner@apple.com>

        Fix another build error from r252449
        https://bugs.webkit.org/show_bug.cgi?id=204173

        Unreviewed Build Fix for r252449

        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-14  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.style
        https://bugs.webkit.org/show_bug.cgi?id=203762

        Reviewed by Stephanie Lewis.

        * Scripts/check-webkit-style: Remove Python 2 version check.
        * Scripts/test-webkitpy-python3: Add webkitpy.style.
        * Scripts/webkitpy/style/checker.py: Use explicit imports.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_max_reports_per_category): Use keys() over iterkeys.
        * Scripts/webkitpy/style/checkers/contributors.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._should_log_linter_warning): Use compatible iteritems.
        * Scripts/webkitpy/style/error_handlers_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/filter.py:
        (FilterConfiguration._get_path_specific_lower): Return list instead of iterator.
        (FilterConfiguration._filter_from_path): Avoid confusion with filter builtin.
        * Scripts/webkitpy/style/filter_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/main.py:
        (CheckWebKitStyle._engage_awesome_stderr_hacks): No reason to apply encoding to stderr
        in Python 3.
        * Scripts/webkitpy/style/main_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/patchreader.py:
        (PatchReader.check): Ensure that the provided patch is a string, use items over iteritems.

2019-11-14  Megan Gardner  <megan_gardner@apple.com>

        Fix build error from r252449
        https://bugs.webkit.org/show_bug.cgi?id=204173

        Reviewed by Wenson Hsieh.

        Include needed header for all platforms, not just iPhone.

        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-14  Brady Eidson  <beidson@apple.com>

        Summary: WKWebView is missing an equivalent to WebKit 1's API to set the media style.
        <rdar://problem/49862107> and https://bugs.webkit.org/show_bug.cgi?id=203974

        Reviewed by Alex Christensen.

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

2019-11-14  Brady Eidson  <beidson@apple.com>

        pageZoom/setPageZoom: should not be in a Mac-only part of WKWebView.mm
        https://bugs.webkit.org/show_bug.cgi?id=204128

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PageZoom.mm: Added.
        (TestWebKitAPI::getClientWidth):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView waitUntilClientWidthIs:]):

2019-11-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Clarify webkitpy/style/optparser_unittest.py by removing parse variables
        https://bugs.webkit.org/show_bug.cgi?id=204183

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/style/optparser_unittest.py:
        (ArgumentParserTest.test_parse_documentation): Remove parse variable.
        (ArgumentParserTest.test_parse_bad_values): Ditto.
        (ArgumentParserTest.test_parse_default_arguments): Ditto.
        (ArgumentParserTest.test_parse_explicit_arguments): Ditto.
        (ArgumentParserTest.test_parse_files): Ditto.

2019-11-14  Aakash Jain  <aakash_jain@apple.com>

        Add support for remotes file for EWS builders (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=203899

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Passed remotes parameter to JSCTestsFactory as well.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: Updated unit-test.

2019-11-14  Aakash Jain  <aakash_jain@apple.com>

        [ews] Enable JSC queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204179

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the scheduler for JSC queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled JSC queue bubble on new EWS.
        * QueueStatusServer/config/queues.py: Removed JSC queue from old EWS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Removed JSC queue from bot-watcher's dashboard.

2019-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Add support for Clipboard.write()
        https://bugs.webkit.org/show_bug.cgi?id=204078
        <rdar://problem/57087756>

        Reviewed by Ryosuke Niwa.

        Make the LocalPasteboard in WebKitTestRunner compatible with calls to -writeObjects: with a list of pasteboard
        items. Currently, attempts to -writeObjects: result in a crash, since NSPasteboard code will attempt to
        communicate with pasted and fail. We fix this by implementing -writeObjects: and storing the array of
        NSPasteboardItems in LocalPasteboard, the same way we do in DumpRenderTree's LocalPasteboard implementation.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):

        Factor out logic to clear the pasteboard's content into a separate helper, and clear out the list of saved
        pasteboard items here as well.

        (-[LocalPasteboard clearContents]):

        Implement -clearContents in DumpRenderTree's LocalPasteboard, so that we can test Clipboard.write() in WebKit1.

        (-[LocalPasteboard writeObjects:]):

        Also make it so that we save any NSPasteboardItems we write to the local pasteboard, so that we can return them
        later in -pasteboardItems.

        (-[LocalPasteboard pasteboardItems]):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (-[LocalPasteboard initWithName:]):

        Clean up this code a bit by replacing manual reference counting for `typesArray` and its neighboring data
        structures with `RetainPtr`. Additionally, underscore-prefix the instance variables on LocalPasteboard to match
        most of the other Objective-C objects in WebKit.

        (-[LocalPasteboard name]):
        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):

        Clear out the NSPasteboardItem list here too.

        (-[LocalPasteboard clearContents]):
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):
        (-[LocalPasteboard changeCount]):
        (-[LocalPasteboard types]):
        (-[LocalPasteboard availableTypeFromArray:]):
        (-[LocalPasteboard setData:forType:]):
        (-[LocalPasteboard dataForType:]):
        (-[LocalPasteboard pasteboardItems]):
        (-[LocalPasteboard writeObjects:]):

        Implement this by porting over the implementation that currently exists in DumpRenderTree. Like in
        DumpRenderTree, we want to also save the NSPasteboardItem array we're given here, so that we can return it in
        -pasteboardItems.

        (-[LocalPasteboard dealloc]): Deleted.

2019-11-13  Megan Gardner  <megan_gardner@apple.com>

        Cleanup UIKitSPI for Testing
        https://bugs.webkit.org/show_bug.cgi?id=204173

        Reviewed by Simon Fraser.

        Remove old staging for UIKit APIs that should not be needed now.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-13  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to Analyze JSC Tests Results
        https://bugs.webkit.org/show_bug.cgi?id=204174

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunJavaScriptCoreTests.evaluateCommand): invoke AnalyzeJSCTestsResults step.
        (AnalyzeJSCTestsResults): Build step to analyze layout-test results.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeJSCTestsResults):
        (TestAnalyzeJSCTestsResults.test_single_new_stress_failure): Added unit-test.
        (TestAnalyzeJSCTestsResults.test_single_new_binary_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_multiple_new_stress_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_multiple_new_binary_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_new_stress_and_binary_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_stress_failure_on_clean_tree): Ditto.
        (TestAnalyzeJSCTestsResults.test_binary_failure_on_clean_tree): Ditto.
        (TestAnalyzeJSCTestsResults.test_stress_and_binary_failure_on_clean_tree): Ditto.
        (TestAnalyzeJSCTestsResults.test_flaky_stress_and_binary_failures): Ditto.
        (TestAnalyzeJSCTestsResults.test_flaky_and_consistent_stress_failures): Ditto.
        (TestAnalyzeJSCTestsResults.test_flaky_and_consistent_failures_with_clean_tree_failures): Ditto.

2019-11-13  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.layout_tests.controllers
        https://bugs.webkit.org/show_bug.cgi?id=204180

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.controllers.
        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.__init__): Use Python 3 queue syntax.
        (_MessagePool._can_pickle): Use Python 3 pickle syntax.
        (_MessagePool._loop): Use Python 3 queue syntax.
        (_Worker.run): Use Python 3 queue syntax.
        (_Worker._raise): Python 2 and Python 3 have different semantics for raising an exception
        With a stack trace. However, 'raise' will raise the exception we are in the process of capturing,
        Which is exactly what we want in this case.
        * Scripts/webkitpy/common/read_checksum_from_png.py:
        (read_checksum): Standardize checksum as a string.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.write_binary_file): Binary files should be written with bytes, not strings.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.write_binary_file): Binary files should be written with bytes, not strings.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py: assertItemsEqual is not
        Defined in Python 3.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._do_post_tests_work): Use compatible iteritems.
        (Sharder._shard_by_directory): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Use compatible itervalues.
        (Manager._look_for_new_crash_logs): Use Python 3 item iteration.
        (Manager._results_to_upload_json_trie): Use compatible itervalues.
        (Manager._stats_trie): Use compatible iteritems.
        * Scripts/webkitpy/port/base.py:
        (Port.expected_text): Be explicit about decoding text expectations.
        * Scripts/webkitpy/port/mock_drt.py:
        (MockDRT.write_test_output):

2019-11-13  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION: WKWebView navigation fails when navigating from about:blank
        https://bugs.webkit.org/show_bug.cgi?id=203852

        Reviewed by Brent Fulgham.

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

2019-11-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][DumpRenderTree][WebKitTestRunner] eventSender.keyDown should support function keys
        https://bugs.webkit.org/show_bug.cgi?id=204146

        Reviewed by Ross Kirsling.

        Changed eventSender.keyDown of DRT and WTR to support sending
        function keys.

        In addition to that, this change set correct scan code to LPARAM
        for all key events. Unfortunately, there is no API to get a
        correct extended scan code from a virtual key because
        MapVirtualKey and MapVirtualKeyEx doesn't work as expected.
        makeKeyDataForScanCode turns on KF_EXTENDED flag for some keys
        explicitly for the workaround.
        <http://www.setnode.com/blog/mapvirtualkey-getkeynametext-and-a-story-of-how-to/>

        * DumpRenderTree/win/EventSender.cpp:
        (makeKeyDataForScanCode):
        (keyDownCallback):
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::makeKeyDataForScanCode):
        (WTR::EventSenderProxy::keyDown):

2019-11-13  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.style.checkers
        https://bugs.webkit.org/show_bug.cgi?id=203761

        Rubber-stamped by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.style.checkers.
        * Scripts/webkitpy/port/builders.py:
        (all_port_names): Convert map to a list before concatenating.
        * Scripts/webkitpy/style/checkers/changelog.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/cmake.py: Ditto.
        * Scripts/webkitpy/style/checkers/cmake_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/common_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/contributors.py: Ditto.
        * Scripts/webkitpy/style/checkers/cpp.py:
        (Position): Add rich comparison functions.
        (check_for_copyright): Use range instead of xrange.
        (detect_functions): Ditto.
        (check_language): Use r-string.
        (check_for_include_what_you_use): Use range instead of xrange.
        (_process_lines): Convert iterator to list, use range instead of xrange.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest): Be explicit about bytes vs strings.
        * Scripts/webkitpy/style/checkers/js.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/js_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/jsonchecker.py: Ditto.
        (JSONFeaturesChecker.check):
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Ditto.
        (JSONCheckerTest.test_conflict_marker): Differentiate between Python 2 and 3
        json parsers.
        * Scripts/webkitpy/style/checkers/jstest_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/messagesin.py: Ditto.
        * Scripts/webkitpy/style/checkers/messagesin_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/png_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/python.py:
        (PythonChecker.check): Only run pylint in Python 2.
        (PythonChecker._check_pylint): Use r string.
        (Pylinter.run): Surpress logging from Pylint.
        * Scripts/webkitpy/style/checkers/python_unittest.py: Use explicit imports.
        (PythonCheckerTest.test_check): Add FIXME for running pylint in Python 3.
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py:
        * Scripts/webkitpy/style/checkers/python_unittest_input.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/text.py: Ditto.
        * Scripts/webkitpy/style/checkers/text_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/xml_unittest.py: Ditto.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pep8): Update pep8 version.

2019-11-13  Jer Noble  <jer.noble@apple.com>

        Link mediaDataLoadsAutomatically setting to AutoplayPolicy
        https://bugs.webkit.org/show_bug.cgi?id=201738
        <rdar://problem/55315194>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/media-loading.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):

2019-11-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        test262-runner: use NUMBER_OF_PROCESSORS and stop multiplying the number of cores.
        https://bugs.webkit.org/show_bug.cgi?id=204154

        Reviewed by Ross Kirsling.

        We have enabled running test262 on GTK and WPE test bots on r252362
        But it seems this test262 runner is not respecting the environment
        variable NUMBER_OF_PROCESSORS. We set that on the bot environments
        to tell each worker how much parallelism it should use.

        Instead this runner was using all the system cores (which on some
        cases is 256) and that was causing issues on other containers/workloads
        running on the same system at the same time.

        This environment variable is understood by all webkit-related test scripts.
        It should be accepted also by this test262 runner script.

        On top of that, this patch removes the multiplication that is done
        when the number of parallel jobs is not specified and its calculated
        from the available cores of the system. On one hand there is no
        written motivation for this multiplication behaviour, and on the other
        hand there is evidence that it doesn't improve performance.

        * Scripts/test262/Runner.pm:
        (getProcesses):

2019-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Fix build
        https://bugs.webkit.org/show_bug.cgi?id=204136

        Reviewed by Alex Christensen.

        Remove deprecation warnings.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController validateMenuItem:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        (-[DragInfo ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[DragInfo draggedImage]): Deleted.

2019-11-13  Megan Gardner  <megan_gardner@apple.com>

        check-webkit-style: fix false errors for obj-c method calls in range-based for statements using colon syntax
        https://bugs.webkit.org/show_bug.cgi?id=204142

        Reviewed by Jonathan Bedard.

        Allow for the existance of an obj-c method call in a range-based for statement that also uses colons.
        Do not allow colons between square brackets to trigger the error.
        Also add a test for this specific case.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_spacing):

2019-11-13  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Parse jsc_results.json for JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204090

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests):
        (RunJavaScriptCoreTests.start): Initialize log_observer for json.
        (RunJavaScriptCoreTests.commandComplete): Parse jsc_results.json and set properties accordingly.
        (RunJavaScriptCoreTests.getResultSummary): Update the build-step summary string.
        (ReRunJavaScriptCoreTests):
        (RunJSCTestsWithoutPatch):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.setUp): Added sample json files for testing.
        (TestRunJavaScriptCoreTests.configureStep):
        (TestRunJavaScriptCoreTests.test_single_stress_test_failure): Added unit-tests.
        (TestRunJavaScriptCoreTests.test_lot_of_stress_test_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_masm_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_b3_and_stress_test_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_dfg_air_and_stress_test_failure): Ditto.

2019-11-13  Youenn Fablet  <youenn@apple.com>

        Take service worker assertions based on client processes assertion states
        https://bugs.webkit.org/show_bug.cgi?id=204119

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Add tests checking service worker process assertion state.

2019-11-13  Aakash Jain  <aakash_jain@apple.com>

        Make webkitperl EWS robust against flakiness in webkitperl tests
        https://bugs.webkit.org/show_bug.cgi?id=204155

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPerlTests): Set haltOnFailure and flunkOnFailure to false.
        (RunWebKitPerlTests.evaluateCommand): Add re-run step in case of failure.
        (ReRunWebKitPerlTests):
        (ReRunWebKitPerlTests.evaluateCommand): Overrided this to avoid running this step again.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestReRunJavaScriptCoreTests): Added unit-tests.

2019-11-13  Aakash Jain  <aakash_jain@apple.com>

        Flaky API Test TestWebKitAPI.ServiceWorkers.ThrottleCrash
        https://bugs.webkit.org/show_bug.cgi?id=203734
        <rdar://problem/56814638>

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: Disabled the flaky test for now.

2019-11-13  Aakash Jain  <aakash_jain@apple.com>

        Flaky API Test TestWebKitAPI.WebKit.ApplicationCacheDirectories
        https://bugs.webkit.org/show_bug.cgi?id=203732
        <rdar://problem/56814641>

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm: Disabled the flaky test for now.

2019-11-13  Rob Buis  <rbuis@igalia.com>

        Support stale-while-revalidate cache strategy
        https://bugs.webkit.org/show_bug.cgi?id=201461

        Reviewed by Youenn Fablet.

        Enable stale-while-revalidate for the test runner.

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

2019-11-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView does not respect system spellchecking preference
        https://bugs.webkit.org/show_bug.cgi?id=204100
        <rdar://problem/56653808>

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/cocoa/UIScriptControllerCocoa.h:
        * DumpRenderTree/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::UIScriptControllerCocoa):
        (WTR::UIScriptControllerCocoa::setContinuousSpellCheckingEnabled):

        Add a new UIScriptControllerCocoa subclass for DumpRenderTree. For now, this will just contain the cross-
        platform implementation of setContinuousSpellCheckingEnabled.

        * DumpRenderTree/ios/UIScriptControllerIOS.h:
        (WTR::UIScriptControllerIOS::UIScriptControllerIOS):
        * DumpRenderTree/mac/UIScriptControllerMac.h:
        (WTR::UIScriptControllerMac::UIScriptControllerMac):

        Make both -IOS and -Mac subclasses inherit from UIScriptControllerCocoa.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setContinuousSpellCheckingEnabled):

        Add a new script controller method to change the platform spell checking preference during a layout test.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

        Adjust this to explicitly turn continuous spellchecking on or off based on the `shouldShowSpellCheckingDots`
        test option flag, instead of toggling it on and then off when resetting state before and after the layout test.

        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setContinuousSpellCheckingEnabled):

2019-11-12  Aakash Jain  <aakash_jain@apple.com>

        Update unit-tests for JSC EWS
        https://bugs.webkit.org/show_bug.cgi?id=204123

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.configureStep):
        (TestRunJavaScriptCoreTests.test_success): Updated platform to mac-highsierra.
        (TestRunJavaScriptCoreTests.test_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_remote_success): Unit-test for jsc-only platform.
        (TestReRunJavaScriptCoreTests): Automatically run all unit-tests from TestRunJavaScriptCoreTests class.

2019-11-12  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Add 'test262-test' step to GTK and WPE build bots
        https://bugs.webkit.org/show_bug.cgi?id=204063

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2019-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update W3C WebDriver imported tests.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mozlog): Update the mozlog version and add mozterm that is ow required by mozlog.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__): Add alternate domain for cross-origin checks.

2019-11-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] UIScriptController::zoomToScale not implemented
        https://bugs.webkit.org/show_bug.cgi?id=180424

        Reviewed by Alex Christensen.

        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/UIScriptControllerWin.cpp: Added.
        (WTR::UIScriptController::create):
        (WTR::UIScriptControllerWin::doAsyncTask):
        (WTR::UIScriptControllerWin::zoomToScale):
        (WTR::UIScriptControllerWin::zoomScale const):
        * DumpRenderTree/win/UIScriptControllerWin.h: Added.
        (WTR::UIScriptControllerWin::UIScriptControllerWin):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/PlatformWin.cmake:
        * WebKitTestRunner/win/UIScriptControllerWin.cpp: Added.
        (WTR::UIScriptController::create):
        (WTR::UIScriptControllerWin::doAsyncTask):
        (WTR::UIScriptControllerWin::zoomToScale):
        (WTR::UIScriptControllerWin::zoomScale const):
        * WebKitTestRunner/win/UIScriptControllerWin.h: Added.
        (WTR::UIScriptControllerWin::UIScriptControllerWin):

2019-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: implement new window command
        https://bugs.webkit.org/show_bug.cgi?id=203994

        Reviewed by Carlos Alberto Lopez Perez.

        Add support for new window command to MiniBrowser and a test case to check the new API to unit tests.

        * MiniBrowser/gtk/BrowserWindow.c:
        (findActiveWindow):
        (browser_window_get_or_create_web_view_for_automation):
        (browser_window_create_web_view_in_new_tab_for_automation):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createWebViewForAutomationInWindowCallback):
        (createWebViewForAutomationInTabCallback):
        (automationStartedCallback):
        (createWebViewForAutomationCallback): Deleted.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):

2019-11-11  Alex Christensen  <achristensen@webkit.org>

        Add SPI to access a WebsiteDataStore without instantiating it, and its configuration
        https://bugs.webkit.org/show_bug.cgi?id=204089

        Reviewed by Tim Horton.

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

2019-11-11  Ross Kirsling  <ross.kirsling@sony.com>

        UTC offset for Samoa is miscalculated when !HAVE(TIMEGM)
        https://bugs.webkit.org/show_bug.cgi?id=204032

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:
        Allow environment variables to be passed to "complex" tests.

2019-11-11  Dean Jackson  <dino@apple.com>

        Regression r252309: API Test TestWebKitAPI._WKActivatedElementInfo.InfoForLinkAroundImage is failing consistently
        https://bugs.webkit.org/show_bug.cgi?id=204058
        <rdar://problem/57056000>

        Unreviewed.

        Remove test that looks at screen dimensions, because it fails on iPad.

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

2019-11-11  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Use named arguments in factories.py
        https://bugs.webkit.org/show_bug.cgi?id=204071

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__):
        (StyleFactory.__init__):
        (WatchListFactory.__init__):
        (BindingsFactory.__init__):
        (WebKitPerlFactory.__init__):
        (WebKitPyFactory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (JSCTestsFactory.__init__):
        (WindowsFactory.__init__):
        (WinCairoFactory.__init__):
        (GTKFactory.__init__):
        (WPEFactory.__init__):
        (ServicesFactory.__init__):

2019-11-11  Aakash Jain  <aakash_jain@apple.com>

        EWS should retry build in case of kill-old-processes failure
        https://bugs.webkit.org/show_bug.cgi?id=203858

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (KillOldProcesses.evaluateCommand): Retry the build in case of failure.
        (KillOldProcesses.getResultSummary): Update the build-step summary string.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-11-09  Dean Jackson  <dino@apple.com>

        Clicky Orbing support.apple.com categories shows a PNG instead of the web page preview, tapping loads image asset only instead of web page
        https://bugs.webkit.org/show_bug.cgi?id=204037
        <rdar://55614939>

        Reviewed by Simon Fraser.

        New tests for a link wrapping an image, and the ordering of API and SPI.

        Rename these tests so that they are much easier to filter on the command line.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (TEST):
        (-[TestContextMenuAPIBeforeSPIUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate _webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate webView:contextMenuWillPresentForElement:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/image.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/link-with-image.html: Added.

2019-11-08  Brady Eidson  <beidson@apple.com>

        WKWebView Find-in-page API.
        <rdar://problem/46971112> and https://bugs.webkit.org/show_bug.cgi?id=203872

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPageAPI.mm: Added.
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView selectionRangeHasStartOffset:endOffset:]):

2019-11-08  Jonathan Bedard  <jbedard@apple.com>

        Simulators having trouble launching apps after booting
        <rdar://problem/57032042>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Temporarily increase timeout to help out bots.

2019-11-08  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: List failing tests for criteria
        https://bugs.webkit.org/show_bug.cgi?id=203905

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.__init__): Add FailureController and /failures endpoint.
        * resultsdbpy/resultsdbpy/controller/failure_controller.py: Added.
        (FailureController): Added FailureController object to drive /failure endpoint.
        (FailureController.__init__):
        (FailureController.failures): Return a json list of failures for a range.
        * resultsdbpy/resultsdbpy/controller/failure_controller_unittest.py: Added.
        (FailureControllerTest): Test the /failure API.
        (FailureControllerTest.setup_webserver):
        (FailureControllerTest.test_failures_collapsed):
        (FailureControllerTest.test_unexpected_failures_collapsed):
        (FailureControllerTest.test_failures):
        (FailureControllerTest.test_unexpected_failures):
        (FailureControllerTest.test_failure_by_time):
        * resultsdbpy/resultsdbpy/model/failure_context.py: Added.
        (FailureContext): Database access to tables recording test failures.
        (FailureContext.TestFailuresBase):
        (FailureContext.TestFailuresBase.unpack):
        (FailureContext.TestFailuresByCommit): Save test failures sorted by commit.
        (FailureContext.TestFailuresByStartTime): Save test failures sorted by start time.
        (FailureContext.UnexpectedTestFailuresByCommit): Save unexpected test failures
        sorted by commit.
        (FailureContext.UnexpectedTestFailuresByStartTime): Save unexpected test failures
        sorted by commit.
        (FailureContext.__init__):
        (FailureContext.register): Register test failures to each of the 4 tables for an upload.
        (FailureContext._failures): Return a list of test failures from a table.
        (FailureContext.failures_by_commit): Return a list of test failures from a table sorted
        by commit.
        (FailureContext.failures_by_start_time): Return a list of test failures from a table
        sorted by commit.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py: Added.
        (FailureContextTest):
        (FailureContextTest.init_database):
        (FailureContextTest.test_failures_collapsed):
        (FailureContextTest.test_unexpected_failures_collapsed):
        (FailureContextTest.test_failures):
        (FailureContextTest.test_unexpected_failures):
        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__):
        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Add documentation
        for the /failure endpoint.

2019-11-08  Alex Christensen  <achristensen@webkit.org>

        Fix flaky tests in http/tests/cache/disk-cache
        https://bugs.webkit.org/show_bug.cgi?id=203822

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setCacheModel):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-11-08  Aakash Jain  <aakash_jain@apple.com>

        Clicking on EWS status-bubble should open the results in new tab
        https://bugs.webkit.org/show_bug.cgi?id=204012

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:

2019-11-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Return NotAllowedError immediately for UI cancellations
        https://bugs.webkit.org/show_bug.cgi?id=203937
        <rdar://problem/56962420>

        Reviewed by Brent Fulgham.

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

2019-11-08  Aakash Jain  <aakash_jain@apple.com>

        [ews] Prioritize builders over testers when a bot is shared over multiple queues
        https://bugs.webkit.org/show_bug.cgi?id=204007

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        (prioritizeBuilders): Method to prioritize builder queues over tester queues.

2019-11-08  Alex Christensen  <achristensen@webkit.org>

        Build fix for platforms without WebRTC's SSL after r252185
        https://bugs.webkit.org/show_bug.cgi?id=203934

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        The new test uses TLS with the HTTPS proxy.  Don't compile it if we can't compile it.

2019-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add pointer lock permission request API
        https://bugs.webkit.org/show_bug.cgi?id=203896

        Reviewed by Adrian Perez de Castro.

        Handle pointer lock permission requests in MiniBrowser and add a new tests case to check the new API.

        * MiniBrowser/gtk/BrowserTab.c:
        (pointerLockMessageTimeoutCallback):
        (decidePermissionRequest):
        (browserTabFinalize):
        (browserTabConstructed):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewPointerLockPermissionRequest):
        (beforeAll):

2019-11-07  Chris Dumez  <cdumez@apple.com>

        TestController may reuse a view that used window.open(), which prevents process-swapping and causes flakiness
        https://bugs.webkit.org/show_bug.cgi?id=203981

        Reviewed by Ryosuke Niwa.

        Stop reusing WebViews that have created other WebViews (via window.open()) since this prevents process-swapping
        and may therefore cause flakiness (see Bug 203965).

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        * WebKitTestRunner/TestController.h:

2019-11-07  Aakash Jain  <aakash_jain@apple.com>

        [ews] rename RunJavaScriptCoreTestsToT to RunJSCTestsWithoutPatch
        https://bugs.webkit.org/show_bug.cgi?id=203959

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJSCTestsWithoutPatch): Renamed.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-11-07  Alex Christensen  <achristensen@webkit.org>

        Re-enable NSURLSession isolation after r252116
        https://bugs.webkit.org/show_bug.cgi?id=203934
        <rdar://problem/56921584>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (-[DataTaskIdentifierCollisionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[DataTaskIdentifierCollisionDelegate waitForMessages:]):
        (-[DataTaskIdentifierCollisionDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):

2019-11-07  Paulo Matos  <pmatos@igalia.com>

        Add support for remotes file for EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=203899

        Reviewed by Aakash Jain.

        Require to support builders that cross-compile and run tests on native machines
        through the use of --remote-config-file.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__):
        (StyleFactory.__init__):
        (WatchListFactory.__init__):
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.__init__):
        (ConfigureBuild.start):
        (RunJavaScriptCoreTests.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.test_remote_success):

2019-11-06  Antti Koivisto  <antti@apple.com>

        REGRESSION: [ iOS ] ( r251015 ) Layout Test fast/text/whitespace/pre-wrap-overflow-selection.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=203366
        <rdar://problem/56580680>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):

2019-11-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        WEBCORE_TESTSUPPORT_EXPORT should be used only for WebCoreTestSupport, not for WebCore
        https://bugs.webkit.org/show_bug.cgi?id=203876

        Reviewed by Ross Kirsling.

        * TestWebKitAPI/win/TestWebKitAPIPrefix.h:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        Define WEBCORE_TESTSUPPORT_EXPORT emtpy.

2019-11-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] DumpRenderTree.exe and WebKitTestRunner.exe shouldn't link with WebCoreTestSupport
        https://bugs.webkit.org/show_bug.cgi?id=203879

        Reviewed by Ross Kirsling.

        After r252086, WinCairo DumpRenderTree.exe and
        WebKitTestRunner.exe can't start because they are linked with
        WinCairoRequirements DLLs unexpectedly.

        DumpRenderTree.exe and WebKitTestRunner.exe are just wrapper
        programs. They shouldn't link with WinCairoRequirements libs.

        * DumpRenderTree/PlatformWin.cmake: Set DumpRenderTree_LIBRARIES only shlwapi.
        * WebKitTestRunner/PlatformWin.cmake: Set WebKitTestRunner_LIBRARIES only shlwapi.

2019-11-06  Kate Cheney  <katherine_cheney@apple.com>

        Update entry in contributors.json to fix commit privileges.

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

2019-11-06  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix: fix TestWebKitAPI in macCatalyst, tvOS, and
        watchOS builds by conditionalizing some code on HAVE_UIWEBVIEW and
        HAVE_PDFKIT. Follow-up to r251976.

        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/JSLockTakesWebThreadLock.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollToRevealSelection.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        * TestWebKitAPI/config.h:

2019-11-06  Aakash Jain  <aakash_jain@apple.com>

        All EWS status-bubbles shows #1 on security patches when patch is uploaded with webkit-patch --no-review
        https://bugs.webkit.org/show_bug.cgi?id=203903

        Reviewed by David Kilzer.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):

2019-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews] Increase timeout for svn-apply
        https://bugs.webkit.org/show_bug.cgi?id=203909

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

2019-11-06  Aakash Jain  <aakash_jain@apple.com>

        Add watchlist category for BuildSlaveSupport
        https://bugs.webkit.org/show_bug.cgi?id=203900

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/config/watchlist:

2019-11-06  Philippe Normand  <philn@igalia.com>

        [GTK][WPE] Add libfdk-aac-dev to the install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=203812

        Reviewed by Carlos Garcia Campos.

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

2019-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement support for Pointer Lock API
        https://bugs.webkit.org/show_bug.cgi?id=202956

        Reviewed by Carlos Alberto Lopez Perez.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef): Handle escape key.

2019-11-05  Chris Dumez  <cdumez@apple.com>

        [iOS] Scroll position does not get restored when doing a history navigation while the reader view is shown
        https://bugs.webkit.org/show_bug.cgi?id=203871
        <rdar://problem/56564603>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/simple-tall.html:
        * TestWebKitAPI/Tests/WebKitCocoa/RestoreScrollPosition.mm: Added.
        (TestWebKitAPI::TEST):

2019-11-05  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION(r252031): layout tests fail to run in non apple ports after r252031 (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=203844

        Rubber-stamped by Aakash Jain.

        Remove infinite loop for Windows.

        * Scripts/webkitpy/port/win.py:
        (WinPort._path_to_default_image_diff):
        (WinPort._path_to_image_diff): Deleted.

2019-11-05  Aakash Jain  <aakash_jain@apple.com>

        EWS should report test failures from clean-tree to results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=203829

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.__init__):
        (RunWebKitTestsWithoutPatch.start):
        (RunAPITestsWithoutPatch.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added and updated unit-tests.

2019-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Native text substitutions interfere with HTML <datalist> options resulting in crash
        https://bugs.webkit.org/show_bug.cgi?id=203116
        <rdar://problem/49875932>

        Reviewed by Tim Horton.

        Add a new testing hook to wait for datalist suggestions to show up and choose the suggestion at the given index.

        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::activateDataListSuggestion):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::isShowingDataListSuggestions const):
        (WTR::UIScriptControllerMac::activateDataListSuggestion):

        Dig through the view hierarchy of the NSWindow subclass used to show datalist suggestions for the table view
        containing the suggestions; then, select the given row, and invoke the action on the target.

        (WTR::UIScriptControllerMac::dataListSuggestionsTableView const):

2019-11-05  Daniel Bates  <dabates@apple.com>

        TestWebKitAPI.WebKit.DocumentEditingContext is failing on iPad
        https://bugs.webkit.org/show_bug.cgi?id=203828
        <rdar://problem/55854631>

        Reviewed by Myles Maxfield.

        Specify both a font size and line height when using Ahem as per [1]. Otherwise, text may be
        rendered inconsistently. Plus, disable text-autosizing and fix viewport to make test result
        consistent on both iPhone and iPad. 

        [1] <https://web-platform-tests.org/writing-tests/ahem.html>

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (applyStyle): Remove unused style for <iframe>s and fix up parameter name to conform to style guide.
        (applyAhemStyle): Set -webkit-text-size-adjust to 100% to disable auto-sizing. Fix viewport width
        and initial scale to ensure the result is the same on both iPhone and iPad. Also remove unused style
        for <iframe>s and renamed parameter name to conform to style guide.
        (TEST):

2019-11-05  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r250754): web page using IDBIndex doesn't load occasionally
        https://bugs.webkit.org/show_bug.cgi?id=203431

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBInPageCache.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBInPageCache.mm: Added.
        (-[IndexedDBInPageCacheMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBNotInPageCache.html: Added.

2019-11-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Build ImageDiff if it is missing (Follow-fix)
        https://bugs.webkit.org/show_bug.cgi?id=183422

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/base.py:
        (Port._path_to_image_diff): Use the host build directory.
        * Scripts/webkitpy/port/config.py:
        (Config.build_directory): Allow the caller to ignore the port argument, which will return the default
        build directory for the host running the script.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.make_port):

2019-11-05  Chris Lord  <clord@igalia.com>

        [WPE] WebKit.NewFirstVisuallyNonEmptyLayout* unexpected pass
        https://bugs.webkit.org/show_bug.cgi?id=203846

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/glib/TestExpectations.json:

2019-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r252031): layout tests fail to run in non apple ports after r252031
        https://bugs.webkit.org/show_bug.cgi?id=203844

        Reviewed by Žan Doberšek.

        Since r252032 Port.check_image_diff() assumes that ImageDiff binary is built in the build path, which is not
        true for all ports. This patch adds Port._path_to_default_image_diff() to be used instead of the build_path()
        and overriden by ports not building the ImageDiff in the build path.

        * Scripts/webkitpy/port/base.py:
        (Port.check_image_diff):
        (Port._path_to_default_image_diff):
        (Port._path_to_image_diff):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._path_to_default_image_diff):
        * Scripts/webkitpy/port/win.py:
        (WinPort._path_to_default_image_diff):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._path_to_default_image_diff):

2019-11-05  Chris Lord  <clord@igalia.com>

        [WPE] Geolocation API tests are consistently passing
        https://bugs.webkit.org/show_bug.cgi?id=203845

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/glib/TestExpectations.json:

2019-11-05  youenn fablet  <youenn@apple.com>

        Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
        https://bugs.webkit.org/show_bug.cgi?id=203362

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):
        Update test to take into account the ability to ask again for permission.
        * TestWebKitAPI/Tests/WebKit/getDisplayMedia.html:
        Update to make sure we notify test if internals is not available.

2019-11-04  Aakash Jain  <aakash_jain@apple.com>

        [ews] Perform validation of patch before retrying API and layout tests
        https://bugs.webkit.org/show_bug.cgi?id=203756

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch.__init__): Added parameters to optionally skip certain validations.
        (ValidatePatch.start): Skip certain validations based on the parameters.
        (RunWebKitTests.evaluateCommand): Add a ValidatePatch step before retrying.
        (ReRunWebKitTests.evaluateCommand): Ditto.
        (RunAPITests.evaluateCommand): Ditto.
        (ReRunAPITests.evaluateCommand): Ditto.

2019-11-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Guard against unexpected -[_WKWebAuthenticationPanel cancel]
        https://bugs.webkit.org/show_bug.cgi?id=203830
        <rdar://problem/56797134>

        Reviewed by Brent Fulgham .

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (-[TestWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:]):
        (TestWebKitAPI::TEST):

2019-11-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Build ImageDiff if it is missing
        https://bugs.webkit.org/show_bug.cgi?id=183422

        Reviewed by Alexey Proskuryakov.

        ImageDiff is built with a different SDK than the rest of the WebKit
        stack, and this frequently causes infrastructure failures where ImageDiff
        is missing on testers. To address this, we should automatically build
        ImageDiff if it is missing.

        * Scripts/webkitpy/port/base.py:
        (Port.check_build): Unconditionally build ImageDiff if it is missing.
        (Port.check_image_diff): Use _build_path since _path_to_image_diff will
        attempt to use a back-up location.
        (Port._path_to_image_diff): If the provided path to ImageDiff does not
        exist, use the path of the one we built.

2019-11-04  Daniel Bates  <dabates@apple.com>

        Add Googletest assertion support for CGRect and NSRect
        https://bugs.webkit.org/show_bug.cgi?id=203817

        Reviewed by Myles C. Maxfield.

        Add operator== and operator<< overloads for CGRect and NSRect so that these types can be
        passed to EXPECT_EQ() and other Googletest assertions.

        To make use of these overloads Cocoa tests should include #import "TestCocoa.h" instead of
        "Test.h". TestCocoa.h imports Test.h. With these overloads an assertion like this:

            EXPECT_EQ(CGRectMake(0, 0, 23, 24), rects[0].CGRectValue);

        will produce output like this when it fails:

            Expected equality of these values:
              CGRectMake(138, 0, 23, 24)
                Which is: (origin = (x = 138, y = 0), size = (width = 23, height = 24))
              rects.firstObject.CGRectValue
                Which is: (origin = (x = 96, y = 0), size = (width = 16, height = 17))

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add source files.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        Write in terms of EXPECT_EQ() now that it just works when passed CGRects.

        * TestWebKitAPI/cocoa/TestCocoa.h: Added.
        * TestWebKitAPI/cocoa/TestCocoa.mm: Added.
        (ostreamRectCommon):
        (operator<<):
        (operator==):

2019-11-04  Aakash Jain  <aakash_jain@apple.com>

        [ews] Status bubble should be white for CANCELLED builds
        https://bugs.webkit.org/show_bug.cgi?id=201204

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-11-04  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Flush the shared ResourceLoadObserver when the webpage is closed by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=203623
        <rdar://problem/56756427>

        Reviewed by Alex Christensen.

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

2019-11-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Consolidate forEachViewInHierarchy and findAllViewsInHierarchyOfType into common helper file
        https://bugs.webkit.org/show_bug.cgi?id=203777

        Reviewed by Tim Horton.

        * TestRunnerShared/cocoa/PlatformViewHelpers.h: Added.
        * TestRunnerShared/cocoa/PlatformViewHelpers.mm: Added.

        Add a new Cocoa helper file, PlatformViewHelpers, to make it easier to traverse platform view hierarchies
        (NSView and UIView) for testing purposes. This is minor refactoring, before I try to create some new testing
        primitives to make webkit.org/b/203116 testable.

        (forEachViewInHierarchy):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::findEditableImageCanvas const):
        (WTR::forEachViewInHierarchy): Deleted.
        (WTR::findEditableImageCanvas): Deleted.

2019-11-04  Alex Christensen  <achristensen@webkit.org>

        Flaky API Test TestWebKitAPI.WebKit.UploadDirectory
        https://bugs.webkit.org/show_bug.cgi?id=203652

        Reviewed by Alexey Proskuryakov.

        It is not important that the directory to upload does not exist before the test starts.
        Make the test more robust to state left behind by previous iterations of this test by removing the check.
        The important check in this test is the uploaded body size.

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

2019-11-04  Kate Cheney  <katherine_cheney@apple.com>

        updated email in contributors.json to match bugzilla.

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

2019-11-04  Andy Estes  <aestes@apple.com>

        REGRESSION (r251623): When downloading a QuickLook file, the web view navigates to a "The URL can't be shown" error page instead of staying on the current page
        https://bugs.webkit.org/show_bug.cgi?id=203790
        <rdar://problem/56795440>

        Reviewed by Alex Christensen.

        Tested that "download" and "cancel" policy decisions for QuickLook files result in a
        provisional navigation failure with error code WebKitErrorFrameLoadInterruptedByPolicyChange.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookDelegate navigationError]):
        (-[QuickLookDelegate _webView:didFailNavigation:withError:userInfo:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (TEST):

2019-11-04  Peng Liu  <peng.liu6@apple.com>

        Cannot run WebKit layout tests on iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=203796

        Reviewed by Jonathan Bedard.

        Fix the error to parse iOS version numbers like "xx.yy".

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):

2019-11-03  Tim Horton  <timothy_horton@apple.com>

        WKWebView can get stuck blank (Web Content process thinks the app is backgrounded)
        https://bugs.webkit.org/show_bug.cgi?id=203774
        <rdar://problem/53399054>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm: Added.
        (TEST):
        (isBackground):
        (createHostViewForExtensionIdentifier):
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewResizeCrash.mm: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewStablePresentationUpdateCallback.mm: Removed.
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFinishNavigationWithoutPresentationUpdate]):
        Merge existing WKPDFView tests into one file, and add one for this bug.

2019-11-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Add diagnostic logging for frontend feature usage
        https://bugs.webkit.org/show_bug.cgi?id=203579
        <rdar://problem/56717410>

        Reviewed by Brian Burg.

        Original patch by Matt Baker <mattbaker@apple.com>.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_INSPECTOR_TELEMETRY`, which is only enabled for macOS.

2019-11-01  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.layout_tests.model
        https://bugs.webkit.org/show_bug.cgi?id=203702

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.model.
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (SpecifierSorter.sort_specifiers): Convert iterator to list.
        (TestConfigurationConverter.to_config_set): Use reduce from functors.
        (TestConfigurationConverter.intersect_combination): Ditto.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationsModel.get_test_set_for_keyword): Use iterators in both Python 2
        and Python 3.
        (TestExpectationsModel._remove_from_sets): Ditto.
        (TestExpectations.parse_generic_expectations): Covert iterators to lists for indexing.
        (TestExpectations.parse_default_port_expectations): Ditto.
        (TestExpectations.parse_override_expectations): Ditto.
        (TestExpectations.remove_configuration_from_test): Use any instead of just checking the
        first element in the set.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Use items instead of iteritems.

2019-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: add a timeline that shows information about any recorded CSS animation/transition
        https://bugs.webkit.org/show_bug.cgi?id=203651
        <rdar://problem/56128726>

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/WTF/Markable.cpp:
        (TestWebKitAPI::TEST):
        Add tests for extra utility operators.

2019-11-01  Brady Eidson  <beidson@apple.com>

        Promote "_getWebArchive" to API.
        <rdar://problem/17317547> and https://bugs.webkit.org/show_bug.cgi?id=203767

        Reviewed by Andy Estes.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController saveAsPDF:]):
        (-[BrowserWindowController saveAsWebArchive:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController saveAsWebArchive:]):

2019-11-01  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common
        https://bugs.webkit.org/show_bug.cgi?id=202462

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.
        * Scripts/webkitpy/common/find_files_unittest.py: Use full import path.
        * Scripts/webkitpy/common/lru_cache_unittest.py:
        (LRUCacheTest.test_size_one_pop): Convert iterator to list
        * Scripts/webkitpy/common/prettypatch_unittest.py: Check for byte array explicitly.
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py: Use unicode compatible
        StringIO.
        (ReadChecksumFromPngTest.test_read_checksum):
        * Scripts/webkitpy/common/timeout_context.py:
        (Timeout.__enter__): Use range instead of xrange.

2019-11-01  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Get TestWebKitAPI building
        https://bugs.webkit.org/show_bug.cgi?id=203728

        Reviewed by Alexey Proskuryakov.

        * Makefile:
        Only build gtest and TestWebKitAPI for macCatalyst.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Make use of WK_COCOA_TOUCH instead of SDK conditionals.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        Fix some #ifdefs for macCatalyst.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollToRevealSelection.mm:
        (-[LegacyLoadingDelegate webViewDidFinishLoad:]):
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        (-[AsyncPolicyDelegateForInsetTest webView:didFinishNavigation:]):
        (TestWebKitAPI::TEST):
        Util::runUntil wants a bool, not a BOOL.

        * TestWebKitAPI/config.h:
        Import WebKitLegacy.h after WebKit.h. Traditionally WebKit.h includes
        WebKitLegacy.h, except in macCatalyst. Many tests depend on being able
        to get WebKitLegacy.h this way.

        * Scripts/webkitpy/style/checkers/sdkvariant.py:

        * Scripts/webkitpy/port/factory.py:
        * Scripts/webkitpy/port/mac.py:
        Add a MacCatalyst port behind --maccatalyst, and do the bare minimum
        required to get it working and finding the right binaries.
        It inherits from Mac instead of iOS because for the purposes of
        finding and running binaries, dealing with I/O, etc., these are
        100% bona fide macOS products.

2019-11-01  Aakash Jain  <aakash_jain@apple.com>

        [ews] Improve summary string when there are flaky failures in API tests
        https://bugs.webkit.org/show_bug.cgi?id=203747

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults): Display pre-existing failure string string only
        if there are pre-existing API test failures.

2019-11-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        TestWebKitAPI.EditorStateTests.TypingAttributesTextAlignmentStartEnd is flaky in iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=203733
        <rdar://problem/56814640>

        Reviewed by Tim Horton.

        Try to fix the flaky test by making EditingTestHarness more robust. Instead of checking for expected editor
        state entries after the next presentation update, wait for the latest editor state entry to contain the expected
        values.

        * TestWebKitAPI/EditingTestHarness.mm:
        (-[EditingTestHarness _execCommand:argument:expectEntries:]):

        Preserve the existing log statement by printing it out once after a few seconds, if the entry is still not found
        in the last known editor state.

2019-11-01  Aakash Jain  <aakash_jain@apple.com>

        [ews] Pass clobber-old-results parameter to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=203736

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests): Added --clobber-old-results paramter to run-webkit-tests. Also re-ordered
        --no-new-test-results and --no-show-results to match with build.webkit.org configuration.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] TestWebCore shouldn't link with WebCoreTestSupport
        https://bugs.webkit.org/show_bug.cgi?id=203672

        Reviewed by Don Olmstead.

        TestWebCore doesn't need to link with WebCoreTestSupport. And, it
        causes a problem for Windows because WebCoreTestSupport imports
        WebCore symbols by using dllimport, however, WebCore is not a DLL.
        (Bug 203663 Comment 4)

        * TestWebKitAPI/CMakeLists.txt: Changed TestWebCore not to link
        with WebCoreTestSupport. Changed TestWebCore to link with
        WebCoreHeaderInterface instead.

2019-10-31  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r251808): run-webkit-test cannot show results.html
        https://bugs.webkit.org/show_bug.cgi?id=203709
        <rdar://problem/56798620>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.show_results_html_file): os.devnull is a string, not a file.

2019-10-31  Matt Baker  <mattbaker@apple.com>

        Changed my emails list.

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

2019-10-31  Tim Horton  <timothy_horton@apple.com>

        Turn on IOSurface support in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=203026
        <rdar://problem/56320993>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        Don't use RGB10 if we don't have it.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        Don't allocate many megabytes on the stack.
        This isn't currently a problem, but if you accidentally run the tests on
        a 3x simulator it starts crashing.

2019-10-31  Tadeu Zagallo  <tzagallo@apple.com>

        [WebAssembly] Create a Wasm interpreter
        https://bugs.webkit.org/show_bug.cgi?id=194257
        <rdar://problem/44186794>

        Reviewed by Saam Barati.

        Add a mode that runs WebAssembly tests without the LLInt (i.e. only Air)
        and update the no-air mode to also disable the LLInt tier.

        * Scripts/run-jsc-stress-tests:

2019-10-31  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Display pre-existing API test names in the build summary
        https://bugs.webkit.org/show_bug.cgi?id=199525

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults): Include the names of pre-existing test failures in summary string and 
        limit the number of failures to display to NUM_API_FAILURES_TO_DISPLAY.

2019-10-31  Alex Christensen  <achristensen@webkit.org>

        Expose more WKPreferences SPI
        https://bugs.webkit.org/show_bug.cgi?id=203631
        <rdar://problem/56717160>

        Reviewed by Brady Eidson.

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

2019-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] imported/mozilla/svg/text/textpath-selection.svg is still flaky
        https://bugs.webkit.org/show_bug.cgi?id=203659
        <rdar://problem/52124292>

        Reviewed by Tim Horton.

        This test still fails in some internal test runner configurations, because the iOS text selection grabber dots
        sometimes show up in the actual result and not in the expectation. This still happens even after suppressing
        UITextSelectionView during ref test snapshotting in r251526, since the selection grabber dots are embedded as
        subviews of the text interaction container view, rather than UITextSelectionView itself, so hiding
        UITextSelectionView does not affect the visibility of these grabber views (UITextRangeView's -startGrabber and
        -endGrabber).

        To address this, we augment the change made in r251526 to apply to the start and end grabber views as well.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2019-10-31  Alex Christensen  <achristensen@webkit.org>

        CMake build should make WebKit framework able to be used by Safari
        https://bugs.webkit.org/show_bug.cgi?id=203685

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:

2019-10-31  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Limit API tests failures to display in the status-bubble tooltip and buildbot summary
        https://bugs.webkit.org/show_bug.cgi?id=203678

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults): Define NUM_API_FAILURES_TO_DISPLAY as 10.
        (AnalyzeAPITestsResults.analyzeResults): Truncate the failure string to contain 10 test failures.

2019-10-30  Peng Liu  <peng.liu6@apple.com>

        [Picture-in-Picture Web API] Enable the support for iOS
        https://bugs.webkit.org/show_bug.cgi?id=202618

        Reviewed by Jer Noble.

        Enable the Picture-in-Picture API support for iOS (iPad only).

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-10-30  Alex Christensen  <achristensen@webkit.org>

        Prevent Mac CMake build from bit rotting
        https://bugs.webkit.org/show_bug.cgi?id=203647

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2019-10-30  Alex Christensen  <achristensen@webkit.org>

        WKContentRuleLists should block requests from service workers
        https://bugs.webkit.org/show_bug.cgi?id=201980
        <rdar://problem/55516735>

        Reviewed by Chris Dumez.

        NSString initWithContentsOfURL doesn't work with https URLs with certificates without a trusted root,
        so I use an ephemeral NSURLSession instead so I can tell it to accept any connection, even our WebKit httpd server.
        I also added an API test.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (-[WKTRSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WTR::TestController::configureContentExtensionForTest):

2019-10-30  Daniel Bates  <dabates@apple.com>

        Add pretty printer for CompactPointerTuple
        https://bugs.webkit.org/show_bug.cgi?id=203495

        Reviewed by Jer Noble.

        Make it easy to see the state of a CompactPointerTuple. Now we will print something like:

                (WTF::CompactPointerTuple<WTF::String *, unsigned char>) $0 = { type = 7 } {
                  [0] = 0x00007ffeefbff220 { length = 8, contents = 'résumé' }
                  [1] = 7
                }

        for aCompactPointerTuple defined like this:

                String aString { "résumé" };
                CompactPointerTuple<String*, uint8_t> aCompactPointerTuple { &aString, 7 };

        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (__lldb_init_module.lldb_webkit):
        (WTFCompactPointerTuple_SummaryProvider):
        (WTFCompactPointerTupleProvider):
        (WTFCompactPointerTupleProvider.__init__):

        (WTFCompactPointerTupleProvider.type_as_string):
        (WTFCompactPointerTupleProvider.is_human_readable_type):
        The majority of the time CompactPointerTuple will be used with non-character type data. So,
        I optimize for this use case and consider the integral value as more readable than than LLDB's
        default summary provider that emits the character or equivalent C escape sequence.

        (WTFCompactPointerTupleProvider.has_children):
        (WTFCompactPointerTupleProvider.num_children):
        (WTFCompactPointerTupleProvider.get_child_index):
        (WTFCompactPointerTupleProvider.get_child_at_index):
        (WTFCompactPointerTupleProvider.update):
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_aliased_flag):
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_empty):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_simple):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_max_type_value):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_bool):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_empty):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_simple):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_max_type_value):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_simple_bool):

2019-10-30  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.port
        https://bugs.webkit.org/show_bug.cgi?id=203489

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.port.
        * Scripts/webkitpy/common/newstringio.py: Removed.
        * Scripts/webkitpy/common/newstringio_unittest.py: Removed.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__): Ensure that stdout and stderr are byte arrays.
        * Scripts/webkitpy/common/version.py:
        (Version.__hash__): Add hash function for Version objects.
        * Scripts/webkitpy/port/base.py:
        (Port.default_baseline_search_path): Convert list to map.
        (Port.diff_text): Decode for the native string type.
        (Port.skipped_perf_tests): Convert filter to list.
        (Port._run_script): No need to decode strings in Python 3, even if decode_output is set.
        (Port.diff_text.to_raw_bytes): Deleted.
        * Scripts/webkitpy/port/base_unittest.py:
        (cmp): Add cmp function for Python 3 comparisons.
        (PortTest.test_diff_text): Do not escape spaces.
        (PortTest.test_parse_reftest_list): Write to test file explicitly.
        * Scripts/webkitpy/port/builders_unittest.py: Use full import path.
        * Scripts/webkitpy/port/config_standalone.py: script_dir was refering to Tools,
        not Tools/Scripts.
        * Scripts/webkitpy/port/config_unittest.py: Use full import path.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.show_results_html_file): Use os.devnull directly.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_read_base64_block): Explicitly compare against byte array.
        (DriverTest.test_setup_environ_base_vars): Convert iterators to lists.
        * Scripts/webkitpy/port/factory.py:
        (PortFactory.get.in): Imports need to use the full import path.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.default_baseline_search_path): Convert map to list.
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._parse_leaks_output): Search byte array with byte array.
        * Scripts/webkitpy/port/leakdetector_valgrind.py:
        (ValgrindError.__str__): Split byte array with byte array.
        (ValgrindError.error_hash): Correct regex.
        (LeakDetectorValgrind._parse_leaks_output): Convert bytes to string.
        (LeakDetectorValgrind.parse_and_print_leaks_detail): Standardize Python 2 and 3 sorting order.
        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py: Make unit tests Python 3 compatible.
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._get_trace_from_systemd): Modernize exception handling.
        (GDBCrashLogGenerator.generate_crash_log): No need to decode strings in Python 3.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper): is_ready will be a byte array.
        (MacPort.stop_helper): stdin will be a byte array.
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        (MockDRTTest.assertTest): Use unicode compatible StringIO objects.
        (MockDRTTest.test_main): Ditto.
        * Scripts/webkitpy/port/port_testcase.py:
        (bind_mock_apple_additions.MockAppleAdditions.version_name_mapping): Use items instead of iteritems.
        (PortTestCase.test_expectations_ordering): Convert iterator to list.
        (PortTestCase.test_test_expectations): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort.__init__):
        (WinPort.default_baseline_search_path): Convert map to list.
        (WinPort.test_search_path): Ditto.
        (WinPort.setup_crash_log_saving): Use items instead of iteritems.
        (WinPort.restore_crash_log_saving): Ditto.
        (WinPort.prevent_error_dialogs): Ditto.
        (WinPort.allow_error_dialogs): Ditto.
        (WinCairoPort.default_baseline_search_path): Convert map to list.
        (WinCairoPort._port_specific_expectations_files): Ditto.
        (FTWPort.default_baseline_search_path): Ditto.
        (FTWPort._port_specific_expectations_files): Ditto.
        * Scripts/webkitpy/port/win_unittest.py: Ditto.
        (WinPortTest._assert_search_path): Ditto.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.default_baseline_search_path): Convert map to list.
        (WPEPort._port_specific_expectations_files): Ditto.

2019-10-30  Jonathan Bedard  <jbedard@apple.com>

        Simulator testers are filling up
        https://bugs.webkit.org/show_bug.cgi?id=203056
        <rdar://problem/56344905>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Remove some CoreSimulator temporary directories
        after tearing down devices.

2019-10-30  Mark Lam  <mark.lam@apple.com>

        Gardening: fixing broken build.

        Not reviewed.

        JSON appears to not like commas at the end of the last element in an array.

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

2019-10-30  Chris Dumez  <cdumez@apple.com>

        WKFrameIsDisplayingMarkupDocument() should return true after a window.open/document.write
        https://bugs.webkit.org/show_bug.cgi?id=203587
        <rdar://problem/56717726>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::createNewPageThenClose):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::createNewPage):
        * TestWebKitAPI/Tests/WebKit/window-open-then-document-open.html: Added.

2019-10-29  Andy Estes  <aestes@apple.com>

        [Quick Look] Clean up LegacyPreviewLoaderClients
        https://bugs.webkit.org/show_bug.cgi?id=203472

        Reviewed by Brady Eidson.

        Updated API tests to compare data received in
        -_webView:didFinishLoadForQuickLookDocumentInMainFrame: with expected data.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (readFile):
        (-[QuickLookDelegate initWithExpectedFileURL:responsePolicy:]):
        (-[QuickLookDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookDelegate verifyDownload]):
        (TEST):

2019-10-29  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Fix tooltip with drawer
        https://bugs.webkit.org/show_bug.cgi?id=203527

        Rubber-stamped by Aakash Jain.

        The interaction between tooltips and drawers needs improvement, tooltips
        are inconsistently under the drawer, do not treat the drawer as a boundary.

        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css:
        (.tooltip): Use topZIndex variable.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Pass viewport to ToolTip.
        (TimelineFromEndpoint): Ditto.
        (TimelineFromEndpoint.prototype.update): Ditto.
        (TimelineFromEndpoint.prototype.render): Ditto.
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (_ToolTip.prototype.toString): Use passed viewport instead of the document size.
        (_ToolTip.prototype.setByElement): Set the viewport based on the passed viewport.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Define the viewport as the
        content element.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

2019-10-29  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Add more information to _WKWebAuthenticationPanel
        https://bugs.webkit.org/show_bug.cgi?id=202561
        <rdar://problem/55973910>

        Reviewed by Youenn Fablet and Brent Fulgham.

        Adds new API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (-[TestWebAuthenticationPanelUIDelegate panel]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid.html: Added.

2019-10-07  Jer Noble  <jer.noble@apple.com>

        Implement the Remote Playback API.
        https://bugs.webkit.org/show_bug.cgi?id=162971

        Reviewed by Youenn Fablet.

        Enable RemotePlayback for DumpRenderTree and WebKitTestRunner.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-10-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add fast path for String#localeCompare
        https://bugs.webkit.org/show_bug.cgi?id=202676

        Reviewed by Mark Lam.

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

2019-10-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add enterkeyhint support
        https://bugs.webkit.org/show_bug.cgi?id=189546
        <rdar://problem/51021148>

        Reviewed by Tim Horton.

        Add new API tests to check the resulting UIReturnKeyType that gets set on text input traits in the UI process,
        given the different values for "enterkeyhint". Also verifies that the default behaviors of search fields and
        text input fields inside actionable form elements is to show "Search" or "Go" as the return key by default,
        unless a different value for "enterkeyhint" is specified.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/EnterKeyHintTests.mm: Added.
        (-[TestWKWebView test:enterKeyHint:returnKeyType:]):
        (TestWebKitAPI::enterKeyHintTestCases):
        (TestWebKitAPI::createWebViewAndInputDelegateForTesting):
        (TestWebKitAPI::TEST):

2019-10-29  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251639.

        Caused flakey API failures for GetDisplayMediaTest.Constraints

        Reverted changeset:

        "Enforce user gesture for getUserMedia in case a previous
        getUserMedia call was denied"
        https://bugs.webkit.org/show_bug.cgi?id=203362
        https://trac.webkit.org/changeset/251639

2019-10-29  Chris Dumez  <cdumez@apple.com>

        Notification permissions are not remembered for origins without port
        https://bugs.webkit.org/show_bug.cgi?id=203537
        <rdar://problem/55281080>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/WKSecurityOrigin.cpp: Added.
        (TestWebKitAPI::TEST):

2019-10-29  Kate Cheney  <katherine_cheney@apple.com>

       Removed duplicate email address.

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

2019-10-29  Kate Cheney  <katherine_cheney@apple.com>

        Edited email address for commiting.

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

2019-10-28  Kate Cheney  <katherine_cheney@apple.com>

        Added myself as a committer.

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

2019-10-28  Alex Christensen  <achristensen@webkit.org>

        Remove unused _WKProcessPoolConfiguration SPI
        https://bugs.webkit.org/show_bug.cgi?id=203066

        Reviewed by Youenn Fablet.

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

2019-10-28  Brady Eidson  <beidson@apple.com>

        Expose _printOperationWithPrintInfo: SPI as API
        <rdar://problem/36557179> and https://bugs.webkit.org/show_bug.cgi?id=203496

        Reviewed by Andy Estes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController printWebView:]):

2019-10-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Show results which are missing expectations
        https://bugs.webkit.org/show_bug.cgi?id=203494
        <rdar://problem/56436643>

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/css/timeline.css:
        (.dot.warning): Add warning dot with dark-orange color.
        * resultsdbpy/resultsdbpy/view/static/js/expectations.js:
        (Expectations.colorMap): Add warning.
        (Expectations.failureTypes): Ditto.
        (Expectations.failureTypeMap): Ditto.
        (Expectations.symbolMap): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Legend): Add warning bubble.

2019-10-28  John Wilander  <wilander@apple.com>

        Storage Access API: Make the API work with the experimental 3rd-party cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=203428
        <rdar://problem/56626949>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsCallDidSetShouldDowngradeReferrerCallback):
        (WTR::TestRunner::statisticsCallDidSetShouldBlockThirdPartyCookiesCallback):
            Both of these were missing resets of their m_hasSet*Callback booleans.

2019-10-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Report more descriptive configurations for non-Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=203490
        <rdar://problem/56658244>

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort):
        (GtkPort.configuration_for_upload): Return use GTK as the platform.
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest):
        (GtkPortTest.test_default_upload_configuration):
        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.configuration_for_upload): Use wincairo as the platform.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort):
        (WPEPort.configuration_for_upload): Use WPE as the platform.
        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest):
        (WPEPortTest.test_default_upload_configuration):

2019-10-28  Aakash Jain  <aakash_jain@apple.com>

        [ews] Improve summary for CompileWebKit and CompileJSC build step
        https://bugs.webkit.org/show_bug.cgi?id=203487

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.getResultSummary): Method to generate custom status message.
        (CompileJSC.getResultSummary): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-10-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Warn users when multiple NFC tags present
        https://bugs.webkit.org/show_bug.cgi?id=200932
        <rdar://problem/54890736>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (TestWebKitAPI::TEST):
        Adds a new test for -[_WKWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:].
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc-multiple-tags.html: Added.

2019-10-27  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Test PublicSuffix.TopPrivatelyControlledDomain is failing since r250589
        https://bugs.webkit.org/show_bug.cgi?id=203193

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        (TestWebKitAPI::TEST_F): Add a test for a domain consisting only of dots.

2019-10-26  youenn fablet  <youenn@apple.com>

        Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
        https://bugs.webkit.org/show_bug.cgi?id=203362

        Reviewed by Eric Carlson.

        Update test to take into account the ability to reask permission.
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):

2019-10-26  Chris Lord  <clord@igalia.com>

        Put OffscreenCanvas behind a build flag
        https://bugs.webkit.org/show_bug.cgi?id=203146

        Reviewed by Ryosuke Niwa.

        Put OffscreenCanvas behind a build flag and enable the runtime setting
        when running tests on platforms where it's built (GTK and WPE).

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOffscreenCanvasEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-10-25  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.checkout
        https://bugs.webkit.org/show_bug.cgi?id=201956

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.checkout.
        * Scripts/webkitpy/common/checkout/changelog.py: Import Python 3 compatible unicdoe.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Import Python 3 compatible StringIO.
        * Scripts/webkitpy/common/checkout/checkout.py: Use Python 3 compatible reduce.
        (Checkout._modified_files_matching_predicate): Convert iterators into lists before returning.
        (Checkout.suggested_reviewers): Ditto.
        * Scripts/webkitpy/common/checkout/checkout_mock.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Use full import paths, convert
        iterators into lists.
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py: Use full import paths, use Python 3
        compatible StringIO.
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__hash__): Committers need to be hashable to be inserted into a set.

2019-10-25  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.xcode
        https://bugs.webkit.org/show_bug.cgi?id=203417

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.xcode.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (ReadableBinaryFileObject.seek): Add seek function to mirror actual binary file
        behavior and support plistlib.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type): Use values instead of itervalues.
        (SimulatedDeviceManager._get_device_identifier_for_type): Use items instead of iteritems.
        (SimulatedDeviceManager.device_count_for_type): Use values instead of itervalues.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (SimulatedDeviceTest.mock_host_for_simctl): Use items instead of iteritems.
        (change_state_to): Explicitly use bytes to edit a binary file.

2019-10-25  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Status page should show compiler ERRORS
        https://bugs.webkit.org/show_bug.cgi?id=203418

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BuildLogLineObserver): Class for Analyzing build logs and extracting error logs.
        (CompileWebKit.start): Initialize the log observer.
        (CompileWebKit):
        (CompileWebKit.errorReceived): Add the error to the errors log.

2019-10-25  Matt Lewis  <jlewis3@apple.com>

        Rolling out r251579,r251162,r251512,r251500, and r251498 for build failures
        and test failures

        Unreviewed rollout.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        (-[TestWebAuthenticationPanelUIDelegate panel]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc-multiple-tags.html: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid.html: Removed.

2019-10-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 13] fast/forms/ios/accessory-bar-navigation.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203294
        <rdar://problem/54520848>

        Reviewed by Tim Horton.

        This layout test consistently fails when it is the first test to involve bringing up the keyboard that is run in
        a newly created iOS simulator. This is because a software keyboard is presented when focusing the input fields
        in the test, and the test expectation (which depends on the visual viewport) requires a hardware keyboard.

        WebKitTestRunner already simulates the hardware keyboard being attached using the call to GraphicsServices SPI
        in TestController::platformResetStateToConsistentValues. However, this was effectively a no-op in the case where
        the simulated device has never (in its lifetime, even through reboots) brought up an input view. This is because
        -[UIKeyboardImpl hardwareKeyboardAvailabilityChanged] is never called, due to UIInputResponderController never
        having an active instance with an input view set. As a result, the automaticMinimizationEnabled property of
        UIKeyboardImpl is never set to its correct initial value (which depends on GSEventIsHardwareKeyboardAttached()).

        This leads to UIKeyboardImpl not automatically minimizing itself even though the hardware keyboard is attached
        (but only until the next time the keyboard is shown, after a hardware keyboard availability change notification
        has been sent, which occurs between every layout test).

        To work around this source of flakiness, we ensure that the keyboard preference for enabling automatic
        minimization has been set to @YES by the time we attempt to simulate connecting the hardware keyboard by calling
        GSEventIsHardwareKeyboardAttached. Note that the extra step of writing the value to com.apple.Preferences is
        necessary because logic in TextInput.framework exists that periodically wipes out any cached values for keyboard
        preferences on UIInputResponderController, and then attempts to regenerate them by reading defaults in
        com.apple.Preferences. However, the same logic also fails to actually update com.apple.Preferences before
        reading from it, which results in a software keyboard *very* rarely appearing again when running layout tests
        that don't expect to observe a software keyboard.

        * WebKitTestRunner/ios/TestControllerIOS.mm:

2019-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add exclusion rules to text manipulation SPI
        https://bugs.webkit.org/show_bug.cgi?id=203398
        <rdar://problem/56567256>

        Reviewed by Wenson Hsieh.

        Added tests for including & excluding content based on element names and attribute values.

        Also added a test to make sure _startTextManipulationsWithConfiguration calls the completion handler
        even when the _WKTextManipulationDelegate isn't set.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

2019-10-25  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Report the correct flavor for leaks
        https://bugs.webkit.org/show_bug.cgi?id=203413

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKit1LeakTests.start):

2019-10-25  Ross Kirsling  <ross.kirsling@sony.com>

        test262-runner should be able to pass JSC a feature flag
        https://bugs.webkit.org/show_bug.cgi?id=203301

        Reviewed by Keith Miller.

        * Scripts/test262/Runner.pm:
        Recognize mapping from 262 features to JSC runtime options.

2019-10-25  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.checkout.scm
        https://bugs.webkit.org/show_bug.cgi?id=203277

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.checkout.scm, add --all flag.
        * Scripts/webkitpy/common/checkout/scm/detection.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py: Ditto.
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.revisions_changing_file): Convert filter iterator to list.
        (Git.prepend_svn_revision): Patches need to be bytes.
        * Scripts/webkitpy/common/checkout/scm/scm.py: Import unicode.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Use full import paths,
        differentiate between binary and text files, replace assertItemsEqual with sorted,
        list fix regexes on byte arrays.
        * Scripts/webkitpy/common/checkout/scm/stub_repository.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Use full import paths.
        (SVN.diff_for_revision): Diff for revision should be byte array.
        (SVN.propget): Use Python 3 compatible encoding.

2019-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        Add a mechanism to find and manipulate text by paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=203286

        Reviewed by Wenson Hsieh.

        Added basic API tests for the new SPI.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm: Added.
        (-[TextManipulationDelegate init]):
        (-[TextManipulationDelegate _webView:didFindItem:forFrame:]):
        (-[TextManipulationDelegate items]):
        (TestWebKitAPI::createItem):

2019-10-24  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r251558.

        This broke internal builds

        Reverted changeset:

        "Add a mechanism to find and manipulate text by paragraphs"
        https://bugs.webkit.org/show_bug.cgi?id=203286
        https://trac.webkit.org/changeset/251558

2019-10-24  Brady Eidson  <beidson@apple.com>

        Expose pageZoom as API.
        https://bugs.webkit.org/show_bug.cgi?id=203381

        Reviewed by Andy Estes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):

2019-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        Add a mechanism to find and manipulate text by paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=203286

        Reviewed by Wenson Hsieh.

        Added basic API tests for the new SPI.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm: Added.
        (-[TextManipulationDelegate init]):
        (-[TextManipulationDelegate _webView:didFindItem:forFrame:]):
        (-[TextManipulationDelegate items]):
        (TestWebKitAPI::createItem):

2019-10-24  Brady Eidson  <beidson@apple.com>

        Formalize PDF snapshot API.
        https://bugs.webkit.org/show_bug.cgi?id=203374

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController saveAsPDF:]):

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

2019-10-24  Andy Estes  <aestes@apple.com>

        [Cocoa] Make it possible to convert SharedBuffer segments and data views to NSData without copying
        https://bugs.webkit.org/show_bug.cgi?id=203348

        Reviewed by Alex Christensen.

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

2019-10-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 13] imported/mozilla/svg/text/textpath-selection.svg is flaky
        https://bugs.webkit.org/show_bug.cgi?id=203247
        <rdar://problem/52124292>

        Reviewed by Tim Horton.

        Roughly 1 in 3000 runs, this test fails due to an image diff, where only the expectation or test page shows a
        native selection view on iOS. Both the test and expectation create DOM selections on the page, which is then
        followed by a native selection view on the page at some point in the future.

        This "point in the future" depends on both WebKit implementation details (i.e. when the next remote layer tree
        commit happens) as well as UIKit implementation details (for example, many methods in UITextSelectionView and
        UIWKTextInteractionAssistant will schedule changes to UIView geometry using a runloop timer, instead of applying
        the updates immediately). Because of the latter, it's impractical to expect native selection views on iOS to
        always appear or not appear after finishing this layout test.

        To mitigate this rare source of flakiness, we hide these native text selection views when snapshotting iOS
        WKWebViews for the purposes of ref and pixel testing.

        Note that we still have a considerable number of layout tests that inspect these native selection views on iOS,
        but they work by waiting until the native selection views reach a particular state (e.g. by polling for the
        number of ranged selection subviews, or the presence of selection handles, or waiting for a caret selection with
        a given geometry, etc.), which ensures that they are robust against subtle changes to the timing of selection
        updates in the UI process.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2019-10-23  Chris Dumez  <cdumez@apple.com>

        WebBackForwardCache::removeEntriesMatching() may re-enter and crash
        https://bugs.webkit.org/show_bug.cgi?id=203341
        <rdar://problem/56553939>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-10-23  Megan Gardner  <megan_gardner@apple.com>

        Rename force-press-related functions to refer to context menus, and fix a former force-press test
        https://bugs.webkit.org/show_bug.cgi?id=202663
        <rdar://problem/52699530>

        Reviewed by Dean Jackson.

        Rename all relevant fuctions to more correctly reflect that this does not specifically
        require a force press to activate any longer.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowContextMenuCallback):
        (WTR::UIScriptController::didShowContextMenuCallback const):
        (WTR::UIScriptController::setDidDismissContextMenuCallback):
        (WTR::UIScriptController::didDismissContextMenuCallback const):
        (WTR::UIScriptController::setDidShowForcePressPreviewCallback): Deleted.
        (WTR::UIScriptController::didShowForcePressPreviewCallback const): Deleted.
        (WTR::UIScriptController::setDidDismissForcePressPreviewCallback): Deleted.
        (WTR::UIScriptController::didDismissForcePressPreviewCallback const): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView resetInteractionCallbacks]):
        (-[TestRunnerWKWebView _didShowContextMenu]):
        (-[TestRunnerWKWebView _didDismissContextMenu]):
        (-[TestRunnerWKWebView _didShowForcePressPreview]): Deleted.
        (-[TestRunnerWKWebView _didDismissForcePressPreview]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::setDidShowContextMenuCallback):
        (WTR::UIScriptControllerIOS::setDidDismissContextMenuCallback):
        (WTR::UIScriptControllerIOS::setDidShowForcePressPreviewCallback): Deleted.
        (WTR::UIScriptControllerIOS::setDidDismissForcePressPreviewCallback): Deleted.

2019-10-23  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Multiple builds are triggered for one patch sometimes in new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199417

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch): Set the flag before sending the patch to buildbot. Unset it in case of failure. 
        Also added additional check for sent_to_buildbot flag before processing patch.
        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch): Improved logging.
        (Patch.set_sent_to_buildbot): Modified to accept sent_to_buildbot paramater, and set the value accordingly.

2019-10-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251261.

        This broke multiple tests

        Reverted changeset:

        "Using version 1 CFRunloopSource for faster task dispatch"
        https://bugs.webkit.org/show_bug.cgi?id=202874
        https://trac.webkit.org/changeset/251261

2019-10-23  Aakash Jain  <aakash_jain@apple.com>

        [ews] iOS-13-Simulator-WK2-Tests-EWS is failing with an KeyError exception
        https://bugs.webkit.org/show_bug.cgi?id=203281

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/layout_test_failures.py:
        (LayoutTestFailures.results_from_string.get_failing_tests): Gracefully handle the case of missing 'report' key.

2019-10-23  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.results
        https://bugs.webkit.org/show_bug.cgi?id=202478

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/test-webkitpy-python3: Add webkitpy.results.
        * Scripts/webkitpy/results/upload.py:
        (Upload.Encoder.default): Use range instead of xrange.
        (Upload.create_configuration): Support items iteration for Python 3.
        (Upload.create_run_stats): Change iteritems to items.
        (Upload.create_test_result): Ditto.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.Options.__init__): Change iteritems to items.
        (UploadTest.normalize): Ditto.

2019-10-22  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Supply FrameInfo in -[WKUIDelegatePrivate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=202563
        <rdar://problem/55973968>

        Reviewed by Brent Fulgham.

        Adds new test contents into existing tests.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate init]):
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (-[TestWebAuthenticationPanelUIDelegate frame]):
        (TestWebKitAPI::TEST):

2019-10-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix tvOS and watchOS engineering builds after r251377

        -[UIPasteboard itemProviders] is only available on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:
        (writeMultipleObjectsToPlatformPasteboard):

2019-10-23  Jonathan Bedard  <jbedard@apple.com>

        Python 3: 2to3 script may not be in a user's path
        https://bugs.webkit.org/show_bug.cgi?id=203213

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.__init__): Remove executive dependencies.
        (AutoinstallImportHook._install_beautifulsoup): Use multiprocess because 2to3 sets
        Some undesirable global logging state.

2019-10-23  Tim Horton  <timothy_horton@apple.com>

        prepare-ChangeLog should whine about not having tests in WebKit-only patches
        https://bugs.webkit.org/show_bug.cgi?id=203027

        Reviewed by Ryosuke Niwa.

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs):
        Put the "No new tests" or list of newly added tests in the deeper
        of the WebCore or WebKit ChangeLogs, depending on which directories
        the patch touches.

        This is mostly intended to encourage tests for WebKit-only changes.

2019-10-22  Aakash Jain  <aakash_jain@apple.com>

        [ews] Status bubble should show previous failures if any in case patch is skipped
        https://bugs.webkit.org/show_bug.cgi?id=203261

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Display build information from previous builds for skipped patch in
        case there are multiple builds.

2019-10-22  Alex Christensen  <achristensen@webkit.org>

        Re-enable legacy TLS by default, keep runtime switch
        https://bugs.webkit.org/show_bug.cgi?id=203253

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::getWebSocketEventWebKitLegacy):

2019-10-22  Aakash Jain  <aakash_jain@apple.com>

        [ews] Download the build archive from master when download from S3 fails
        https://bugs.webkit.org/show_bug.cgi?id=203263

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (DownloadBuiltProduct.evaluateCommand):
        (DownloadBuiltProductFromMaster): Build step to download the archive from build master.
        (DownloadBuiltProductFromMaster.getResultSummary): Added custom failure message.
        (DownloadBuiltProductFromMaster.evaluateCommand): Overrided to ensure it doesn't use this method from base
        class DownloadBuiltProduct.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-10-22  youenn fablet  <youenn@apple.com>

        Remove mayHaveServiceWorkerRegisteredForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=203055

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Remove obsolete test.

2019-10-22  Antti Koivisto  <antti@apple.com>

        operator==(Vector, Vector) should work with different inline capacities
        https://bugs.webkit.org/show_bug.cgi?id=203245

        Reviewed by Alex Christensen.

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

2019-10-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Add a script to run ImageDiff manually
        https://bugs.webkit.org/show_bug.cgi?id=203226

        Reviewed by Adrian Perez de Castro.

        This allows to manually run the ImageDiff tool more easily, that
        is sometimes useful when debugging problems with it.

        * Scripts/run-imagediff: Added.

2019-10-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Thread JSGlobalObject* instead of ExecState*
        https://bugs.webkit.org/show_bug.cgi?id=202392

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestRunner.cpp:

2019-10-22  Dirk Schulze  <krit@webkit.org>

        Restore my committer status.

        Uneviewed.

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

2019-10-21  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] Change dot and lengend dot use same mechanism to center text and image
        https://bugs.webkit.org/show_bug.cgi?id=203216

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml:
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.dot *):
        (.dot img, .dot .text):
        (.dot>img, .dot>.text):
        (.dot.small img, .dot.small .text):
        (.dot.small>img, .dot.small>.text):
        (.dot.medium img, .dot.medium .text):
        (.dot.medium>img, .dot.medium>.text):
        (.dot.large img, .dot.large .text):
        (.dot.large>img, .dot.large>.text):
        (.lengend>.item .dot):
        (.lengend>.item .dot img, .lengend>.item .dot .text):
        (.lengend>.item .dot>img, .lengend>.item .dot>.text):
        (.dot.small *): Deleted.
        (.dot img, .dot.small img): Deleted.
        (.dot.medium *): Deleted.
        (.dot.medium img): Deleted.
        (.dot.large *): Deleted.
        (.dot.large img): Deleted.
        (.lengend>.item .dot .text): Deleted.
        (.lengend>.item .dot img): Deleted.

2019-10-21  youenn fablet  <youenn@apple.com>

        Move service worker registration matching for navigation loads to network process
        https://bugs.webkit.org/show_bug.cgi?id=203144

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        We are now creating a WebSWClientConnection whenever receiving a WebSWClientConnection message
        from NetworkProcess. It is free to do so given it no longer requires sending some IPC.
        Update the tests accordingly.
        A future patch will remove the service worker registration bit feature and corresponding test.

2019-10-21  Simon Fraser  <simon.fraser@apple.com>

        TestWebKitAPI.ScrollViewScrollabilityTests.ScrollableWithOverflowHiddenAndInputView is failing on iPad simulator
        https://bugs.webkit.org/show_bug.cgi?id=203053

        Reviewed by Wenson Hsieh.
        
        Make ScrollableWithOverflowHiddenAndInputView only test the results on iPhones. Test is not designed for ipad.

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

2019-10-21  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add ability to display time on bubbles
        https://bugs.webkit.org/show_bug.cgi?id=203202
        <rdar://problem/56436621>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Add switch to show times under each bubble.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Correctly update timeline on callback.

2019-10-21  Dean Jackson  <dino@apple.com>

        Dispatch AR event on the originating anchor element
        https://bugs.webkit.org/show_bug.cgi?id=203198
        <rdar://55743929>

        Reviewed by Simon Fraser.

        Improve this test, most importantly so that it
        actually works :)

        Retrieve the ElementIdentifier for the <a> element,
        and trigger a system preview action on it.

        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        (-[TestSystemPreviewTriggeredHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/system-preview-trigger.html:

2019-10-21  Alex Christensen  <achristensen@webkit.org>

        ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
        https://bugs.webkit.org/show_bug.cgi?id=203141

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForRestoreFromDiskTest userContentController:didReceiveScriptMessage:]):
        (-[SWSchemes handledRequests]): Deleted.
        (-[SWSchemes webView:startURLSchemeTask:]): Deleted.
        (-[SWSchemes webView:stopURLSchemeTask:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h: Added.
        (ServiceWorkerTCPServer::ServiceWorkerTCPServer):
        (ServiceWorkerTCPServer::request):
        (ServiceWorkerTCPServer::requestWithLocalhost):
        (ServiceWorkerTCPServer::requestWithFragment):
        (ServiceWorkerTCPServer::userAgentsChecked):
        (ServiceWorkerTCPServer::requestWithFormat):
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        (-[StorageSchemes webView:startURLSchemeTask:]): Deleted.
        (-[StorageSchemes webView:stopURLSchemeTask:]): Deleted.

2019-10-21  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.config
        https://bugs.webkit.org/show_bug.cgi?id=202463

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.config to the test list.
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__init__): Convert lists to maps.
        (Contributor.__str__): __str__ will always return the native string type.
        (Contributor.__unicode__): Use .format() string.
        (CommitterList._exclusive_contributors): Convert filter to list.
        (CommitterList._exclusive_committers): Ditto.
        (CommitterList.contributors_by_search_string): Ditto.
        * Scripts/webkitpy/common/config/committervalidator_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/config/contributionareas_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.makeArgs): Use 'in' instead of has_key.
        * Scripts/webkitpy/common/config/urls_unittest.py:
        * Scripts/webkitpy/common/unicode_compatibility.py:
        (encode_for): Encode string for type.
        * Scripts/webkitpy/thirdparty/BeautifulSoup.py: Make html5lib import auto-install compatible.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Add html5lib.
        (AutoinstallImportHook._install_html5lib): Make html5lib a stand-alone installed package.
        (AutoinstallImportHook._install_mechanize): Install html5lib.
        (AutoinstallImportHook._install_beautifulsoup): Ditto.

2019-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Implement ClipboardItem.getType() for platform clipboard items
        https://bugs.webkit.org/show_bug.cgi?id=203168

        Reviewed by Tim Horton.

        Add support for the new layout tests, as well as a new API test.

        * DumpRenderTree/ios/UIScriptControllerIOS.h:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::copyText):

        Implement UIScriptController.copyText in WebKit1. This is used in one of the new layout tests, which passes in
        WebKit1 on macOS and iOS.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):

        Adjust logic when declaring types on the platform pasteboard, such that it behaves more like the platform; when
        declaring types, even if the owner doesn't change, the change count should still get bumped up by 1.

        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::copyText):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm: Added.
        (-[TestWKWebView readClipboard]):
        (createWebViewForClipboardTests):
        (writeMultipleObjectsToPlatformPasteboard):

        Add a new API test to verify that clipboard items contain the right data when writing multiple items (each with
        different sets of types) to the platform pasteboard using native APIs.

        * TestWebKitAPI/Tests/WebKitCocoa/clipboard.html: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):

2019-10-21  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net
        https://bugs.webkit.org/show_bug.cgi?id=202464

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.
        * Scripts/webkitpy/common/net/credentials_unittest.py: Replace raw_input with input for Python3.
        * Scripts/webkitpy/common/net/ewsserver.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (ParsedJSONResults.__init__): Sort results by test name.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        (test_basic): Sort results by test name.
        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer._fetch_url):
        * Scripts/webkitpy/common/net/unittestresults_unittest.py:

2019-10-18  Aakash Jain  <aakash_jain@apple.com>

        EWS should have a way to retry a patch
        https://bugs.webkit.org/show_bug.cgi?id=196599

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build): Add the retried field to keep track of whether a build is requested to be retried or not.
        (Build.set_retried): Method to set the retried field.
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Added the 'Retry failed builds' button.
        * BuildSlaveSupport/ews-app/ews/views/retrypatch.py:
        (RetryPatch.post): Added a check if the build is already retried. Also, set the retried flag appropriately.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Updated the status-bubble to in-progress while waiting for build to be retried.
        (StatusBubble._build_bubbles_for_patch): Display the retry button only if there are failed builds.
        * BuildSlaveSupport/ews-app/ews/migrations/0002_build_retried.py: Added database migration.

2019-10-21  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Revert WebKitMediaSrc rework temporarily
        https://bugs.webkit.org/show_bug.cgi?id=203078

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/style/checker.py:

2019-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Mark some more WTF unit tests as slow for GTK and WPE

        * TestWebKitAPI/glib/TestExpectations.json:

2019-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Check we don't leak the WebKitWebContext in all tests
        https://bugs.webkit.org/show_bug.cgi?id=202981

        Reviewed by Žan Doberšek.

        Also include the number of references left in leaks report.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        (Test::~Test):

2019-10-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Warn users when no credentials are found
        https://bugs.webkit.org/show_bug.cgi?id=203147
        <rdar://problem/55931123>

        Reviewed by Brent Fulgham.

        Adds new tests for _WKWebAuthenticationPanelUpdateNoCredentialsFound.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-cancel.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-no-credentials.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-u2f-no-credentials.html: Added.

2019-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Refactor Pasteboard::read() to take an optional item index
        https://bugs.webkit.org/show_bug.cgi?id=203161

        Reviewed by Tim Horton.

        Add a couple of new API tests to verify that the web archive type identifier ("com.apple.webarchive") is (1)
        written to the pasteboard when copying a rich text selection, and (2) is read when attempting to paste web
        content.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:

2019-10-18  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.watchlist
        https://bugs.webkit.org/show_bug.cgi?id=202473

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.watchlist.
        * Scripts/webkitpy/common/watchlist/watchlist.py:
        (WatchList.find_matching_definitions): Use items instead of iteritems.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        (WatchListTest.test_filename_definition_no_matches): Back-slash needs to be escaped.
        (WatchListTest.test_filename_definition): Ditto.
        (WatchListTest.test_cc_rules_simple): Ditto.
        (WatchListTest.test_cc_rules_complex): Ditto.
        (WatchListTest.test_cc_and_message_rules_complex): Ditto.
        (WatchListTest.test_cc_and_message_rules_no_matches): Ditto.
        (WatchListTest.test_more_and_less_match): Ditto.
        (WatchListTest.test_complex_match): Ditto.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        (WatchListParserTest.test_bad_definition): Back-slash needs to be escaped.
        (WatchListParserTest.test_bad_filename_regex): Ditto.
        (WatchListParserTest.test_bad_more_regex): Ditto.
        (WatchListParserTest.test_bad_match_type): Ditto.
        (WatchListParserTest.test_match_type_typo): Ditto.
        (WatchListParserTest.test_empty_cc_rule): Ditto.
        (WatchListParserTest.test_cc_rule_with_invalid_email): Ditto.
        (WatchListParserTest.test_cc_rule_with_secondary_email): Ditto.
        (WatchListParserTest.test_empty_message_rule): Ditto.
        (WatchListParserTest.test_unused_defintion): Ditto.
        (WatchListParserTest.test_cc_rule_with_undefined_defintion_with_suggestion): Ditto.

2019-10-18  Raphael Kubo da Costa  <rakuco@webkit.org>

        Remove myself from the CMake watchlist
        https://bugs.webkit.org/show_bug.cgi?id=203166

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/watchlist:

2019-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, remove an extraneous header import after r251279

        Address a post-landing review comment.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:

2019-10-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement AuthenticatorCancel
        https://bugs.webkit.org/show_bug.cgi?id=191523
        <rdar://problem/55920204>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-cancel.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion.html:

2019-10-18  Brian Burg  <bburg@apple.com>

        Cleanup: Stop setting -ApplePersistenceIgnoreState when running debug Mac WebKit
        https://bugs.webkit.org/show_bug.cgi?id=203156

        Reviewed by Jonathan Bedard.

        This is no longer needed. The new value has been supported since 2014.

        * Scripts/webkitdirs.pm:
        (argumentsForRunAndDebugMacWebKitApp):

2019-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Support navigator.clipboard.read()
        https://bugs.webkit.org/show_bug.cgi?id=203021

        Reviewed by Ryosuke Niwa.

        Make adjustments to WebKitTestRunner and DumpRenderTree to support the new layout tests. See below for more
        details.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard pasteboardItems]):

        Fixes an existing issue with the mock NSPasteboard used for layout tests. Currently, our logic for converting
        the contents of the platform pasteboard to NSPasteboardItem simply writes the pasteboard data as-is to
        NSPasteboardItems. However, these pasteboard types may be legacy pasteboard types, in which case
        NSPasteboardItem will simply handle the call to `-setData:forType:` as a no-op. AppKit has logic in this
        scenario to canonicalize these legacy pasteboard types to their modern counterparts, but this is absent in
        DumpRenderTreePasteboard and WebKitTestRunnerPasteboard.

        Address this by teaching the mock pasteboards to convert legacy types to modern types when generating platform
        pasteboard items.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::copyText):

        Add a new UIScriptController method to write a string to the platform pasteboard. This patch adds support for
        this new testing hook on macOS and iOS, in WebKit2 (WebKitTestRunner).

        * TestRunnerShared/mac/NSPasteboardAdditions.h: Copied from Tools/WebKitTestRunner/mac/UIScriptControllerMac.h.
        * TestRunnerShared/mac/NSPasteboardAdditions.mm: Added.
        (+[NSPasteboard _modernPasteboardType:]):

        Add a helper to convert legacy pasteboard types (and dynamic UTIs that map to legacy pasteboard types) to
        modern pasteboard types, suitable for writing to NSPasteboardItems on macOS.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::copyText):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::copyText):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:

        Apply the same fix for WebKitTestRunner's mock NSPasteboard.

        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):
        (-[LocalPasteboard clearContents]):

        Make -clearContents clear out all the contents on the mock pasteboard, instead of crashing in AppKit.

        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard pasteboardItems]):

2019-10-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr in more places and remove some unnecessary external linkage.
        https://bugs.webkit.org/show_bug.cgi?id=203115

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm:

2019-10-17  Sihui Liu  <sihui_liu@apple.com>

        Using version 1 CFRunloopSource for faster task dispatch
        https://bugs.webkit.org/show_bug.cgi?id=202874

        Reviewed by Geoffrey Garen.

        Fix a flaky test.

        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2019-10-17  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net.buildbot 
        https://bugs.webkit.org/show_bug.cgi?id=202466

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.buildbot to the test list.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.url_encoded_name): Call compatible urllib quote.
        (Builder.revision_build_pairs_with_results): Convert iterator to list before returning.
        (Build.results_url): Call compatible urllib quote.
        (BuildBot._parse_last_build_cell):renderContents needs to be decoded in Python 3.
        (BuildBot._parse_current_build_cell): BeautifulSoup and bs4 render breaks differently.
        (BuildBot._fetch_build_dictionary): Call compatible urllib quote.
        * Scripts/webkitpy/common/net/regressionwindow.py:
        (RegressionWindow.revisions): Convert range(...) to list.

2019-10-17  Aakash Jain  <aakash_jain@apple.com>

        [ews] status bubbles should show details from all the builds in case build is retried
        https://bugs.webkit.org/show_bug.cgi?id=203117

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Display messages from all the builds (including retried builds) for a patch on a queue.
        (StatusBubble._steps_messages_from_multiple_builds): Method to generate status using information from all the retried builds. 
        (StatusBubble.get_all_builds_for_queue): Method to get all the builds instead of just the latest one.
        (StatusBubble.get_latest_build_for_queue): Modified to use the new get_all_builds_for_queue() method.

2019-10-17  Emilio Cobos Álvarez  <emilio@crisal.io>

        [GTK] Explicitly use Python 2 in jhbuild-wrapper
        https://bugs.webkit.org/show_bug.cgi?id=202790

        Reviewed by Adrian Perez de Castro.

        jhbuildutils.py requires Python 2 for the moment, so using just
        `python` fails in distros where Python 3 is the default.

        * jhbuild/jhbuild-wrapper:

2019-10-17  Paulo Matos  <pmatos@igalia.com>

        Check values of variables before extracting index in perl
        https://bugs.webkit.org/show_bug.cgi?id=202333

        Reviewed by Jonathan Bedard.

        If compiler doesn't properly report the host and target it was
        compiled for, lacking better information we just go ahead and assume
        there is no cross compilation involved.
        
        * Scripts/webkitdirs.pm:
        (isCrossCompilation):

2019-10-17  Pablo Saavedra  <psaavedra@igalia.com>

        Add a driver for MiniBrowser running with WPE for
        benchmark_runner
        https://bugs.webkit.org/show_bug.cgi?id=202994

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowserwpe_driver.py: Added.
        (WPEMiniBrowserDriver):
        (WPEMiniBrowserDriver.launch_url):
        (WPEMiniBrowserDriver.launch_driver):

2019-10-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        run-buildbot-test: sqlalchemy exception when upgrading the database
        https://bugs.webkit.org/show_bug.cgi?id=202927

        Reviewed by Adrian Perez de Castro.

        Update the version of sqlalchemy-migrate for pip used for the test.
        That fixes the exception when upgrading the database.

        * BuildSlaveSupport/build.webkit.org-config/run-buildbot-test.py:

2019-10-16  Andy Estes  <aestes@apple.com>

        [Quick Look] Test that legacy web views load previews before deciding content policy
        https://bugs.webkit.org/show_bug.cgi?id=202971

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookLegacyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        (TEST):
        (-[QuickLookFrameLoadDelegate webView:didFinishLoadForFrame:]): Deleted.

2019-10-16  Chris Dumez  <cdumez@apple.com>

        Rename PageCache to BackForwardCache
        https://bugs.webkit.org/show_bug.cgi?id=203048

        Reviewed by Alex Christensen.

        Rename PageCache to BackForwardCache for clarity and consistency with the UIProcess's WebBackForwardCache.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestRunner.cpp:
        (overridePreferenceCallback):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDisconnectDOMWindowExtensionFromGlobalObject):
        (TestWebKitAPI::DOMWindowExtensionNoCache::didReconnectDOMWindowExtensionToGlobalObject):
        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::DidRemoveFrameFromHiearchyInBackForwardCacheTest::DidRemoveFrameFromHiearchyInBackForwardCacheTest):
        (TestWebKitAPI::DidRemoveFrameFromHiearchyInBackForwardCacheTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::overridePreference):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * lldb/lldb_webkit.py:
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):
        (WebCoreDocumentProvider.page_cache_state):

2019-10-16  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net.bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=202468

        Reviewed by Stephanie Lewis.

        Make the irc library we use Python 3 compatible.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.bugzilla to the test list.
        * Scripts/webkitpy/thirdparty/irc/ircbot.py: Use full import paths.
        * Scripts/webkitpy/thirdparty/irc/irclib.py: Fix exceptions, printing for Python 3.
        (Connection._get_socket): 
        (ServerConnection.connect):
        (ServerConnection.process_data):
        (ServerConnection.disconnect):
        (ServerConnection.send_raw):
        (DCCConnection.connect):
        (DCCConnection.listen):
        (DCCConnection.disconnect):
        (DCCConnection.process_data):
        (DCCConnection.privmsg):

2019-10-16  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Block all third-party cookies on websites without prior user interaction
        https://bugs.webkit.org/show_bug.cgi?id=203017
        <rdar://problem/56262708>

        Reviewed by Alex Christensen.

        These changes are test infrastructure to be able to toggle the function
        through testRunner.setStatisticsShouldBlockThirdPartyCookies().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsShouldBlockThirdPartyCookies):
        (WTR::TestRunner::statisticsCallDidSetShouldBlockThirdPartyCookiesCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsShouldBlockThirdPartyCookies):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetShouldBlockThirdPartyCookies):
        * WebKitTestRunner/TestInvocation.h:

2019-10-16  Kate Cheney  <katherine_cheney@apple.com>

        WKWebsiteDataStoreStatisticsResetToConsistentState() should call store.setUseITPDatabase(false)
        https://bugs.webkit.org/show_bug.cgi?id=203020
        <rdar://problem/56314484>

        Reviewed by Chris Dumez.

        Added a completion handler to setUseITPDatabase() to avoid race
        conditions.

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

2019-10-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        DumpRenderTree should clear WTFLogChannelState::OnWithAccumulation state set by testRunner.accummulateLogsForChannel
        https://bugs.webkit.org/show_bug.cgi?id=203024

        Reviewed by Alex Christensen.

        If a test case calls testRunner.accummulateLogsForChannel("IndexedDB"),
        all subsequent IndexedDB tests also dump the log.
        This is unnecessarily bloating DumpRenderTree log because
        DumpRenderTree is run with --debug-rwt-logging switch on Buildbot.

        Add a function to clear WTFLogChannelState::OnWithAccumulation
        state, and call it for every test execution.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        Call WebCoreTestSupport::clearAllLogChannelsToAccumulate.

2019-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove an API test workaround that is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=203037

        Reviewed by Tim Horton.

        This worked around <rdar://problem/51510554> by avoiding codepaths that resulted in failure to read dropped
        content from NSItemProviders on iOS. <rdar://problem/51510554> is fixed in iOS 13, so we can remove this hack.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        (applyWorkaroundToAllowWritingAttributedStringsToItemProviders): Deleted.

2019-10-16  Pablo Saavedra  <psaavedra@igalia.com>

        [Tools] Add a driver for cog for benchmark_runner.py
        https://bugs.webkit.org/show_bug.cgi?id=202995

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_cog_driver.py: Added.
        (CogBrowserDriver):
        (CogBrowserDriver.launch_url):
        (CogBrowserDriver.launch_driver):
        (CogFdoBrowserDriver):
        (CogFdoBrowserDriver.launch_url):

2019-10-16  Youenn Fablet  <youenn@apple.com>

        WebAudioSourceProviderAVFObjC::provideInput should set its WebAudioBufferList parameters correctly
        https://bugs.webkit.org/show_bug.cgi?id=202930
        <rdar://problem/56006776>

        Reviewed by Eric Carlson.

        Add a test that has an audio track that goes from 1 to 2 channels while being piped to a WebAudio pipeline.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (-[GUMMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia-webaudio.html: Added.

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add user messages API
        https://bugs.webkit.org/show_bug.cgi?id=202847

        Reviewed by Adrian Perez de Castro.

        Add a test to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (UserMessageTest::webViewUserMessageReceivedCallback):
        (UserMessageTest::webContextUserMessageReceivedCallback):
        (UserMessageTest::UserMessageTest):
        (UserMessageTest::~UserMessageTest):
        (UserMessageTest::sendMessage):
        (UserMessageTest::sendMedssageToAllExtensions):
        (UserMessageTest::viewUserMessageReceived):
        (UserMessageTest::contextUserMessageReceived):
        (UserMessageTest::waitUntilViewMessageReceived):
        (UserMessageTest::waitUntilContextMessageReceived):
        (readFileDescritpor):
        (testWebExtensionUserMessages):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (documentLoadedCallback):
        (pageMessageReceivedCallback):
        (pageCreatedCallback):
        (extensionMessageReceivedCallback):
        (webkit_web_extension_initialize_with_user_data):

2019-10-15  Aakash Jain  <aakash_jain@apple.com>

        Improve summary for WebKitPerl Tests build step
        https://bugs.webkit.org/show_bug.cgi?id=203006

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPerlTests.getResultSummary): Override method to customize summary.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-10-15  Zhifei Fang  <zhifei_fang@apple.com>

        Tool to mark jsc test skip/enable
        https://bugs.webkit.org/show_bug.cgi?id=202063

        Reviewed by Keith Miller.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:

2019-10-15  Peng Liu  <peng.liu6@apple.com>

        [Picture-in-Picture Web API] Implement HTMLVideoElement.requestPictureInPicture() / Document.exitPictureInPicture()
        https://bugs.webkit.org/show_bug.cgi?id=201024

        Reviewed by Eric Carlson.

        Add configurations for Picture-in-Picture API and enable it in the test runner.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPictureInPictureAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-10-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Rename -[WKUIDelegatePrivate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:] to -[WKUIDelegatePrivate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=202564
        <rdar://problem/55974027>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]): Deleted.

2019-10-15  Aakash Jain  <aakash_jain@apple.com>

        [ews] Use python 3 compatible way to represent octal in buildbot code
        https://bugs.webkit.org/show_bug.cgi?id=202999

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/buildbot.tac:
        * BuildSlaveSupport/ews-build/steps.py:

2019-10-15  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add os version to various unix ports
        https://bugs.webkit.org/show_bug.cgi?id=202955

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Use platform.release() to defined the os_version.

2019-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION: editing/async-clipboard/clipboard-interfaces.html is failing in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=202940
        <rdar://problem/56262298>

        Reviewed by Ryosuke Niwa.

        Add some plumbing to support the async clipboard API experimental test option in Windows.

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

2019-10-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Write more tests for _WKWebAuthenticationPanel
        https://bugs.webkit.org/show_bug.cgi?id=202565
        <rdar://problem/55974128>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:]):
        (-[TestWebAuthenticationPanelUIDelegate init]):
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc.html: Added.

2019-10-15  Alex Christensen  <achristensen@webkit.org>

        Pass CORS-enabled schemes through WebProcess instead of having them NetworkProcess-global
        https://bugs.webkit.org/show_bug.cgi?id=202891

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerWithExpectedMessage userContentController:didReceiveScriptMessage:]):
        Use EXPECT_WK_STREQ so I can see what is going on on EWS.

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix several GTK tests in /WebKit2Gtk/TestUIClient crashing since r241988

        This was not caused by r241988, but revealed the existing bug. We were not creating the new WebKitWebView in
        UIClientTest with the related WebKitWebView. Since r241988, the new WebPageProxy drawing area is passed to
        creationParameters(), but it's nullptr because the WebPageProxy hasn't been initialized yet. When using related
        views, the new WebPageProxy is already initialized because it has running processes on creation.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /WebKit2Gtk/TestWebViewEditor

        It's failing since we delay the web process launch until the first load. Load about:blank in the test
        constructor to fix it.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /webkit/Authentication/authentication-storage after r249962

        The test was still using the legacy private browsing API that is a no-op since r249962. This partch updates the
        test to use a ephemeral WebView instead.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (EphemeralAuthenticationTest::setup):
        (EphemeralAuthenticationTest::teardown):
        (testWebViewAuthenticationEphemeral):
        (testWebViewAuthenticationStorage):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /webkit/WebKitSettings/webkit-settings after r249962.

        Stop testing WebKitSettings:enable-private-browsing.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2019-10-15  Alicia Boya García  <aboya@igalia.com>

        gdb webkit.py: Fix iterator error in Python3
        https://bugs.webkit.org/show_bug.cgi?id=202926

        Reviewed by Jonathan Bedard.

        Some distros use Python3 for gdb, so the script needs to be compatible with both versions for it to work.

        * gdb/webkit.py:
        (WTFVectorPrinter.Iterator.__next__):

2019-10-14  Zhifei FANG  <zhifei_fang@apple.com>

        results.webkit.org: TypeError when evaluating empty commits
        https://bugs.webkit.org/show_bug.cgi?id=202936

        Reviewed by Jonathan Bedard.

        *resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js: Draw empty line when invaild scales or dots state pass in

2019-10-14  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net.bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=202465

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.bugzilla to the test list.
        * Scripts/webkitpy/common/net/bugzilla/__init__.py: Use full import paths.
        * Scripts/webkitpy/common/net/bugzilla/attachment_unittest.py: Ditto.
        * Scripts/webkitpy/common/net/bugzilla/bug.py: Ditto.
        (Bug.commit_revision): Dictionary sorting is no longer well defined in Python 3.
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Ditto.
        (EditUsersParser.login_userid_pairs_from_edit_user_results): Return list, not an iterator.
        (EditUsersParser.user_dict_from_edit_user_page): HTML_ENTITIES is logically connected to BeautifulSoup, not
        BeautifulStoneSoup. 
        (BugzillaQueries._parse_attachment_ids_request_query): Explicitly cast date_tag to unicode.
        (Bugzilla._parse_attachment_element): Legacy BeautifulSoup and bs4 Elements have different function calls.
        (Bugzilla._file_object_for_upload): Use BytesIO instead of StringIO.
        (Bugzilla.create_bug):
        (reopen_bug): Access map as list, not iterator.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py: Use full import paths.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Ditto.
        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater.py:
        (TestExpectationUpdater._update_from_generic_attachment): Use items over iteritems().
        (TestExpectationUpdater._update_from_platform_specific_attachment): Ditto.
        (TestExpectationUpdater.do_update): Ditto.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Use Python 2/3 compatible urllib.
        * Scripts/webkitpy/common/net/credentials.py: Use import statement to force autoinstall logic.
        * Scripts/webkitpy/common/net/file_uploader.py: Use Python 2/3 compatible urllib.
        (FileUploader._upload_data.callback):
        (FileUploader):
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (JSONTestResult._tokenize): Force map() call to return a list.
        * Scripts/webkitpy/common/net/web_mock.py: Use Python 2/3 compatible urllib.
        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller.install): Return True if install was required, otherwise, return False.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__): Encode strings before writing them to the filesystem.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: Use Python 2/3 compatible urllib.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser): Use items over iteritems().
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Use Python 3 compatible Pickle library.
        * Scripts/webkitpy/layout_tests/models/test_results.py: Ditto.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_crashlog_path): Use dictionary for files.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Update directories excluded from testing.
        * Scripts/webkitpy/thirdparty/BeautifulSoup.py: Replaced.
        (BeautifulSoup):Wrapper class making bs4 BeautifulSoup compatible with legacy BeautifulSoup calls.
        (BeautifulStoneSoup): Ditto.
        * Scripts/webkitpy/thirdparty/BeautifulSoup_legacy.py: Copied from Tools/Scripts/webkitpy/thirdparty/BeautifulSoup.py.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.__init__): Accept executive.
        (AutoinstallImportHook.find_module): Add beautifulsoup.
        (AutoinstallImportHook._install_beautifulsoup): bs4 must be converted via 2to3 before use in Python 3.
        (AutoinstallImportHook._install): Return result from installer.
        * Scripts/webkitpy/thirdparty/mock.py:
        (Mock.reset_mock): Use values() instead of itervalues().

2019-10-14  Matt Mokary  <mmokary@apple.com>

        FindController::findString always updates foundStringMatchIndex even if match is the same as before
        https://bugs.webkit.org/show_bug.cgi?id=201775
        <rdar://problem/55352425>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        (TestWebKitAPI::TEST):
        _WKFindOptionsNoIndexChange test

2019-10-14  Andy Estes  <aestes@apple.com>

        REGRESSION (r243682): Quick Look previews loaded from the memory cache render with the wrong content type
        https://bugs.webkit.org/show_bug.cgi?id=202935
        <rdar://problem/54318133>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView synchronouslyGoBack]):
        (-[WKWebView synchronouslyGoForward]):

2019-10-14  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: [iOS 13?] TestWebKitAPI.SharedBufferTest.tryCreateArrayBufferLargeSegments is failing
        https://bugs.webkit.org/show_bug.cgi?id=201902

        Reviewed by Ryosuke Niwa.

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

2019-10-14  Saam Barati  <sbarati@apple.com>

        Canonicalize how we prepare the prototype chain for inline caching
        https://bugs.webkit.org/show_bug.cgi?id=202827
        <rdar://problem/56193919>

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2019-10-14  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Update my nickname.

        Unreviewed.

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

2019-10-14  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Fix Tools/Scripts/update-webkitgtk-libs build failure in 'gst-plugins-bad'
        https://bugs.webkit.org/show_bug.cgi?id=202931

        Reviewed by Philippe Normand.

        OpenEXR dependency is not required and causes a build failure on Ubuntu
        19.04 with OpenEXR 2.2.1, as described here:
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1089

        * gstreamer/jhbuild.modules: Disable openexr in meson build options.

2019-10-14  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Make recent=False more usable
        https://bugs.webkit.org/show_bug.cgi?id=202873

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/configuration_context.py:
        (ConfigurationContext.search_for_configuration): If no configuration is specified,
        use a set of configurations defined by recent platform.
        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py:
        (ConfigurationContextTest.test_expired_configurations): Test that recent=False works.

2019-10-14  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed, set Adrian Perez de Castro as WebKit Reviewer

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

2019-10-14  youenn fablet  <youenn@apple.com>

        Reuse existing web processes for running service workers
        https://bugs.webkit.org/show_bug.cgi?id=202195

        Reviewed by Chris Dumez.

        Add support for enforcing a separate process for service workers.
        This is useful for tests trying to crash the service worker process.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Update test to use serviceWorkerProcessCount.
        Add test to check for in process and out of process service workers.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseSeparateServiceWorkerProcess):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-10-12  Chris Dumez  <cdumez@apple.com>

        Back/Forward cache does not work after doing a favorite navigation
        https://bugs.webkit.org/show_bug.cgi?id=202762
        <rdar://problem/56126911>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        requestIdleCallback cannot be enabled in DumpRenderTree on Windows
        https://bugs.webkit.org/show_bug.cgi?id=202876

        Reviewed by Wenson Hsieh.

        Added the missing plumbing for Windows port.

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

2019-10-11  Aakash Jain  <aakash_jain@apple.com>

        Update build.webkit.org basedir
        https://bugs.webkit.org/show_bug.cgi?id=202856

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac: Updated basedir. Also increased the
        size of twistd.log files and reduced number of files for easier maintenance.

2019-10-11  Aakash Jain  <aakash_jain@apple.com>

        [ews] Services EWS should also run build.webkit.org unit tests
        https://bugs.webkit.org/show_bug.cgi?id=202864

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (ServicesFactory.__init__): Added new RunBuildWebKitUnitTests step.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Added paths for build.webkit.org code.
        (RunBuildWebKitUnitTests): Build step to run build.webkit.org unit tests.
        (RunBuildWebKitUnitTests.__init__): Set workdir, timeout and logEnviron.
        (RunBuildWebKitUnitTests.getResultSummary): Customize Buildbot messages for this build step.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-10-11  Chris Dumez  <cdumez@apple.com>

        Move SuspendedPage logic from WebProcessPool to new WebBackForwardCache class
        https://bugs.webkit.org/show_bug.cgi?id=202660

        Reviewed by Antti Koivisto.

        Drop test that relied on reusing a SuspendedPage's process from a loadHTMLStringLoad (optimization).
        This no longer works now that SuspendedPages are owned by their associated back/forward item because
        we currently do not create a back/forward item for loadHTMLString requests. Suspending a page for a
        loadHTMLString was also wasteful since there was no way to restore that page (given that there was
        no WebBackForwardListItem to go back to).

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-10-11  Brian Burg  <bburg@apple.com>

        Remove some dead code in webkitpy's mac.py
        https://bugs.webkit.org/show_bug.cgi?id=202853

        Reviewed by Alexey Proskuryakov.

        - Remove _build_java_test_support as it no longer does anything.
        - Remove _check_port_build as it's only used to build Java test support.
        - Remove unused is_mavericks() function.
        - Remove a log stripping pattern that was fixed several releases ago.

        * Scripts/webkitpy/port/base.py:
        (Port.check_build):
        (Port.check_api_test_build):
        (Port._check_driver):
        (Port._check_port_build): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.operating_system):
        (MacPort.default_child_processes):
        (MacPort.logging_patterns_to_strip):
        (MacPort.is_mavericks): Deleted.
        (MacPort._build_java_test_support): Deleted.
        (MacPort._check_port_build): Deleted.

2019-10-11  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] API tests should output result summary in json format
        https://bugs.webkit.org/show_bug.cgi?id=202854

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunAPITests): Output results in json format as well.

2019-10-11  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r250945.

        Broke 18 Debug API tests

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250945

2019-10-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] auto-installing raises exception "Inner message: global name 'urllib2' is not defined" since r250869
        https://bugs.webkit.org/show_bug.cgi?id=202839

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download_to_stream): Replaced urllib2.urlopen with urlopen.

2019-10-10  Kenneth Russell  <kbr@chromium.org>

        New html5lib requires newer version of six.py than that shipped in macOS 10.14.6
        https://bugs.webkit.org/show_bug.cgi?id=202830

        Autoinstall six along with html5lib.

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize):
        (AutoinstallImportHook._install_pytest):

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Sort out certificates on Catalina
        https://bugs.webkit.org/show_bug.cgi?id=202837

        Unreviewed infrastructure repair.

        This is a temporary strategy until we sort out our certificates on the newly
        deployed Catalina bots.

        * Scripts/webkitpy/results/upload.py:
        (Upload.upload):
        (Upload.upload_archive):
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.test_upload):
        (UploadTest.test_archive_upload):

2019-10-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        W3C test importer breaks svg files.
        https://bugs.webkit.org/show_bug.cgi?id=202806

        Reviewed by Jonathan Bedard.

        The WebKit W3C importer tries to rewrite the xml/html/css files
        when importing the tests to rewrite paths and such.

        The issue is that to decide if rewrite the file or not uses the
        mimetype and the current code was comparing for something like
        if "xml" in str(mimetype[0])

        But svg files have mimetype "image/svg+xml" so the previous code
        was trying to rewrite svg files, breaking them.

        This patches changes that code to only rewrite if the mimetype
        also contains the "application/" or "text/" string.

        It also adds an info log (printed when verbose enabled) to tell
        that a file has been rewritten.

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

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Serve correct exit codes when aborting
        https://bugs.webkit.org/show_bug.cgi?id=202817

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.error): Return exit code along with html string.

2019-10-10  Matt Lewis  <jlewis3@apple.com>

        Emergency unittest fix for wkbuild.

        Unreviewed test fix.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):

2019-10-10  Aakash Jain  <aakash_jain@apple.com>

        Updated new Catalina queues names as per new Buildbot naming scheme
        https://bugs.webkit.org/show_bug.cgi?id=202816

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Renamed builder name and removed spaces.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

2019-10-10  Matt Lewis  <jlewis3@apple.com>

        Fixing build scheduling for Catalina queues.
        https://bugs.webkit.org/show_bug.cgi?id=202814

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Drive By fix of Trigger.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):

2019-10-10  Sihui Liu  <sihui_liu@apple.com>

        Add a unit test for StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=202755

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp: Added.
        (TestWebKitAPI::TEST):

2019-10-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support programmatic paste requests on macOS
        https://bugs.webkit.org/show_bug.cgi?id=202773
        <rdar://problem/48957166>

        Reviewed by Tim Horton.

        Adds new testing support to enable us to test programmatic paste requests on macOS.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:

        Add a few new UIScriptController methods:
        - activateAtPoint(x, y, callback): used to activate content underneath at (x, y), in root view coordinates
          (WKWebView on macOS, and WKContentView on iOS). On macOS, this moves the mouse to the given location and
          clicks.
        - chooseMenuAction(action, callback): used to select a menu item with the given title.
        - dismissMenu(): dismisses the platform menu.

        Note that dismissMenu and chooseMenuAction currently only work for the DOM paste menu, but could be extended in
        the future to handle the system context menu.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dismissMenu):
        (WTR::UIScriptController::chooseMenuAction):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::activateAtPoint):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView _didShowMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):

        Make these present across both macOS and iOS. On macOS, we listen for NSMenuDidBeginTrackingNotification and
        NSMenuDidEndTrackingNotification to know when a menu has been shown or dismissed.

        (-[TestRunnerWKWebView dismissActiveMenu]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):

        Make these available on both iOS and macOS. The only interaction callbacks on macOS are currently
        didShowMenuCallback and didHideMenuCallback.

        (-[TestRunnerWKWebView _willHideMenu]):
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setDidShowMenuCallback):
        (WTR::UIScriptControllerCocoa::setDidHideMenuCallback):
        (WTR::UIScriptControllerCocoa::dismissMenu):
        (WTR::UIScriptControllerCocoa::isShowingMenu const):

        Move these implementations into UIScriptControllerCocoa, from UIScriptControllerIOS.

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

        Instead of clearing all interaction callbacks in TestControllerIOS, do it in TestControllerCocoa where it
        affects both macOS and iOS.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateAtPoint):
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::chooseMenuAction):
        (WTR::UIScriptControllerIOS::rectForMenuAction const):
        (WTR::UIScriptControllerIOS::setDidShowMenuCallback): Deleted.
        (WTR::UIScriptControllerIOS::setDidHideMenuCallback): Deleted.
        (WTR::UIScriptControllerIOS::isShowingMenu const): Deleted.

        Abstract rectForMenuAction and singleTapAtPointWithModifiers out into private helper methods, such that they can
        be used from within other script controller methods.

        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:

        Implement the new script controller hooks on macOS.

        (WTR::UIScriptControllerMac::clearAllCallbacks):
        (WTR::UIScriptControllerMac::chooseMenuAction):
        (WTR::UIScriptControllerMac::activateAtPoint):

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Increase default limit for test results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=202757

        Unreviewed follow-up fix.

        * resultsdbpy/resultsdbpy/view/templates/commits.html: Switch default and maximum limits.

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Start reporting results
        https://bugs.webkit.org/show_bug.cgi?id=202639

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig): Load API key for results.webkit.org.
        * BuildSlaveSupport/build.webkit.org-config/make_passwords_json.py:
        (create_mock_slave_passwords_dict): Add mock for API key.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests): Start reporting to results.webkit.org.
        (RunWebKitTests.__init__): Do not print the environment to hide the API key.
        (RunWebKitTests.start): Add the API key to the environment.
        (RunAPITests): Start reporting to results.webkit.org.
        (RunAPITests.__init__): Do not print the environment to hide the API key.
        (RunAPITests.start): Add the API key to the environment.
        (RunPythonTests): Start reporting to results.webkit.org.
        (RunPythonTests.__init__): Do not print the environment to hide the API key.
        (RunPythonTests.start): Add the API key to the environment.
        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.upload): Add API_KEY, if it exists, to the request.
        (Upload.upload_archive): Ditto.

2019-10-09  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r250930.

        Broke watchOS Builds

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250930

2019-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Move the mock testing entrance to Internals
        https://bugs.webkit.org/show_bug.cgi?id=202560
        <rdar://problem/55973793>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setWebAuthenticationMockConfiguration): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-10-09  Daniel Bates  <dabates@apple.com>

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Add a test to ensure we encode and decode a compact pointer tuple correctly when an uint8_t and
        a OptionSet<> as the byte value portion of the tuple.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CompactPointerTuple.cpp: Added.
        (TestWebKitAPI::TEST):

2019-10-09  Simon Fraser  <simon.fraser@apple.com>

        Rename WheelEventTestTrigger and improve naming in related code
        https://bugs.webkit.org/show_bug.cgi?id=202772

        Reviewed by Tim Horton.

        Change the "test trigger" terminology to "monitor wheel events"; after all, tests
        call monitorWheelEvents() and callAfterScrollingCompletes(), and this is not triggering
        a test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2019-10-09  Daniel Bates  <dabates@apple.com>

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Add a test to ensure we encode and decode a compact pointer tuple correctly when an uint8_t and
        a OptionSet<> as the byte value portion of the tuple.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CompactPointerTuple.cpp: Added.
        (TestWebKitAPI::TEST):

2019-10-09  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Increase default limit for test results
        https://bugs.webkit.org/show_bug.cgi?id=202757

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/suite_controller.py:
        (SuiteController): Increase DEFAULT_LIMIT.
        * resultsdbpy/resultsdbpy/controller/test_controller.py:
        (TestController): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (_CommitBank.prototype._load): Make commit shards larger.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Increase default slider size.
        * resultsdbpy/resultsdbpy/view/templates/commits.html: Keep smaller slider size.

2019-10-09  Dean Jackson  <dino@apple.com>

        Provide an alternate command-line flag for timeout in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=202758
        <rdar://problem/56124032>

        Reviewed by Tim Horton.

        I always get the flag "--time-out-ms" wrong.
        Everywhere else we use the single-word version of "timeout", including
        the documentation for --time-out-ms!

        Add an alternate that is just "--timeout", and update the documentation
        to mention it is measured in milliseconds.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2019-10-09  youenn fablet  <youenn@apple.com>

        Remove testRunner.setWebRTCUnifiedPlanEnabled
        https://bugs.webkit.org/show_bug.cgi?id=202700

        Reviewed by Eric Carlson.

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

2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r250597): [GTK][WPE] 2.27.1 shows HTML content as text/plain in custom protocols when passing a charset in content type
        https://bugs.webkit.org/show_bug.cgi?id=202633

        Reviewed by Žan Doberšek.

        Add a test case.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):

2019-10-08  Jiewen Tan  <jiewen_tan@apple.com>

        Partially undo r250811
        https://bugs.webkit.org/show_bug.cgi?id=202715
        <rdar://problem/56084287>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKit/navigation-client-default-crypto.html:
        Modified to crash if SerializedScriptValue doesn't wrap CryptoKey objects.

2019-10-08  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r250375): [old EWS] JSC EWS is always marking Patches as success
        https://bugs.webkit.org/show_bug.cgi?id=202419

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output): Return exit code.
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_with_bad_command): Test that exceptions are raised
        For non-zero exit codes.

2019-10-08  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support to auto-importer
        https://bugs.webkit.org/show_bug.cgi?id=201955

        Reviewed by Aakash Jain.

        * Scripts/test-webkitpy-python3: Auto-install everything.
        * Scripts/webkitpy/common/system/autoinstall.py: Import urlopen and urlparse for Python3.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Update function definition for Python3.
        (AutoinstallImportHook._install_mechanize): Use Python 2/3 compatible version of mechanize.
        (AutoinstallImportHook._install_requests): Update urllib3 and requests version.
        (AutoinstallImportHook._install_coverage): Use Python 2/3 compatible version of coverage.
        (AutoinstallImportHook.greater_than_equal_to_version): Use range instead of xrange.
        (AutoinstallImportHook._install_selenium): Update urllib3 version.
        (AutoinstallImportHook.install_chromedriver): 
        (AutoinstallImportHook.install_geckodriver):
        (AutoinstallImportHook.get_latest_pypi_url):
        (AutoinstallImportHook.install_binary):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest):
        (ThirdpartyTest.test_import_hook): Deleted.

2019-10-08  Yury Semikhatsky  <yurys@chromium.org>

        Restore my committer status.

        Uneviewed.

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

2019-10-08  Kate Cheney  <katherine_cheney@apple.com>

        Implement Telemetry and Dumping Routines for SQLite backend (195088)
        https://bugs.webkit.org/show_bug.cgi?id=195088
        <rdar://problem/54213407>

        Reviewed by John Wilander.

        Updated the current testing for telemetry which only tested 3
        statistics. With this patch it now tests 10 statistics.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsDidRunTelemetryCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-10-08  Timothy Hatcher  <timothy@apple.com>

        Copying white text from dark mode WebKit apps and pasting in a light mode app results in white (invisible) text.
        https://bugs.webkit.org/show_bug.cgi?id=202662
        rdar://problem/48677354

        Reviewed by Megan Gardner.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyRTF.mm: Added.
        (readRTFDataFromPasteboard):
        (copyAttributedStringFromHTML):
        (checkColor):
        (TEST):

2019-10-08  Brady Eidson  <beidson@apple.com>

        Service Worker Fetch events should time out.
        https://bugs.webkit.org/show_bug.cgi?id=202188

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setServiceWorkerFetchTimeout):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setServiceWorkerFetchTimeoutForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-10-08  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r250784.

        Broke running layout tests.

        Reverted changeset:

        "results.webkit.org: Start reporting results"
        https://bugs.webkit.org/show_bug.cgi?id=202639
        https://trac.webkit.org/changeset/250784

2019-10-08  Matt Lewis  <jlewis3@apple.com>

        Make iPhone simulators pass --iPhone-simulator instead of --iOS
        https://bugs.webkit.org/show_bug.cgi?id=202701

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (appendCustomTestingFlags):

2019-10-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not print worker environment variables in each build step [part 3]
        https://bugs.webkit.org/show_bug.cgi?id=202698

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.__init__): Disabled logging of environment variables.
        (ExtractTestResults.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-10-08  Matt Lewis  <jlewis3@apple.com>

        Fixing the triggerable templates in the config for catalina.
        https://bugs.webkit.org/show_bug.cgi?id=202652

        Reviewed by Jonathan Bedard.

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

2019-10-07  Ryosuke Niwa  <rniwa@webkit.org>

        Add IDL for requestIdleCallback
        https://bugs.webkit.org/show_bug.cgi?id=202653

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2019-10-07  Jiewen Tan  <jiewen_tan@apple.com>

        Only wrapping CryptoKeys for IDB during serialization
        https://bugs.webkit.org/show_bug.cgi?id=202500
        <rdar://problem/52445927>

        Reviewed by Chris Dumez.

        Modifies IndexedDB.StructuredCloneBackwardCompatibility test to include CryptoKeys.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:
        (-[StructuredCloneBackwardCompatibilityNavigationDelegate _webCryptoMasterKeyForWebView:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-shm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-wal:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibilityRead.html:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibilityWrite.html:

2019-10-07  Dean Jackson  <dino@apple.com>

        Various filter-build-webkit updates
        https://bugs.webkit.org/show_bug.cgi?id=202558

        Reviewed by Tim Horton.

        Add rules for:
        - RuleScriptExecution
        - tapi
        - plutil
        - A postprocessing ANGLE script
        - "Prepare build"
        - Signing Identity

        * Scripts/filter-build-webkit:

2019-10-07  Saam Barati  <sbarati@apple.com>

        Allow OSR exit to the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=197993

        Reviewed by Tadeu Zagallo.

        * Scripts/run-jsc-stress-tests:

2019-10-07  Kate Cheney  <katherine_cheney@apple.com>

        Domain relationships in the ITP Database should be inserted in a single query and ignore repeat insert attempts. (202604)
        https://bugs.webkit.org/show_bug.cgi?id=202604
        <rdar://problem/55995831>

        Reviewed by Chris Dumez. 

        Updates to testing infrastructure to test successful list-merging of
        top domains into the ITP SQLite database and test against repeat
        inserts.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsMergeStatistic):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsOnlyInDatabaseOnce):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsMergeStatistic):
        (WTR::TestController::isStatisticsOnlyInDatabaseOnce):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-10-07  Matt Lewis  <jlewis3@apple.com>

        Bring up queues for Catalina
        https://bugs.webkit.org/show_bug.cgi?id=202652

        Reviewed by Jonathan Bedard.

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

2019-10-07  Antoine Quint  <graouts@apple.com>

        Crash in WebKitTestRunnerApp: invocation function for block in WTR::UIScriptControllerIOS::sendEventStream
        https://bugs.webkit.org/show_bug.cgi?id=202646
        <rdar://problem/54576522>

        Reviewed by Tim Horton.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::sendEventStream):

2019-10-07  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Start reporting results
        https://bugs.webkit.org/show_bug.cgi?id=202639

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig): Load API key for results.webkit.org.
        * BuildSlaveSupport/build.webkit.org-config/make_passwords_json.py:
        (create_mock_slave_passwords_dict): Add mock for API key.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests): Start reporting to results.webkit.org.
        (RunWebKitTests.__init__): Do not print the environment to hide the API key.
        (RunWebKitTests.start): Add the API key to the environment.
        (RunAPITests): Start reporting to results.webkit.org.
        (RunAPITests.__init__): Do not print the environment to hide the API key.
        (RunAPITests.start): Add the API key to the environment.
        (RunPythonTests): Start reporting to results.webkit.org.
        (RunPythonTests.__init__): Do not print the environment to hide the API key.
        (RunPythonTests.start): Add the API key to the environment.
        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.upload): Add API_KEY, if it exists, to the request.
        (Upload.upload_archive): Ditto.

2019-10-07  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r250750.

        Reverting change as this broke interal test over the weekend.

        Reverted changeset:

        "Allow OSR exit to the LLInt"
        https://bugs.webkit.org/show_bug.cgi?id=197993
        https://trac.webkit.org/changeset/250750

2019-10-07  youenn fablet  <youenn@apple.com>

        [iOS] Unmuting capture of a page is not working
        https://bugs.webkit.org/show_bug.cgi?id=202627

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm: Added.
        (-[GetUserMediaCaptureUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (-[GetUserMediaCaptureUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[GetUserMediaTestView haveStream:]):
        (TestWebKitAPI::waitUntilCaptureState):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2019-10-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][JHBuild] Update to 1.16.1
        https://bugs.webkit.org/show_bug.cgi?id=202619

        Reviewed by Žan Doberšek.

        * flatpak/org.webkit.CommonModules.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-do-not-retry-downloads-during-shutdown.patch: Removed.
        * gstreamer/patches/gst-plugins-good-glibc-2.30-compat.patch: Removed.
        * gstreamer/patches/gst-plugins-good-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch: Removed.

2019-10-04  Saam Barati  <sbarati@apple.com>

        Allow OSR exit to the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=197993

        Reviewed by Tadeu Zagallo.

        * Scripts/run-jsc-stress-tests:

2019-10-04  Matt Lewis  <jlewis3@apple.com>

        Fix iPad testers platform for downloading build product and fixing tests to run
        https://bugs.webkit.org/show_bug.cgi?id=202365

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added device_model.
        * BuildSlaveSupport/build.webkit.org-config/factories.py: Added device_model property.
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndTestLLINTCLoopFactory.__init__):
        (BuildAndTest32bitJSCFactory.__init__):
        (BuildAndRemoteJSCTestsFactory.__init__):
        (TestWebKit1LeaksFactory.__init__):
        (TestJSCFactory.__init__):
        (Test262Factory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Added device_model to loaded properties.
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Added ability to run based on device_model to
        WebKit Tests and API tests for iPad and iPhone simulators.
        (ConfigureBuild.__init__):
        (ConfigureBuild.start):
        (appendCustomTestingFlags):
        (RunWebKitTests.start):
        (RunAPITests.start):

2019-10-04  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Remove percentages from bubbles
        https://bugs.webkit.org/show_bug.cgi?id=202591

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (inPlaceCombine): Add 'worst' key to combined results.
        (TimelineFromEndpoint.constructor): Use the 'worst' key to populate the tag
        instead of a percentage.

2019-10-04  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Assign webkit-misc to various queues
        https://bugs.webkit.org/show_bug.cgi?id=202584

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        [ews] wincairo queue should use del instead of rm command (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=202477

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanUpGitIndexLock.start): Use regular 'rm' command on windows as it use cygwin.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCleanUpGitIndexLock.test_success_windows): Added unit-test for windows.

2019-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement _WKWebAuthenticationPanel SPI
        https://bugs.webkit.org/show_bug.cgi?id=202559
        <rdar://problem/55932094>

        Reviewed by Brent Fulgham.

        This patch adds a very limited test case to _WKWebAuthenticationPanel.
        Bug 202560 and Bug 202565 will follow up to write more tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm: Added.
        (-[TestWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:]):
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion.html: Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::runWebAuthenticationPanel):
        (WTR::TestController::createWebViewWithOptions):

2019-10-04  Alex Christensen  <achristensen@webkit.org>

        Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202553

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:

2019-10-04  Alex Christensen  <achristensen@webkit.org>

        Simplify sandbox enabling macros
        https://bugs.webkit.org/show_bug.cgi?id=202536

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-10-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Print the revision number on command "--version" of the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=202581

        Reviewed by Carlos Garcia Campos.

        When WebKit its build from source repository instead of a tarball
        we can print the SVN revision to be more precise about the version
        of WebKit when the option --version is passed to the MiniBrowser.

        * MiniBrowser/gtk/main.c:
        (main):
        * MiniBrowser/wpe/main.cpp:
        (main):

2019-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK distcheck

        * gtk/manifest.txt.in: Add Source/WebKit/Resources/gtk to the tarball.

2019-10-03  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(249649): Unable to open local files in MiniBrowser on macOS
        https://bugs.webkit.org/show_bug.cgi?id=201798

        Reviewed by Brent Fulgham.

        Added API test WKWebView.LoadFileWithLoadRequest.

        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm:

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

        Add myself to various tools watchlists
        https://bugs.webkit.org/show_bug.cgi?id=202532

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/watchlist: Add myself to the watchlist of
        PerformanceTests, SVNScripts, webkitperl and webkitpy.

2019-10-03  Jiewen Tan  <jiewen_tan@apple.com>

        Support googleLegacyAppidSupport extension
        https://bugs.webkit.org/show_bug.cgi?id=202427
        <rdar://problem/55887473>

        Reviewed by Brent Fulgham.

        Adds an API test for googleLegacyAppidSupport extension.

        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp:
        (TestWebKitAPI::constructMakeCredentialRequest):
        (TestWebKitAPI::constructMakeCredentialRequestWithGoogleLegacyAppidSupport):
        (TestWebKitAPI::TEST):

2019-10-03  Thibault Saunier  <tsaunier@igalia.com>

        REGRESSION(r249428): [GStreamer] VP9 video rendered green
        https://bugs.webkit.org/show_bug.cgi?id=201422

        Adding patches in -base to fix the issue.

        Reviewed by Philippe Normand.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/base-0001-glupload-Add-VideoMetas-and-GLSyncMeta-to-the-raw-up.patch: Added.

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make PSON optional
        https://bugs.webkit.org/show_bug.cgi?id=200967

        Reviewed by Michael Catanzaro.

        Enable PSON in MiniBrowser and unit tests. Also add more tests to page-id to check that we can still talk to the
        right web process after cross-site history navigation.

        * MiniBrowser/gtk/main.c:
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionPageID):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add WebKitWebView:page-id property
        https://bugs.webkit.org/show_bug.cgi?id=201642

        Reviewed by Michael Catanzaro.

        Add a test case to check the new property.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (checkTitle):
        (testWebExtensionGetTitle):
        (webViewPageIDChanged):
        (testWebExtensionPageID):
        (beforeAll):

2019-10-02  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Only automatically search when multiple lines are pasted
        https://bugs.webkit.org/show_bug.cgi?id=202496

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/search.js:
        (SearchBar): If only a single line has been pasted, do not automatically dispatch
        the search.

2019-10-02  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add test-webkitpy for Python 3 (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=201954

        Unreviewed follow-up fix.

        * Scripts/test-webkitpy-python3: Add copyright.

2019-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [GSTreamer] Let playbin handle redirects for us when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=195326

        Added required patche in GStreamer

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/patches/base-0001-playbin-Handle-error-message-with-redirection-indica.patch: Added.
        * gstreamer/patches/good-0001-qtdemux-Specify-REDIRECT-information-in-error-messag.patch: Added.

2019-10-01  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add API endpoint to retry failed builds for a patch
        https://bugs.webkit.org/show_bug.cgi?id=202424

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/urls.py: Added url mapping for /retry.
        * BuildSlaveSupport/ews-app/ews/views/retrypatch.py: Added.
        (RetryPatch.get): Display the web-form to retry the patch. Retry button which will be added soon will 
        use this form.
        (RetryPatch.post): Handle the post request and retry the patch.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.find_failed_builds_for_patch): Method to find failed builds for a patch.
        * BuildSlaveSupport/ews-app/ews/templates/retry.html: Added, similar to submittoews.html. This
        allows to retry a patch through a web-form as well.

2019-10-02  Kate Cheney  <katherine_cheney@apple.com>

        Updated resource load statistics are never merged into the SQLite Database backend (202372).
        https://bugs.webkit.org/show_bug.cgi?id=202372
        <rdar://problem/55854542>

        Reviewed by Brent Fulgham. 

        Added testing functionality to the mergeStatistics() function of the 
        SQLite backend.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsMergeStatistic):
        (WTR::TestRunner::statisticsCallDidSetMergeStatisticCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsMergeStatistic):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didMergeStatistic):
        * WebKitTestRunner/TestInvocation.h:

2019-10-02  Aakash Jain  <aakash_jain@apple.com>

        [ews] windows or wincairo queue should use del instead of rm command
        https://bugs.webkit.org/show_bug.cgi?id=202477

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanUpGitIndexLock.start): Use 'del' command instead of rm for windows and wincairo.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCleanUpGitIndexLock.test_success_wincairo): Added unit-test.

2019-10-02  youenn fablet  <youenn@apple.com>

        Add a test to check the case of launching two service worker processes shortly one after the other
        https://bugs.webkit.org/show_bug.cgi?id=202450

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-10-02  Aakash Jain  <aakash_jain@apple.com>

        [ews] Dedicate a bot for macOS-High-Sierra-Debug-Build-EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=202469

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Dedicate ews112 to macOS debug builder queue.

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

        Python 3: Add test-webkitpy for Python 3
        https://bugs.webkit.org/show_bug.cgi?id=201954

        Reviewed by Aakash Jain.

        * Scripts/test-webkitpy-python3: Added.

2019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Stop using legacy custom protocol implementation
        https://bugs.webkit.org/show_bug.cgi?id=202407

        Reviewed by Žan Doberšek.

        Remove the tests to check failure after committed, because it's not possible to test it with current code.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):

2019-10-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        [win-ews] No such file or directory: u'/cygdrive/C/cygwin/home/buildbot/WebKit/WebKitBuild/Release/bin32/layout-test-results/pywebsocket.ws.log-out.txt'
        https://bugs.webkit.org/show_bug.cgi?id=188640

        Reviewed by Alex Christensen.

        1. Properly shutdown WebSocket server so that port 8880 is released.
        2. Prevent failure of WebSocket tests when launched in freshly cloned repository.

        * Scripts/new-run-webkit-websocketserver:
        (main): Tweak import and use class constants of PyWebSocket directly.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket._prepare_config): Create test output directory if it doesn't exist.

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

        Progress towards a functioning CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=202443

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.mm:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2019-10-01  John Wilander  <wilander@apple.com>

        Storage Access API: document.hasStorageAccess() should return true when the cookie policy allows access
        https://bugs.webkit.org/show_bug.cgi?id=202435
        <rdar://problem/55718526>

        Reviewed by Brent Fulgham.

        This change makes sure topPrivatelyControlledDomain() correctly handles domains
        with leading dots, as often used in cookie domains.

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

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

        results.webkit.org: Standardize styles in the drawer
        https://bugs.webkit.org/show_bug.cgi?id=202428

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/css/search.css: Rename boldInverseColor.
        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css: Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Move style specifications into webkit.css.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Ditto.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.input>label): Use the boldInverseColor instead of grey.
        (.input>input[type="text"][required], .input>input[type="number"][required],): Darken the border,
        decrease the font weight.
        (.input>input[type="text"][required]~label, .input>input[type="number"][required]~label,): Use the inverseColor instead of grey.

2019-10-01  Antti Koivisto  <antti@apple.com>

        [CSS Shadow Parts] Parse 'part' attribute
        https://bugs.webkit.org/show_bug.cgi?id=202409

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2019-10-01  Aakash Jain  <aakash_jain@apple.com>

        Follow-up fix to r250572 to fix a typo.
        [ews] Add method to retry a build using Buildbot API
        https://bugs.webkit.org/show_bug.cgi?id=202408

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:

2019-10-01  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add method to retry a build using Buildbot API
        https://bugs.webkit.org/show_bug.cgi?id=202408

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.retry_build): Method to retry given build using Buildbot API.

2019-10-01  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copying/ref churn of for loop variables in Tools
        <https://webkit.org/b/202387>

        Reviewed by Darin Adler.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::setAllowedMenuActions): Make loop variable
        a reference to fix unnecessary copying/ref churn.

2019-10-01  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Update my affiliation - since today I work for Igalia.

        Unreviewed.

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

2019-10-01  Keith Miller  <keith_miller@apple.com>

        Add support for the Wasm multi-value proposal
        https://bugs.webkit.org/show_bug.cgi?id=202250

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2019-10-01  youenn fablet  <youenn@apple.com>

        Remove races condition when validating capture sandbox extension revocation
        https://bugs.webkit.org/show_bug.cgi?id=202133
        <rdar://problem/55660905>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Updated test to not use page cache so that on going back, the page is reloaded and will call getUserMedia again.

2019-09-30  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=202384

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:
        * TestWebKitAPI/PlatformMac.cmake:

2019-09-30  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] New axis style
        https://bugs.webkit.org/show_bug.cgi?id=202292

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:

2019-09-30  Alex Christensen  <achristensen@webkit.org>

        Move DownloadMonitor test speed multiplier from WebProcessPool to WebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202339

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):

2019-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] IconDatabase is not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=201303

        Reviewed by Žan Doberšek.

        Rewrite the WebKitFaviconDatabase tests, splitting tests cases again and making them independent to each other.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testFaviconDatabaseInitialization):
        (testFaviconDatabaseGetFavicon):
        (ephemeralViewFaviconChanged):
        (testFaviconDatabaseEphemeral):
        (testFaviconDatabaseClear):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/TestExpectations.json: TestWebKitFaviconDatabase shouls always pass now.

2019-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add about:gpu
        https://bugs.webkit.org/show_bug.cgi?id=202305

        Reviewed by Žan Doberšek.

        Allow to use about:gpu in MiniBrowser. Add a script to get the current svn revision.

        * MiniBrowser/gtk/BrowserTab.c:
        (getInternalURI):
        * MiniBrowser/gtk/main.c:
        (argumentToURL):
        * MiniBrowser/wpe/main.cpp:
        (main):
        * glib/svn-revision: Added.

2019-09-27  Andres Gonzalez  <andresg_22@apple.com>

        Support accessibility for <figure> element on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=202272
        <rdar://problem/54789907>

        Reviewed by Chris Fleizach.

        Implemented titleUIElement and roleDescription properties for <figure> elements on iOS.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::roleDescription):

2019-09-27  Alex Christensen  <achristensen@webkit.org>

        Move shouldUseTestingNetworkSession from NetworkProcessCreationParameters to NetworkSessionCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=202327

        Reviewed by Tim Horton.

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

2019-09-27  Alex Christensen  <achristensen@webkit.org>

        Move service worker process termination delay disabling from process pool to website data store
        https://bugs.webkit.org/show_bug.cgi?id=202308

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-09-27  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebProcessPool::setCanHandleHTTPSServerTrustEvaluation
        https://bugs.webkit.org/show_bug.cgi?id=202285

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (-[ServerTrustDelegate webView:didFinishNavigation:]):
        (-[ServerTrustDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[ServerTrustDelegate waitForDidFinishNavigation]):
        (-[ServerTrustDelegate waitForDidFailProvisionalNavigationError]):
        (-[ServerTrustDelegate authenticationChallengeCount]):
        (-[ServerTrustDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation): Deleted.
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess): Deleted.
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const): Deleted.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::serverTrustEvaluationCallbackCallsCount const): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const): Deleted.

2019-09-27  Alex Christensen  <achristensen@webkit.org>

        Remove unused APIProcessPoolConfiguration::diskCacheSpeculativeValidationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=202290

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):

2019-09-27  Youenn Fablet  <youenn@apple.com>

        Make IsNSURLSessionWebSocketEnabled an experimental flag
        https://bugs.webkit.org/show_bug.cgi?id=202135
        <rdar://problem/55694721>

        Reviewed by Geoff Garen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Set preference to false by default.

2019-09-27  Jiewen Tan  <jiewen_tan@apple.com>

        SubFrameSOAuthorizationSession should ensure messages are posted in the right order to the parent frame
        https://bugs.webkit.org/show_bug.cgi?id=202061
        <rdar://problem/55485666>

        Reviewed by Youenn Fablet.

        Adds tests that check the order of messages posted by SubFrameSOAuthorizationSession.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (resetState):
        (TestWebKitAPI::TEST):

2019-09-26 Kate Cheney <katherine_cheney@apple.com>

        Resource Load Statistics: Downgrade all third-party referrer headers
        https://bugs.webkit.org/show_bug.cgi?id=201353
        <rdar://problem/54895650>

        Majority of this patch was written by John Wilander <wilander@apple.com>.

        Reviewed by Brent Fulgham. 

        The changes to the TestRunner facilitates an opt-out for test cases
        that either test the referrer mechanism explicitly or tests that
        rely on the full referrer to be sent. 

        The new boolean variable and early return in 
        TestRunner::setStatisticsShouldDowngradeReferrer() prevent the same
        event from trying to set multiple TestRunner callbacks.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsShouldDowngradeReferrer):
        (WTR::TestRunner::statisticsCallDidSetShouldDowngradeReferrerCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsShouldDowngradeReferrer):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetShouldDowngradeReferrer):
        * WebKitTestRunner/TestInvocation.h:

2019-09-26  Dean Jackson  <dino@apple.com>

        Build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]): Deleted.
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuWillPresentForElement:]): Deleted.
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]): Deleted.
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuDidEndForElement:]): Deleted.

2019-09-26  Dean Jackson  <dino@apple.com>

        ContextMenu on a link in an email no longer shows web preview
        https://bugs.webkit.org/show_bug.cgi?id=201120
        <rdar://54353617>

        Reviewed by Wenson Hsieh.

        Test context menus on a link that is also an image.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (contextMenuWebViewDriver):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuDidEndForElement:]):
        (TEST):

2019-09-26  Frederic Wang  <fwang@igalia.com>

        run-safari --ios-simulator is no longer working with Xcode 11
        https://bugs.webkit.org/show_bug.cgi?id=199852

        Path of MobileSafari.app has changed in Xcode 11. This patch updates
        the run-safari script to use the new path. This removes support for
        running Safari on iOS < 13, see discussions on bug 177595.

        Reviewed by Jonathan Bedard.

        * Scripts/webkitdirs.pm:
        (iosSimulatorApplicationsPath):

2019-09-26  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] Timeline support Image inner label
        https://bugs.webkit.org/show_bug.cgi?id=202180

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/expectations.js:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.lengend>.item .dot img): support img symbol for lengend and dot
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Support user pass a Image object or a image url as inner label

2019-09-26  Chris Dumez  <cdumez@apple.com>

        Stop using testRunner.overridePreference() to turn on Page Cache
        https://bugs.webkit.org/show_bug.cgi?id=202274

        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.cpp:
        (overridePreferenceCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::overridePreference):

2019-09-26  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Use cursor: pointer for clickable elements
        https://bugs.webkit.org/show_bug.cgi?id=202268

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Give collapse button a pointer for cursor.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Make 'X' to close test timeline a link-button.

2019-09-26  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420) 
        https://bugs.webkit.org/show_bug.cgi?id=195420                          
        <rdar://problem/54213551>                                               

        Reviewed by Brent Fulgham.                                             

        Added in logic to send a message from the UIProcess to the Network      
        Process which will initalize the ITP Database backend to allow for      
        layout testing.                                                         
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseITPDatabase):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUseITPDatabase):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-09-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        TestWebKitAPI.WebKit.ReloadWithDifferingInitialScale is failing consistently
        https://bugs.webkit.org/show_bug.cgi?id=202273

        Reviewed by Aakash Jain.

        The content width scaling limits added in r250361 prevent this test from scaling down the content width (2000px
        wide) to fit the viewport (375px). To avoid this issue, change the content width from 2000px to 1500px, which is
        still a very wide content width for a web page.

        * TestWebKitAPI/Tests/WebKitCocoa/ReloadWithDifferingInitialScale.mm:

2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        toExponential, toFixed, and toPrecision should allow arguments up to 100
        https://bugs.webkit.org/show_bug.cgi?id=199163

        Reviewed by Ross Kirsling.

        Adjust StringNumberFixedWidth test due to lowering kMaxFixedDigitsBeforePoint.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:

2019-09-26  Jiewen Tan  <jiewen_tan@apple.com>

        TestWebKitAPI.SOAuthorizationSubFrame.AuthorizationOptions is failing consistently on iOS API tests EWS
        https://bugs.webkit.org/show_bug.cgi?id=202249

        Reviewed by Alex Christensen.

        Swizzles +[AKAuthorizationController isURLFromAppleOwnedDomain:] following other tests.

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

2019-09-25  Alex Christensen  <achristensen@webkit.org>

        Add replacement SPI on _WKWebsiteDataStoreConfiguration for enabling speculative cache validation and IPC-free server trust evaluation
        https://bugs.webkit.org/show_bug.cgi?id=202251

        Reviewed by Tim Horton.

        Adopt new SPI instead of deprecated SPI.

        * MiniBrowser/mac/AppDelegate.m:
        (persistentDataStore):
        (defaultConfiguration):
        (-[BrowserAppDelegate fetchDefaultStoreWebsiteData:]):
        (-[BrowserAppDelegate fetchAndClearDefaultStoreWebsiteData:]):
        (-[BrowserAppDelegate clearDefaultStoreWebsiteData:]):

2019-09-25  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.system
        https://bugs.webkit.org/show_bug.cgi?id=201826
        <rdar://problem/55452671>

        Reviewed by Stephanie Lewis.

        Tested compatibility by running 'python3 -m unittest webkitpy.common.system.<_unittest>' on
        each of the effected files.

        * Scripts/webkitpy/common/checkout/changelog.py: Import StringIO from io module.
        (set_reviewer):
        (set_short_description_and_bug_url):
        * Scripts/webkitpy/common/checkout/checkout.py:  Import StringIO from io module.
        (Checkout._latest_entry_for_changelog_at_revision):
        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList.load_json): iteritems -> items.
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run): urllib2 is urllib in Python3. 
        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive._stringify_args):
        (AbstractExecutive.command_for_printing): The str type is unicode in Python3.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py: Explicitly encode and decode binary crashlogs.
        * Scripts/webkitpy/common/system/environment_unittest.py: Use absolute imports.
        * Scripts/webkitpy/common/system/executive.py:
        (ScriptError.message_with_output): The str type is unicode in Python3.
        (Executive.WrappedPopen): Python3's Popen object is a context manager. To allow us to use it as one,
        our Python2 Popen needs to be one as well.
        (Executive.WrappedPopen.__init__):
        (Executive.WrappedPopen.__enter__):
        (Executive.WrappedPopen.__exit__):
        (Executive._run_command_with_teed_output): Simplify loop, decode unicode strings.
        (Executive.run_and_throw_if_fail): The child output file should not be unicode strings.
        (Executive.running_pids): Use the Popen context manager to guarantee clean-up.
        (Executive._compute_stdin):
        (Executive.run_command): Use the Popen context manager to guarantee clean-up.
        (Executive._stringify_args): The str type is unicode in Python3.
        (Executive.popen): Return a context manager if the Popen object is not one.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__): StringIO -> BytesIO.
        (MockProcess.__enter__):
        (MockProcess):
        (MockProcess.__exit__):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_auto_stringify_args): Use the Popen context manager to guarantee clean-up.
        (ExecutiveTest.test_popen_args): Ditto.
        (ExecutiveTest.serial_test_kill_process): Ditto.
        (ExecutiveTest.serial_test_kill_all): Ditto.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.read_binary_file): Use 'open' instead of 'file'.
        (FileSystem.write_binary_file): Ditto.
        (FileSystem.write_text_file): The str type is unicode in Python3. 
        (FileSystem.relpath):
        (FileSystem.remove): The WindowsError is just anther OSError in Python3.
        (FileSystem._WindowsError): Deleted.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.glob): filter returns a generator instead of a list.
        (WritableBinaryFileObject.__init__): Binary files are comprised of bytes, not string in Python3.
        (WritableBinaryFileObject.write): Ditto.
        (ReadableTextFileObject.__init__): Ditto.
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.test_normpath):
        (MockFileSystemTest.test_dirs_under): assertEquals -> assertEqual.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_and_write_file): Explicitly define byte arrays instead of strings.
        (RealFileSystemTest.test_remove_file_with_retry.remove_with_exception): The WindowsError is just
        anther OSError in Python3.
        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/common/system/outputtee_unittest.py:
        (SimpleTeeTest.test_simple_tee):
        * Scripts/webkitpy/common/system/path.py:
        (_escape): urllib library has been broken into parts.
        * Scripts/webkitpy/common/system/pemfile.py:
        (_parse_pem_format.find_end): Python3 does not define a maxint.
        * Scripts/webkitpy/common/system/pemfile_unittest.py:
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.total_bytes_memory): Not 'long' type in Python3.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_real_code): assertNotEquals -> assertNotEqual.
        (TestPlatformInfo.test_display_name): Ditto.
        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler): Manually implement ifilter.
        * Scripts/webkitpy/common/system/profiler_unittest.py: Use absolute imports.
        * Scripts/webkitpy/common/system/stack_utils_unittest.py:
        (current_thread_id): items() returns a generator in Python3.
        * Scripts/webkitpy/common/system/systemhost.py: Use absolute imports.
        * Scripts/webkitpy/common/system/urlfetcher.py: Removed.
        * Scripts/webkitpy/common/system/urlfetcher_mock.py: Removed.
        * Scripts/webkitpy/common/system/user.py:
        (User.prompt): Use absolute imports, raw_input -> input.
        (User.prompt_with_multiple_lists):
        (User.prompt_with_list):
        (User.confirm):
        * Scripts/webkitpy/common/unicode.py: Tooling to manage compatibility between Python 2
        and Python 3 unicode handling.
        * Scripts/webkitpy/common/system/user_mock.py:
        (MockUser.prompt): raw_input -> input.
        (MockUser.prompt_with_list): Ditto.
        * Scripts/webkitpy/common/version.py:
        (Version.from_iterable): xrange -> range.
        (Version.from_name): Use absolute import path.
        (Version.__contains__): xrange -> range.
        (Version.__str__): xrange -> range.
        (Version.__cmp__): amp is no longer an operator in Python3, but versions are comprised
        Of integers, so subtraction has the same effect.
        (Version):
        (Version.__eq__): __cmp__ operator is no longer respected, so we need to implement
        each comparison.
        (Version.__ne__): Ditto.
        (Version.__lt__): Ditto.
        (Version.__le__): Ditto.
        (Version.__gt__): Ditto.
        (Version.__ge__): Ditto.
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap._automap_to_major_version):
        (VersionNameMap.to_name): xrange -> range.
        (VersionNameMap.from_name): iteritems -> items.
        * Scripts/webkitpy/common/version_name_map_unittest.py: Use absolute imports.
        * Scripts/webkitpy/common/version_unittest.py: Ditto.
        * Scripts/webkitpy/common/wavediff.py:
        (WaveDiff.__init__): StringIO -> BytesIO.
        * Scripts/webkitpy/port/__init__.py:
        (outside):

2019-09-25  Aakash Jain  <aakash_jain@apple.com>

        [EWS] RunJavaScriptCoreTestsToT should use the same command as RunJavaScriptCoreTests
        https://bugs.webkit.org/show_bug.cgi?id=202216

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTestsToT): Removed the command so as to use the command from base class.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updatd unit-tests.

2019-09-25  Aakash Jain  <aakash_jain@apple.com>

        [ews] JSC queues should run or skip tests based on runTests key from config.json
        https://bugs.webkit.org/show_bug.cgi?id=202223

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Added the runTests key.
        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Add RunJavaScriptCoreTests step based on runTests key.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Pass the runTests key to the factory.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_builder_keys): Added the runTests key.

2019-09-25  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add investigation drawer
        https://bugs.webkit.org/show_bug.cgi?id=202106

        Reviewed by Dewei Zhu.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Support multiple 'main' classes.
        * resultsdbpy/resultsdbpy/view/static/js/expectations.js: Added.
        (Expectations.colorMap): Return a dictionary mapping type strings to colors.
        (Expectations.stringToStateId): Map a string to a state ID for sorting.
        (Expectations.typeForId): Return a type string given an ID.
        (Expectations.symbolForId): Return a symbol for a type given an ID.
        (Expectations.colorForId): Return a color given an ID.
        (Expectations.unexpectedResults): Given a list of actual results and expected results,
        return a state.
        (Expectations):
        * resultsdbpy/resultsdbpy/view/static/js/investigate.js: Added.
        (commitsForUuid):
        (testRunLink):
        (elapsed):
        (percentage):
        (contentForAgregateData):
        (contentForData):
        (_InvestigateDrawer):
        (_InvestigateDrawer.prototype.isRendered):
        (_InvestigateDrawer.prototype.expand): Expand the investigation drawer.
        (_InvestigateDrawer.prototype.collapse): Collapse the investigation drawer.
        (_InvestigateDrawer.prototype.select): Select an element to investigate.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (statsForSingleResult): Move Expectation constants.
        (TimelineFromEndpoint.prototype.render): Investigate specific data points instead
        of jumping to the build.
        (Expectations.stringToStateId): Deleted.
        (Expectations.unexpectedResults): Deleted.
        (Expectations): Deleted.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.drawer.display): Make minimum height.
        (@media screen and (min-width: 600px)): Move main and sidebar so they override drawer.
        (@media screen and (min-width: 768px)): Ditto.
        * resultsdbpy/resultsdbpy/view/templates/commits.html:
        * resultsdbpy/resultsdbpy/view/templates/search.html:
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

2019-09-25  Alex Christensen  <achristensen@webkit.org>

        Remove duplicate WebsiteDataStoreConfiguration copying code
        https://bugs.webkit.org/show_bug.cgi?id=202215

        Reviewed by Tim Horton.

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

2019-09-25  Alex Christensen  <achristensen@webkit.org>

        Replace WebsiteDataStoreParameters::privateSessionParameters with re-initializing all sessions immediately upon NetworkProcess resumption
        https://bugs.webkit.org/show_bug.cgi?id=202211

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        (checkRecoveryAfterCrash):
        (TEST):

2019-09-25  Aakash Jain  <aakash_jain@apple.com>

        [EWS] JSC queues should dynamically add required build steps for re-testing the patch
        https://bugs.webkit.org/show_bug.cgi?id=202170

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Do not add ReRunJavaScriptCoreTests and related steps here, as
        these are dynamically added (if required) in steps.py.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileJSCToT): Remove doStepIf() and hideStepIf() method, these are no longer required as we add
        this step dynamically only if required. We don't need an extra property ('patchFailedToBuild') to be set.
        (RunJavaScriptCoreTests.evaluateCommand): Dynamically add ReRunJavaScriptCoreTests step if required.
        (ReRunJavaScriptCoreTests): Removed doStepIf() and hideStepIf() method.
        (ReRunJavaScriptCoreTests.evaluateCommand): Dynamically add UnApplyPatchIfRequired(), CompileJSCToT() and RunJavaScriptCoreTestsToT steps.
        (RunJavaScriptCoreTestsToT.evaluateCommand): Overriden to avoid caling the base-class method which dynamically adds
        more steps.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-09-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] [DataActivation] Focus moves away after focusing input fields on www.att.com
        https://bugs.webkit.org/show_bug.cgi?id=202167
        <rdar://problem/55185021>

        Reviewed by Tim Horton.

        Rebaseline an API test.

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

2019-09-25  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r250324.

        Tools/ChangeLog

        Reverted changeset:

        "Enable LayoutTests using ResourceLoadStatistics SQLite
        backend (195420)"
        https://bugs.webkit.org/show_bug.cgi?id=195420
        https://trac.webkit.org/changeset/250324

2019-09-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Windows][webkitpy] _apache_config_file_name_for_platform should take the system PHP version into account
        https://bugs.webkit.org/show_bug.cgi?id=202134

        Reviewed by Jonathan Bedard.

        _apache_config_file_name_for_platform always returns a config file
        name for PHP5 on Cygwin Python, one for PHP7 on Win32 Python. It
        should detect the system PHP version as Linux ports do.

        Both AppleWin and WinCairo are using XAMPP Apache. Unify the code
        paths for them. And, remove a stale conf file.

        This change makes it possible to use Cygwin Python with PHP7.

        * Scripts/webkitpy/port/base.py:
        (Port._win_php_version): Added.
        (Port._apache_config_file_name_for_platform): Unified cygwin and
        win32 code path by using _win_php_version.
        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform): Updated cygwin and
        win32 test cases.

2019-09-24  Matt Lewis  <jlewis3@apple.com>

        Bring up queues for iPadOS Simulator Tests
        https://bugs.webkit.org/show_bug.cgi?id=202151

        Reviewed by Jonathan Bedard.

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

2019-09-24  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420) 
        https://bugs.webkit.org/show_bug.cgi?id=195420                          
        <rdar://problem/54213551>                                               

        Reviewed by Brent Fulgham.                                             

        Added in logic to send a message from the UIProcess to the Network      
        Process which will initalize the ITP Database backend to allow for      
        layout testing.                                                         
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseITPDatabase):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUseITPDatabase):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-09-24  Patrick Griffis  <pgriffis@igalia.com>

        Add Patrick Griffis to contributors.json

        Unreviewed.

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

2019-09-24  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Improve summary for Validate Patch step
        https://bugs.webkit.org/show_bug.cgi?id=202163

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Remove the redundant message saying:
        'Some messages were logged while the patch was still eligible'.
        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch.skip_build): Updated the descritionDone with the reason to skip the patch.
        (ValidatePatch.getResultSummary): Overrode this method so as to prevent buildbot from automatically
        appending '(failure)' at the end of the summary string.

2019-09-24  Keith Rollin  <krollin@apple.com>

        Coalesce or remove PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=202119
        <rdar://problem/55638792>

        Reviewed by Alex Christensen.

        After refactoring and other code evolution, some platform checks have
        ended up looking like PLATFORM(MAC) || PLATFORM(IOS_FAMILY) (or
        vice-versa). These can be converted into the equivalent
        PLATFORM(COCOA). Where the instance occurs in a Cocoa-only file, the
        check can be removed altogether (along with any "#else" branches).

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::setValue):

2019-09-24  Zhifei Fang  <zhifei_fang@apple.com>

        Add tests for Ref.js.
        https://bugs.webkit.org/show_bug.cgi?id=201778.

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js:
        (applyStateDiff): null, 0, false are all valid state
        (Ref.prototype.setState): We should do nothing for undefined stateDiff
        * resultsdbpy/resultsdbpy/view/static/library/js/Test.js: Added.
        (AssertFailedError):
        (Expect): Perform assertions during unit tests.
        (Expect.prototype.isType):
        (Expect.prototype.equalToValue):
        (Expect.prototype.equalToHtmlWithoutRef):
        (Expect.prototype.notEqualToValue):
        (Expect.prototype.greaterThan):
        (Expect.prototype.greaterThanOrEqualTo):
        (Expect.prototype.lessThan):
        (Expect.prototype.lessThanOrEqualTo):
        (TestSuite): Common TestSuite class for user to extend. 
        (TestSuite.prototype.expect):
        (TestSuite.prototype.sleep): Test will sleep for certain ms
        (TestSuite.prototype.waitForSignal): Wait until we receive a certain signal with timeout
        (TestSuite.prototype.waitForRefMounted): Wait until we receive ref object's onElementMount signal with timeout
        (TestSuite.prototype.waitForRefUnmounted): Wait until we receive ref object's onElementUnmount signal with timeout
        (TestSuite.prototype.waitForStateUpdated):Wait until we receive ref object's onStateUpdate signal with timeout
        (TestSuite.prototype.async.setup): Common interface for setup a test suite
        (TestSuite.prototype.async.clearUp): Common interface for clear up a test suite
        (getTestFucntionNames): Collect all the test method of a test instance.
        (TestResult):
        (TestResult.prototype.catchException):
        (async.getTestResult): Run the test and generate a TestResult object
        (TestController):
        (TestController.prototype.addResultHandler): Test controller will send notification of a test result to result handler
        (TestController.prototype.addSetupArgs): This gives some additional args for the common setup method for each test class, 
        it is the best place to setup something like a root element, a fake data source, etc
        (TestController.prototype.collect): This method used for collect the test classes.
        (TestController.prototype.async.collectFile): It will import the file as a module dynamicly and collect all the test classes that module export
        (TestController.prototype.async.runTest): It will run a test method of a test class
        (TestController.prototype.async.run): It will run all test or a test class or a test method
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TestComponents.js: components for test app.
        * resultsdbpy/resultsdbpy/view/static/library/js/test/RefTest.js: Ref.js test cases.
        * resultsdbpy/resultsdbpy/view/static/library/js/test/index.html: Test app entry.

2019-09-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState triggers a debug assertion
        https://bugs.webkit.org/show_bug.cgi?id=202145
        <rdar://problem/51273128>

        Reviewed by Tim Horton.

        Fixes this API test to work on iPad as well as iPhone. Importantly, we show a popover when focusing
        select elements on iPad, which means that there is no -inputView present on WKContentView, and upon
        dismissing the form accessory view, the select element is still focused.

        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:

2019-09-25  Cathie Chen  <cathiechen@igalia.com>

        Add Cathie Chen as WebKit committer

        Unreviewed.

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

2019-09-24  Alex Christensen  <achristensen@webkit.org>

        Require a WebsiteDataStore when creating or resuming downloads
        https://bugs.webkit.org/show_bug.cgi?id=202081

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):

2019-09-23  Zan Dobersek  <zdobersek@igalia.com>

        run-web-platform-tests: remove support for in-repository manifest, expectation management
        https://bugs.webkit.org/show_bug.cgi?id=202037

        Reviewed by Carlos Alberto Lopez Perez.

        Instead of keeping wpt metadata inside the WebKit repository or have it
        generated on-the-fly, provide additional option flags for the
        run-web-platform-tests script that allows detailed specification of the
        metadata, manifest and include manifest locations, if necessary.

        If the metadata location is not provided, the wptrunner tool will simply
        not rely on any metadata to adjust expected results. With no manifest
        path specified, the manifest will be generated inside the wpt checkout.
        If no include manifest is specified, all the tests will be initially
        selected for running (until they're possibly filtered through additional
        command line arguments).

        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_bindings_tests_command):
        (MockPort.wpt_metadata_directory): Deleted.
        (MockPort.wpt_manifest_file): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.default_results_directory):
        (Port.wpt_metadata_directory): Deleted.
        (Port.wpt_manifest_file): Deleted.
        * Scripts/webkitpy/w3c/wpt_runner.py:
        (parse_args):
        (WPTRunner.prepare_wpt_checkout):
        (WPTRunner.run):
        (WPTRunner._generate_metadata_directory): Deleted.
        (WPTRunner._wpt_run_paths): Deleted.
        * Scripts/webkitpy/w3c/wpt_runner_unittest.py:
        (WPTRunnerTest.TestInstance.__init__):
        (WPTRunnerTest.test_prepare_wpt_checkout_specified_path):
        (WPTRunnerTest.test_run):
        (WPTRunnerTest.test_run_with_specified_options):
        (WPTRunnerTest.test_run_with_args):
        (WPTRunnerTest.TestInstance.prepare_mock_files_for_run): Deleted.
        (WPTRunnerTest.test_generate_metadata_directory): Deleted.

2019-09-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKitTestRunner] Implement EventSenderProxy::keyDown
        https://bugs.webkit.org/show_bug.cgi?id=201913

        Reviewed by Ross Kirsling.

        Implemented eventSender.keyDown for Windows WebKitTestRunner based
        on DumpRenderTree implementation.

        There is a difference between them. Only WTR truns KF_UP and
        KF_REPEAT flags on for WM_KEYUP event.
        EventSenderProxy::dispatchMessage is used in WTR. It calls
        TranslateMessage, this introduces the difference. If I didn't turn
        those bits, TranslateMessage posts WM_CHAR even for WM_KEYUP.
        According the spec, WM_KEYUP needs those bits.
        <https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-keyup>
        DRT doesn't need the those bits becasuse it doesn't use
        TranslateMessage for WM_KEYUP.

        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::makeKeyDataForScanCode): Added.
        (WTR::pumpMessageQueue): Added.
        (WTR::EventSenderProxy::keyDown): Implemented by using DRT code.

2019-09-23  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Rename CompileJSCOnly to CompileJSC
        https://bugs.webkit.org/show_bug.cgi?id=202118

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Renamed CompileJSCOnly to CompileJSC.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Ditto.
        (AnalyzeCompileWebKitResults.start): Ditto.
        (CompileJSC): Changed step-name to 'compile-jsc' to better match with similar steps like 'compile-webkit'. 
        (CompileJSCToT): Ditto for 'compile-jsc-tot'.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Renamed CompileJSCOnly to CompileJSC and CompileJSCOnlyToT to CompileJSCToT.

2019-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Drop animation when dragging images from Photos to WebKit2 Mail compose is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=201674
        <rdar://problem/51250952>

        Reviewed by Tim Horton.

        Add a couple of new API tests to exercise the new image placeholder drop codepath, in addition to testing
        infrastructure to simulate the timing of drop animation delegate calls.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[NSArray _attachmentWithName:]):
        (-[TestWKWebView allBoundingClientRects:]):

        Add some new API testing helper methods.

        (TestWebKitAPI::targetedImageDragPreview):
        (TestWebKitAPI::TEST):

        Add two new tests, to:
        (1) verify that images are dropped as attachment-backed placeholder image elements when the web view is editable
            and enables attachment elements, and
        (2) verify that when dropping an image taller than the web view, the bottom portion of the drop preview is
            clipped using the targeted preview parameter's visiblePath.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]): Deleted.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/NSItemProviderAdditions.h: Added.
        * TestWebKitAPI/cocoa/NSItemProviderAdditions.mm: Added.

        Move some common helpers for registering data on a NSItemProvider to a separate file, so that it can be used in
        both WKAttachmentTests and DragAndDropTests.

        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]):
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:loadingDelay:]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator clearExternalDragInformation]):
        (-[DragAndDropSimulator setExternalItemProviders:defaultDropPreviews:]):

        Add a new method to allow tests to specify both a list of externally dragged item providers, as well as default
        targeted previews for each of the corresponding items. These default previews are used when invoking the drop
        interaction delegate's preview generation methods.

        (-[DragAndDropSimulator addAnimations:]):

        Not implemented yet; for now, this simply asserts.

        (-[DragAndDropSimulator addCompletion:]):

        Queues a completion handler, which is invoked when the drop animation for each item completes. Depending on the
        value of DragAndDropSimulator's -dropAnimationTiming, this may occur either before or after handling the drop.
        By default, these will be invoked after the drop completes, which represents the common case where data can be
        loaded quickly relative to the drop animation.

        (-[DragAndDropSimulator _invokeDropAnimationCompletionBlocksAndConcludeDrop]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):

2019-09-23  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Collapse results with the same version name (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=201779

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.compare): Correctly compare constructed version names.

2019-09-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] LocalAuthenticator tests are failing on internal bots
        https://bugs.webkit.org/show_bug.cgi?id=201844
        <rdar://problem/54278693>

        Reviewed by Brent Fulgham.

        LocalAuthenticator tests utilize Keychain for mock testing. Unlike iOS simulator tests which
        each test runner is running in different simulator containers, all test runners are running
        in the same macOS container in macOS. Therefore, Keychain is shared among all test runners
        in macOS while it is not in iOS simulators. And therefore, race conditions would happen in
        macOS which make the current tests flaky given they don't consider race conditions.

        This patch then makes each test generate a random credential, and thus no other tests would
        be able to access it, and therefore eliminate any race condition. To support this, a few new
        functionalities are introduced to the mock test infrastructure as well:
        1) TestRunner.cleanUpKeychain accepts a new parameter to more precisely identify an item.
        2) WebAuthenticationMockConfiguration.Local has a new member to uniquely select a credential
        for getAssertion ceremony when multiple presents.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::cleanUpKeychain):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::cleanUpKeychain):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cleanUpKeychain):

2019-09-20  Aakash Jain  <aakash_jain@apple.com>

        [EWS] JSC queues should re-build ToT and compare results on build failure
        https://bugs.webkit.org/show_bug.cgi?id=201999

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Do not add the UnApplyPatchIfRequired and CompileJSCOnlyToT step here, as
        these are dynamically added (if required) in steps.py in CompileWebKit.evaluateCommand() using addStepsAfterCurrentStep().
        Also setting skipUpload=False since we don't need to upload the archive for this queue. Building and testing is done in same build.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Add CompileJSCOnlyToT or CompileWebKitToT build-step based on 'group' property.
        (AnalyzeCompileWebKitResults.start): Ditto.
        (CompileJSCOnly.start): Set the 'group' property to 'jsc'.
        (CompileJSCOnlyToT.evaluateCommand): Over-ride evaluateCommand, so that base-class' (CompileWebKit) evaluateCommand is 
        not used, base class evaluateCommand adds build-steps dynamically.

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201967
        <rdar://problem/55504738>

        Reviewed by Andy Estes.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        After version checks have been removed, there are some cases where the
        preprocessor conditional looks like "#if PLATFORM(MAC) ||
        PLATFORM(IOS_FAMILY)". These can be collapsed into "#if
        PLATFORM(COCOA)". This additional cleanup will be performed in a
        subsequent patch.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Andy Estes was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm: Removed.

2019-09-20  Alex Christensen  <achristensen@webkit.org>

        Begin moving WebsiteDataStore setters to WebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202025

        Reviewed by Chris Dumez.

        One expected change in behavior is that the resource load statistics directory is not created on startup with an ephemeral session any more
        because we call the constructor of WebsiteDataStoreConfiguration inside _WKWebsiteDataStoreConfiguration and set the default directory like we do the other directories.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201973
        <rdar://problem/55506966>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Chris Dumez was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-09-19  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Enable WebKitTestRunner build
        https://bugs.webkit.org/show_bug.cgi?id=201996

        Reviewed by Fujii Hironori.

        It's time to start getting the test system up and running for FTW.

        This patch does the following:

        1. Adds relevant CMake changes to get things building.
        2. Adds a "--ftw" flag to the build scripts that will trigger a relevant build.
        3. Updates 'webkitpy' to recognize the 'ftw' port.

        Note: Pixel tests are not yet supported.

        * PlatformFTW.cmake: Build the WK2 test runner.
        * Scripts/build-webkit: Update to recognize the FTW port.
        * Scripts/webkitdirs.pm: Ditto.
        * Scripts/webkitperl/webkitdirs_unittest/extractNonMacOSHostConfiguration.pl: Ditto.
        * Scripts/webkitpy/common/config/ports.py: Ditto.
        * Scripts/webkitpy/common/config/ports_unittest.py: Ditto.
        * Scripts/webkitpy/common/version_name_map.py: Ditto.
        * Scripts/webkitpy/port/factory.py: Ditto.
        * Scripts/webkitpy/port/win.py: Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive): Don't build or run this method
        on Windows.
        * WebKitTestRunner/PlatformFTW.cmake: Added.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/win/TestInvocationDirect2D.cpp: Added.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Add stub implementation.

2019-09-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Use _com_ptr_t methods instead of calling QueryInterface explictly
        https://bugs.webkit.org/show_bug.cgi?id=201976

        Reviewed by Don Olmstead.

        This change consists of three refactorings:
        1. Replaced explicit QueryInterface with _com_ptr_t methods
        2. Replaced typedef with _COM_SMARTPTR_TYPEDEF macro
        3. Replaced WebCore's COMPtr with _com_ptr_t because it is not a public WebKit API

        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFirstLayoutInFrame): Deleted.
        * MiniBrowser/win/MiniBrowserWebHost.h:
        (MiniBrowserWebHost::didFirstLayoutInFrame):
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (getHandleFromWebView):
        (PrintWebUIDelegate::webViewPrintingMarginRect):
        (PrintWebUIDelegate::runModal):
        (PrintWebUIDelegate::createModalDialog):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::init):
        (WebKitLegacyBrowserWindow::setToDefaultPreferences):
        (WebKitLegacyBrowserWindow::showLastVisitedSites):
        (WebKitLegacyBrowserWindow::reload):
        (WebKitLegacyBrowserWindow::resetZoom):
        (WebKitLegacyBrowserWindow::zoomIn):
        (WebKitLegacyBrowserWindow::zoomOut):
        (WebKitLegacyBrowserWindow::showLayerTree):
        (WebKitLegacyBrowserWindow::print):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:
        (WebKitLegacyBrowserWindow::privatePreferences):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * MiniBrowser/win/stdafx.h:

2019-09-19  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Dependency hunspell-en-gb cannot be found on Fedora 30
        https://bugs.webkit.org/show_bug.cgi?id=202009

        Update package name to hunspell-en-GB.

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/install-dependencies:

2019-09-19  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Collapse results with the same version name
        https://bugs.webkit.org/show_bug.cgi?id=201779

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.const.ending.this.version_name.substring):
        (Configuration.prototype.toKey): Prefer version_name over version number in key.
        (Configuration.prototype.compare): version_name comparison should always override version comparison.
        (Configuration.prototype.compareSDKs): Make SDK regex global.
        (Configuration.prototype.toParams): Remove E tag on version_name.
        (Configuration): Append E tag on the version_name based on the SDK.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.prototype.toString): Print version number with SDK.

2019-09-19  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION: [iOS 13?] TestWebKitAPI.SharedBufferTest.tryCreateArrayBufferLargeSegments is failing
        https://bugs.webkit.org/show_bug.cgi?id=201902

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp: Disable the test on iOS.

2019-09-19  Aakash Jain  <aakash_jain@apple.com>

        [ews] Fix platform for JSC EWS
        https://bugs.webkit.org/show_bug.cgi?id=201997

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-09-19  Brent Fulgham  <bfulgham@apple.com>

        Create InjectedBundle SPI to better support NSSecureCoding
        https://bugs.webkit.org/show_bug.cgi?id=201810
        <rdar://problem/55265713>

        The encoding/decoding routines used by WebKit’s InjectedBundles are based on NSCoding.
        While we have changed WebKit internals to use NSSecureCoding, there are a number of
        injected bundles that need to serialize custom classes between the InjectedBundle and
        the relevant WebKit UIProcess.

        We need to lock down this communications channel by enforcing NSSecureCoding.

        This patch creates new SPI to allow the UIProcess to specify classes that it will accept
        in messages from the WebContet Process (and Injected Bundle).

        It adds the following property to the WKProcessPoolConfiguration:

            @property (nonatomic, copy) NSSet<Class> *customClassesForParameterCoder;

        If no custom classes are specified, the standard serialization primitives are supported:
            NSArray, NSData, NSDate, NSDictionary, NSNull, NSNumber, NSSet, NSString,
            NSTimeZone, NSURL, and NSUUID.

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegate.mm: Added.
        (-[BundleFormDelegateRemoteObject didGetFocus]):
        (-[FormInputDelegate _webView:decidePolicyForFocusedElement:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegatePlugIn.mm: Added.
        (-[BundleFormDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleFormDelegatePlugIn _webProcessPlugInBrowserContextController:willBeginInputSessionForElement:inFrame:userIsInteracting:]):
        (-[BundleFormDelegatePlugIn _webProcessPlugInBrowserContextController:didFocusTextField:inFrame:]):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegateProtocol.h: Copied from Tools/TestWebKitAPI/WKWebViewConfigurationExtras.h.
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        * TestWebKitAPI/WKWebViewConfigurationExtras.h:
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm:
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:configureJSCForTesting:]):
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:configureJSCForTesting:andCustomParameterClasses:]):

2019-09-18  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] fix missing col classes
        https://bugs.webkit.org/show_bug.cgi?id=201949

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (@media screen and (min-width: 768px)):
        (.row):
        (.col-1):
        (.col-2):
        (.col-3):
        (.col-4):
        (.col-5):
        (.col-6):
        (.col-7):
        (.col-8):
        (.col-9):
        (.col-10):
        (.col-11):
        (.col-12):
        (@media screen and (min-width: 600px)):

2019-09-18  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for iOS 13 queues
        https://bugs.webkit.org/show_bug.cgi?id=201711

        Reviewed by Jonathan Bedard.

        * TestResultServer/static-dashboards/builders.jsonp:

2019-09-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Update build environments to use libwpe+WPEBackend-fdo 1.4.0
        https://bugs.webkit.org/show_bug.cgi?id=201915

        Reviewed by Michael Catanzaro.

        * flatpak/org.webkit.WPEModules.yaml: Bump versions of libwpe and WPEBackend-fdo to 1.4.0
        * gtk/jhbuild.modules: Ditto.
        * wpe/jhbuild.modules: Ditto.

2019-09-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Remove unused DOMDefaultImpl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=201867

        Reviewed by Darin Adler.

        * MiniBrowser/win/CMakeLists.txt: Removed DOMDefaultImpl.cpp.
        * MiniBrowser/win/DOMDefaultImpl.cpp: Removed.
        * MiniBrowser/win/DOMDefaultImpl.h: Removed.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:

2019-09-17  Dean Jackson  <dino@apple.com>

        Remove the "Show Link Previews" and "Hide Link Previews" action menus in the preview platter
        https://bugs.webkit.org/show_bug.cgi?id=201864
        <rdar://55190038>

        Reviewed by Simon Fraser.

        Test for the suggested actions.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuWillPresentForElement:]):
        (TEST):

2019-09-17  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org results bubbles' tooltips should include SDK information
        https://bugs.webkit.org/show_bug.cgi?id=201823

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.compare): Like the Python instance of this class,
        support using null as a wildcard.
        (Configuration.prototype.compareSDKs): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Construct a configuration
        object from all bits of data used to construct a given bubble.
        (TimelineFromEndpoint.prototype.render):

2019-09-17  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=201851
        <rdar://problem/55422044>

        Reviewed by Jiewen Tan and Alexey Proskuryakov.

        Remove some support for iOS versions less than 12.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 120000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101200" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101200" are always True.

        This removal is part of a series of patches effecting such removal.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::installFakeHelvetica):

2019-09-17  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: Driver.do_post_tests_work() is never called when `stop_when_done` is true in Driver.run_test()
        <https://webkit.org/b/201873>

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test): Call self.do_post_tests_work() when a test
        shard has completed, but didn't crash or time out.

2019-09-17  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r249923): ASSERTION FAILED: sessionID == WebProcess::singleton().sessionID() in WebCore::SWClientConnection *WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession(PAL::SessionID)
        https://bugs.webkit.org/show_bug.cgi?id=201859
        <rdar://problem/55426742>

        Reviewed by Alex Christensen.

        Update API test to use WKWebsiteDataStoreRef C API to do private browsing instead of using
        the legacy WKPreferencesSetPrivateBrowsingEnabled() C API.

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

2019-09-17  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201710

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Move iOS 12 queues to iOS 13.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-12 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-12 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update unit tests.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):
        * BuildSlaveSupport/ews-build/config.json: Move iOS 12 queues to iOS 13.

2019-09-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r249950.

        Broke the iOS build.

        Reverted changeset:

        "Remove the "Show Link Previews" and "Hide Link Previews"
        action menus in the preview platter"
        https://bugs.webkit.org/show_bug.cgi?id=201864
        https://trac.webkit.org/changeset/249950

2019-09-17  Dean Jackson  <dino@apple.com>

        Remove the "Show Link Previews" and "Hide Link Previews" action menus in the preview platter
        https://bugs.webkit.org/show_bug.cgi?id=201864
        <rdar://55190038>

        Reviewed by Simon Fraser.

        Test for the suggested actions.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuWillPresentForElement:]):
        (TEST):

2019-09-16  Alex Christensen  <achristensen@webkit.org>

        Remove "gopher" from list of special schemes in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=201852

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2019-09-16  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Shard result archives
        https://bugs.webkit.org/show_bug.cgi?id=201734

        Reviewed by Dewei Zhu.

        Cassandra advertises being able to store up to 2 GB in a single blob-storage row.
        In practice, this usually doesn't work according to the Cassandra developers,
        large blobs should be broken up into shards of, at most, 10 MB.

        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext):
        (ArchiveContext.ArchiveMetaDataByCommit): Point to the archive shards by hash.
        (ArchiveContext.ArchiveMetaDataByCommit.unpack):
        (ArchiveContext.ArchiveChunks): Store archive shards, indexed by hash.
        (ArchiveContext.__init__):
        (ArchiveContext.register): When saving archives, save a reference hash and then
        shard the actual archive data before saving.
        (ArchiveContext.find_archive): Search for archive by meta-data, then reconstruct
        the archive. Raise an exception if we determine that memory usage is a problem.
        (ArchiveContext.ArchivesByCommit): Deleted.
        (ArchiveContext.ArchivesByCommit.unpack): Deleted.
        * resultsdbpy/resultsdbpy/model/archive_context_unittest.py:
        (ArchiveContextTest.init_database): Allow configuration and archive to be specified.
        (ArchiveContextTest):
        (ArchiveContextTest.test_large_archive): Test archive sharding.

2019-09-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support more than two FIDO protocol versions
        https://bugs.webkit.org/show_bug.cgi?id=198408
        <rdar://problem/51292176>

        Reviewed by Chris Dumez.

        Adds a new test case that includes a FIDO_2_1_PRE version string.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:

2019-09-16  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Configurations should be branch specific
        https://bugs.webkit.org/show_bug.cgi?id=201561

        Reviewed by Dewei Zhu.

        Partition configurations by branch in both Redis and Cassandra.

        * resultsdbpy/resultsdbpy/controller/upload_controller.py:
        (UploadController.suites): Allow the user to specify branches while listing suites.
        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext.register): Register each configuration with a branch.
        * resultsdbpy/resultsdbpy/model/configuration_context.py:
        (ConfigurationContext.ByPlatform): Index by branch.
        (ConfigurationContext.ByPlatformAndVersion): Ditto.
        (ConfigurationContext.ByArchitecture): Ditto.
        (ConfigurationContext.ByModel): Ditto.
        (ConfigurationContext.__init__): Populate Redis cache with branch.
        (ConfigurationContext._convert_to_redis_key): Accept branch in Redis key.
        (ConfigurationContext._register_in_redis): Register configuration with branch.
        (ConfigurationContext.register_configuration): Ditto.
        (ConfigurationContext.search_for_configuration): Search for configuration with branch.
        (ConfigurationContext.search_for_recent_configuration): Ditto.
        (ConfigurationContext.select_from_table_with_configurations): Ditto.
        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py:
        (ConfigurationContextTest.register_configurations): Register with branch.
        (ConfigurationContextTest.test_repopulate_recent): Construct ConfigurationContext with
        CommitContext object.
        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext.SuitesByConfiguration): Index by branch.
        (UploadContext.upload_test_results): Register each configuration with a branch.
        (UploadContext.find_suites): Pass branch to search for configurations.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Check for new configurations when the branch is changed.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Add branch to suites query.

2019-09-16  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: Fix warning message for std::make_unique<typename[]>
        <https://webkit.org/b/201818>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_make_unique): Emit different error message when using
        std::make_unique<>() to create an array.  Personalize the error
        message by including the original type name, which also
        demonstrates that WTF::makeUniqueArray<>() does not need square
        brackets for its typename.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_make_unique): Add test.
        (WebKitStyleTest.test_wtf_make_unique_array): Ditto.

2019-09-16  Andres Gonzalez  <andresg_22@apple.com>

        Rename [WebAccessibilityObjectWrapper _accessibilityInsertText] to accessibilityInsertText to match accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=201820

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::insertText):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::insertText):

2019-09-16  David Kilzer  <ddkilzer@apple.com>

        Fix leaks in DumpRenderTree and WebKitTestRunner
        <https://webkit.org/b/201814>

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        (createCoreAnimationLayer): Fix signature to return CFTypeRef.
        Add CF_RETURNS_RETAINED to document behavior.
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        (createCoreAnimationLayer): Fix signature to return CFTypeRef.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (takeWindowSnapshot): Add CF_RETURNS_RETAINED to document
        behavior.
        (createBitmapContextFromWebView): Fix leak of CGImageRef when
        generating a replacement image.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm: Add @dynamic
        declaration for _stableStateOverride so compiler wouldn't try to
        create another instance variable for it.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        Release `cgEvent` to fix leak.

2019-09-16  Andres Gonzalez  <andresg_22@apple.com>

        Expose misspelling ranges for editable content to accessibility clients.
        https://bugs.webkit.org/show_bug.cgi?id=201752
        <rdar://problem/49556828>

        Reviewed by Chris Fleizach.

        Test code needed for LayoutTests/accessibility/misspelling-range.html.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::misspellingTextMarkerRange):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::misspellingSearchParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::misspellingTextMarkerRange):

2019-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r249142): [GTK] Epiphany delayed page loads continue indefinitely
        https://bugs.webkit.org/show_bug.cgi?id=201544

        Reviewed by Michael Catanzaro.

        Add new test cases.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testWebViewActiveURI):
        (testWebViewIsLoading):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (LoadTrackingTest::loadAlternateHTML):
        (LoadTrackingTest::reset):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.h:

2019-09-15  David Kilzer  <ddkilzer@apple.com>

        block-spammers should obtain credentials the same way as webkit-patch
        <https://webkit.org/b/201733>

        Reviewed by Lucas Forschler.

        * Scripts/block-spammers: Import Credentials from webkitpy.
        Remove unused imports.  Enable logging at info level to match
        webkit-patch.
        (get_bugzilla_token): Use Credentials module to get
        bugs.webkit.org credentials.
        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._run_security_tool): Change logging level from
        error to info since multiple attempts are made at reading the
        keychain.  Fix typos in comment.
        (Credentials._credentials_from_security_command): Extract common
        logic from Credentials._credentials_from_keychain into new
        method.
        (Credentials._credentials_from_keychain): Make fallback logic
        for checking for credentials in the keychain more consistent and
        easier to read.  Add error logging if no credentials are found.

2019-09-13  Youenn Fablet  <youenn@apple.com>

        WPT importer should check META global tag in .any.js files to generate the valid .html stub files
        https://bugs.webkit.org/show_bug.cgi?id=201718

        Reviewed by Chris Dumez.

        Read meta tag information to select the environments where the any.js template tests will be run.
        Added support to run service worker tests from any.js template tests.

        Covered by unit test.
        Since we import only a single repository nowadays, use a test config file with just one repository
        to simplify the new test.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__):
        (TestImporter.readEnvironmentsForTemplateTest):
        (TestImporter.write_html_files_for_templated_js_tests):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):
        (TestImporterTest.test_import_dir_with_empty_init_py):
        (TestImporterTest.test_harnesslinks_conversion):
        (TestImporterTest.test_submodules_generation):
        (test_checkout_directory):
        (test_clean_directory_option):
        (test_git_ignore_generation):
        (test_initpy_generation):
        (test_remove_obsolete_content):
        (test_manual_slow_test):
        (test_webkit_test_runner_options):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_download):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_from_source_dir):
        (test_template_test):

2019-09-13  Dean Jackson  <dino@apple.com>

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371
        <rdar://54904781>

        Disable the test for the moment.

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

2019-09-11  Dean Jackson  <dino@apple.com>

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371
        <rdar://54904781>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tools/TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/system-preview-trigger.html: Added.

2019-09-13  Youenn Fablet  <youenn@apple.com>

        Partition processes running service workers by session ID
        https://bugs.webkit.org/show_bug.cgi?id=201643

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-09-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Re-add myself to the list of committers

        Unreviewed.

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

2019-09-13  Alex Christensen  <achristensen@webkit.org>

        [iOS] TestWebKitAPI.WebKit.TLSVersionWebSocket is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=201745

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        The exact message isn't important.  The fact that the TLS handshake failed is, which is checked by the TCPServer.

2019-09-13  Patrick Griffis  <pgriffis@igalia.com>

        [JHBuild] Fix building gst-plugins-good against glibc 2.30
        https://bugs.webkit.org/show_bug.cgi?id=201715

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/patches/gst-plugins-good-glibc-2.30-compat.patch: Added.

2019-09-12  Chris Dumez  <cdumez@apple.com>

        [WKTR] Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED()
        https://bugs.webkit.org/show_bug.cgi?id=201546

        Reviewed by Alex Christensen.

        Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED() from WebKitTestRunner as it does not do
        the right thing for WebKit2 and tests have been rewritten to not use it.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateBrowsingEnabled_DEPRECATED): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-09-12  Brady Eidson  <beidson@apple.com>

        PDF exporting on iOS should include URL rects.
        <rdar://problem/54900133> and https://bugs.webkit.org/show_bug.cgi?id=201693

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        (TestWebKitAPI::TEST): Enable on iOS.

2019-09-12  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] webkit_settings_set_user_agent() allows content forbidden in HTTP headers
        https://bugs.webkit.org/show_bug.cgi?id=201077

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/CMakeLists.txt: Add missing HTTPParsers.cpp to be built into TestWebCore.
        * TestWebKitAPI/Tests/WebCore/HTTPParsers.cpp:
        (TestWebKitAPI::TEST): Add tests for WebCore::isValidUserAgentHeaderValue().

2019-09-12  Mark Lam  <mark.lam@apple.com>

        Harden JSC against the abuse of runtime options.
        https://bugs.webkit.org/show_bug.cgi?id=201597
        <rdar://problem/55167068>

        Reviewed by Filip Pizlo.

        Linux parts contributed by Carlos Garcia Campos <cgarcia@igalia.com>.
        Windows parts contributed by Fujii Hironori <Hironori.Fujii@sony.com>.

        Call JSC::Config::configureForTesting() in test harnesses or at the top of tests
        to disable the hardening on test runs.  Tests rely on setting options to enable
        test features.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::runActiveSessionTest):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDiagnosticLogging.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/WKWebViewConfigurationExtras.h:
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm:
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:]):
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:configureJSCForTesting:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):

2019-09-12  Keith Rollin  <krollin@apple.com>

        Fix PDFKit references in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=201700
        <rdar://problem/55279539>

        Reviewed by Youenn Fablet.

        These references fail in watchOS and tvOS, so remove them on those
        platforms.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        * TestWebKitAPI/cocoa/TestPDFDocument.h:
        * TestWebKitAPI/cocoa/TestPDFDocument.mm:
        * TestWebKitAPI/config.h:

2019-09-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Select all text in the URL bar by clicking it
        https://bugs.webkit.org/show_bug.cgi?id=201677

        Reviewed by Don Olmstead.

        * MiniBrowser/win/MainWindow.cpp:
        (EditProc): Post EM_SETSEL in WM_SETFOCUS to select all text.

2019-09-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Stop using the session bus in the unit tests
        https://bugs.webkit.org/show_bug.cgi?id=201636

        Reviewed by Žan Doberšek.

        We are actually using GTestDBus, not the actual session bus of the user session, but it would still be better to
        use a private p2p DBus connection. This is also the way we encourage apps to implement the communication with
        the web process extension. This patch removes the WebKitTestBus class and starts a DBus server before every
        test. The server address is passed to the web extension as initialization parameter to connect directly to
        it. We keep a global list of connections to the server and a HashMap to get the current active connection for
        a WebKitWebView.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (testProcessPerWebView):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testWebExtensionInputElementIsUserEdited):
        (testDocumentLoadedSignal):
        (testWebKitWebViewProcessCrashed):
        (testWebExtensionIsolatedWorld):
        (testInstallMissingPluginsPermissionRequest):
        (testWebExtensionFormControlsAssociated):
        (FormSubmissionTest::FormSubmissionTest):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (DelayedSignal::DelayedSignal):
        (emitPageCreated):
        (pageCreatedCallback):
        (webkit_web_extension_initialize_with_user_data):
        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::AccessibilityTest):
        (AccessibilityTest::ensureProxy):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (dbusConnectionClosed):
        (dbusServerConnection):
        (startDBusServer):
        (stopDBusServer):
        (main):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::initializeWebExtensions):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp: Removed.
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.h: Removed.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::~WebViewTest):
        (WebViewTest::extensionProxy):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2019-09-10  Dean Jackson  <dino@apple.com>

        setup-git-clone is using http not https
        https://bugs.webkit.org/show_bug.cgi?id=201658

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute):

2019-09-10  Matt Lewis  <jlewis3@apple.com>

        run-webkit-test: Allow results to be uploaded without scm checkout
        https://bugs.webkit.org/show_bug.cgi?id=200787

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system): Added in detection of stub repository.
        * Scripts/webkitpy/common/checkout/scm/stub_repository.py: Added.
        (StubRepository):
        (StubRepository.__init__):
        (StubRepository._find_parent_path_matching_callback_condition): Checks up the path given to
        find the directory containing the checkout_information.json of the stub repository.
        (StubRepository.in_working_directory): Required functions to be implemented.
        (StubRepository.svn_revision): Required functions to be implemented.
        (StubRepository.native_revision): Required functions to be implemented.
        (StubRepository.native_branch): Required functions to be implemented.
        (StubRepository._decode_json): Decodes checkout_information.json.
        (StubRepository.find_checkout_root): Required functions to be implemented.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: Added.
        (StubRepositoryTest): Unit test for stub_repository SCM.
        (StubRepositoryTest.mock_host_for_stub_repository):
        (StubRepositoryTest.test_in_working_directory):
        (StubRepositoryTest.test_native_revision):
        (StubRepositoryTest.test_native_branch):
        (StubRepositoryTest.test_svn_revision):
        (StubRepositoryTest.test_find_checkout_root):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator._get_svn_revision): Removed unnecessary scm initialization.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Removed unnecessary scm initialization.

2019-09-10  Brady Eidson  <beidson@apple.com>

        Add SPI to save a PDF from the contents of a WKWebView.
        <rdar://problem/48955900> and https://bugs.webkit.org/show_bug.cgi?id=195765

        Reviewed by Tim Horton.

        -Add an "Export to PDF..." menu option to MiniBrowser.
        -Add API tests for the API itself.

        * MiniBrowser/MiniBrowser.entitlements:

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController forceRepaint:]):
        (-[BrowserWindowController saveAsPDF:]):

        * MiniBrowser/mac/MainMenu.xib:

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController saveAsPDF:]):

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestPDFDocument.h: Added.
        * TestWebKitAPI/cocoa/TestPDFDocument.mm: Added.
        (TestWebKitAPI::toCGRect):
        (TestWebKitAPI::toPlatformPoint):
        (TestWebKitAPI::TestPDFAnnotation::TestPDFAnnotation):
        (TestWebKitAPI::TestPDFAnnotation::isLink const):
        (TestWebKitAPI::TestPDFAnnotation::bounds const):
        (TestWebKitAPI::TestPDFAnnotation::linkURL const):
        (TestWebKitAPI::TestPDFPage::create):
        (TestWebKitAPI::TestPDFPage::TestPDFPage):
        (TestWebKitAPI::TestPDFPage::annotations):
        (TestWebKitAPI::TestPDFPage::characterCount const):
        (TestWebKitAPI::TestPDFPage::text const):
        (TestWebKitAPI::TestPDFPage::rectForCharacterAtIndex const):
        (TestWebKitAPI::TestPDFPage::characterIndexAtPoint const):
        (TestWebKitAPI::TestPDFPage::bounds const):
        (TestWebKitAPI::TestPDFPage::colorAtPoint const):
        (TestWebKitAPI::TestPDFDocument::createFromData):
        (TestWebKitAPI::TestPDFDocument::TestPDFDocument):
        (TestWebKitAPI::TestPDFDocument::pageCount const):
        (TestWebKitAPI::TestPDFDocument::page):

2019-09-10  Keith Rollin  <krollin@apple.com>

        Remove SSL-based TLSDeprecation.mm contents
        https://bugs.webkit.org/show_bug.cgi?id=201657
        <rdar://problem/55237678>

        Reviewed by Alex Christensen.

        This file does not build on watchOS due to references to SSL
        facilities. Conditionalize out the contents on HAVE_SSL.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:

2019-09-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove myself from watchlists

        * Scripts/webkitpy/common/config/watchlist:

2019-09-09  Alex Christensen  <achristensen@webkit.org>

        Rebase API test after r249675
        https://bugs.webkit.org/show_bug.cgi?id=201596

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        We removed the restriction on WebsitePolicies with non-default persistent sessions.
        We needed to change the expectations of the test that exercised that code path.

2019-09-09  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API tests after r249684
        https://bugs.webkit.org/show_bug.cgi?id=201573

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::getWebSocketEventWebKitLegacy):
        (TestWebKitAPI::TEST):
        The web thread still exists :(
        That makes iOS immediate failure results more like WK2, which is fine.
        The point is that the connection fails somehow and the server sees a TLS failure, which the test verifies.

2019-09-09  Chris Dumez  <cdumez@apple.com>

        REGRESSION: http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations.html is frequently timing out on iOS EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=201550

        Reviewed by Alex Christensen.

        Update testRunner.statisticsNotifyObserver() to return a boolean indicating if it did
        anything or not.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::statisticsNotifyObserver):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsNotifyObserver):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-09-09  Timothy Hatcher  <timothy@apple.com>

        Tap and hold on Facebook sometimes creates a tall empty selection.
        https://bugs.webkit.org/show_bug.cgi?id=201618
        rdar://53630145

        Reviewed by Megan Gardner.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/SelectionByWord.mm: Added.

2019-09-09  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Watchlist doesn't work sometimes
        https://bugs.webkit.org/show_bug.cgi?id=201433

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/config/watchlist: Updated the email addresses to the one associated with
        corresponding Bugzilla accounts.

2019-09-09  Alex Christensen  <achristensen@webkit.org>

        Disable TLS 1.0 and 1.1 in WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=201573

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TCPServer.cpp:
        (sk_CRYPTO_BUFFER_num):
        (sk_CRYPTO_BUFFER_value):
        (TestWebKitAPI::deleter<CRYPTO_BUFFER>::operator()):
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::listenForConnections):
        (TestWebKitAPI::deleter<X509>::operator()): Deleted.
        (TestWebKitAPI::deleter<uint8_t::operator()): Deleted.
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm: Added.
        (-[WebSocketDelegate waitForMessage]):
        (-[WebSocketDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestNavigationDelegate waitForDidFailProvisionalNavigation]):

2019-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] WebKitLegacyBrowserWindow is leaked by circular references
        https://bugs.webkit.org/show_bug.cgi?id=201600

        Reviewed by Brent Fulgham.

        There were some circular references between
        WebKitLegacyBrowserWindow and its delegation classes. For
        example, WebKitLegacyBrowserWindow has a reference of
        WebDownloadDelegate, and WebDownloadDelegate shares the ref
        counter with WebKitLegacyBrowserWindow.

        WebNotificationObserver was leaked because it wasn't unregistered
        from the default notification center by using
        IWebNotificationCenter::removeObserver.

        If a new legacy window was created by mouse right click a link,
        WebView was released twice because
        PrintWebUIDelegate::createWebViewWithRequest didn't AddRef the
        WebView.

        This change does:
        1. Make delegation classes have own ref-counter to avoid circular references
        2. Do removeObserver notification observers
        3. AddRef WebView in PrintWebUIDelegate::createWebViewWithRequest

        * MiniBrowser/win/AccessibilityDelegate.cpp:
        (AccessibilityDelegate::AddRef):
        (AccessibilityDelegate::Release):
        * MiniBrowser/win/AccessibilityDelegate.h: Added m_refCount.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::QueryInterface):
        (MiniBrowserWebHost::AddRef):
        (MiniBrowserWebHost::Release):
        * MiniBrowser/win/MiniBrowserWebHost.h: Added m_refCount.
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest): Do AddRef for the returned IWebView.
        (PrintWebUIDelegate::AddRef):
        (PrintWebUIDelegate::Release):
        * MiniBrowser/win/PrintWebUIDelegate.h: Added m_refCount.
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::AddRef):
        (ResourceLoadDelegate::Release):
        * MiniBrowser/win/ResourceLoadDelegate.h: Added m_refCount.
        * MiniBrowser/win/WebDownloadDelegate.cpp:
        (WebDownloadDelegate::AddRef):
        (WebDownloadDelegate::Release):
        * MiniBrowser/win/WebDownloadDelegate.h: Added m_refCount.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::~WebKitLegacyBrowserWindow): Do removeObserver notification observers.
        (WebKitLegacyBrowserWindow::init):
        (WebKitLegacyBrowserWindow::setUIDelegate):
        (WebKitLegacyBrowserWindow::setAccessibilityDelegate):
        (WebKitLegacyBrowserWindow::setResourceLoadDelegate):
        (WebKitLegacyBrowserWindow::setDownloadDelegate):
        (WebKitLegacyBrowserWindow::AddRef): Deleted.
        (WebKitLegacyBrowserWindow::Release): Deleted.
        (WebKitLegacyBrowserWindow::setFrameLoadDelegate): Deleted.
        (WebKitLegacyBrowserWindow::setFrameLoadDelegatePrivate): Deleted.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2019-09-09  Chris Dumez  <cdumez@apple.com>

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in http/tests/adClickAttribution/conversion-disabled-in-ephemeral-session.html
        https://bugs.webkit.org/show_bug.cgi?id=201596

        Reviewed by Alex Christensen.

        Add new testRunner.setShouldSwapToEphemeralSessionOnNextNavigation() / testRunner.setShouldSwapToDefaultSessionOnNextNavigation()
        test functions to support dynamic switching between ephemeral and default/persistent session in layout tests. The new methods
        do the right thing for WebKit2 and truly switch session, unlike setPrivateBrowsingEnabled_DEPRECATED() which was merely making
        the WebCore::Document think it changed session.

        * DumpRenderTree/TestRunner.cpp:
        (setShouldSwapToEphemeralSessionOnNextNavigationCallback):
        (setShouldSwapToDefaultSessionOnNextNavigationCallback):
        (TestRunner::staticFunctions):
        (TestRunner::willNavigate):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setShouldSwapToEphemeralSessionOnNextNavigation):
        (TestRunner::setShouldSwapToDefaultSessionOnNextNavigation):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldSwapToEphemeralSessionOnNextNavigation):
        (WTR::TestRunner::setShouldSwapToDefaultSessionOnNextNavigation):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldSwapToEphemeralSessionOnNextNavigation):
        (WTR::TestController::setShouldSwapToDefaultSessionOnNextNavigation):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-09-09  Aakash Jain  <aakash_jain@apple.com>

        EWS testtube emoji doesn't exist on macOS Mojave
        https://bugs.webkit.org/show_bug.cgi?id=201532

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Change the emoji to microscope emoji.

2019-09-09  Aakash Jain  <aakash_jain@apple.com>

        [EWS] API testers can go in an infinite RETRY loop when there is build failure in trunk
        https://bugs.webkit.org/show_bug.cgi?id=201607

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults): Do not RETRY when clean_tree_results are missing.
        (AnalyzeAPITestsResults.analyzeResults.getAPITestFailures): Gracefully handle None result.

2019-09-07  Keith Miller  <keith_miller@apple.com>

        OSR entry into wasm misses some contexts
        https://bugs.webkit.org/show_bug.cgi?id=201569

        Reviewed by Yusuke Suzuki.

        Add new test harness mode for tests created from wast files.

        * Scripts/run-jsc-stress-tests:

2019-09-09  Daniel Bates  <dabates@apple.com>

        Remove all selection view animations before dumping results
        https://bugs.webkit.org/show_bug.cgi?id=199241

        Reviewed by Wenson Hsieh.

        On iOS the selection UI uses a few animations, including fading in the grabbers. We have many
        historical tests that were written for Mac and expect Mac's lack of animations that we run on
        iOS and are flaky. Let's try to remove all selection view animations before dumping results and
        see if this makes tests on iOS less flaky. A future enhancement to this is to expose a uiController
        API for a test to remove selection animations at any time during the run.

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

2019-09-09  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Report results archive to results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=201321

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): After all tests are finish, upload the results archive for each
        configuration.
        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.__init__): Automatically define timestamp.
        (Upload.upload_archive): Upload an archive associated with the test run.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.test_buildbot):
        (UploadTest):
        (UploadTest.test_archive_upload):

2019-09-09  Chris Dumez  <cdumez@apple.com>

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in http/tests/workers/service/basic-register.html
        https://bugs.webkit.org/show_bug.cgi?id=201590

        Reviewed by Youenn Fablet.

        Add a new API test to check that if the default session registers a service worker, the
        hasServiceWorkerRegistration flag is still false in an ephemeral session.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-09-09  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: mobile-sidebar-control should override button
        https://bugs.webkit.org/show_bug.cgi?id=201566

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (@media screen and (min-width: 600px)):
        (.mobile-sidebar-control):
        (.mobile-sidebar-control.display):

2019-09-07  Chris Dumez  <cdumez@apple.com>

        Rewrite http/tests/workers/service/serviceworker-private-browsing.https.html as an API test
        https://bugs.webkit.org/show_bug.cgi?id=201574

        Reviewed by Alex Christensen.

        Rewrite http/tests/workers/service/serviceworker-private-browsing.https.html as an API test so that
        we truly test private browsing. testRunner.setPrivateBrowsingEnabled_DEPRECATED() is a hack which
        does not work well for WK2.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-09-07  Chris Dumez  <cdumez@apple.com>

        Rewrite storage/domstorage/localstorage/private-browsing-affects-storage.html as an API test
        https://bugs.webkit.org/show_bug.cgi?id=201547

        Reviewed by Alex Christensen.

        Rewrite storage/domstorage/localstorage/private-browsing-affects-storage.html as an API test so
        it can use a true ephemeral session instead of the testRunner.setPrivateBrowsingEnabled_DEPRECATED()
        hack.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (-[LocalStorageNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[LocalStorageNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2019-09-07  Alex Christensen  <achristensen@webkit.org>

        Remove WebsiteDataStore::legacyDefaultDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=200054

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        This test relied on the default data store having been instantiated.

2019-09-07  Alex Christensen  <achristensen@webkit.org>

        Remove calls to WKContextGetWebsiteDataStore missed in r249614
        https://bugs.webkit.org/show_bug.cgi?id=200050

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

2019-09-07  Alex Christensen  <achristensen@webkit.org>

        Remove invalid assertion added in r249614
        https://bugs.webkit.org/show_bug.cgi?id=200050

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        Something is instantiating the default data store, which is no problem right now.

2019-09-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249353.

        The test for this change is a flaky failure.

        Reverted changeset:

        "Add support for postMessage buffering between the service
        worker and window"
        https://bugs.webkit.org/show_bug.cgi?id=201169
        https://trac.webkit.org/changeset/249353

2019-09-07  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKContextGetWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=200050

        Reviewed by Geoff Garen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::updateProxySettings):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::platformAdjustContext):
        (WTR::TestController::clearServiceWorkerRegistrations):
        (WTR::TestController::clearDOMCache):
        (WTR::TestController::clearDOMCaches):
        (WTR::TestController::ClearIndexedDatabases):
        (WTR::TestController::hasDOMCache):
        (WTR::TestController::domCacheSize):
        (WTR::TestController::setStatisticsDebugMode):
        (WTR::TestController::setStatisticsPrevalentResourceForDebugMode):
        (WTR::TestController::setStatisticsLastSeen):
        (WTR::TestController::setStatisticsPrevalentResource):
        (WTR::TestController::setStatisticsVeryPrevalentResource):
        (WTR::TestController::dumpResourceLoadStatistics):
        (WTR::TestController::isStatisticsPrevalentResource):
        (WTR::TestController::isStatisticsVeryPrevalentResource):
        (WTR::TestController::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestController::setStatisticsHasHadUserInteraction):
        (WTR::TestController::isStatisticsHasHadUserInteraction):
        (WTR::TestController::setStatisticsGrandfathered):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::setStatisticsSubframeUnderTopFrameOrigin):
        (WTR::TestController::setStatisticsSubresourceUnderTopFrameOrigin):
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectTo):
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectFrom):
        (WTR::TestController::setStatisticsTopFrameUniqueRedirectTo):
        (WTR::TestController::setStatisticsTopFrameUniqueRedirectFrom):
        (WTR::TestController::setStatisticsCrossSiteLoadWithLinkDecoration):
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestController::statisticsUpdateCookieBlocking):
        (WTR::TestController::statisticsSubmitTelemetry):
        (WTR::TestController::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestController::setStatisticsIsRunningTest):
        (WTR::TestController::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestController::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WTR::TestController::setStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WTR::TestController::setStatisticsGrandfatheringTime):
        (WTR::TestController::setStatisticsMaxStatisticsEntries):
        (WTR::TestController::setStatisticsPruneEntriesDownTo):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestController::statisticsDeleteCookiesForHost):
        (WTR::TestController::isStatisticsHasLocalStorage):
        (WTR::TestController::setStatisticsCacheMaxAgeCap):
        (WTR::TestController::statisticsResetToConsistentState):
        (WTR::TestController::setWebAuthenticationMockConfiguration):
        (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2019-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Incorrect selection rect revealed after pasting images in a contenteditable element
        https://bugs.webkit.org/show_bug.cgi?id=201549
        <rdar://problem/50956429>

        Reviewed by Simon Fraser.

        Add an API test to exercise the scenario where we scroll to reveal the selection after pasting an image that was
        directly written to the pasteboard.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

2019-09-06  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r249582.

        This caused results.html fail to be created on internal
        testers.

        Reverted changeset:

        "run-webkit-test: Allow results to be uploaded without scm
        checkout"
        https://bugs.webkit.org/show_bug.cgi?id=200787
        https://trac.webkit.org/changeset/249582

2019-09-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should only display important messages in pop-over - part 2
        https://bugs.webkit.org/show_bug.cgi?id=201557

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Add few more strings to STEPS_TO_HIDE.

2019-09-06  Alex Christensen  <achristensen@webkit.org>

        Deprecate all WKCookieManagerRef functions
        https://bugs.webkit.org/show_bug.cgi?id=201473

        Reviewed by Chris Dumez.

        Adopt replacement C API in WebKitTestRunner.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp: Removed, because the functions it tests were removed.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

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

        Marking up a note on iOS results in a PDF with no contents
        https://bugs.webkit.org/show_bug.cgi?id=201530
        <rdar://problem/53686019>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewPrintFormatter.mm:
        Add some tests for WKWebViewPrintFormatter; specifically that it is
        possible to _recalcPageCount twice in quick succession, and that
        we don't hang if we start painting the printed content immediately
        after a Web Content process crash.

2019-09-06  Matt Lewis  <jlewis3@apple.com>

        run-webkit-test: Allow results to be uploaded without scm checkout
        https://bugs.webkit.org/show_bug.cgi?id=200787

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system): Added in detection of stub repository.
        * Scripts/webkitpy/common/checkout/scm/stub_repository.py: Added.
        (StubRepository):
        (StubRepository.__init__):
        (StubRepository._find_parent_path_matching_callback_condition): Checks up the path given to
        find the directory containing the checkout_information.json of the stub repository.
        (StubRepository.in_working_directory): Required functions to be implemented.
        (StubRepository.svn_revision): Required functions to be implemented.
        (StubRepository.native_revision): Required functions to be implemented.
        (StubRepository.native_branch): Required functions to be implemented.
        (StubRepository._decode_json): Decodes checkout_information.json.
        (StubRepository.find_checkout_root): Required functions to be implemented.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: Added.
        (StubRepositoryTest): Unit test for stub_repository SCM.
        (StubRepositoryTest.mock_host_for_stub_repository):
        (StubRepositoryTest.test_in_working_directory):
        (StubRepositoryTest.test_native_revision):
        (StubRepositoryTest.test_native_branch):
        (StubRepositoryTest.test_svn_revision):
        (StubRepositoryTest.test_find_checkout_root):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator._get_svn_revision): Removed unnecessary scm initialization.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Removed unnecessary scm initialization.

2019-09-06  Alex Christensen  <achristensen@webkit.org>

        When disabling legacy private browsing for testing, change the SessionID back to what it was, not the defaultSessionID
        https://bugs.webkit.org/show_bug.cgi?id=201480

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateBrowsingEnabled):

2019-09-06  Rob Buis  <rbuis@igalia.com>

        Add runtime flag for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=199794

        Reviewed by Frédéric Wang.

        Remove parts of r248409 that were meant for WK1 since
        lazy image loading is WK2 only.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

2019-09-05  Chris Dumez  <cdumez@apple.com>

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in imported/w3c/IndexedDB-private-browsing
        https://bugs.webkit.org/show_bug.cgi?id=201519

        Reviewed by Alex Christensen.

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in imported/w3c/IndexedDB-private-browsing
        as it does not truly enable private browsing for WebKit2. Instead, have WKTR / DRT set the
        TestOption::useEphemeralSession flag based on the test folder.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldUseEphemeralSession):
        (runTest):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::shouldUseEphemeralSession):
        (WTR::TestOptions::TestOptions):

2019-09-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Support Per-Monitor (V2) DPI Awareness
        https://bugs.webkit.org/show_bug.cgi?id=201450

        Reviewed by Don Olmstead.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc): Set the window position suggested by WM_DPICHANGED.
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain): Call SetProcessDpiAwarenessContext by using soft linking.

2019-09-05  Chris Dumez  <cdumez@apple.com>

        REGRESSION: http/tests/adClickAttribution/second-attribution-converted-with-higher-priority.html and http/tests/adClickAttribution/second-attribution-converted-with-lower-priority.html are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=201440
        <rdar://problem/54998427>

        Reviewed by Alex Christensen.

        Since r249350, it is now possible for a WebContent process to have a suspended WebPage for the current web view.
        This was confusing InjectedBundle::page() in WebKitTestRunner which was assuming that the WebPage that was first
        created in the WebContent process is the one that is currently running the test and that we want to talk to.
        Update InjectedBundle::page() to ignore suspended WebPages in order to address the issue.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::page const):

2019-09-05  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Assign notifyRerender before calling
        https://bugs.webkit.org/show_bug.cgi?id=201510

        Reviewed by Aakash Jain.

        Timelines should define notifyRerender to an empty function,
        rename notifiyRerender to notifyRerender.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        * resultsdbpy/resultsdbpy/view/templates/search.html:
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

2019-09-05  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Fix prepending search result on empty list 
        https://bugs.webkit.org/show_bug.cgi?id=201512

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/search.html:

2019-09-05  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Retain certain parameters when following menu links
        https://bugs.webkit.org/show_bug.cgi?id=201463

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/site_menu.py:
        (SiteMenu.add_endpoint): Allow added endpoints to define parameters to be retained.
        * resultsdbpy/resultsdbpy/view/templates/base.html: When clicking on a site-menu link,
        retain the specified parameters
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__):

2019-09-05  Chris Dumez  <cdumez@apple.com>

        [WK2] Add proper layout test support for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=201475

        Reviewed by Antti Koivisto.

        Add proper layout test support for ephemeral sessions via:
        <!-- webkit-test-runner [ useEphemeralSession=true ] -->

        This actually creates a new WebView using an ephemeral data store to load the test which
        is *true* private browsing.

        testRunner.setPrivateBrowsingEnabled() merely overrides the Page's sessionID in the WebContent
        process, which is a hack and does not truly enable private browsing because the UIProcess and
        the NetworkProcess are not properly updated on WK2. This patch renames testRunner.setPrivateBrowsingEnabled()
        to testRunner.setPrivateBrowsingEnabled_DEPRECATED() to discourage its use since I am try to
        get rid of it.

        Note that WK2 does not support using a WebContent process for different sessions / data stores.
        Each WebContent process has a single associated data store and testRunner.setPrivateBrowsingEnabled()
        is currently the only exception to that. This leads to additional complexity in our code base (e.g. in ITP),
        simply to support testRunner.setPrivateBrowsingEnabled().

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateBrowsingEnabled_DEPRECATED):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2019-09-05  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (iOS 13): Bulleted list copied from Notes to Mail results in Times New Roman
        https://bugs.webkit.org/show_bug.cgi?id=201490

        Reviewed by Daniel Bates.

        Added a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/cocoa-writer-markup-with-lists.html: Added.

2019-09-05  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused SPI that accesses MemoryCache directly
        https://bugs.webkit.org/show_bug.cgi?id=201468

        Reviewed by Youenn Fablet.

        Removed the API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/MemoryCacheAddImageToCacheIOS.mm: Removed.

2019-09-04  Timothy Hatcher  <timothy@apple.com>

        Mail appears to be double inverting code copied from Notes, Xcode, or Terminal.
        https://bugs.webkit.org/show_bug.cgi?id=201368
        rdar://problem/40529867

        Reviewed by Ryosuke Niwa.

        Added Tests: PasteHTML.TransformColorsOfDarkContent, PasteHTML.DoesNotTransformColorsOfLightContent,
            PasteRTFD.TransformColorsOfDarkContent, PasteRTFD.DoesNotTransformColorsOfLightContent

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        (createWebViewWithCustomPasteboardDataSetting): Added argument to enable color filter.
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Added argument to enable color filter.
        * TestWebKitAPI/Tests/WebKitCocoa/rich-color-filtered.html: Added.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView forceDarkMode]):

2019-09-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        MobileSafari may crash when invoking the C++ lambda in -[WKContentView _shareForWebView:]
        https://bugs.webkit.org/show_bug.cgi?id=201479
        <rdar://problem/51511834>

        Reviewed by Tim Horton.

        Add a test to verify that the UI process doesn't crash when invoking `_share:` while there's no selection.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-09-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        -[WKContentView selectedText] returns an empty string when selecting more than 200 characters
        https://bugs.webkit.org/show_bug.cgi?id=201471
        <rdar://problem/55039227>

        Reviewed by Tim Horton.

        Add an API test to ensure that -selectedText is non-empty in the case where more than 200 characters are
        selected.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-09-04  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Fix mobile vs desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=201441

        Rubber-stamped by Aakash Jain.

        We should unconditionally use desktop mode if the device screen-width
        is large enough.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:

2019-09-04  Jonathan Bedard  <jbedard@apple.com>

        run-api-tests: Add support for specifying additional environment variables
        https://bugs.webkit.org/show_bug.cgi?id=201311
        <rdar://problem/54852698>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Add --additional-env-var flag.
        * Scripts/webkitpy/port/base.py:
        (Port._append_value_colon_separated): Use os.pathsep instead of ':'.
        (Port.environment_for_api_tests): Add the values from --additional-env-var to the
        environment.

2019-09-04  Aakash Jain  <aakash_jain@apple.com>

        EWS bubbles should indicate builder vs tester
        https://bugs.webkit.org/show_bug.cgi?id=201253

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Add icons to the bubbles appropriately.
        (StatusBubble._is_tester_queue): Method to determine if the queue is tester queue.
        (StatusBubble._is_builder_queue): Method to determine if the queue is builder queue.
        (StatusBubble.get):
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.fetch_config): Method to fetch the config from Buildbot server.
        (Buildbot.update_icons_for_queues_mapping): Method to update the icons for queues mapping.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.run): Update the icons for queues mapping.
        * BuildSlaveSupport/ews-build/config.json: Add icon information for the queues.
        * BuildSlaveSupport/ews-build/loadConfig.py: Remove 'icon' key from builder before passing it to Buildbot.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: .
        (test_builder_keys): Update unit-test accordingly. Also minor drive-by fix to improve failure string formatting.

2019-09-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] IsoTLSLayout and AllIsoHeaps registration is racy with derived class initialization with virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=201448

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (TEST):

2019-09-03  Dean Jackson  <dino@apple.com>

        Test for ContextMenus with images
        https://bugs.webkit.org/show_bug.cgi?id=201437

        Reviewed by Wenson Hsieh.

        Add a test for ContextMenus that trigger on images, and make
        sure that they ask for alternate URLs (added in r249171).

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (contextMenuWebViewDriver):
        (-[TestContextMenuImageUIDelegate _webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuImageUIDelegate _webView:alternateURLFromImage:userInfo:]):
        (-[TestContextMenuImageUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[TestContextMenuImageUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuImageUIDelegate webView:contextMenuDidEndForElement:]):
        (TEST):

2019-09-03  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Move legend into sidebar
        https://bugs.webkit.org/show_bug.cgi?id=201258

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: 
        (Legend): Make the legend vertical instead of horizontal, add ToolTip to dots in the legend.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.css: Add left and right tooltip arrows.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (isPointInElement): Make bound check include borders.
        (_ToolTip.toString): Add left/right cases.
        (_ToolTip.prototype.setByElement): Set the tooltip location given an element.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Put the legend into the sidebar.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

2019-09-03  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Increase default limit for LimitSlider
        https://bugs.webkit.org/show_bug.cgi?id=201424

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (LimitSlider): Increase the default limit, make limit slider linear instead of logarithmic.

2019-09-03  Antoine Quint  <graouts@apple.com>

        [iOS] Treat a two-finger single tap as if the user tapped with the Cmd key pressed
        https://bugs.webkit.org/show_bug.cgi?id=201420
        <rdar://problem/53207786>

        Reviewed by Simon Fraser.

        Add a new twoFingerSingleTapAtPoint() method to UIScriptController, which just calls into the existing (but unused)
        -[HIDEventGenerator twoFingerTap:completionBlock:].

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

2019-09-03  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] MiniBrowser should handle the WebKitWebView::create signal
        https://bugs.webkit.org/show_bug.cgi?id=201417

        Reviewed by Carlos Garcia Campos.

        WPE's MiniBrowser should connect to and handle the
        WebKitWebView::create signal, constructing a new bit related
        WebKitWebView object upon invocation.

        * MiniBrowser/wpe/main.cpp:
        (webViewClose):
        (createWebView):
        (main):

2019-09-03  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Make view backends multi-view-friendly
        https://bugs.webkit.org/show_bug.cgi?id=201415

        Reviewed by Carlos Garcia Campos.

        Have the Wayland EGL connection for WindowViewBackend instances managed
        through a per-process singleton, allowing multiple backend objects
        use it for different views. HeadlessViewBackend already does this, but
        the code there is refurbished into a singleton structure.

        The ViewBackend classes are adjusted to work with the backend-specific
        EGLDisplay objects (as constructed through the backend-specific EGL
        connection approach).

        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessEGLConnection::singleton):
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::~HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::createSnapshot):
        (WPEToolingBackends::getEGLDisplay): Deleted.
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::initialize):
        (WPEToolingBackends::ViewBackend::deinitialize):
        (WPEToolingBackends::ViewBackend::~ViewBackend): Deleted.
        * wpe/backends/ViewBackend.h:
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WaylandEGLConnection::singleton):
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
        (WPEToolingBackends::WindowViewBackend::~WindowViewBackend):
        (WPEToolingBackends::WindowViewBackend::displayBuffer):

2019-09-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] Deprecate nonfunctional process limit APIs
        https://bugs.webkit.org/show_bug.cgi?id=193749

        Reviewed by Žan Doberšek.

        * MiniBrowser/gtk/main.c:
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (beforeAll):
        (testWebProcessLimit): Deleted.

2019-09-02  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] WindowBackend should do resizing properly
        https://bugs.webkit.org/show_bug.cgi?id=201386

        Reviewed by Carlos Garcia Campos.

        The WindowBackend implementation is resized via the XDG protocol. The
        initial size is stored for the object's lifetime and fallen back to when
        the XDG protocol reports (0,0) configuration size.

        Upon each resize, we have to recreate the texture. We also have to size
        the GL viewport accordingly.

        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
        (WPEToolingBackends::WindowViewBackend::createViewTexture):
        (WPEToolingBackends::WindowViewBackend::resize):
        (WPEToolingBackends::WindowViewBackend::displayBuffer):
        * wpe/backends/WindowViewBackend.h:

2019-09-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r249366.

        WinCairo WebKit2 crashes in some websites and the device scale
        factor is not correct in high DPI.

        Reverted changeset:

        "[WinCairo, FTW] Properly handle device scale factor"
        https://bugs.webkit.org/show_bug.cgi?id=201361
        https://trac.webkit.org/changeset/249366

2019-09-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Long presses that interrupt accelerated scrolling dispatch clicks on apps linked against iOS 12 or earlier
        https://bugs.webkit.org/show_bug.cgi?id=201346
        <rdar://problem/54885784>

        Reviewed by Dean Jackson.

        Add a new test option to allow tests to disable link previews.

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

        Drive-by fix: also check enableLazyImageLoading when determining whether two TestOptions are the same.

        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2019-08-30  Brent Fulgham  <bfulgham@apple.com>

        [WinCairo, FTW] Properly handle device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=201361

        Reviewed by Don Olmstead.

        Reset zoom to 1.0; device scale is handled elsewhere.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::resetZoom):

2019-08-30  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Add notify rerender API for timeline
        https://bugs.webkit.org/show_bug.cgi?id=201363

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Export notifyRerender API to timeline class
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (XScrollableCanvasProvider): Add an event stream to receive notification that it will need to render 
        (prototype.ExpandableSeriesComponent): Notify the rerender when expanded, because this may change the layout.
        (prototype.Timeline.CanvasContainer):

2019-08-30  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] 're-run-layout-tests' step on macOS-High-Sierra-Debug-WK1-Tests-EWS runs WK2 tests
        https://bugs.webkit.org/show_bug.cgi?id=201350

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKit1Tests.start): Set build property to use dump-render-tree.
        (RunWebKitTests.start): Use dump-render-tree whenever the corresponding build property is set.

2019-08-30  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add endpoints to upload and download archives
        https://bugs.webkit.org/show_bug.cgi?id=201100

        Reviewed by Aakash Jain.

        Add the endpoint to upload and download a zip archive associated with a test run.

        * resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.__init__): Add archive endpoint.
        * resultsdbpy/resultsdbpy/controller/archive_controller.py: Added.
        (ArchiveController):
        (ArchiveController.__init__):
        (ArchiveController.endpoint):
        (ArchiveController.download):
        (ArchiveController.upload):
        * resultsdbpy/resultsdbpy/controller/archive_controller_unittest.py: Added.
        (ArchiveControllerUnittest):
        * resultsdbpy/resultsdbpy/model/configuration_context.py:
        (ClusteredByConfiguration.register_configuration): Make error message more clear.

2019-08-30  Simon Fraser  <simon.fraser@apple.com>

        Add system tracing points for compositing updates, and touch-event dispatching
        https://bugs.webkit.org/show_bug.cgi?id=201327

        Reviewed by Alex Christensen.

        * Tracing/SystemTracePoints.plist:

2019-08-30  Keith Rollin  <krollin@apple.com>

        Simplify PLATFORM expression
        https://bugs.webkit.org/show_bug.cgi?id=201286
        <rdar://problem/54822347>

        Reviewed by Alexey Proskuryakov.

        The preprocessor expression conditionalizing the inclusion of the body
        of ExitFullscreenOnEnterPiP.mm evolved into:

            #if PLATFORM(MAC) || (PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR))

        Simplify this to just:

            #if !PLATFORM(IOS_FAMILY_SIMULATOR)

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:

2019-08-30  Keith Rollin  <krollin@apple.com>

        Remove AppKitCompatibilityDeclarations.h
        https://bugs.webkit.org/show_bug.cgi?id=201283
        <rdar://problem/54822042>

        Reviewed by Alexey Proskuryakov.

        The two copies of these files -- on in WTF, one in MiniBrowser -- are
        empty and can be removed.

        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/TextInputControllerMac.m:
        * MiniBrowser/AppKitCompatibilityDeclarations.h: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/SettingsController.m:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuImgWithVideo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenLayoutConstraints.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenTopContentInset.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserInitiatedActionInNavigationAction.mm:
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:
        * TestWebKitAPI/Tests/mac/ContextMenuDefaultItemsHaveTags.mm:
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.mm:
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2019-08-30  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] New API to remove a filter from an user content manager given its identifier
        https://bugs.webkit.org/show_bug.cgi?id=200479

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testUserContentManagerContentFilter): Test also the new
        webkit_user_content_manager_remove_filter_by_id() public API function.

2019-08-30  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] loadingChanged signal parameter is unusable
        https://bugs.webkit.org/show_bug.cgi?id=201301

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/wpe/qt/main.qml: Add a basic loadingChange signal handler.
        * Scripts/webkitpy/style/checker.py: White-list WPEQtView.h for
        readablity/parameter_name code styl checker rule.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

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

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove empty FontCache.cpp file in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=201277
        <rdar://problem/54820726>

        Reviewed by Alex Christensen.

        Bug 200694 emptied out the contents of FontCache.cpp. This patch
        removes the file from the project.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FontCache.cpp: Removed.

2019-08-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should only display important messages in pop-over
        https://bugs.webkit.org/show_bug.cgi?id=201308

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added various build-steps which are of low interest
        to end-users in STEPS_TO_HIDE. If any of these steps fail, it will not be hidden.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 3)
        https://bugs.webkit.org/show_bug.cgi?id=201224
        <rdar://problem/54795934>

        Reviewed by Darin Adler.

        Remove symbols in WebKitTargetConditionals.xcconfig related to macOS
        10.13, including WK_MACOS_1013 and WK_MACOS_BEFORE_1013, and suffixes
        like _MACOS_SINCE_1013.

        Also added some macOS target numbers.

        * TestWebKitAPI/Configurations/WebKitTargetConditionals.xcconfig:

2019-08-29  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Remove border from tooltip
        https://bugs.webkit.org/show_bug.cgi?id=201239

        Reviewed by Alex Christensen.

        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css:
        (.tooltip-content): Remove border.

2019-08-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] MiniBrowser crashes in WKURLCopyString if WKPageCopyActiveURL returns null
        https://bugs.webkit.org/show_bug.cgi?id=201215

        Reviewed by Don Olmstead.

        MiniBrowser crashed if it was going to go to a unreachable page
        because WKPageCopyActiveURL returned a nullptr.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString): Added null checking of the argument.

2019-08-28  Tim Horton  <timothy_horton@apple.com>

        Reloading a web view with a fixed-width viewport and variable content width restores the previous page scale, shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=201256
        <rdar://problem/54809509>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/long-email-viewport.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ReloadWithDifferingInitialScale.mm: Added.
        (TestWebKitAPI::TEST):
        Add a test. I left many comments because I had a great deal of trouble
        writing this test and wanted to document my findings.

2019-08-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Do not display branch selector if only one branches available
        https://bugs.webkit.org/show_bug.cgi?id=201244

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Hide the branch selector's
        container if there aren't multiple branches to choose from.

2019-08-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKAttachmentTests.DropFolderAsAttachmentAndMoveByDragging fails in some iOS simulator configurations
        https://bugs.webkit.org/show_bug.cgi?id=201241
        <rdar://problem/54317588>

        Reviewed by Tim Horton.

        For reasons that are still unknown, it's possible for iOS 13 simulators to get into a state where the IPC
        communication delay between the web and UI processes can become extraordinarily long. Under these circumstances,
        the drag and drop harness fails to simulate a drop, since it ends up firing all scheduled calls to
        -dropInteraction:sessionDidUpdate: before the first response from the web process arrives in the UI process, so
        it believes that the web view has rejected the drop from being handled.

        Instead, make the drag and drop simulator robust by ensuring a presentation update between drop session updates,
        to make sure that the web process has had time to send a response after each update.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _advanceProgress]):

2019-08-28  Megan Gardner  <megan_gardner@apple.com>

        Null check webFrame when creating a print preview to prevent a crash.
        https://bugs.webkit.org/show_bug.cgi?id=201237
        <rdar://problem/51618863>

        Reviewed by Tim Horton.

        Test to verify that if we don't have the WebPageProxy, we will not crash when making a print preview.

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

2019-08-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Move drawer to the right, open by default
        https://bugs.webkit.org/show_bug.cgi?id=200977

        Rubber-stamped by Aakash Jain.

        The drawer was both unpopular and not discoverable. After feedback from bot watchers,
        moving the drawer to the right side of the screen, opening it by default and have it displace
        instead of hide the main content.

        * resultsdbpy/resultsdbpy/view/commit_view_unittest.py:
        (CommitViewUnittest.test_drawer): Support new drawer style.
        (CommitViewUnittest.test_range_slider): Ditto.
        (CommitViewUnittest.test_one_line_switch): Ditto.
        (CommitViewUnittest.test_branch_selection): Ditto.
        * resultsdbpy/resultsdbpy/view/static/css/drawer.css: Removed.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (setEnableRecursive): Disable all elements underneath this one 
        (Drawer): Make drawer a sidebar.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.header>.title, .topbar>.title): Overflow of titles should be hidden.
        (:root): Move boldInverseColor into webkit.css.
        (@media (prefers-color-scheme: dark)):
        (.sidebar): Sidebars on mobile should behave like drawers.
        (.sidebar.hidden): Add concept of hidden sidebar.
        (.mobile-sidebar-control): Add a control to collapse sidebar that only exists on mobile.
        (.mobile-sidebar-control.display):
        (.main.under-topbar-with-actions):
        (@media screen and (min-width: 600px) and (orientation: landscape)):
        (.sidebar.left.hidden):
        (.sidebar.right.hidden):
        (.main.right.hidden):
        (.main.left.hidden):
        (@media screen and (min-width: 768px) and (orientation: landscape)):
        (.sidebar.right):
        (a.disabled): Add ability to disable a link.
        (.desktop-control): Add a control which only exists on desktop.
        * resultsdbpy/resultsdbpy/view/templates/base.html: Add hamburger drawer-button for mobile.
        * resultsdbpy/resultsdbpy/view/templates/commits.html: Use main since Drawer is now a sidebar.
        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Ditto.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Ditto.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.
        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
        (WebSiteTestCase.toggle_drawer): Support new drawer style.
        (WebSiteTestCase.find_input_with_name): Ditto.

2019-08-28  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=201197
        <rdar://problem/54759985>

        Reviewed by Darin Adler.

        Update conditionals that reference WK_MACOS_1013 and suffixes like
        _MACOS_SINCE_1013, assuming that we're always building on 10.13 or
        later and that these conditionals are always True or False.

        See Bug 200694 for earlier changes in this area.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-08-28  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] WebKitMediaSrc rework
        https://bugs.webkit.org/show_bug.cgi?id=199719

        Reviewed by Xabier Rodriguez-Calvar.

        Added WebKitMediaSourceGStreamer.cpp to the GStreamer-style coding
        whitelist.

        * Scripts/webkitpy/style/checker.py:

2019-08-28  Alexey Proskuryakov  <ap@apple.com>

        Updating inactive contributors in contributors.json.

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

2019-08-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Auto-expand single configurations
        https://bugs.webkit.org/show_bug.cgi?id=201218

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.toString): Automatically expand timeline when only one
        configuration has been specified.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (prototype.ExpandableSeriesComponent): Add options so that the caller can set whether a timeline
        is expanded or collapsed by default.

2019-08-28  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Sanitize all commit arguments on upload
        https://bugs.webkit.org/show_bug.cgi?id=201189
        <rdar://problem/54564837>

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/commit.py:
        (Commit.__init__): Only allow commits to be constructed with valid values.
        * resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (CommitController.register): Strip potential API key.
        * resultsdbpy/resultsdbpy/controller/commit_unittest.py:
        (CommitUnittest.test_invalid): Test that commits which contain html inside the
        repository_id, branch or commit id are rejected.

2019-08-02  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Implement HSTS for the soup network backend
        https://bugs.webkit.org/show_bug.cgi?id=192074

        Reviewed by Carlos Garcia Campos.

        libsoup 2.67.1 introduced HSTS support via a SoupSessionFeature.
        Add support to the soup network backend by adding the feature to
        SoupNetworkSession and handling HSTS protocol upgrades, by
        propagating the scheme change further to clients. This patch adds
        the HSTS feature unconditionally, but it still possible to add
        a boolean property to the web context class if desired.

        Additionally, add API to the WebKitWebsiteDataManager to specify
        the directory where the HSTS database is saved. If the directory
        is not set or if the data manager is ephemeral, use a
        non-persistent, memory only HSTS enforcer.

        Implement as well the methods needed to clean-up and delete HSTS
        policies from the storage and expose the feature in GTK+
        MiniBrowser's about:data.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (prepopulateHstsData):
        (testWebsiteDataHsts):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        * gtk/jhbuild.modules: Bump libsoup to 2.67.91 for the new APIs
        * wpe/jhbuild.modules: Ditto
        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):

2019-08-27  James Darpinian  <jdarpinian@google.com>

        Fix applying diffs that only change file mode
        https://bugs.webkit.org/show_bug.cgi?id=201191

        Reviewed by Daniel Bates.

        * Scripts/svn-apply:
        (patch): Handle case of file mode change without content change

2019-08-27  Aakash Jain  <aakash_jain@apple.com>

        [ews] Status bubble should be red for CANCELLED builds
        https://bugs.webkit.org/show_bug.cgi?id=201204

        Reviewed by Jonathan Bedard.

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

2019-08-27  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Webkit.css] Center the legend symbols
        https://bugs.webkit.org/show_bug.cgi?id=201187

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.lengend>.item .dot .text): center the dot symbol vertically

2019-08-27  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Use -noBulkSymbolication when calling spindump (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=201000
        <rdar://problem/53778938>

        Unreviewed follow-up fix.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Run spindump without -noBulkSymbolication if previous
        spindump call failed.
        * Scripts/webkitpy/port/darwin_testcase.py:
        * Scripts/webkitpy/port/ios_device_unittest.py:

2019-08-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use update-webkit script in Apply-WatchList EWS
        https://bugs.webkit.org/show_bug.cgi?id=201179

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (WatchListFactory): Updated to use CheckOutSource step as well.

2019-08-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        W3C test importer should be able to handle expected references with an absolute path.
        https://bugs.webkit.org/show_bug.cgi?id=200717

        Reviewed by Youenn Fablet.

        This patch implements the logic to resolve test references with absolute paths
        when importing w3c tests (like web-platform-tests).
        When an absolute path is found for a test reference, the parser now
        tries to find the right file by looking for a relative path inside
        the root directory of the source test repository.
        It works when the tool is run in download-mode as well as when the
        tool is run to import the tests from a local directory.

        This fixes the import of test references for tests like
        web-platform-tests/css/css-images/multiple-position-color-stop-linear-2.html

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter._source_root_directory_for_path):
        (TestImporter.find_importable_tests):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.import_directory):
        (test_webkit_test_runner_options):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_download):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_from_source_dir):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.__init__):
        (TestParser.analyze_test):

2019-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove UIHelper.activateElementAtHumanSpeed
        https://bugs.webkit.org/show_bug.cgi?id=201147

        Reviewed by Tim Horton.

        Add plumbing for a new script controller hook to wait for the double tap delay to pass. On non-iOS, this
        resolves immediately; on iOS, we inspect the content view for tap gestures that require more than one tap, and
        find the value of the maximum double tap delay. We then delay for this amount of time before resolving.

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

2019-08-26  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timline] Add symbols to the timeline dot
        https://bugs.webkit.org/show_bug.cgi?id=201105

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Modify the drawDot api to provide user ability to add symbol to the dots, it supports unicode symbol
        * resultsdbpy/resultsdbpy/view/templates/base.html: Add the encoding UTF-8 for the page, so that we can add unicode symbol to the dots

2019-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, remove useMaximalFlushInsertionPhase use
        https://bugs.webkit.org/show_bug.cgi?id=201036

        * Scripts/run-jsc-stress-tests:

2019-08-26  David Kilzer  <ddkilzer@apple.com>

        Don't compute upconverted characters twice in buildQuery() in DataDetection.mm
        <https://webkit.org/b/201144>
        <rdar://problem/54689399>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
        DataDetectorsTestIOS.mm to the project.
        * TestWebKitAPI/Tests/ios/DataDetectorsTestIOS.mm: Add a new
        test for Data Detectors for phone numbers.

2019-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (iOS 13): Tests that simulate multiple back-to-back single taps fail or time out
        https://bugs.webkit.org/show_bug.cgi?id=201129
        <rdar://problem/51857277>

        Reviewed by Tim Horton.

        The tests in editing/pasteboard/ios were timing out on iOS 13 before this change. This is because they simulate
        back-to-back single taps; while this is recognized as two single taps on iOS 12 and prior, only the first single
        tap is recognized on iOS 13 (and the second is simply dropped on the floor). This occurs because the synthetic
        single tap gesture is reset slightly later on iOS 13 compared to iOS 12, so when the second tap is dispatched,
        the gesture recognizer is still in "ended" state after the first tap on iOS 13, which means the gesture isn't
        capable of recognizing further touches yet.

        In UIKit, a gesture recognizer is only reset once its UIGestureEnvironment's containing dependency subgraph no
        longer contains gestures that are active. In iOS 12, the synthetic click gesture is a part of a dependency
        subgraph that contains only itself and the normal (blocking) double tap gesture which requires the click to fail
        before it can be recognized; immediately after simulating the tap, both these gestures are inactive, which
        allows both of them to be reset.

        However, in iOS 13, the synthetic click gesture is part of a gesture dependency graph that contains the double
        tap for double click gesture, as well as the non-blocking double tap gesture, both of which are still active
        immediately after sending the first tap. This change in dependencies is caused by the introduction of
        UIUndoGestureInteraction's single and double three-finger tap gestures, which (in -[UIUndoGestureInteraction
        gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]) explicitly add all other taps as failure
        requirements. This effectively links the synthetic single tap gesture to most of the other gestures in
        WKContentView's dependency graph by way of these tap gestures for the undo interaction.

        All this means that there is now a short (~50 ms) delay after the synthetic single tap gestures is recognized,
        before it can be recognized again. To account for this new delay in our test infrastructure, simply wait for
        single tap gestures that have ended to reset before attempting to send subsequent single taps. We do this by
        introducing WebKit testing SPI to invoke a completion handler after resetting the synthetic click gesture (only
        if necessary - i.e., if the gesture is in ended state when we are about to begin simulating the tap). This
        allows calls to `UIScriptController::singleTapAtPoint` to be reliably recognized as single taps without
        requiring arbitrary 120 ms "human speed" delays.

        This fixes a number of flaky or failing layout tests, including the tests in editing/pasteboard/ios.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::doubleTapAtPoint):

        Add a `delay` parameter to `doubleTapAtPoint`. A number of layout tests were actually simulating double click
        gestures by simulating two back-to-back single taps; this is done for the purposes of being able to add a "human
        speed" delay prior to the second single tap gesture. After the change to wait for the single tap gesture to
        reset before attempting to simulate the next tap, this strategy no longer works, since the second gesture is
        recognized only as a single tap instead of a double tap.

        Instead, we add a delay parameter to `UIScriptController::doubleTapAtPoint`, which the "human speed" double tap
        gestures use instead to wait after simulating the first tap.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _waitFor:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:delay:completionBlock:]):

        Plumb the tap gesture delay through to this helper method.

        (-[HIDEventGenerator tap:completionBlock:]):
        (-[HIDEventGenerator doubleTap:delay:completionBlock:]):
        (-[HIDEventGenerator twoFingerTap:completionBlock:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]): Deleted.
        (-[HIDEventGenerator doubleTap:completionBlock:]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::waitForSingleTapToReset const):

        Add a new helper to wait for the content view's single tap gesture to reset if needed; call this before
        attempting to simulate single taps (either using a stylus, or with a regular touch).

        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::doubleTapAtPoint):
        (WTR::UIScriptControllerIOS::stylusTapAtPointWithModifiers):

2019-08-26  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Allow clicking on the tooltip arrow
        https://bugs.webkit.org/show_bug.cgi?id=201103

        Rubber-stamped by Aakash Jain.

        By design, the arrow sits above the canvas and intercepts mouse events from it.
        This will often make an element that has a tooltip unclickable.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale):
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory):
        (TimelineFromEndpoint.prototype.render):
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (_ToolTip):
        (_ToolTip.prototype.toString): Trigger onClick callback when the arrow is clicked.
        (_ToolTip.prototype.set): Set the onClick callback.

2019-08-26  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Do not append additional '(failure)' string at the end of custom failure message in EWS Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=201140

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (TestWithFailureCount.getResultSummary): Do not append (failure) when in case of custom status.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-08-26  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Cap the number of automatically booted simulators at 12
        https://bugs.webkit.org/show_bug.cgi?id=201139

        Reviewed by Aakash Jain.

        To make local development with simulators more pleasant, machines should
        never automatically boot more than 12 simulators.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.max_supported_simulators):

2019-08-26  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add EWS queue for applying watchlist
        https://bugs.webkit.org/show_bug.cgi?id=201072

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyWatchList): Build step to apply watchlist.
        (ApplyWatchList.__init__): Set logEnviron to False.
        (ApplyWatchList.getResultSummary): Updated the description in case of failure.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-build/factories.py:
        (WatchListFactory): Build factory for WatchList.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/config.json:

2019-08-26  Youenn Fablet  <youenn@apple.com>

        Add a WebsiteDataStore delegate to handle AuthenticationChallenge that do not come from pages
        https://bugs.webkit.org/show_bug.cgi?id=196870

        Reviewed by Alex Christensen.

        Implement the new delegate by respecting the value set by testRunner.setAllowsAnySSLCertificate
        Accept any server certificate by default.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowsAnySSLCertificate):
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h:
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestWebsiteDataStoreDelegate setAllowAnySSLCertificate:]):

2019-08-23  Aakash Jain  <aakash_jain@apple.com>

        Increase log level for watchlist result
        https://bugs.webkit.org/show_bug.cgi?id=201081

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/steps/applywatchlist.py: Increased log level.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Updated unit-tests.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Ditto.

2019-08-23  Chris Dumez  <cdumez@apple.com>

        [geolocation] Rename interfaces and remove [NoInterfaceObject]
        https://bugs.webkit.org/show_bug.cgi?id=200885

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):

2019-08-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249001.

        Caused one layout test to fail on all configurations and
        another to time out on Catalina / iOS 13.

        Reverted changeset:

        "Add a WebsiteDataStore delegate to handle
        AuthenticationChallenge that do not come from pages"
        https://bugs.webkit.org/show_bug.cgi?id=196870
        https://trac.webkit.org/changeset/249001

2019-08-23  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Escape html in changelog
        https://bugs.webkit.org/show_bug.cgi?id=201025
        <rdar://problem/54564837>

        Reviewed by Darin Adler.

        * resultsdbpy/resultsdbpy/view/commit_view.py:
        (CommitView.commit): Output a dictionary instead of a JSON encoded string.
        * resultsdbpy/resultsdbpy/view/templates/commit.html: Unpack commits dictionary
        directly into a JavaScript dictionary.

2019-08-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support NFC authenticators for iOS
        https://bugs.webkit.org/show_bug.cgi?id=188624
        <rdar://problem/43354214>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        Setup NFC mock testing configuration.

2019-08-23  Aakash Jain  <aakash_jain@apple.com>

        [ews] Enable Style queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=201071

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the scheduler for Style queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled style queue bubble on new EWS.
        * QueueStatusServer/config/queues.py: Removed style queue from old EWS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Removed style queue from bot-watcher's dashboard.

2019-08-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] URL bar should be updated for in-page navigations
        https://bugs.webkit.org/show_bug.cgi?id=201032

        Reviewed by Darin Adler.

        * MiniBrowser/win/BrowserWindow.h: Added activeURLChanged to BrowserWindowClient interface.
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::activeURLChanged): Added.
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didCommitLoadForFrame):
        (MiniBrowserWebHost::didChangeLocationWithinPageForFrame): Added.
        (MiniBrowserWebHost::updateAddressBar): Deleted.
        (MiniBrowserWebHost::loadURL): Deleted.
        * MiniBrowser/win/MiniBrowserWebHost.h:
        (MiniBrowserWebHost::MiniBrowserWebHost):
        (MiniBrowserWebHost::didCommitLoadForFrame): Deleted.
        (MiniBrowserWebHost::didChangeLocationWithinPageForFrame): Deleted.
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didChangeIsLoading): Removed an unused variable.
        (WebKitBrowserWindow::didChangeActiveURL): Added.
        (WebKitBrowserWindow::createNewPage):
        (WebKitBrowserWindow::didCommitNavigation): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h: Removed m_urlBarWnd.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::create):
        (WebKitLegacyBrowserWindow::WebKitLegacyBrowserWindow):
        (WebKitLegacyBrowserWindow::init):
        (WebKitLegacyBrowserWindow::navigateToHistory):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h: Removed m_urlBarWnd.

2019-08-22  Andy Estes  <aestes@apple.com>

        [watchOS] Disable Content Filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=201047

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-08-22  Chris Dumez  <cdumez@apple.com>

        Try to recover nicely when getting an unexpected schema in the service workers database
        https://bugs.webkit.org/show_bug.cgi?id=201002
        <rdar://problem/54574991>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-08-22  Keith Rollin  <krollin@apple.com>

        Remove support for tvOS < 13.0
        https://bugs.webkit.org/show_bug.cgi?id=200963
        <rdar://problem/54541355>

        Reviewed by Tim Horton.

        Update conditionals that reference __TV_OS_VERSION_MIN_REQUIRED and
        __TV_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        130000. This means that expressions like "__TV_OS_VERSION_MIN_REQUIRED
        < 130000" are always False and "__TV_OS_VERSION_MIN_REQUIRED >=
        130000" are always True.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2019-08-22  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] OptionSet summary shows size 0 sometimes for non-empty set
        https://bugs.webkit.org/show_bug.cgi?id=200742

        Reviewed by Simon Fraser.

        The OptionSet synthetic provider must respond to requests for the value of m_storage
        (i.e. GetChildMemberWithName('m_storage')) to avoid interfering with the computation
        of the type summary.

        Synthetic providers substitute alternative debug information (children) for the default
        information for a variable. The OptionSet type summary is implemented in terms of the
        OptionSet synthetic provider to maximize code reuse. If LLDB instantiates the provider
        before invoking the type summary handler then evaluating GetChildMemberWithName() on
        the SBValue passed to the type summary handler will access the substitute information
        instead of the original debug information. As a result OptionSet's synthetic provider's
        get_child_index('m_storage') returns None hence SBValue.GetChildMemberWithName('m_storage')
        returned an invalid value; => WTFOptionSetProvider._bitmask() returns 0; => the size
        reported in the type summary for the OptionSet is 0. Instead get_child_index('m_storage')
        should return a valid value.

        * lldb/lldb_webkit.py:
        (FlagEnumerationProvider.__init__):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._get_child_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider._get_child_at_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider.size): Added.
        (FlagEnumerationProvider.get_child_index): Modified to call _get_child_index().
        (FlagEnumerationProvider.get_child_at_index): Modified to call _get_child_at_index().
        (FlagEnumerationProvider.update): Moved initialization of self._elements to the constructor
        and removed self.size. For the latter we can just expose a getter that returns the size of
        the list self._elements.
        (WTFOptionSetProvider._get_child_index): Added. Return the index for LLDB to query for the
        value of m_storage.
        (WTFOptionSetProvider):
        (WTFOptionSetProvider._get_child_at_index): Added. Return the value for m_storage if it
        matches the specified index.
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_empty): Update expected result now
        that we return the value of m_storage as the last synthetic child.

2019-08-22  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Remove branch and repository information from commit tooltip
        https://bugs.webkit.org/show_bug.cgi?id=201035

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Remove branch and repository information from tooltip.

2019-08-22  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Use -noBulkSymbolication when calling spindump
        https://bugs.webkit.org/show_bug.cgi?id=201000
        <rdar://problem/53778938>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Attempt to symbolicate with -noBulkSymbolication first.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_tailspin):
        (DarwinTest.test_get_crash_log): Deleted.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_tailspin):

2019-08-22  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Webkit.css] Change input's disable style
        The disable input style will always show the label like it has a value 
        https://bugs.webkit.org/show_bug.cgi?id=200998

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml: Adding a new example for disabled input that already has a value
        *resultsdbpy/resultsdbpy/view/static/library/css/generate-webkit-css-docs:
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.input>input[type="text"][required][disabled],.input>input[type="number"][required][disabled],):When disabling a text input element even without a value, the style should match the style of a text input element with a value
        (.input>input[type="text"][required][disabled]~label, .input>input[type="number"][required][disabled]~label,):
        (@media (prefers-color-scheme: dark)):

2019-08-17  Darin Adler  <darin@apple.com>

        Use makeString and multi-argument StringBuilder::append instead of less efficient multiple appends
        https://bugs.webkit.org/show_bug.cgi?id=200862

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers): Ditto.
        (WTR::TestController::downloadDidReceiveServerRedirectToURL): Ditto.
        (WTR::TestController::downloadDidFail): Ditto.

2019-08-22  clopez@igalia.com  <clopez@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>

        [GTK][WPE] Support for command "--version" on the MiniBrowser (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=200978

        Unreviewed follow-up fix.

        Update the string format specifier for unsigned it.

        * MiniBrowser/gtk/main.c:
        (main):
        * MiniBrowser/wpe/main.cpp:
        (main):

2019-08-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Support for command "--version" on the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=200978

        Reviewed by Žan Doberšek.

        Printing the engine version used from the MiniBrowser is useful.
        For example, the test scripts on WPT can use this info to better
        tag the generated results.

        * MiniBrowser/gtk/main.c: Print the engine version when called with --version or -v.
        (main):
        * MiniBrowser/wpe/main.cpp: Ditto.
        (main):

2019-08-22  Youenn Fablet  <youenn@apple.com>

        Add a WebsiteDataStore delegate to handle AuthenticationChallenge that do not come from pages
        https://bugs.webkit.org/show_bug.cgi?id=196870

        Reviewed by Alex Christensen.

        Implement the new delegate by respecting the value set by testRunner.setAllowsAnySSLCertificate
        Accept any server certificate by default.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowsAnySSLCertificate):
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h:
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestWebsiteDataStoreDelegate setAllowAnySSLCertificate:]):

2019-08-21  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Fix drawer style
        https://bugs.webkit.org/show_bug.cgi?id=200988

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (Drawer): Nothing in the drawer should be selectable.
        (ConfigurationSelectors): Standardize text size, remove underscore from expanders.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.action:hover): Disable underline on 'links' which are actually actions
        (.unselectable): Make a div unselectable.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.ExpandableSeriesWithHeaderExpanderComponent): Remove underscore from expanders.

2019-08-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Add a progress indicator to the main window
        https://bugs.webkit.org/show_bug.cgi?id=200970

        Reviewed by Alex Christensen.

        * MiniBrowser/win/BrowserWindow.h: Added BrowserWindowClient class.
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::resizeSubViews):
        (MainWindow::progressChanged):
        (MainWindow::progressFinished):
        * MiniBrowser/win/MainWindow.h: Inherited BrowserWindowClient.
        Added m_hProgressIndicator.
        (MainWindow::hwnd const): Deleted.
        (MainWindow::browserWindow const): Deleted.
        (): Deleted.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::onNotify):
        * MiniBrowser/win/MiniBrowserWebHost.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didChangeIsLoading):
        (WebKitBrowserWindow::didChangeEstimatedProgress):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::create):
        (WebKitLegacyBrowserWindow::WebKitLegacyBrowserWindow):
        (WebKitLegacyBrowserWindow::init):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2019-08-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r248970.

        Caused
        lldb_webkit_unittest.TestSummaryProviders.serial_test_WTFOptionSetProvider_empty
        to fail.

        Reverted changeset:

        "[lldb-webkit] OptionSet summary shows size 0 sometimes for
        non-empty set"
        https://bugs.webkit.org/show_bug.cgi?id=200742
        https://trac.webkit.org/changeset/248970

2019-08-21  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add database table to save zip archives to
        https://bugs.webkit.org/show_bug.cgi?id=200718

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/archive_context.py: Added.
        (ArchiveContext):
        (ArchiveContext.ArchivesByCommit): Store archives to be retrieved by commit and configuration.
        (ArchiveContext.ArchivesByCommit.unpack):
        (ArchiveContext.assert_zipfile):
        (ArchiveContext.open_zipfile):
        (ArchiveContext.__init__):
        (ArchiveContext.__enter__):
        (ArchiveContext.__exit__):
        (ArchiveContext.register): Save the provided archive to Cassandra.
        (ArchiveContext.find_archive): Find all archives matching the specified criteria.
        (ArchiveContext._files_for_archive):
        (ArchiveContext.ls): List all files in the matching archives.
        (ArchiveContext.file): Extract a file from the matching archives.
        * resultsdbpy/resultsdbpy/model/archive_context_unittest.py: Added.
        (ArchiveContextTest):
        * resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory):
        (MockModelFactory.process_results):
        (MockModelFactory.add_mock_archives):
        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__): Add an ArchiveContext to the model.

2019-08-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] view layout test results option should be displayed next to layout-test build step
        https://bugs.webkit.org/show_bug.cgi?id=200048

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ExtractTestResults.getLastBuildStepByName): Method to return the last build-step matching the step name.
        (ExtractTestResults.addCustomURLs): Add urls to corresponding layout-test step.

2019-08-21  Aakash Jain  <aakash_jain@apple.com>

        [ews] Fix capitalization in Found x new Test failure message
        https://bugs.webkit.org/show_bug.cgi?id=201004

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeAPITestsResults.analyzeResults):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-08-21  Aakash Jain  <aakash_jain@apple.com>

        Assign ews117 to EWS High-Sierra Debug queues
        https://bugs.webkit.org/show_bug.cgi?id=200993

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-08-21  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] OptionSet summary shows size 0 sometimes for non-empty set
        https://bugs.webkit.org/show_bug.cgi?id=200742

        Reviewed by Simon Fraser.

        The OptionSet synthetic provider must respond to requests for the value of m_storage
        (i.e. GetChildMemberWithName('m_storage')) to avoid interfering with the computation
        of the type summary.

        Synthetic providers substitute alternative debug information (children) for the default
        information for a variable. The OptionSet type summary is implemented in terms of the
        OptionSet synthetic provider to maximize code reuse. If LLDB instantiates the provider
        before invoking the type summary handler then evaluating GetChildMemberWithName() on
        the SBValue passed to the type summary handler will access the substitute information
        instead of the original debug information. As a result OptionSet's synthetic provider's
        get_child_index('m_storage') returns None hence SBValue.GetChildMemberWithName('m_storage')
        returned an invalid value; => WTFOptionSetProvider._bitmask() returns 0; => the size
        reported in the type summary for the OptionSet is 0. Instead get_child_index('m_storage')
        should return a valid value.

        * lldb/lldb_webkit.py:
        (FlagEnumerationProvider.__init__):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._get_child_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider._get_child_at_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider.size): Added.
        (FlagEnumerationProvider.get_child_index): Modified to call _get_child_index().
        (FlagEnumerationProvider.get_child_at_index): Modified to call _get_child_at_index().
        (FlagEnumerationProvider.update): Moved initialization of self._elements to the constructor
        and removed self.size. For the latter we can just expose a getter that returns the size of
        the list self._elements.
        (WTFOptionSetProvider._get_child_index): Added. Return the index for LLDB to query for the
        value of m_storage.
        (WTFOptionSetProvider):
        (WTFOptionSetProvider._get_child_at_index): Added. Return the value for m_storage if it
        matches the specified index.

2019-08-21  Alex Christensen  <achristensen@webkit.org>

        Disabling text autosizing should prevent text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=200955
        <rdar://problem/48095374>

        Reviewed by Simon Fraser.

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

2019-08-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Make debug-test-runner work
        https://bugs.webkit.org/show_bug.cgi?id=193576

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (wrapperPrefixIfNeeded): Only add the wrapper prefix when not running inside a Flatpak sandbox.
        (setupUnixWebKitEnvironment): Added, sets TEST_RUNNER_INJECTED_BUNDLE_FILENAME and
        TEST_RUNNER_TEST_PLUGIN_PATH in the environment.
        (execUnixAppForDebugging): Added.
        (debugWebKitTestRunner): Alternatively, use execUnixAppForDebugging() for the WPE and GTK+ ports.

2019-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Put keygen element behind a runtime flag and disable it by default
        https://bugs.webkit.org/show_bug.cgi?id=200850

        Reviewed by Antti Koivisto.

        Added the support for enableKeygenElement test runner option, which enables keygen element in layout tests.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-08-21  Chris Dumez  <cdumez@apple.com>

        Add internal setting to disable SecureContext checks
        https://bugs.webkit.org/show_bug.cgi?id=200980
        <rdar://problem/54438512>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (log):
        (requestPermission):

2019-08-21  Keith Rollin  <krollin@apple.com>

        Remove support for watchOS < 6.0
        https://bugs.webkit.org/show_bug.cgi?id=200937
        <rdar://problem/54524009>

        Reviewed by Darin Adler.

        Update conditionals that reference __WATCH_OS_VERSION_MIN_REQUIRED and
        __WATCH_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        60000. This means that expressions like
        "__WATCH_OS_VERSION_MIN_REQUIRED < 60000" are always False and
        "__WATCH_OS_VERSION_MIN_REQUIRED >= 60000" are always True.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2019-08-20  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Webkit.css] Add right sidebar
        https://bugs.webkit.org/show_bug.cgi?id=200946

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (@media screen and (min-width: 600px) and (orientation: landscape)):
        (.main.left):
        (@media screen and (min-width: 768px) and (orientation: landscape)):
        (.sidebar.right):

2019-08-20  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add ToolTips
        https://bugs.webkit.org/show_bug.cgi?id=200801

        Rubber-stamped by Aakash Jain.

        When dots or scale labels are hovered over, we should display a tool tip with additional information about
        The specific element.

        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css: Added.
        (.tooltip): Add class for ToolTip text box.
        (.tooltip-arrow-up): Add class for ToolTip arrow pointing up.
        (.tooltip-arrow-down): Add class for ToolTip arrow pointing down.
        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (_CommitBank.prototype.commitsDuringUuid): Return a list of commits which were the trunk of their respective
        repositories at a given time.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Add callbacks triggered when the mouse enters or leaves elements in the scale canvas.
        (TimelineFromEndpoint.render): Add callbacks triggered when the mouse enters or leaves dot elements.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js: Added.
        (isPointInElement): Given an element and a point, return true if that point is within the bounds of the element.
        (_ToolTip):
        (_ToolTip.prototype.set): Set the content and location of the ToolTip.
        (_ToolTip.prototype.toString): Return the html needed to render the ToolTip.
        (_ToolTip.prototype.unset): Clear and hide the ToolTip.
        (_ToolTip.prototype.isIn): Check if a given point is contained within the ToolTip.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Convert onHover events to onEnter/onLeave events. Add toolTips points to both
        dot and scale elements.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Add ToolTip.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

2019-08-20  Justin Michaud  <justin_michaud@apple.com>

        Fix InBounds speculation of typed array PutByVal and add extra step to integer range optimization to search for equality relationships on the RHS value
        https://bugs.webkit.org/show_bug.cgi?id=200782

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2019-08-20  Darin Adler  <darin@apple.com>

        Variadic StringBuilder::append does not handle upconverting from 8-bit to 16-bit correctly
        https://bugs.webkit.org/show_bug.cgi?id=200921

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Changed tests to use EXPECT macros instead of ASSERT macros since we don't
        need to abort after the first failure. Added three new tests to the VariadicAppend
        test to cover various cases of upconverting from 8-bit to 16-bit strings.

2019-08-20  Dean Jackson  <dino@apple.com>

        REGRESSION: Open in New Tab is missing from context menu
        https://bugs.webkit.org/show_bug.cgi?id=200909
        <rdar://problem/54476169>

        Reviewed by Simon Fraser.

        Add a new test that runs through the legacy context menu
        flow, and verifies that it will be called if there aren't
        appropriate delegates for the new API.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (contextMenuWebViewDriver):
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (TEST):
        (-[LegacyPreviewViewController previewActionItems]):
        (-[LegacyContextMenuUIDelegate webView:shouldPreviewElement:]):
        (-[LegacyContextMenuUIDelegate webView:previewingViewControllerForElement:defaultActions:]):
        (-[LegacyContextMenuUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[LegacyContextMenuUIDelegate _webView:contextMenuDidEndForElement:]):
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h:

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] OSR entry to Wasm OMG
        https://bugs.webkit.org/show_bug.cgi?id=200362

        Reviewed by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2019-08-19  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Disable back gesture
        https://bugs.webkit.org/show_bug.cgi?id=200839

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/Utils.js:
        * resultsdbpy/resultsdbpy/view/templates/base.html:

2019-08-19  Jonathan Bedard  <jbedard@apple.com>

        results-webkit.org: Add timeout to Redis locks
        https://bugs.webkit.org/show_bug.cgi?id=200890

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext._find_job_with_attempts): Add timeout to Redis lock.

2019-08-19  Sihui Liu  <sihui_liu@apple.com>

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545
        <rdar://problem/54201783>

        Reviewed by Youenn Fablet.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setIDBPerOriginQuotaCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Style checker should tell errors when it finds std::make_unique
        https://bugs.webkit.org/show_bug.cgi?id=200878

        Reviewed by Ross Kirsling.

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

2019-08-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWithoutFastMallocCheck part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestRunner.cpp:
        (addURLToRedirectCallback):
        (setWillSendRequestClearHeaderCallback):
        (TestRunner::setAccummulateLogsForChannel):
        (TestRunner::runUIScript):
        (TestRunner::setOpenPanelFiles):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText):
        * DumpRenderTree/mac/EventSendingController.mm:
        (eventPressedMouseButtonsSwizzlerForViewAndEvent):
        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::SetData):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::FrameLoadDelegate):
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoManager::DRTUndoManager):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::runJSTest):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testMovingUsingEnsure):
        (TestWebKitAPI::testMovingUsingAdd):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest):
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp:
        (TestWebKitAPI::CARingBufferTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::createNewPage):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::createNewPage):
        * TestWebKitAPI/Tests/WebKit/TextFieldDidBeginAndEndEditing.cpp:
        * TestWebKitAPI/Tests/WebKit/UserMessage.cpp:
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::SetUp):
        * TestWebKitAPI/Tests/WebKit/WillLoad.cpp:
        (TestWebKitAPI::WebKit2WillLoadTest::SetUp):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm:
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (serverCallback):
        (testWebViewAuthenticationProxyHTTPS):
        * TestWebKitAPI/Tests/WebKitGtk/DOMDOMWindowTest.cpp:
        (WebKitDOMDOMWindowTest::create):
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (applyWorkaroundToAllowWritingAttributedStringsToItemProviders):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        * TestWebKitAPI/mac/TestFontOptions.mm:
        (-[TestFontOptions initWithFontOptions:]):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::callAfterScrollingCompletes):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFiles):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toSTD):
        (WTR::toWTFString):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::createTestURL):
        (WTR::TestController::runTest):
        (WTR::TestController::platformCreateWebView):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::runUISideScript):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::setDefaultCalendarType):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::setKeyboardInputModeIdentifier):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wpeKeySymForKeyRef):

2019-08-17  Ross Kirsling  <ross.kirsling@sony.com>

        [ESNext] Implement optional chaining
        https://bugs.webkit.org/show_bug.cgi?id=200199

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2019-08-17  Tim Horton  <timothy_horton@apple.com>

        Layout tests that call resizeTo() crash when run on iOS with IOSurface support enabled
        https://bugs.webkit.org/show_bug.cgi?id=200866
        <rdar://problem/50254021>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):
        Replace some logging with release assertions that we are snapshotting a reasonable
        view and get a reasonable snapshot back. Failing to snapshot is a big deal, and
        "silently" failing with just a log that will be ignored is not helpful.

2019-08-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] ThreadGroupRemove test is flaky
        https://bugs.webkit.org/show_bug.cgi?id=200763

        Reviewed by Mark Lam.

        ThreadGroup.ThreadGroupRemove test is flaky since its `threadRunning` modification and check in Thread are racy.
        It can lead to infinite wait on waitForCompletion. We should do more idiomatic to avoid race: When notifying condition
        variables, we should first take a lock, modify the condition shared and notify the condition change while taking a lock,
        and releasing the lock after that.

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

2019-08-17  Eric Liang  <ericliang@apple.com>

        Tested that accessibility WebProcessLoader bundle is loaded for the correct path.
        https://bugs.webkit.org/show_bug.cgi?id=200367

        Reviewed by Darin Adler.

        Added AccessibilityTestPlugin on the web process to report whether a bundle is loaded and its path, so that it can be tested on WKContentView. 

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AccessibilityTestPlugin.mm: Added.
        (-[AccessibilityTestPlugin webProcessPlugIn:didCreateBrowserContextController:]):
        (-[AccessibilityTestPlugin checkAccessibilityWebProcessLoaderBundleIsLoaded:]):
        * TestWebKitAPI/Tests/WebKitCocoa/AccessibilityTestSupportProtocol.h: Added.
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):

2019-08-17  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::flexibleAppend(...) to StringBuilder::append(...)
        https://bugs.webkit.org/show_bug.cgi?id=200756

        Reviewed by Darin Adler.

        Update call sites for rename from StringBuilder::flexibleAppend(...) to 
        StringBuilder::append(...).

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

2019-08-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Scroll indicators disappear sometimes
        https://bugs.webkit.org/show_bug.cgi?id=200791

        Reviewed by Tim Horton.

        Tests that test that scroll indicators survive subview replacement, and that
        a custom view also survives subview replacement.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/OverflowScrollViewTests.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView performAfterLoading:]):
        (-[UIView wkFirstSubviewWithClass:]):
        (-[UIView wkFirstSubviewWithBoundsSize:]):
        * TestWebKitAPI/ios/composited.html: Added.
        * TestWebKitAPI/ios/overflow-scroll.html: Added.

2019-08-16  John Wilander  <wilander@apple.com>

        Add John Wilander as WebKit Reviewer
        https://bugs.webkit.org/show_bug.cgi?id=200837

        Unreviewed update to contributors.json to change my status to reviewer.
        See email on reviewers mailing list for proof of granted privileges.

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

2019-08-16  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
        https://bugs.webkit.org/show_bug.cgi?id=200802
        rdar://problem/54357818

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added WKWebViewOpaque.mm.
        * TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Added.
        (-[OpaqueTestWKWebView isOpaque]): Added.
        (-[NonOpaqueTestWKWebView isOpaque]): Added.
        (isOpaque): Added.
        (TEST): Added WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
        WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
        WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.

2019-08-16  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build steps for Windows Factory
        https://bugs.webkit.org/show_bug.cgi?id=200813

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (WindowsFactory.__init__):

2019-08-16  Aakash Jain  <aakash_jain@apple.com>

        [ews] Report machine uptime in PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=200812

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Added uptime command.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-08-16  Chris Lord  <clord@igalia.com>

        Add shared-mime-info to WPE WebKit jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=200768

        Reviewed by Carlos Alberto Lopez Perez.

        * wpe/jhbuild.modules:

2019-08-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, WTF_MAKE_FAST_ALLOCATED annotation part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/DraggingInfo.h:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/HistoryDelegate.h:
        * DumpRenderTree/win/MD5.h:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/TextInputController.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.h:
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.h:
        * TestWebKitAPI/Counters.h:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::DerefObserver::ref):
        (TestWebKitAPI::DerefObserver::deref):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::DerefObserver::ref):
        (TestWebKitAPI::DerefObserver::deref):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/UniqueRef.cpp:
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.h:
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/GeolocationProviderMock.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.h:

2019-08-15  Sihui Liu  <sihui_liu@apple.com>

        Some improvements on web storage
        https://bugs.webkit.org/show_bug.cgi?id=200373

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST): update expectation for behavior change.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: new SPI to synchronously flush localStorage to 
        database file.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::syncLocalStorage):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        * WebKitTestRunner/TestController.cpp: clear local storage between test runs to make each test isolated.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::StorageVoidCallbackContext::StorageVoidCallbackContext):
        (WTR::StorageVoidCallback):
        (WTR::TestController::clearIndexedDatabases):
        (WTR::TestController::clearLocalStorage):
        (WTR::TestController::syncLocalStorage):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext): Deleted. Replaced
        with StorageVoidCallbackContext for general usage.
        (WTR::RemoveAllIndexedDatabasesCallback): Deleted. Replaced with StorageVoidCallback.
        (WTR::TestController::ClearIndexedDatabases): Deleted. Use lowercase for consistent style.
        * WebKitTestRunner/TestController.h:

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): add handler for new message 
        SyncLocalStorage.

2019-08-15  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add content hook to FlaskRequestsResponse
        https://bugs.webkit.org/show_bug.cgi?id=200721

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/flask_support/flask_testcase.py:
        (FlaskRequestsResponse):
        (FlaskRequestsResponse.content): Return the encoded raw bytes value of the
        Response, conforming to request's API.

2019-08-15  Alex Christensen  <achristensen@webkit.org>

        WKUIDelegate's webView:contextMenuDidEndForElement: should be called when context menus end
        https://bugs.webkit.org/show_bug.cgi?id=200750
        <rdar://problem/54232261> and <rdar://problem/52355829>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuUIDelegate webView:contextMenuDidEndForElement:]):
        (contextMenuWebViewDriver):
        (TEST):

2019-08-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS](REGRESSION: r200487): WebKit.RequestActivatedElementInfoForRotatedImage fails on iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=200726

        Reviewed by Simon Fraser.

        To get the pixels as an array of colors, draw the image into a memory
        context. The backing memory buffer can then be accessed to get the image
        pixels' colors.

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

2019-08-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r248526.

        Caused two IndexedDB perf tests to fail

        Reverted changeset:

        "Remove IDB-specific quota"
        https://bugs.webkit.org/show_bug.cgi?id=196545
        https://trac.webkit.org/changeset/248526

2019-08-14  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13
        https://bugs.webkit.org/show_bug.cgi?id=200694
        <rdar://problem/54278851>

        Reviewed by Youenn Fablet.

        Update conditionals that reference __MAC_OS_X_VERSION_MIN_REQUIRED and
        __MAC_OS_X_VERSION_MAX_ALLOWED, assuming that they both have values >=
        101300. This means that expressions like
        "__MAC_OS_X_VERSION_MIN_REQUIRED < 101300" are always False and
        "__MAC_OS_X_VERSION_MIN_REQUIRED >= 101300" are always True.

        * MiniBrowser/AppKitCompatibilityDeclarations.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController init]):
        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
        (TestWebKitAPI::FontCacheTest::SetUp): Deleted.
        (TestWebKitAPI::createPlatformFont): Deleted.
        (TestWebKitAPI::compareFonts): Deleted.
        (TestWebKitAPI::TEST_F): Deleted.
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        * TestWebKitAPI/mac/NSFontPanelTesting.mm:

2019-08-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Less contended MetaAllocator
        https://bugs.webkit.org/show_bug.cgi?id=200278

        Reviewed by Mark Lam.

        Update the interface.

        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:

2019-08-14  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: 500 errors on API endpoints don't return JSON
        https://bugs.webkit.org/show_bug.cgi?id=200722

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.response_500): We should return the response, instead of abort.

2019-08-14  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Don't save configuration multiple times in upload
        https://bugs.webkit.org/show_bug.cgi?id=200719

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext.upload_test_results): Move registering of the configuration out
        of the branch loop.

2019-08-14  Youenn Fablet  <youenn@apple.com>

        Reenable Update ContentFiltering.LazilyLoadPlatformFrameworks test for NetworkExtension
        https://bugs.webkit.org/show_bug.cgi?id=200706

        Reviewed by Alex Christensen.

        Libwebrtc is now soft-linked so we can reenable this test.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):

2019-08-13  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32) to avoid accidental change in behavior when replacing append with flexibleAppend
        https://bugs.webkit.org/show_bug.cgi?id=200675

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):
        Update for rename from StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32).

2019-08-13  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Performance improvement - Skip render offscreen canvas
        https://bugs.webkit.org/show_bug.cgi?id=200456

        Reviewed by Jonathan Bedard.

        This patch disable use the new batch draw method to render canvas directly without any caches, this will save a lot of memory, so that we won't go into the "low memory mode".

        This patch also change the axis label collision detact box from a rect to polygon, so that we can dectact click more accurate.

        * resultsdbpy/resultsdbpy/view/static/library/js/Utils.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (pointPolygonCollisionDetect): Detact
        (pointRightRayLineSegmentCollisionDetect):
        (ColorBatchRender):
        (ColorBatchRender.prototype.lazyCreateColorSeqs):
        (ColorBatchRender.prototype.addSeq):
        (ColorBatchRender.prototype.batchRender):
        (ColorBatchRender.prototype.clear):
        (xScrollStreamRenderFactory):
        (Timeline.CanvasSeriesComponent):
        (offscreenCachedRenderFactory): Deleted.

2019-08-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Switch NSURLSession on top navigation to prevalent resource with user interaction
        https://bugs.webkit.org/show_bug.cgi?id=200642
        <rdar://problem/53962073>

        Reviewed by Alex Christensen.

        This patch adds test infrastructure to query whether an origin has an
        isolated NSURLSession or not.

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

2019-08-13  Zhifei Fang  <zhifei_fang@apple.com>

        Update my status in contributors.json to committer.

        Reviewed by Unreviewed

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

2019-08-12  Jiewen Tan  <jiewen_tan@apple.com>

        Adds WebAuthn and AppSSO into watchlist
        https://bugs.webkit.org/show_bug.cgi?id=200647

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/config/watchlist:

2019-08-13  Chris Dumez  <cdumez@apple.com>

        Crash under IPC::Connection::markCurrentlyDispatchedMessageAsInvalid()
        https://bugs.webkit.org/show_bug.cgi?id=200674
        <rdar://problem/50692748>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-08-12  Takashi Komori  <Takashi.Komori@sony.com>

        [WTF] Thread::removeFromThreadGroup leaks weak pointers.
        https://bugs.webkit.org/show_bug.cgi?id=199857

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::countThreadGroups):
        (TestWebKitAPI::TEST):

2019-08-12  Alexey Shvayka  <shvaikalesh@gmail.com>

        AX: Homebrew is not allowed to run any script under sudo.
        https://bugs.webkit.org/show_bug.cgi?id=173801

        Reviewed by Carlos Alberto Lopez Perez.

        Latest versions of Homebrew throw an error when run as root.
        Dependencies are successfully installed w/o `sudo` on macOS, so skip it.

        * gtk/install-dependencies:

2019-08-12  Jonathan Bedard  <jbedard@apple.com>

        [REGRESSION] run-webkit-tests: No PID defined when searching for simulator crashlogs
        https://bugs.webkit.org/show_bug.cgi?id=200644

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Define system PID after launching app.

2019-08-12  Sam Weinig  <weinig@apple.com>

        Replace multiparameter overloads of append() in StringBuilder as a first step toward standardizinging on the flexibleAppend() implementation
        https://bugs.webkit.org/show_bug.cgi?id=200614

        Reviewed by Darin Adler.

        Renames StringBuilder::append(const LChar*, unsigned), StringBuilder::append(const UChar*, unsigned) and 
        StringBuilder::append(const char*, unsigned) to StringBuilder::appendCharacters(...).
        
        Renames StringBuilder::append(const String& string, unsigned offset, unsigned length) to 
        StringBuilder::appendSubstring(...).

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):
        Update for renames.

2019-08-12  Megan Gardner  <megan_gardner@apple.com>

        Fix Crash in Mail Search
        https://bugs.webkit.org/show_bug.cgi?id=200589

        Reviewed by Tim Horton.

        If you search backwards first in mail, we would crash,
        this tests that codepath.

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

2019-08-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Web pages sometimes load at half width in Safari
        https://bugs.webkit.org/show_bug.cgi?id=200624
        <rdar://problem/52694257>

        Reviewed by Simon Fraser.

        Add an API test to verify that after performing an animated resize and killing the web process, the subsequent
        web page is created using the post-animated-resize web view dimensions, rather than the original layout
        dimensions.

        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:

2019-08-12  Daniel Bates  <dabates@apple.com>

        Add a test to ensure that we dispatch keydown and keyup events when multiple keys are pressed at the same time
        https://bugs.webkit.org/show_bug.cgi?id=200548

        Reviewed by Darin Adler.

        Expose infrastructure to simulate a literal raw key down and a literal key up event.

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

2019-08-12  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Handle broken data in the libwebrtc GStreamer decoders
        https://bugs.webkit.org/show_bug.cgi?id=200584

        Reviewed by Philippe Normand.

        Added a h264parse patch to post WARNING on the bus when a broken frame is detected.
        Ignore style libwebrtc optionnal 'style issue'

        * Scripts/webkitpy/style/checker.py:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-h264parse-Post-a-WARNING-when-data-is-broken.patch: Added.

2019-08-12  Youenn Fablet  <youenn@apple.com>

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545

        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setIDBPerOriginQuotaCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-08-10  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner's InjectedBundle has too aggressive stripping, resulting in non-symbolicated crash logs
        https://bugs.webkit.org/show_bug.cgi?id=200621

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:

2019-08-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        KeyboardInputTests.CaretSelectionRectAfterRestoringFirstResponder API tests time out on iPad
        https://bugs.webkit.org/show_bug.cgi?id=200604
        <rdar://problem/51273130>

        Reviewed by Megan Gardner.

        Tweak some API tests so that they work on iPad simulator. These tests checked that the final caret rect was
        {{16, 13}, {2, 15}}; however, this is only correct behavior on iPhone, where we will scale the page so that the
        focused element's font size is legible. Note that when the page is scaled, we scale the height but not the
        width of the caret, which is why the width of the caret (in content coordinates) decreases while the height
        remains the same.

        We don't have the same behavior on iPad, so the expected caret rect is {{16, 13}, {3, 15}}, which is equal to
        the caret rect at initial scale 1.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2019-08-09  Ali Juma  <ajuma@chromium.org>

        Don't allow cross-origin iframes to autofocus
        https://bugs.webkit.org/show_bug.cgi?id=200515
        <rdar://problem/54092988>

        Reviewed by Ryosuke Niwa.

        Make WebKit.FocusedFrameAfterCrash use same-origin iframes instead
        of cross-origin iframes, since it depends on focusing one of the
        frames.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/many-same-origin-iframes.html: Added.

2019-08-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 13] Google Docs/Slides/Sheets: paste often doesn't work and sometimes produces an error
        https://bugs.webkit.org/show_bug.cgi?id=200591
        <rdar://problem/54102238>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Add a new API test to exercise -supportsImagePaste.

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

2019-08-09  Aakash Jain  <aakash_jain@apple.com>

        Follow-up commit to r248474 as webkit-patch did not commit the svn property changes.
        [ews-build] Set svn:ignore to various EWS Buildbot files
        https://bugs.webkit.org/show_bug.cgi?id=200581

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build: Added property svn:ignore.

2019-08-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Set svn:ignore to various EWS Buildbot files
        https://bugs.webkit.org/show_bug.cgi?id=200581

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build: Added property svn:ignore.

2019-08-09  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add buildbot.tac to repository
        https://bugs.webkit.org/show_bug.cgi?id=200580

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/buildbot.tac: Added.

2019-08-09  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Add missing spellchecking packages to dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=200574

        Reviewed by Philippe Normand.

        These are needed for the spellchecking test in WebContext API tests.

        * gtk/install-dependencies:

2019-08-08  Jon Lee  <jonlee@apple.com>

        Unreviewed. Get rid of extraneous whitespace in ChangeLog.

2019-08-08  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Disable shared clipboard between Simulators
        https://bugs.webkit.org/show_bug.cgi?id=200546

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.initialize_devices): Disable PasteboardAutomaticSync in Simulator.app
        managed by run-webkit-tests.

2019-08-08  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Get WebKit, WebKit2, and MiniBrowser building and executing
        https://bugs.webkit.org/show_bug.cgi?id=200539
        <rdar://problem/54082550>

        Reviewed by Dean Jackson.

        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        * PlatformFTW.cmake: Added.

2019-08-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] Position image information should respect the image orientation
        https://bugs.webkit.org/show_bug.cgi?id=200487

        Reviewed by Simon Fraser.

        Add an API test to verify the position image information is drawn rotated
        because of respecting its image orientation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.

2019-08-08  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Fix WebContext languages test
        https://bugs.webkit.org/show_bug.cgi?id=200538

        Reviewed by Alex Christensen.

        This test broke after the format of Accepted-Languages
        was changed in r238236, update.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextLanguages):

2019-08-08  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Fix /webkit/WebKitWebsiteData/databases failure
        https://bugs.webkit.org/show_bug.cgi?id=200536

        Reviewed by Carlos Alberto Lopez Perez.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataDatabases): Databases take a moment to be written,
        wait before fetching the data as it's done in other tests.

2019-08-08  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Use canvas for timeline
        https://bugs.webkit.org/show_bug.cgi?id=200172

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (Commit.constructor): Make uuid a member variable instead of a member function for efficiency.
        (Commit.compare): Ditto.
        (_CommitBank.commitByUuid): Ditto.
        (_CommitBank._loadSiblings): Ditto.
        (_CommitBank._load): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (tickForCommit): Deleted.
        (minimumUuidForResults): Given a dictionary of result lists, determine the minimum UUID
        which encompasses all results. Crucially, this function must exclude an UUIDs which may
        refer to results excluded because of the limit argument.
        (renderTimeline): Deleted.
        (commitsForResults): Given a dictionary of result lists, return a list of commits associated
        with those results.
        (scaleForCommits): Given a list of commits, generate a scale to be consumed by the canvas Timeline.
        (repositoriesForCommits): Given a list of commits, return a sorted list of associated repository ids.
        (xAxisFromScale): Create a canvas-based x-axis based on the provided scale and a repository id.
        (inPlaceCombine): Combine result objects together.
        (statsForSingleResult): Turn a single result into a stat object.
        (combineResults): Given lists of results, combine these lists while keeping the original lists unchanged.
        (Dot): Deleted.
        (TimelineFromEndpoint): Renamed from Timeline.
        (TimelineFromEndpoint.constructor): Canvas Timeline manages expansion and collapsing of nested timelines.
        (TimelineFromEndpoint.teardown): Detach callbacks from CommitBank.
        (TimelineFromEndpoint.update): Update with any new commit information, force a re-draw of the current
        cache contents.
        (TimelineFromEndpoint.reload): Remove management of nested timelines.
        (TimelineFromEndpoint.render): Use canvas Timeline instead of html timeline to visualize results.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Use TimelineFromEndpoint class.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

2019-08-08  Brady Eidson  <beidson@apple.com>

        Do not allow navigations of frames about to get replaced by the result of evaluating javascript: URLs
        <rdar://problem/53788893> and https://bugs.webkit.org/show_bug.cgi?id=198786

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/JavascriptURLNavigation.mm: Added.

2019-08-08  Rob Buis  <rbuis@igalia.com>

        Add runtime flag for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=199794

        Reviewed by Darin Adler.

        Set lazyImageLoading preference as part of experimental features. Add
        TestOption for lazy image loading.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

2019-08-08  Rob Buis  <rbuis@igalia.com>

        Import lazy loading WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=199795

        Reviewed by Darin Adler.

        Only do loading/ exception for WebKit specific, non WPT tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldLogFrameLoadDelegates):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):

2019-08-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Add key accelerators for reload and close window
        https://bugs.webkit.org/show_bug.cgi?id=200497

        Reviewed by Brent Fulgham.

        Added short cuts Ctrl-W to close window, Ctrl-R to reload.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc): Added IDM_CLOSE_WINDOW case.
        * MiniBrowser/win/MiniBrowserLib.rc: Added "Close" menu item. Added accelerators.
        * MiniBrowser/win/MiniBrowserLibResource.h: Added IDM_CLOSE_WINDOW.

2019-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Add WHLSL and WebGPU to the watchlist file
        https://bugs.webkit.org/show_bug.cgi?id=200509

        Reviewed by Robin Morisset.

        * Scripts/webkitpy/common/config/watchlist:

2019-08-07  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after r248317 -- disable XCBuild because it
        breaks incremental builds.

        * Scripts/webkitdirs.pm:
        (canUseXCBuild):

2019-08-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        ASSERTION FAILED: m_observers.isEmpty() if WKPageSetPageStateClient is used
        https://bugs.webkit.org/show_bug.cgi?id=200465

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit/PageLoadState.cpp:
        (TestWebKitAPI::WebKit.PageLoadState): Set PageStateClient before
        finishing the test.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::~PlatformWebView): Release m_view.

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248308

        Don't use WK_ENGINEERING_CODE_SIGN_IDENTITY for Production build.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248319

        Use HAVE(DATA_PROTECTION_KEYCHAIN) instead of HAVE_DATA_PROTECTION_KEYCHAIN.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248308

        Use kSecUseDataProtectionKeychain for iOS 13 and macOS Catalina or newer.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):

2019-08-06  Keith Rollin  <krollin@apple.com>

        Enable XCBuild for `make` and `build-webkit` builds
        https://bugs.webkit.org/show_bug.cgi?id=200476
        <rdar://problem/50771065>

        Reviewed by Jonathan Bedard.

        All projects have now been tested under XCBuild and successfully
        build. Enable the use of XCBuild when performing builds with `make` or
        `build-webkit` and when using a sufficient version of Xcode. We set
        this version to Xcode 11 since Xcode 10 -- even though it supports
        XCBuild -- does not support a build facility needed to build WebKit
        (Bug 197072, Bug 197116, Bug 197340).

        Do not enable XCBuild in the Xcode projects themselves since these
        projects may need to be used under older versions of Xcode and there's
        no way to make those project changes sensitive to the version of Xcode
        being used. This means that builds performed in the Xcode IDE will not
        use XCBuild.

        * Scripts/webkitdirs.pm:
        (canUseXCBuild):

2019-08-06  Chris Dumez  <cdumez@apple.com>

        Fix inefficiency in HTTPHeaderMap::set(CFStringRef, const String&)
        https://bugs.webkit.org/show_bug.cgi?id=200475

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::stringViewFromLiteral):
        (TestWebKitAPI::stringViewFromUTF8):

2019-08-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Update my status in contributors.json to reviewer.

        Regained the status after following the procedure for inactive contributors.
        See r247136 for further explanation.

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

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Enable LocalAuthenticator for macOS
        https://bugs.webkit.org/show_bug.cgi?id=182772
        <rdar://problem/43347920>

        Reviewed by Brent Fulgham.

        Add an entitlement file to WebKitTestRunner such that it can access
        the modern macOS keychain.

        * WebKitTestRunner/Configurations/WebKitTestRunner.entitlements: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):

2019-08-06  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Performance improvements
        https://bugs.webkit.org/show_bug.cgi?id=200406

        Reviewed by Jonathan Bedard.

        1. Unhook the scroll event when a series/axis have been removed from the container
        2. Fix the axis's cache data structure out of sync.
        3. Use position:sticky to reduce the scrolling blink when update the presenter's transform
        4. Use intersection observer to detect if the canvas on screen or not, if a canvas is not on the screen, we do nothing, this will eliminate render requests we send out.


        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js:
        (Signal.prototype.removeListener):
        (prototype.stopAction): Unregsiter an action handler
        (Ref):
        (Ref.prototype.apply):
        (Ref.prototype.destory):
        * resultsdbpy/resultsdbpy/view/static/library/js/components/BaseComponents.js:
        (ApplyNewChildren):
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent):

2019-08-06  Jer Noble  <jer.noble@apple.com>

        Add test for behavior introduced in r248174
        https://bugs.webkit.org/show_bug.cgi?id=200446

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/FullscreenTouchSecheuristicTests.cpp: Added.
        (WebKit::configureSecheuristic):
        (WebKit::TEST):

2019-08-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MiniBrowser][WK2] Unhandled key events should be bubbled up to the parent window
        https://bugs.webkit.org/show_bug.cgi?id=200464

        Reviewed by Ross Kirsling.

        When WK2 WebView is focused, short cut keys (e.g. Alt-F to open File
        menu, Alt-F4 to close window, and etc) don't work.

        WK1 WebView doesn't have this issue because it processes key events
        properly.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didNotHandleKeyEvent): Added. Send the
        unhandled key events to the main window.
        * MiniBrowser/win/WebKitBrowserWindow.h:

2019-08-05  Simon Fraser  <simon.fraser@apple.com>

        iOS 13: Overflow:hidden on body prevents PDF scroll
        https://bugs.webkit.org/show_bug.cgi?id=200435
        rdar://problem/53942888

        Reviewed by Tim Horton.

        When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
        to make sure that the scroll view is scrollable.

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

2019-08-05  Aakash Jain  <aakash_jain@apple.com>

        New EWS:mac-wk2 status-bubble shows waiting to run tests for all recent bugs
        https://bugs.webkit.org/show_bug.cgi?id=200400

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._queue_position):

2019-08-05  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests asserts when the iPhone XR simulator is running
        https://bugs.webkit.org/show_bug.cgi?id=200404
        <rdar://problem/53878739>

        Reviewed by Dean Jackson.

        Support unicode in all logging statements tied to device model.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_baseline_search_path):
        * Scripts/webkitpy/port/device.py:
        (Device.__repr__):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._install):
        (DevicePort.setup_test_run):
        (DevicePort.clean_up_test_run):
        (DevicePort.configuration_for_upload):
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path):
        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__str__):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):
        (SimulatedDeviceManager._find_available_name):
        (SimulatedDeviceManager._get_device_identifier_for_type):
        (SimulatedDeviceManager._create_or_find_device_for_request):
        (SimulatedDeviceManager._does_fulfill_request):
        (SimulatedDeviceManager._wait_until_device_in_state):
        (SimulatedDeviceManager._wait_until_device_is_usable):
        (SimulatedDeviceManager._boot_device):
        (SimulatedDeviceManager.initialize_devices):
        (SimulatedDeviceManager.max_supported_simulators):
        (SimulatedDeviceManager.swap):
        (SimulatedDevice.is_usable):
        (SimulatedDevice._shut_down):
        (SimulatedDevice._delete):
        (SimulatedDevice.launch_app):
        (SimulatedDevice.__repr__):

2019-08-04  Chris Dumez  <cdumez@apple.com>

        Ping loads should not prevent page caching
        https://bugs.webkit.org/show_bug.cgi?id=200418
        <rdar://problem/53901632>

        Reviewed by Darin Adler.

        Add TestOption to enable PageCache at UIProcess-level so that we can test
        page caching when navigating cross-origin with PSON enabled.

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

2019-08-02  Keith Rollin  <krollin@apple.com>

        Consistently use Obj-C boolean literals
        https://bugs.webkit.org/show_bug.cgi?id=200405
        <rdar://problem/53880043>

        Reviewed by Simon Fraser, Joseph Pecoraro.

        There are places where we use equivalent but different expressions for
        Obj-C boolean objects. For example, we use both [NSNumber
        numberWithBool:YES] and @YES. There are places where both are used in
        the same function, such as -[WebPreferences initialize]. The boolean
        literal is in greater use and is more succinct, so standardize on
        that. Also, change @(YES/NO) to @YES/NO.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController objectOfClass:]):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (overrideAddObserverForName):
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (enableWebKitNightlyBehaviour):

2019-08-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        TextAutosizingBoost.ChangeAutosizingBoostAtRuntime fails on iPad Simulator
        https://bugs.webkit.org/show_bug.cgi?id=200402
        <rdar://problem/53823368>

        Reviewed by Tim Horton.

        Make it possible to run this test using the iPad simulator.

        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm:

        Two adjustments: (1) override the screen size to be 320 by 568 (so that the legacy text autosizing heuristic
        doesn't avoid boosting this text), and (2) force text autosizing on, but disable idempotent text autosizing,
        since this would result in differently sized text.

        (mainScreenReferenceBoundsOverride):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-08-02  Sihui Liu  <sihui_liu@apple.com>

        API tests using permanent credentials should clear credentials left by previous tests
        https://bugs.webkit.org/show_bug.cgi?id=199729

        Reviewed by Alex Christensen.

        We used to clear the permanent credentials created by API tests at the end of the API tests, to ensure those
        credentials will not affect tests running after. There is a case where permanent credentials were left on the
        system, so those API tests were timing out themselves before reaching to the cleanup, which caused cascading
        failure. To prevent this from happening again, add cleanup at the begining of the tests.

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

2019-08-02  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibility object method to determine whether an element is inside a table cell. Needed for iOS accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=200394
        <rdar://problem/52914964>

        Reviewed by Chris Fleizach.

        Glue code to exercise new method [WebAccessibilityObjectWrapper _accessibilityIsInTableCell].

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isInTableCell const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::isInTableCell const):

2019-08-02  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Using transform matrix to calculate the tag rotation position
        https://bugs.webkit.org/show_bug.cgi?id=200397

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:

2019-08-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS 10.15] Image dragged from Safari does not appear in Notes
        https://bugs.webkit.org/show_bug.cgi?id=188490
        <rdar://problem/39462717>

        Reviewed by Andy Estes.

        Add a test to verify that promised image data can be delivered to multiple pasteboards when performing a drop.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:

2019-08-02  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r248139
        https://bugs.webkit.org/show_bug.cgi?id=200102

        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLsPlugin.mm:
        (-[AdditionalReadAccessAllowedURLsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        This was supposed to be removed as part of reverting r245322.

2019-08-01  Zhifei Fang  <zhifei_fang@apple.com>

        results.webkit.org: Force update cache when timeline updated
        https://bugs.webkit.org/show_bug.cgi?id=200363

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (offscreenCachedRenderFactory): Add ability to force the redraw.
        (Timeline.CanvasSeriesComponent): Force redraw when scales or dots are updated.
        (Timeline.CanvasXAxisComponent): Force redraw when scales are updated. Add missing exporter for export scales update API

2019-08-01  Alex Christensen  <achristensen@webkit.org>

        Do not send NetworkProcessProxy::LogTestingEvent message if we are not testing
        https://bugs.webkit.org/show_bug.cgi?id=200360

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (cleanupITPDatabase):
        (TEST):

2019-08-01  Alex Christensen  <achristensen@webkit.org>

        Move FormData zip file generation to NetworkProcess and enable it for all WebKit clients for uploading directories
        https://bugs.webkit.org/show_bug.cgi?id=200102
        <rdar://problem/53275114>

        Reviewed by Darin Adler.

        Add an API test that is Mac-only right now because runOpenPanelWithParameters is only supported on Mac for some reason
        and because clicking on a TestWKWebView only works on Mac.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/UploadDirectory.mm: Added.
        (-[UploadDelegate initWithDirectory:]):
        (-[UploadDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (-[UploadDelegate sentDirectory]):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView sendClickAtPoint:]):

2019-08-01  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] Timeline.CanvasXAxisComponent height should be defined by option
        https://bugs.webkit.org/show_bug.cgi?id=200321

        Reviewed by Jonathan Bedard.

        *resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        Let the axis' height be defined in the option. Timeine component will use this value as
        padding-top for headers which allows headers start in the right position, even with multiple
        top axises.
        (Timeline.CanvasSeriesComponent):
        (prototype.Timeline.CanvasContainer):

2019-08-01  Zhifei Fang  <zhifei_fang@apple.com>

        results.webkit.org: Collision detection for dots is off by 2 * dotMargin
        https://bugs.webkit.org/show_bug.cgi?id=200347

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Need to change it to dotMargin + radius other than use a fixed 3 * radius, which is for the old wide timeline

2019-08-01  Jiewen Tan  <jiewen_tan@apple.com>

        Improve flakiness of SOAuthorizationRedirect tests
        https://bugs.webkit.org/show_bug.cgi?id=200320
        <rdar://problem/53767057>

        Reviewed by Alex Christensen.

        This patch replaces Util::sleep(0.5) in tests that expect a SOAuthorization session to wait when the corresponding WKWebView
        is out of the window with a more precise boolean indicator: navigationPolicyDecided. The new boolean indicator is working and
        better because the authorizationPerformed should be set in the same runloop when NavigationState::decidePolicyForNavigationAction
        is executed.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (resetState):
        (TestWebKitAPI::TEST):

2019-08-01  Keith Rollin  <krollin@apple.com>

        Update TestWebKitAPI for XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=200311
        <rdar://problem/53773804>

        Reviewed by Alex Christensen.

        Bug 199728 (svn 247402) updated TestWebKitAPI to use the unified-build
        technique. Now update WebKitLegacy to build under XCBuild after those
        changes. This work involves adding an "Apply Configuration to
        XCFileLists" build target, adding a check-xcfilelists.sh script,
        adding a "Check xcfilelists" build phase that calls that script,
        adding knowledge of the project to the generate-xcfilelists script,
        creating new .xcfilelist files, and adding those to the project.

        * Scripts/webkitpy/generate_xcfilelists_lib/application.py:
        (Application.__init__):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (WebKitTestRunnerGenerator._get_generate_derived_sources_script):
        (TestWebKitAPIGenerator):
        (TestWebKitAPIGenerator._get_project_file_path):
        (TestWebKitAPIGenerator._get_generate_unified_sources_script):
        * TestWebKitAPI/Scripts/check-xcfilelists.sh: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/UnifiedSources-output.xcfilelist: Added.

2019-08-01  Youenn Fablet  <youenn@apple.com>

        UserMediaPermissionRequestManagerProxy should not use audio+video denied requests to deny audio-only or video-only requests
        https://bugs.webkit.org/show_bug.cgi?id=200317

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/getUserMediaAudioVideoCapture.html: Added
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaOnlyAudioUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (-[GetUserMediaOnlyAudioUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (TestWebKitAPI::TEST):

2019-08-01  Aakash Jain  <aakash_jain@apple.com>

        New EWS: Cannot see build status page when patch is waiting for tester
        https://bugs.webkit.org/show_bug.cgi?id=200333

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): While patch hasn't started processing on tester queue, display build information from builder queue.

2019-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Switch to use libsoup WebSockets API
        https://bugs.webkit.org/show_bug.cgi?id=200162

        Reviewed by Michael Catanzaro.

        Update libsoup version to 2.67.90.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-07-31  Andy Estes  <aestes@apple.com>

        REGRESSION (r240942): first visually non-empty layout milestone is not reached in media documents until after the video finishes loading
        https://bugs.webkit.org/show_bug.cgi?id=200293
        <rdar://problem/52937749>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FirstVisuallyNonEmptyMilestone.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm.
        (-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
        (-[RenderingProgressNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2019-07-31  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable all macOS queues on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199944

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for macOS queues.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enabled status-bubbles for mac queues, separated builders and testers bubbles in separate lines. Also
        removed mac-32bit and mac-32bit-wk2 bubbles, these queues were removed from Buildbot configuration previously.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js: Removed mac queues from bot-watcher's dashboard.
        * QueueStatusServer/config/queues.py: Removed mac queues from old EWS.

2019-07-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed test gardening, disable failing test for rdar://51752593.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2019-07-31  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.og: Timeline in canvas painting with wrong colors, cannot customize scale
        https://bugs.webkit.org/show_bug.cgi?id=200318

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Reset draw context between dots.
        (Timeline.CanvasXAxisComponent): Use getLabel function.

2019-07-31  Loïc Yhuel  <loic.yhuel@softathome.com>

        [GTK][WPE] Fix gtkdoc build with "build-webkit --32-bit" on 64-bit hosts
        https://bugs.webkit.org/show_bug.cgi?id=200306

        Reviewed by Michael Catanzaro.

        gtkdoc-scangobj calls scangobj.py, which only uses LDFLAGS on link (when producing
        jsc-glib-4.0-scan for example).

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-07-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed test gardening, disable failing test for rdar://52355829.

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

2019-07-31  Keith Rollin  <krollin@apple.com>

        Update WebKitLegacy for XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=200310
        <rdar://problem/53773708>

        Reviewed by Alex Christensen.

        Bug 199771 (svn r247570) updated WebKitLegacy to use the unified-build
        technique. Now update WebKitLegacy to build under XCBuild after those
        changes. This work involves adding an "Apply Configuration to
        XCFileLists" build target, adding a check-xcfilelists.sh script,
        adding a "Check xcfilelists" build phase that calls that script,
        adding knowledge of the project to the generate-xcfilelists script,
        creating new .xcfilelist files, and adding those to the project.

        * Scripts/webkitpy/generate_xcfilelists_lib/application.py:
        (Application.__init__):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):
        (WebKitGenerator._get_generate_unified_sources_script):
        (WebKitLegacyGenerator):
        (WebKitLegacyGenerator._get_project_file_path):
        (WebKitLegacyGenerator._get_generate_unified_sources_script):

2019-07-31  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r247486?): Flaky API Test TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        https://bugs.webkit.org/show_bug.cgi?id=200086
        <rdar://problem/53501721>

        Reviewed by Alex Christensen.

        re-enable the API test.

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

2019-07-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 13] Safari crashes when closing a tab with a focused element if the unified field has focus
        https://bugs.webkit.org/show_bug.cgi?id=200291
        <rdar://problem/53717946>

        Reviewed by Megan Gardner.

        Add an API test to exercise the scenario of synchronously requesting the autocorrection context immediately
        after closing the web view, while the web view's content view isn't the first responder.

        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Datalist element support for TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=98934

        Reviewed by Michael Catanzaro.

        Implement UIScriptControllerGtk::isShowingDataListSuggestions.

        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        (WTR::UIScriptControllerGtk::isShowingDataListSuggestions const):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.h:

2019-07-30  Tim Horton  <timothy_horton@apple.com>

        Remove some needless comments that snuck into the tree

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setHardwareKeyboardAttached):
        (WTR::UIScriptController::playBackEventStream):

2019-07-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebKit] Add PageLoadState::Observer C API
        https://bugs.webkit.org/show_bug.cgi?id=199848

        Reviewed by Alex Christensen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didChangeTitle):
        (WebKitBrowserWindow::didFinishNavigation): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/PageLoadState.cpp: Added.
        (TestWebKitAPI::PageLoadTestState::PageLoadTestState):
        (TestWebKitAPI::didChangeActiveURL):
        (TestWebKitAPI::didChangeCanGoBack):
        (TestWebKitAPI::didChangeCanGoForward):
        (TestWebKitAPI::didChangeCertificateInfo):
        (TestWebKitAPI::didChangeEstimatedProgress):
        (TestWebKitAPI::didChangeHasOnlySecureContent):
        (TestWebKitAPI::didChangeIsLoading):
        (TestWebKitAPI::didChangeNetworkRequestsInProgress):
        (TestWebKitAPI::didChangeTitle):
        (TestWebKitAPI::didChangeWebProcessIsResponsive):
        (TestWebKitAPI::didSwapWebProcesses):
        (TestWebKitAPI::willChangeActiveURL):
        (TestWebKitAPI::willChangeCanGoBack):
        (TestWebKitAPI::willChangeCanGoForward):
        (TestWebKitAPI::willChangeCertificateInfo):
        (TestWebKitAPI::willChangeEstimatedProgress):
        (TestWebKitAPI::willChangeHasOnlySecureContent):
        (TestWebKitAPI::willChangeIsLoading):
        (TestWebKitAPI::willChangeNetworkRequestsInProgress):
        (TestWebKitAPI::willChangeTitle):
        (TestWebKitAPI::willChangeWebProcessIsResponsive):
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):

2019-07-30  Jonathan Bedard  <jbedard@apple.com>

        DumpRenderTree.app: Add CFBundleShortVersionString
        https://bugs.webkit.org/show_bug.cgi?id=200269
        <rdar://problem/53412596>

        Rubber-stamped by Aakash Jain.

        * DumpRenderTree/ios/Info.plist:

2019-07-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add layout test coverage for <https://webkit.org/b/200215>
        https://bugs.webkit.org/show_bug.cgi?id=200245
        <rdar://problem/52976965>

        Reviewed by Tim Horton.

        Add new testing infrastructure. See below for more details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillCreateNewPageCallback):
        (WTR::UIScriptController::willCreateNewPageCallback const):

        Add platform-agnostic UIScriptController callback hooks to notify a test when a new page is being created. The
        new test in this patch uses this opportunity to remove and reinsert the web view into the window's hierarchy.

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::becomeFirstResponder):

        Add and implement a Cocoa platform hook to make the web view first responder.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::willCreateNewPage):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::becomeFirstResponder):

2019-07-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Add 'reload' menu item and 'reload' toolbar button
        https://bugs.webkit.org/show_bug.cgi?id=200217

        Reviewed by Alex Christensen.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::resizeSubViews):
        (MainWindow::WndProc):
        * MiniBrowser/win/MainWindow.h: Added m_hReloadButtonWnd.
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h: Added IDM_RELOAD.
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::reload):
        * MiniBrowser/win/WebKitBrowserWindow.h: Added reload() interface.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::reload):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2019-07-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser][WK2] Automatically supplement "file://" or "http://" for an input URL as well as WK1 browser window
        https://bugs.webkit.org/show_bug.cgi?id=200218

        Reviewed by Alex Christensen.

        Moved the scheme supplementing logic from
        WebKitLegacyBrowserWindow::loadURL to MainWindow::loadURL.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::loadURL):
        (MainWindow::onURLBarEnter):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::loadURL):

2019-07-29  Aakash Jain  <aakash_jain@apple.com>

        Disable Flaky API Test TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        https://bugs.webkit.org/show_bug.cgi?id=200254

        Unreviewed infrastructure fix.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm: Disabled the test.

2019-07-29  Zhifei Fang  <zhifei_fang@apple.com>

        [Canvas Timeline] Compact canvas timeline
        https://bugs.webkit.org/show_bug.cgi?id=200177

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/BaseComponents.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent):

2019-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Multiple context menu actions broken for YouTube videos
        https://bugs.webkit.org/show_bug.cgi?id=199999

        Reviewed by Eric Carlson.

        Add a test case to check copy link address, open in new window and download options are not included in the
        context menu for non-downloadable media.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (writeNextChunk):
        (serverCallback):
        (testContextMenuLiveStream):
        (beforeAll):
        (afterAll):

2019-07-28  Tim Horton  <timothy_horton@apple.com>

        Reorganize UIScriptController into platform-specific subclasses
        https://bugs.webkit.org/show_bug.cgi?id=200027

        Reviewed by Simon Fraser.

        Instead of a mishmash of #ifdefs and extraneous empty functions,
        reorganize UIScriptController so that we have a base class
        with functions that assert if called (to make it harder to
        accidentally write a test that depends on unimplemented
        functionality), and override them in platform specific subclasses
        as functionality is added.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ios/UIScriptControllerIOS.h: Added.
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        * DumpRenderTree/mac/UIScriptControllerMac.h: Added.
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h: Added.
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm: Added.
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        * WebKitTestRunner/gtk/UIScriptControllerGtk.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/mac/UIScriptControllerMac.h: Added.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:

2019-07-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Remove PageLoadTestClient
        https://bugs.webkit.org/show_bug.cgi?id=200155

        Reviewed by Brent Fulgham.

        It is not used nowadays.

        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::updateAddressBar):
        (MiniBrowserWebHost::didFinishLoadForFrame):
        (MiniBrowserWebHost::didStartProvisionalLoadForFrame):
        (MiniBrowserWebHost::didFailLoadWithError):
        (MiniBrowserWebHost::didHandleOnloadEventsForFrame):
        (MiniBrowserWebHost::didFirstLayoutInFrame):
        * MiniBrowser/win/PageLoadTestClient.cpp: Removed.
        * MiniBrowser/win/PageLoadTestClient.h: Removed.
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest):
        (ResourceLoadDelegate::willSendRequest):
        (ResourceLoadDelegate::didFinishLoadingFromDataSource):
        (ResourceLoadDelegate::didFailLoadingWithError):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::create):
        (WebKitLegacyBrowserWindow::WebKitLegacyBrowserWindow):
        (WebKitLegacyBrowserWindow::exitProgram): Deleted.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:
        (WebKitLegacyBrowserWindow::pageLoadTestClient): Deleted.
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2019-07-26  Jiewen Tan  <jiewen_tan@apple.com>

        NavigationSOAuthorizationSession should check the active URL of the responding page after waking up from waiting
        https://bugs.webkit.org/show_bug.cgi?id=200150
        <rdar://problem/53280170>

        Reviewed by Brent Fulgham.

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

2019-07-26  Jonathan Bedard  <jbedard@apple.com>

        Follow-up fix: results.webkit.org: Suite results shouldn't be the landing page
        https://bugs.webkit.org/show_bug.cgi?id=200090

        Unreviewed follow-up fix.

        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Keep /search endpoint for existing links

2019-07-26  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add switch to filter results by expectation
        https://bugs.webkit.org/show_bug.cgi?id=200134

        Rubber-stamped by Aakash Jain.

        Users of the results database should be able to easily differentiate tests which are expected
        to fail verse tests which are unexpectedly failing.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Timeline.render): Respect the willFilterExpected variable.
        (LegendLabel): Generates html for label in the legend.
        (Legend): Add switch for filter results.
        * resultsdbpy/resultsdbpy/view/templates/search.html: GIve Legend callback to re-render timelines.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

2019-07-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use update-webkit script in Style EWS
        https://bugs.webkit.org/show_bug.cgi?id=193196

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (StyleFactory): Updated to use CheckOutSource step as well.
        * BuildSlaveSupport/ews-build/steps.py: Added build-step to UpdateWorkingDirectory.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-26  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Support buildbot 0.8 CI links
        https://bugs.webkit.org/show_bug.cgi?id=200146

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/ci_context.py:
        (BuildbotEightURLFactory): Buildbot 0.8 link factory.
        (BuildbotEightURLFactory.__init__):
        (BuildbotEightURLFactory.url):
        * resultsdbpy/resultsdbpy/model/ci_context_unittest.py:
        (URLFactoryTest.test_old_builder_url):
        (URLFactoryTest):
        (URLFactoryTest.test_old_worker_url):

2019-07-26  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Suite results shouldn't be the landing page
        https://bugs.webkit.org/show_bug.cgi?id=200090

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Remove search bar.
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Make search the landing page instead of suite results.
        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
        (WebSiteUnittest.test_main):

2019-07-26  Jonathan Bedard  <jbedard@apple.com>

        Follow-up fix: results.webkit.org: Color should be the worst result, count should include all results
        https://bugs.webkit.org/show_bug.cgi?id=200127

        Unreviewed follow-up fix.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Dot.toString): Use self instead of this in render callback.

2019-07-24  Jiewen Tan  <jiewen_tan@apple.com>

        WebPageProxy::receivedPolicyDecision should check navigation ID before clear pendingAPIRequest
        https://bugs.webkit.org/show_bug.cgi?id=200108
        <rdar://problem/53521238>

        Reviewed by Chris Dumez.

        Added an API test.

        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (-[DecidePolicyForNavigationActionController webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2019-07-25  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Color should be the worst result, count should include all results
        https://bugs.webkit.org/show_bug.cgi?id=200127

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Dot.prototype.toString): Do not differentiate the count based on the prevailing failure type.

2019-07-25  Zhifei Fang  <zhifei_fang@apple.com>

        [Timeline]: Make timeline header width automatic, instead of fixed width
        https://bugs.webkit.org/show_bug.cgi?id=200059

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/css/timeline.css:
        (.dot.crash):
        (.timeline>.header): Deleted.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.timeline>.content):
        (.timeline>.header):

2019-07-25  Ross Kirsling  <ross.kirsling@sony.com>

        [ESNext] Implement nullish coalescing
        https://bugs.webkit.org/show_bug.cgi?id=200072

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2019-07-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add Takashi Komori and Tomoki Imai as contributors

        Unreviewed.

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

2019-07-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] Add IsoHeap test to ensure that IsoHeap pages are not allocating too large VA
        https://bugs.webkit.org/show_bug.cgi?id=200103

        Reviewed by Mark Lam.

        This patch adds tests to TestWTF IsoHeap tests to ensure that IsoHeap's component is not leaking pages or not allocating too large VAs for memory allocation.
        We use VMTag to get the system view of the allocated VAs and check whether it is not incredibly large.

        While the tests are white-box tests (it means that this is a bit flaky to the implementation changes of IsoHeap), I adjusted some threshold to make this less-flaky
        to the future implementation changes while it catches the severe issues we had.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (assertEmptyPointerSet):
        (assertHasOnlyObjects):
        (assertClean):
        (TEST):
        (allocateAndDeallocate):

2019-07-24  Fujii Hironori  <fujii.hironori@gmail.com>

        [CMake] CMAKE_SHARED_LINKER_FLAGS drops "-Wl,--no-undefined"
        https://bugs.webkit.org/show_bug.cgi?id=200074

        Reviewed by Michael Catanzaro.

        There was a latent issue. PluginTest::indicateTestFailure was
        using WTF::sleep without linking WTF.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        Added WebKit::WTF to WebKitTestNetscapePlugIn_LIBRARIES.

2019-07-24  Fujii Hironori  <fujii.hironori@gmail.com>

        [GTK][WPE][CMake] failing to build TestWebKitAPIInjectedBundle due to missing forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=200073

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        Added add_dependencies(TestWebKitAPIInjectedBundle TestWebKitAPI-forwarding-headers).

2019-07-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [webkitperl] runCommand doesn't work in Windows Perl
        https://bugs.webkit.org/show_bug.cgi?id=199900

        Reviewed by Don Olmstead.

        runCommand was always failing implicit fork by using 'open' with
        '-|' in Windows Perl. Explicitly specify the command to 'open' not
        to do the implicit fork.

        There is one more difference between Windows and Unix. 'open'
        successes on Windows even for non existent command while it fails
        on Unix. So, return the same error code on Unix as well as
        Windows.

        * Scripts/VCSUtils.pm: Specified the command to 'open'.
        * Scripts/webkitperl/VCSUtils_unittest/runCommand.pl: 'echo'
        command is not available on Windows. Use Perl ($^X) instead.

2019-07-24  Priyanka Agarwal  <pagarwal999@apple.com>

        Allow Clients to Add Fields to the AutoFillContext Dictionary.
        https://bugs.webkit.org/show_bug.cgi?id=199326
        rdar://problem/42816957

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST): Created a test to check that the auto fill context
        is being properly populated with additional context dictionary.

        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setWebViewAdditionalContextForStrongPasswordAssistanceHandler:]): Setting the handler for the function
        which will populate the additional autofill context dictionary.

        (-[TestInputDelegate webViewAdditionalContextForStrongPasswordAssistanceHandler]): Returns the handler for the function which
        populates the additional autofill context dictionary.

        (-[TestInputDelegate _webViewAdditionalContextForStrongPasswordAssistance:]): Function which populates the additional autofill
        context dictionary.

        (-[TestInputDelegate setFocusRequiresStrongPasswordAssistanceHandler:]): Setting the handler for the function which checks if the
        input field requires strong password work.

        (-[TestInputDelegate focusRequiresStrongPasswordAssistanceHandler]): Returns the handler for the function which checks if the
        input field requires strong password work.

        (-[TestInputDelegate _webView:focusRequiresStrongPasswordAssistance:]): Function which checks if the input field requires strong
        password work.

2019-07-24  Zhifei Fang  <zhifei_fang@apple.com>

        run-javascriptcore-tests won't report test results for testmasm, testair, testb3, testdfg and test api
        https://bugs.webkit.org/show_bug.cgi?id=199489

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.start): Skip run jsc test binaries for mips, armv7, aarch64.
        (RunJavaScriptCoreTests.countFailures): Pick up the test binaires failure to total failures count
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * Scripts/run-javascriptcore-tests: The script now failed wether the run-jsc-stress-tests failed or test binaries failed.
        (runTest): Record test binary failure
        (reportTestFailures): Report test binary failure
        (runJSCStressTests):
        * Scripts/webkitpy/common/config/ports.py: Skip run jsc test binaries for those need to run remotely
        (JscOnlyPort.build_jsc_command):
        (JscOnlyPort):
        (JscOnlyPort.run_javascriptcore_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_jsconly_port):

2019-07-24  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: settings().textAutosizingEnabled() && settings().textAutosizingUsesIdempotentMode() in WebCore::Page::recomputeTextAutoSizingInAllFrames()
        https://bugs.webkit.org/show_bug.cgi?id=200079
        <rdar://problem/53474325>

        Reviewed by Wenson Hsieh.

        Reset textAutosizingUsesIdempotentMode when transitioning to a new test.

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

2019-07-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [webkitperl] prepare-ChangeLog_unittest/parser_unittests.pl is failing on Windows Perl
        https://bugs.webkit.org/show_bug.cgi?id=199927

        Reviewed by Alex Christensen.

        convertAbsolutepathToWebKitPath was failing to convert paths on
        Windows Perl due to path separators mismatch.

        Renamed convertAbsolutepathToWebKitPath to
        convertAbsolutePathToRelativeUnixPath, and changed it to replace
        paths to relative Unix paths.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        (convertAbsolutePathToRelativeUnixPath): Added.
        (convertAbsolutepathToWebKitPath): Deleted.

2019-07-23  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API test after r247759
        https://bugs.webkit.org/show_bug.cgi?id=200045

        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        In the iOS simulator, the WebProcess was being started before we were setting the value on the WKProcessPool.
        To fix this, set the value on the WKProcessPool before making the WKWebView.  This makes the test always pass on Mac and iOS.

2019-07-23  Keith Rollin  <krollin@apple.com>

        Remove rest of NavigatorContentUtils support
        https://bugs.webkit.org/show_bug.cgi?id=200052
        <rdar://problem/53467357>

        Reviewed by Alex Christensen.

        Bug 196070 removes most of the support for the never-used
        NavigatorContentUtils facility. However, there were still a couple of
        left-over references after that change. This patch sweeps those up.

        * Scripts/webkitperl/FeatureList.pm:

2019-07-23  Alex Christensen  <achristensen@webkit.org>

        Move javaScriptConfigurationDirectory SPI from _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it runtime switchable
        https://bugs.webkit.org/show_bug.cgi?id=200045

        Reviewed by Mark Lam.

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

2019-07-23  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r247745.

        This broke API test
        TestWebKitAPI.WKProcessPool.JavaScriptConfiguration as
        indicated by EWS

        Reverted changeset:

        "Move javaScriptConfigurationDirectory SPI from
        _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it
        runtime switchable"
        https://bugs.webkit.org/show_bug.cgi?id=200045
        https://trac.webkit.org/changeset/247745

2019-07-23  Alex Christensen  <achristensen@webkit.org>

        Move javaScriptConfigurationDirectory SPI from _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it runtime switchable
        https://bugs.webkit.org/show_bug.cgi?id=200045

        Reviewed by Mark Lam.

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

2019-07-23  Alex Christensen  <achristensen@webkit.org>

        Add SPI for setting media cache and key location on _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=199972

        Reviewed by Jer Noble.

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

2019-07-23  Alicia Boya García  <aboya@igalia.com>

        [WTF] Add DataMutex and MainThreadData wrappers
        https://bugs.webkit.org/show_bug.cgi?id=199831

        Reviewed by Alex Christensen.

        Added a very simple test that checks that DataMutex<T> indeed takes
        the lock and indeed holds data.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Tests/WTF/DataMutex.cpp: Added.
        (TestWebKitAPI::TEST):

2019-07-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS 10.15] Web process crashes when attempting to show the font panel via Font > Show Fonts
        https://bugs.webkit.org/show_bug.cgi?id=200021
        <rdar://problem/53301325>

        Reviewed by Ryosuke Niwa.

        Add support for grabbing the child menu items of a context menu item.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::getMenuItemChildrenCallback):

2019-07-23  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit should strip away system font names from the pasted content
        https://bugs.webkit.org/show_bug.cgi?id=199975
        <rdar://problem/53336353>

        Reviewed by Darin Adler.

        Added a test to strip away system font names such as ".AppleSystemUIFont", ".SFUI-Regular", and ".SF UI Mono".

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/cocoa-writer-markup-with-system-fonts.html: Added.

2019-07-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] EWS fails to parse multi-line full_results.json
        https://bugs.webkit.org/show_bug.cgi?id=199992

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/layout_test_failures.py:
        (LayoutTestFailures.results_from_string): Concatenate content into single line.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_parse_results_json_with_newlines): Unit-test to cover this scenario.

2019-07-22  Jonathan Bedard  <jbedard@apple.com>

        resultsdbpy: Handle case where the previous commit doesn't have the changelog
        https://bugs.webkit.org/show_bug.cgi?id=200015

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/repository.py:
        (WebKitRepository.commit_for_id.diff_changelogs): Allow the previous_response to be None.

2019-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK1] UIWebView always jumps to the top left corner when scrolling to reveal the selection
        https://bugs.webkit.org/show_bug.cgi?id=200013
        <rdar://problem/52526901>

        Reviewed by Simon Fraser.

        Add a new API test to verify that inserting text in UIWebView causes the document to scroll.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollToRevealSelection.mm: Added.
        (-[LegacyLoadingDelegate webViewDidFinishLoad:]):
        (-[LegacyLoadingDelegate waitForDidFinishLoad]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-07-22  Jer Noble  <jer.noble@apple.com>

        REGRESSION(rUnknown): YouTube playback pauses when switching to a new tab
        https://bugs.webkit.org/show_bug.cgi?id=199971
        <rdar://problem/51951218>

        Reviewed by Alex Christensen.

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

2019-07-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add an EWS to run services tests
        https://bugs.webkit.org/show_bug.cgi?id=199994

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Added Services-EWS configuration.
        * BuildSlaveSupport/ews-build/factories.py: Added ServicesFactory.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Run this EWS only for patches with changes in relevant files.
        (RunEWSUnitTests): Build step to run EWS unit-tests.
        (RunEWSBuildbotCheckConfig): Build step to run buildbot checkconfig command.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added services status-bubble.

2019-07-22  Youenn Fablet  <youenn@apple.com>

        Disable MediaRecorder for legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=200001
        <rdar://problem/53400030>

        Reviewed by Eric Carlson.

        Enable MediaRecorder for testing purposes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):

2019-07-22  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Timeline header is too small
        https://bugs.webkit.org/show_bug.cgi?id=199955

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/css/timeline.css:
        (.timeline>.header): Make timeline header larder to fit configuration names.

2019-07-22  Alex Christensen  <achristensen@webkit.org>

        Add SPI to _WKWebsiteDataStoreConfiguration for configuring application cache storage location
        https://bugs.webkit.org/show_bug.cgi?id=199954

        Reviewed by Geoff Garen.

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

2019-07-22  Alex Christensen  <achristensen@webkit.org>

        Add SPI _WKProcessPoolConfiguration.javaScriptConfigurationDirectory
        https://bugs.webkit.org/show_bug.cgi?id=199917

        Reviewed by Sam Weinig.

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

2019-07-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] ReRunWebKitTests should use similar logic for evaluateCommand as RunWebKitTests
        https://bugs.webkit.org/show_bug.cgi?id=199980

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand): Updatd to use similar logic as RunWebKitTests.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunWebKitTests): Modified to make it generic so as to re-use tests.
        (TestReRunWebKitTests): Run all TestRunWebKitTests unit-tests for ReRunWebKitTests as well.

2019-07-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] Add an unit test for setting up the driver environment without starting it.
        https://bugs.webkit.org/show_bug.cgi?id=199945

        Reviewed by Michael Catanzaro.

        This adds an unit test for the change implemented in r247663.

        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_setup_environ_base_vars):
        (DriverTest):
        (DriverTest.test_setup_environ_without_starting_driver):

2019-07-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WebKit2] Add limited support for -isPosition:atBoundary:inDirection: in WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=199993
        <rdar://problem/49523528>

        Reviewed by Beth Dakin.

        Add a new API test to verify the behavior of -isPosition:atBoundary:inDirection:.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

2019-07-21  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibilityInsertText for text insertion in edit fields.
        https://bugs.webkit.org/show_bug.cgi?id=199973

        Reviewed by Chris Fleizach.

        Renamed accessibilityInsertText to _accessibilityInsertText.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::insertText):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::insertText):

2019-07-20  Chris Dumez  <cdumez@apple.com>

        Speed up HashTable decoding by reserving capacity and avoiding rehashing
        https://bugs.webkit.org/show_bug.cgi?id=199982

        Reviewed by Saam Barati.

        Add API test coverage.

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

2019-07-20  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibilityInsertText for text insertion in edit fields.
        https://bugs.webkit.org/show_bug.cgi?id=199973

        Reviewed by Chris Fleizach.

        Glue code to run new LayoutTests.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::insertText):

2019-07-19  Zhifei Fang  <zhifei_fang@apple.com>

        Move webkit.css to opensource to support resultsdbpy's frontend
        https://bugs.webkit.org/show_bug.cgi?id=199957

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml: Added.
        * resultsdbpy/resultsdbpy/view/static/library/css/generate-webkit-css-docs: Added.
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html: Added.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css: Added.

2019-07-19  Zhifei Fang  <zhifei_fang@apple.com>

        Move Ref.js to WebKit to support resultsdbpy's frontend
        https://bugs.webkit.org/show_bug.cgi?id=199956

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        * resultsdbpy/resultsdbpy/view/static/js/search.js:
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js: Added.
        * resultsdbpy/resultsdbpy/view/static/library/js/Utils.js: Added.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/BaseComponents.js: Added.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js: Added.
        * resultsdbpy/resultsdbpy/view/templates/base.html:
        * resultsdbpy/resultsdbpy/view/templates/commits.html:
        * resultsdbpy/resultsdbpy/view/templates/documentation.html:
        * resultsdbpy/resultsdbpy/view/templates/search.html:
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:
        * resultsdbpy/resultsdbpy/view/view_routes.py:

2019-07-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] Allow the testrunner driver to setup the environment completely without needing to start the server process.
        https://bugs.webkit.org/show_bug.cgi?id=199945

        Reviewed by Michael Catanzaro.

        Refactor the code to create the Driver temporal directories inside Driver._setup_environ_for_driver().
        This allows external callers to setup the environment for running tests by calling that method without needing to start the server process.
        When this callers finish testing, it is enough with calling either Driver.stop() or Driver._delete_temporal_directories().

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        (Driver._create_temporal_directories):
        (Driver):
        (Driver._start):
        (Driver._delete_temporal_directories):
        (Driver.stop):
        * Scripts/webkitpy/w3c/wpt_runner.py: Not needed anymore to start the driver since this doesnt need the server process running.
        (main):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py: Ditto.
        (WebDriverTestRunner.__init__):
        * glib/api_test_runner.py:
        (TestRunner._setup_testing_environment): Ditto.

2019-07-19  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Display pre-existing Layout test failure names in the build summary
        https://bugs.webkit.org/show_bug.cgi?id=199941

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):

2019-07-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] run-webkit-tests should run with a temporal homedir
        https://bugs.webkit.org/show_bug.cgi?id=199738

        Reviewed by Michael Catanzaro.

        Run the tests with an empty homedir that is created inside the driver tmpdir.
        The driver tmpdir is a random directory created for each test runner that is purged after the run.

        This is done to ensure that the test results are not affected by the user settings of any library.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_setup_environ_base_vars):
        (DriverTest):
        (DriverTest.test_create_temporal_home_dir):

2019-07-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove pywebsockets from thirdparty
        https://bugs.webkit.org/show_bug.cgi?id=199710

        Reviewed by Jonathan Bedard.

        We have a very old version of pywebsocket in webkitpy thirdparty, but we are also importing pywebsocket as part
        of wpt tools. We can simply use the wpt one for all websocket tests and remove the old copy from sources.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket._prepare_config): Use pywebsocket from imported w3c tools directory.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/COPYING: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/__init__.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_base.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hixie75.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/dispatch.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/__init__.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi00.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/headerparserhandler.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/http_header_util.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/memorizingfile.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/msgutil.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/mux.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/stream.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py: Removed.

2019-07-18  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Move resultsdbpy to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=199837
        <rdar://problem/53172130>

        Rubber-stamped by Aakash Jain.

        Moving the entirety of the resultsdbpy library, which provides utilities to build
        a database designed to store, visualize and organize test results, into WebKit.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker): resulltsdbpy is a Python 3 library.
        * resultsdbpy: Added.
        * resultsdbpy/MANIFEST.in: Added.
        * resultsdbpy/README.md: Added.
        * resultsdbpy/resultsdbpy: Added.
        * resultsdbpy/resultsdbpy/__init__.py: Added.
        * resultsdbpy/resultsdbpy/controller: Added.
        * resultsdbpy/resultsdbpy/controller/__init__.py: Added.
        * resultsdbpy/resultsdbpy/controller/api_routes.py: Added.
        * resultsdbpy/resultsdbpy/controller/ci_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/ci_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/suite_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/suite_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/test_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/test_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/upload_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/upload_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/flask_support: Added.
        * resultsdbpy/resultsdbpy/flask_support/__init__.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/authed_blueprint.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/flask_test_context.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/flask_testcase.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/util.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/util_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model: Added.
        * resultsdbpy/resultsdbpy/model/__init__.py: Added.
        * resultsdbpy/resultsdbpy/model/cassandra_context.py: Added.
        * resultsdbpy/resultsdbpy/model/cassandra_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/casserole.py: Added.
        * resultsdbpy/resultsdbpy/model/casserole_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/ci_context.py: Added.
        * resultsdbpy/resultsdbpy/model/ci_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/commit_context.py: Added.
        * resultsdbpy/resultsdbpy/model/commit_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/configuration_context.py: Added.
        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/docker-compose.yml: Added.
        * resultsdbpy/resultsdbpy/model/docker.py: Added.
        * resultsdbpy/resultsdbpy/model/docker_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/mock_cassandra_context.py: Added.
        * resultsdbpy/resultsdbpy/model/mock_model_factory.py: Added.
        * resultsdbpy/resultsdbpy/model/mock_repository.py: Added.
        * resultsdbpy/resultsdbpy/model/model.py: Added.
        * resultsdbpy/resultsdbpy/model/partitioned_redis.py: Added.
        * resultsdbpy/resultsdbpy/model/partitioned_redis_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/redis_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/repository.py: Added.
        * resultsdbpy/resultsdbpy/model/repository_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/suite_context.py: Added.
        * resultsdbpy/resultsdbpy/model/suite_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/test_context.py: Added.
        * resultsdbpy/resultsdbpy/model/test_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/upload_context.py: Added.
        * resultsdbpy/resultsdbpy/model/upload_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/wait_for_docker_test_case.py: Added.
        * resultsdbpy/resultsdbpy/run-tests: Added.
        * resultsdbpy/resultsdbpy/view: Added.
        * resultsdbpy/resultsdbpy/view/__init__.py: Added.
        * resultsdbpy/resultsdbpy/view/ci_view.py: Added.
        * resultsdbpy/resultsdbpy/view/commit_view.py: Added.
        * resultsdbpy/resultsdbpy/view/commit_view_unittest.py: Added.
        * resultsdbpy/resultsdbpy/view/site_menu.py: Added.
        * resultsdbpy/resultsdbpy/view/static: Added.
        * resultsdbpy/resultsdbpy/view/static/css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/commit.css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/drawer.css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/search.css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/timeline.css: Added.
        * resultsdbpy/resultsdbpy/view/static/js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/commit.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/common.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/configuration.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/search.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Added.
        * resultsdbpy/resultsdbpy/view/suite_view.py: Added.
        * resultsdbpy/resultsdbpy/view/templates: Added.
        * resultsdbpy/resultsdbpy/view/templates/base.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/commit.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/commits.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/error.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Added.
        * resultsdbpy/resultsdbpy/view/view_routes.py: Added.
        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py: Added.
        * resultsdbpy/setup.py: Added.

2019-07-18  Alex Christensen  <achristensen@webkit.org>

        Add and test _WKWebsiteDataStoreConfiguration.deviceIdHashSaltsStorageDirectory SPI
        https://bugs.webkit.org/show_bug.cgi?id=199923

        Reviewed by Youenn Fablet.

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

2019-07-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable iOS WK2 tester queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199867

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for ios-wk2 queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled ios-sim (builder) and ios-wk2 (tester) bubbles.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js: Removed ios-sim queue from bot-watcher's dashboard.
        * QueueStatusServer/config/queues.py: Removed ios-sim queue from old EWS.

2019-07-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to AnalyzeLayoutTestsResults
        https://bugs.webkit.org/show_bug.cgi?id=199877

        Reviewed by Jonathan Bedard.

        Logic is ported from webkitpy/tool/bot/patchanalysistask.py::_retry_layout_tests()

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTestsWithoutPatch.evaluateCommand): invoke AnalyzeLayoutTestsResults step.
        (AnalyzeLayoutTestsResults): Build step to analyze layout-test results.
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):
        (AnalyzeLayoutTestsResults.retry_build):
        (AnalyzeLayoutTestsResults._results_failed_different_tests):
        (AnalyzeLayoutTestsResults._report_flaky_tests):
        (AnalyzeLayoutTestsResults.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-18  Alex Christensen  <achristensen@webkit.org>

        Move NetworkCache ownership from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=199817

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView synchronouslyLoadRequest:]):

2019-07-18  Youenn Fablet  <youenn@apple.com>

        Make sure to set kCTFontFallbackOptionAttribute to kCTFontFallbackOptionSystem for system fonts
        https://bugs.webkit.org/show_bug.cgi?id=199769
        <rdar://problem/49390297>

        Reviewed by Myles C. Maxfield.

        Add a font containing one extended character not found in system fonts.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/FakeHelvetica-SingleExtendedCharacter.ttf: Added.

2019-07-18  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, Add Olivier Blin as contributor

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

2019-07-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
        https://bugs.webkit.org/show_bug.cgi?id=199855

        Reviewed by Michael Catanzaro.

        The webkitpy drivers for GTK and WPE use their own versions for setting
        up the environment and starting/stopping the drivers.
        This refactors those drivers to use the base class driver functions.
        As a benefit we get some fixes like support for setting the profiler
        environment variables, and a simpler code.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
        Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
        * Scripts/webkitpy/port/headlessdriver.py:
        (HeadlessDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/waylanddriver.py:
        (WaylandDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        (WestonDriver.stop):
        * Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
        (WestonDriverTest.make_driver):
        * Scripts/webkitpy/port/xorgdriver.py:
        (XorgDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
        (XvfbDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        * Scripts/webkitpy/w3c/wpt_runner.py:
        (main): Start the driver before trying to get its environment to define all the environment variables.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__): Ditto.
        * glib/api_test_runner.py:
        (TestRunner._setup_testing_environment): Ditto.

2019-07-17  Antoine Quint  <graouts@apple.com>

        Disable Pointer Events prior to watchOS 6
        https://bugs.webkit.org/show_bug.cgi?id=199890
        <rdar://problem/53206113>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-07-17  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2019-07-17  Jonathan Bedard  <jbedard@apple.com>

        check-webkit-style: Add limited Python3 support
        https://bugs.webkit.org/show_bug.cgi?id=199870

        Rubber-stamped by Aakash Jain.

        Since new services will be added in the near future which are Python 3, we
        need to support Python 3 style checks. For now, assume all Python files are
        Python 2 unless otherwise specified.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Add pycodestyle to valid categories for testing.
        (CheckerDispatcher._create_checker): Check that the provided Python file is in
        one of the declared Python 3 directories.
        * Scripts/webkitpy/style/checkers/python.py:
        (Python3Checker): Add Python 3 checker, which doesn't lint and uses pycodestyle
        instead of pep8.
        (Python3Checker.__init__):
        (Python3Checker.check):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Support auto-installing pycodestyle.
        (AutoinstallImportHook._install_pycodestyle):

2019-07-17  Sam Weinig  <weinig@apple.com>

        Add StringBuilder member function which allows makeString() style variadic argument construction
        https://bugs.webkit.org/show_bug.cgi?id=198997

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Add basic test showing that StringBuilder::flexibleAppend can be used to
        append one or more string adaptable types.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add WTFStringUtilities.cpp

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Add basic test showing that StringBuilder::flexibleAppend can be used to
        append one or more string adaptable types.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        * TestWebKitAPI/WTFStringUtilities.cpp: Added.
        * TestWebKitAPI/WTFStringUtilities.h:
        Move WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING() and wtfStringCopyCount to WTFStringUtilities.h/cpp
        to allow for a single definition of StringTypeAdapter<String, void> which is required for ODR.

2019-07-17  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the file superfluously added in r247535.

        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.h: Removed.
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.mm:

2019-07-17  Alex Christensen  <achristensen@webkit.org>

        Add a runtime-disabled dialog element skeleton
        https://bugs.webkit.org/show_bug.cgi?id=199839

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Enable the dialog element for layout tests.

2019-07-17  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Option + Up or Down Arrow key doesn’t move cursor past paragraph boundaries in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=199851

        Reviewed by Wenson Hsieh.

        Added a regression test for iOS. Unfortunately, event sender, etc... doesn't work because
        this code is getting directly triggered from UIKeyboard's code.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.h: Added.
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.mm: Added.
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r247505.
        https://bugs.webkit.org/show_bug.cgi?id=199871

        "Caused failed ASSERT in stress test" (Requested by creid on
        #webkit).

        Reverted changeset:

        "Bytecode cache should use FileSystem"
        https://bugs.webkit.org/show_bug.cgi?id=199759
        https://trac.webkit.org/changeset/247505

2019-07-17  Russell Epstein  <russell_e@apple.com>

        Adding self to contributors.json

        Unreviewed.

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

2019-07-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Parse full_results.json for layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=199804

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.start): Monitor json output.
        (RunWebKitTests.commandComplete): Read json output, parse the results and set Buildbot properties accordingly. These
        properties would be used in subsequent AnalyzeLayoutTests build step to determine whether the failures are introduced
        by the patch or are pre-existing.
        (ReRunWebKitTests.commandComplete): Ditto.
        (RunWebKitTestsWithoutPatch.commandComplete): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (BuildStepMixinAdditions.getProperty): Added.
        (TestRunWebKitTests.test_parse_results_json): Added unit-tests.
        * BuildSlaveSupport/ews-build/layout_test_failures.py: Parse full_results.json and generate list of failing tests.

2019-07-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r247512.

        Broke API test runners

        Reverted changeset:

        "[GTK][WPE][webkitpy] Refactor drivers to use the base driver
        for setting up the environment and start the drivers."
        https://bugs.webkit.org/show_bug.cgi?id=199855
        https://trac.webkit.org/changeset/247512

2019-07-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
        https://bugs.webkit.org/show_bug.cgi?id=199855

        Reviewed by Carlos Garcia Campos.

        The webkitpy drivers for GTK and WPE use their own versions for setting
        up the environment and starting/stopping the drivers.
        This refactors those drivers to use the base class driver functions.
        As a benefit we get some fixes like support for setting the profiler
        environment variables, and a simpler code.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
        Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
        * Scripts/webkitpy/port/headlessdriver.py:
        (HeadlessDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/waylanddriver.py:
        (WaylandDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        (WestonDriver.stop):
        * Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
        (WestonDriverTest.make_driver):
        * Scripts/webkitpy/port/xorgdriver.py:
        (XorgDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
        (XvfbDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start):
        (XvfbDriverTest.test_start_arbitrary_worker_number):

2019-07-16  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2019-07-16  Jonathan Bedard  <jbedard@apple.com>

        svn-create-patch duplicates diffs when adding directories
        https://bugs.webkit.org/show_bug.cgi?id=199842

        Reviewed by Dewei Zhu.

        * Scripts/svn-create-patch:
        (findKind): Add function which returns what 'kind' of file the provided path is.
        (generateFileList): If the path is a directory and being added, don't add it.
        Instead, rely on the fact that its children will be added.

2019-07-16  Tim Horton  <timothy_horton@apple.com>

        NSTextFinder holes don't scroll with the page
        https://bugs.webkit.org/show_bug.cgi?id=199815
        <rdar://problem/52280514>

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[MiniBrowserNSTextFinder performAction:]):
        (-[WK2BrowserWindowController awakeFromNib]):
        Adopt the WebKit UI in MiniBrowser. Also, override NSTextFinder's
        -performAction: so that we can intercept the close action and
        hide our own find UI, since there is no delegate for that action yet.

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

2019-07-15  Keith Miller  <keith_miller@apple.com>

        JSGlobalObject type macros should support feature flags and WeakRef should have one
        https://bugs.webkit.org/show_bug.cgi?id=199601

        Reviewed by Mark Lam.

        JSC options need to be set before the window is created for the test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setJSCOptions):
        (resetWebViewToConsistentStateBeforeTesting):

2019-07-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [ Mojave WK1 ] Some Image tests are flakey failures and are failing in tandem with zoomed in or blank image results
        https://bugs.webkit.org/show_bug.cgi?id=193108

        Reviewed by Simon Fraser.

        Add a workaround for <rdar://problem/17084993> in createBitmapContextFromWebView().
        Re-request the snapshot at kCGWindowImageNominalResolution if it was captured
        at the wrong scale.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (takeWindowSnapshot):
        (createBitmapContextFromWebView):

2019-07-15  Brady Eidson  <beidson@apple.com>

        Make WKURLSchemeTask thread safe.
        <rdar://problem/50471863> and https://bugs.webkit.org/show_bug.cgi?id=199764

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2019-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r247437

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        Added platform guard towards -[WKUIDelegate _presentingViewControllerForWebView:].

2019-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS 10.15] Cannot unbold selected text when the system font is used
        https://bugs.webkit.org/show_bug.cgi?id=199788
        <rdar://problem/52142570>

        Reviewed by Tim Horton.

        Add a new API test to verify that bolding and unbolding updates the
        shared font manager's selected font.

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

2019-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        [iOS] SOAuthorizationSession should tell AppSSO whether the UIClient is capable of showing the extension UI
        https://bugs.webkit.org/show_bug.cgi?id=199790
        <rdar://problem/52790112>

        Reviewed by Brent Fulgham.

        Add tests to check SOAuthorization.enableEmbeddedAuthorizationViewController accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate _presentingViewControllerForWebView:]):
        (configureSOAuthorizationWebView):
        (TestWebKitAPI::TEST):
        (-[TestSOAuthorizationNavigationDelegate init]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate _webView:decidePolicyForSOAuthorizationLoadWithCurrentPolicy:forExtension:completionHandler:]): Deleted.

2019-07-15  Sihui Liu  <sihui_liu@apple.com>

        window.openDatabase is not writable
        https://bugs.webkit.org/show_bug.cgi?id=199737
        <rdar://problem/52551332>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WebSQLBasics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/opendatabase-always-exists.html:

2019-07-15  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Parse and display layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=199709

        Rubber-stamped by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.start): Initialize log_observer.
        (RunWebKitTests._strip_python_logging_prefix): Copied from similar code in build.webkit.org buildbot config.
        (RunWebKitTests._parseRunWebKitTestsOutput): Ditto.
        (RunWebKitTests.commandComplete): Gather and parse the stdout and stderr logs.
        (RunWebKitTests.evaluateResult): Analyze the results and decide build status.
        (RunWebKitTests.getResultSummary): Update build and step summary.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added and updated unit-tests.

2019-07-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r247393.
        https://bugs.webkit.org/show_bug.cgi?id=199797

        broke mips and arm EWS (Requested by guijemont on #webkit).

        Reverted changeset:

        "run-javascriptcore-tests won't report test results for
        testmasm, testair, testb3, testdfg and test api"
        https://bugs.webkit.org/show_bug.cgi?id=199489
        https://trac.webkit.org/changeset/247393

2019-07-12  Andy Estes  <aestes@apple.com>

        [Cocoa] -loadFileURL:allowingReadAccessToURL: should fully resolve file URLs
        https://bugs.webkit.org/show_bug.cgi?id=199768
        <rdar://problem/52002206>

        Reviewed by Geoffrey Garen.

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

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Remove wincairo queue from old EWS and dashboard
        https://bugs.webkit.org/show_bug.cgi?id=199776

        Reviewed by Don Olmstead.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        * QueueStatusServer/config/queues.py:

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable wincairo queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199593

        Reviewed by Don Olmstead.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for wincairo builder.
        * BuildSlaveSupport/ews-build/factories.py: Added required build steps for wincairo factory.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enable wincairo status-bubble.

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Enable logging for clicking SubmitToEWS button
        https://bugs.webkit.org/show_bug.cgi?id=199757

        Unreviewed minor infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS.post): Change logging level from debug to info.

2019-07-12  Alex Christensen  <achristensen@webkit.org>

        Enable client certificate authentication unit test
        https://bugs.webkit.org/show_bug.cgi?id=199735

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TEST):
        I originally wrote this in https://bugs.webkit.org/show_bug.cgi?id=197800 but it was disabled because it crashed.
        I found what was crashing.  I was reading out of bounds on my vector of 2 strings :(

2019-07-12  Alex Christensen  <achristensen@webkit.org>

        Begin unifying TestWebKitAPI build
        https://bugs.webkit.org/show_bug.cgi?id=199728

        Reviewed by Keith Miller.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Scripts/generate-unified-sources.sh: Added.
        * TestWebKitAPI/Sources.txt: Added.
        * TestWebKitAPI/SourcesCocoa.txt: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2019-07-12  Zhifei Fang  <zhifei_fang@apple.com>

        run-javascriptcore-tests won't report test results for testmasm, testair, testb3, testdfg and test api
        https://bugs.webkit.org/show_bug.cgi?id=199489
        <rdar://problem/47891081>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.countFailures):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * Scripts/run-javascriptcore-tests:
        (runTest):
        (reportTestFailures):
        (runJSCStressTests):

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Make layout-tests' full_results.json accessible in Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=199743

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-07-11  Aakash Jain  <aakash_jain@apple.com>

        Unreviewed follow-up fix to r247364.
        [ews-build] Add build step to clean up .git/index.lock file
        https://bugs.webkit.org/show_bug.cgi?id=199722

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): CheckOutSource should not haltOnFailure since CleanUpGitIndexLock step needs
        to be run after this step.

2019-07-11  Yusuke Suzuki  <ysuzuki@apple.com>

        Flaky API Test TestWTF.bmalloc.ScavengedMemoryShouldBeReused
        https://bugs.webkit.org/show_bug.cgi?id=199524
        <rdar://problem/52783816>

        Reviewed by Saam Barati.

        This test is white-box one and it has strong assumption how IsoHeap allocates pages.
        But this test has several problems.

        1. IsoPage::numObjects is not the exact number of how many we allocate objects. This
           number is calculated by pageSize / sizeof(T), and this does not account the header
           size of IsoPage. So, # of objects per IsoPage is less than numObjects. Since sizeof(double)
           is very small, we can have many objects in one IsoPage. As a result, we need a large
           bitmap in IsoPage. This reduces # of objects in IsoPage largely. So, `ptrs.size()` becomes
           less than numObjects.

        2. We now have lower tier of allocation in IsoHeap. It means that we allocate 8 objects in
           shared page (page is shared, but memory is pinned for a specific type) before using IsoHeap's
           page. This also makes the intention of this test wrong.

        Due to (1), we access OoB of ptrs vector, passing a garbage to IsoHeap::deallocate, and crashing.

        We make this test robust while we still keep this test white-box one to test the critical feature
        of IsoHeap. We first exhaust lower tier of IsoHeap, and after that, start testing the memory. We
        allocate many pointers, deallocate them, allocate one pointer while keeping pointers in the lower
        tier live, and check whether the deallocated memory is reused.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (TEST):

2019-07-11  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Build failure with ENABLE_ACCESSIBILITY=OFF
        https://bugs.webkit.org/show_bug.cgi?id=199625

        Added ENABLE(ACCESSIBILITY) and replaced HAVE(ACCESSIBILITY)
        with ENABLE(ACCESSIBILITY) in the code.

        Additionally, the TestRunner code generator now honors the
        Conditional IDL format.

        Reviewed by Konstantin Tokarev.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateImplementationFile):

2019-07-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to clean up .git/index.lock file
        https://bugs.webkit.org/show_bug.cgi?id=199722

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource.getResultSummary): Run CleanUpGitIndexLock step when CheckOutSource fails.
        (CleanUpGitIndexLock.__init__): Configure timeout and logEnviron.
        (CleanUpGitIndexLock.evaluateCommand): Always RETRY the build after this step is run.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-11  Jonathan Bedard  <jbedard@apple.com>

        [iOS 13] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199481
        <rdar://problem/52619048>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Add iOS framework stubs.

2019-07-11  Ryan Haddad  <ryanhaddad@apple.com>

        Add test expectations and baselines for iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=199329

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Increment current version to 13.
        * Scripts/webkitpy/port/ios_device_unittest.py: Update unit tests.
        (IOSDeviceTest.test_layout_test_searchpath_with_apple_additions):
        (IOSDeviceTest.test_layout_test_searchpath_without_apple_additions):
        (IOSDeviceTest.test_layout_searchpath_wih_device_type):
        * Scripts/webkitpy/port/ios_simulator_unittest.py: Ditto.
        (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: Ditto.
        (IOSTest.make_port):

2019-07-11  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for ARIA roles insertion, deletion, subscript, superscript, and time
        https://bugs.webkit.org/show_bug.cgi?id=199692

        Reviewed by Chris Fleizach.

        Add support for output of AXDeletion and AXInsertion roles for tests.
        Update GTK and WPE jhbuild modules to use version of ATK and AT-SPI2
        which include ROLE_CONTENT_DELETION and ROLE_CONTENT_INSERTION.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-07-11  Adrian Perez de Castro  <aperez@igalia.com>

        [ews-build] Remove workers {ltilve,tanty}-gtk-wk2-ews from configuration
        https://bugs.webkit.org/show_bug.cgi?id=199707

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json: Remove old unused workers.

2019-07-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] With modal overlay and body overflow:hidden, can't access all the content
        https://bugs.webkit.org/show_bug.cgi?id=199693
        rdar://problem/51930364

        Reviewed by Tim Horton.

        New API tests that test scrollability with various combinations of content, insets,
        input accessory bars etc.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ScrollViewScrollabilityTests.mm: Added.
        (TestWebKitAPI::webViewWithAutofocusedInput):
        (TestWebKitAPI::TEST):

2019-07-10  Tim Horton  <timothy_horton@apple.com>

        Long pressing on attachments will crash the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=199696
        <rdar://problem/52920241>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        Add a test that previously crashed.

2019-07-10  Dean Jackson  <dino@apple.com>

        Support MacCatalyst in run-webkit-app
        https://bugs.webkit.org/show_bug.cgi?id=199690

        Reviewed by Tim Horton.

        Add a --maccatalyst option to run-webkit-app that
        can launch MacCatalyst applications with a built WebKit.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineXcodeSDK):
        (xcodeSDKPlatformName):
        (determineConfigurationProductDir):
        (determinePortName):
        (isCatalystWebKit):
        (isAppleCocoaWebKit):
        (willUseCatalystSDK):

2019-07-10  Ryan Haddad  <ryanhaddad@apple.com>

        [MacOS] Filter VPA info logged to stdout
        https://bugs.webkit.org/show_bug.cgi?id=199673

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip):

2019-07-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r247286.

        Caused TestWTF.WTF.StringOperators to fail on debug bots

        Reverted changeset:

        "Add StringBuilder member function which allows makeString()
        style variadic argument construction"
        https://bugs.webkit.org/show_bug.cgi?id=198997
        https://trac.webkit.org/changeset/247286

2019-07-10  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Explicitly use perl or python while invoking scripts
        https://bugs.webkit.org/show_bug.cgi?id=199669

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py: Explicitly added perl or python while invoking scripts.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-07-10  Guillaume Emont  <guijemont@igalia.com>

        Run tests on mips EWS
        https://bugs.webkit.org/show_bug.cgi?id=196854

        Reviewed by Carlos Garcia Campos.

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

2019-07-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] GUniqueOutPtr::release should return a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=199579

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WTF/glib/GUniquePtr.cpp:
        (TestWebKitAPI::TEST):

2019-07-09  Chris Dumez  <cdumez@apple.com>

        Fix integer type encoding / decoding in WKRemoteObjectCoder
        https://bugs.webkit.org/show_bug.cgi?id=199643
        <rdar://problem/52732342>

        Reviewed by Anders Carlsson.

        Update API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn takeUnsignedLongLong:completionHandler:]):
        (-[RemoteObjectRegistryPlugIn takeLongLong:completionHandler:]):
        (-[RemoteObjectRegistryPlugIn takeUnsignedLong:completionHandler:]):
        (-[RemoteObjectRegistryPlugIn takeLong:completionHandler:]):

2019-07-09  Sam Weinig  <weinig@apple.com>

        Add StringBuilder member function which allows makeString() style variadic argument construction
        https://bugs.webkit.org/show_bug.cgi?id=198997

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Add basic test showing that StringBuilder::flexibleAppend can be used to
        append one or more string adaptable types.

2019-07-09  Sihui Liu  <sihui_liu@apple.com>

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385
        <rdar://problem/52622080>

        Reviewed by Alex Christensen.

        removeDataOfTypes will no longer remove persistent credentials. We should clear persistent credentials using
        the new SPI after each test that creates persistent credentials, otherwise the later tests may use credentials
        left by previous tests and didReceiveAuthenticationChallenge will not be invoked.

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

2019-07-09  Alex Christensen  <achristensen@webkit.org>

        When parsing an IPv4 address, wait until after deciding it is indeed an IPv4 address before reporting syntax violations
        https://bugs.webkit.org/show_bug.cgi?id=199628

        Reviewed by Brady Eidson.

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

2019-07-09  Alex Christensen  <achristensen@webkit.org>

        Remove invalid assertion in URLParser::domainToASCII
        https://bugs.webkit.org/show_bug.cgi?id=199624

        Reviewed by Brady Eidson.

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

2019-07-09  Alex Christensen  <achristensen@webkit.org>

        URLParser should reserialize IPv6 addresses that end with a colon
        https://bugs.webkit.org/show_bug.cgi?id=199627

        Reviewed by Brady Eidson.

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

2019-07-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not run unix commands for windows in PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=199605

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

2019-07-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        JSTestGlobalObject.cpp of bindings-generation-tests is failing for Windows Python
        https://bugs.webkit.org/show_bug.cgi?id=199487

        Reviewed by Ross Kirsling.

        In Windows Python, preprocessor.pm is using cl.exe. cl.exe was
        failing to open testglobalscope_constructors_file which was
        created by using tempfile.mkstemp() because it keeps the file
        open. Use tempfile.mkdtemp() to create temporary files in the
        temporary directory instead of tempfile.mkstemp().

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.run_tests):
        (BindingsTests.main):
        (BindingsTests.close_and_remove): Deleted.

2019-07-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add KillOldProcesses step before running API or Layout tests
        https://bugs.webkit.org/show_bug.cgi?id=199592

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

2019-07-08  Jonathan Bedard  <jbedard@apple.com>

        test-webkitpy: Explicitly use Python 2.7 lldb library
        https://bugs.webkit.org/show_bug.cgi?id=199578
        <rdar://problem/51853557>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.path_to_lldb_python_directory): Explicitly use Python 2.7 lldb libary.
        * Scripts/webkitpy/test/main.py:
        (_supports_building_and_running_lldb_tests): Run lldb tests on Catalina again.

2019-07-08  Ryan Haddad  <ryanhaddad@apple.com>

        Add test expectations and baselines for Catalina
        https://bugs.webkit.org/show_bug.cgi?id=199328

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/mac.py:
        (MacPort): Increment current version to 10.15 so that baseline search paths are correctly constructed for High Sierra.

2019-07-08  Christopher Reid  <chris.reid@sony.com>

        Implement MappedFileData for Windows
        https://bugs.webkit.org/show_bug.cgi?id=198269

        Reviewed by Darin Adler.

        * TestWebKitAPI/PlatformWin.cmake:

2019-07-08  Charlie Turner  <cturner@igalia.com>

        REGRESSION(r243197): [GStreamer] Web process hangs when scrolling twitter timeline which contains HLS videos
        https://bugs.webkit.org/show_bug.cgi?id=197558

        Reviewed by Xabier Rodriguez-Calvar.

        On shutdown we can easily deadlock the web process if we don't
        ensure all network operations are completed before comitting state
        changes. In HLS, make sure the network operations are cancelled,
        and also prevent hlsdemux's retry logic from scuppering our
        efforts.

        * gstreamer/jhbuild.modules: Include the patch.
        * gstreamer/patches/gst-plugins-bad-do-not-retry-downloads-during-shutdown.patch: Added.

2019-07-08  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Enable only on the most recent version of the supported iOS family
        https://bugs.webkit.org/show_bug.cgi?id=199562
        <rdar://problem/52766511>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Long hang when loading a cnn.com page on iOS
        https://bugs.webkit.org/show_bug.cgi?id=199556

        Reviewed by Zalan Bujtas.

        Add code to load a page by default in MobileMiniBrowser so it's easy to hack it
        to load a test page of your choice.

        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m:
        (-[WebViewController viewDidLoad]):

2019-07-05  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Crash in WebKit::WebPage::positionInformation via Range::startPosition
        https://bugs.webkit.org/show_bug.cgi?id=199503

        Reviewed by Wenson Hsieh.

        Added UIScriptController.ensurePositionInformationIsUpToDateAt using the existing WKWebView SPI:
        _requestActivatedElementAtPosition

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * WebKitTestRunner/ios/UIScriptControllerMac.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):

2019-07-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r247115.

        Breaks lldbWebKitTester (and by extension, test-webkitpy)

        Reverted changeset:

        "[WHLSL] Standard library is too big to directly include in
        WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=198186
        https://trac.webkit.org/changeset/247115

2019-07-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r247123.

        Caused TestWebKitAPI.Challenge.BasicProposedCredential to
        fail.

        Reverted changeset:

        "Only allow fetching and removing session credentials from
        WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=199385
        https://trac.webkit.org/changeset/247123

2019-07-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Touching media controls sometimes shows software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=199490
        <rdar://problem/52076270>

        Reviewed by Eric Carlson.

        Adds plumbing for a new testing hook to check whether or not there is an active input session. See other
        ChangeLog entries for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::hasInputSession const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::hasInputSession const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::hasInputSession const):

2019-07-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Remove GTK and WPE queue from old EWS and dashboard
        https://bugs.webkit.org/show_bug.cgi?id=199458

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        * QueueStatusServer/config/queues.py:

2019-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix browserperfdash script after r239522
        https://bugs.webkit.org/show_bug.cgi?id=199496

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:
        (BrowserPerfDashRunner.run): Pass None for the new required BenchmarkRunner constructor.

2019-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] test-webkitpy is broken on Linux since r246662
        https://bugs.webkit.org/show_bug.cgi?id=199493

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/test/main.py:
        (_supports_building_and_running_lldb_tests): Add a check for None before calling startswith().

2019-07-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Not longer needed to build woff2 on the JHBuild
        https://bugs.webkit.org/show_bug.cgi?id=199406

        Reviewed by Michael Catanzaro.

        Install the Woff2 libraries and headers from the system package
        and stop building them on the JHBuild.

        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

2019-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][CMake] The CMake cache should be clean when the JHBuild is rebuilt
        https://bugs.webkit.org/show_bug.cgi?id=199449

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): Clean the CMake cache if we detect that the JHBuild has been rebuilt.

2019-07-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK a11y tests fix after r247071

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::popupValue const):

2019-07-03  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable WPE and GTK queues on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199234

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for GTK and WPE builders.
        * BuildSlaveSupport/ews-build/factories.py: Added required build steps for GTKFactory and WPEFactory.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Added InstallGtkDependencies/InstallWpeDependencies step before Compiling WebKit without patch.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enable gtk and wpe status-bubbles.

2019-07-03  Sihui Liu  <sihui_liu@apple.com>

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385

        Reviewed by Alex Christensen.

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

2019-07-03  Tim Horton  <timothy_horton@apple.com>

        UI process exception when dragging an <attachment> with no content type
        https://bugs.webkit.org/show_bug.cgi?id=199480
        <rdar://problem/44351353>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        Add a test; before the change, it crashes.

2019-07-03  Jonathan Bedard  <jbedard@apple.com>

        [Catalina] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199209

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Add Mac framework stubs.

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

        Adopt simple structured bindings in more places
        https://bugs.webkit.org/show_bug.cgi?id=199247

        Reviewed by Alex Christensen.

        Replaces simple uses of std::tie() with structured bindings. Does not touch
        uses of std::tie() that are not initial declarations, use std::ignore or in
        case where the binding is captured by a lambda, as structured bindings don't
        work for those cases yet.

        * TestWebKitAPI/ios/PreferredContentMode.mm:
        (TestWebKitAPI::TEST):

2019-07-03  Aakash Jain  <aakash_jain@apple.com>

        Unreviewed follow-up fix to r247049, default the platform to '*' when platform property is not set.

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

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build steps to Install Wpe and Gtk dependencies
        https://bugs.webkit.org/show_bug.cgi?id=199408

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/ews-build/steps.py:
        (InstallGtkDependencies): Build step to install dependencies for GTK. Set haltOnFailure=False so that in case of failure, build isn't
        marked as failed (which would indicated patch failed EWS), instead subsequent steps would be run and the build would be marked as RETRY.
        (InstallWpeDependencies): Ditto for WPE.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Allow skipping uploading built product for few builders
        https://bugs.webkit.org/show_bug.cgi?id=199422

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.__init__): Added optional skipUpload parameter.
        (CompileWebKit.evaluateCommand): Allow to skip upload if there are no triggers and skipUpload is True.

2019-07-02  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r243240): Unable to swipe back in Safari
        https://bugs.webkit.org/show_bug.cgi?id=199394
        <rdar://problem/51137447>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Make sure that we actually end up with swipe gesture recognizers installed
        after process swap and crash.

2019-07-02  Andres Gonzalez  <andresg_22@apple.com>

        Enhance support of aria-haspopup per ARIA 1.1 specification.
        https://bugs.webkit.org/show_bug.cgi?id=199216
        <rdar://problem/46221342>

        Reviewed by Chris Fleizach.

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

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not print worker environment variables in each build step [part 2]
        https://bugs.webkit.org/show_bug.cgi?id=199405

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSpecificRevision.__init__): Disabled logging of environment variables.
        (CleanWorkingDirectory.__init__): Ditto.
        (RunBindingsTests.__init__): Ditto.
        (RunWebKitPerlTests.__init__): Ditto.
        (RunWebKitPyTests.__init__): Ditto.
        (CompileWebKit.__init__): Ditto.
        (ArchiveTestResults.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-07-02  Jer Noble  <jer.noble@apple.com>

        Pipe suport for 'cenc' init data type into CDMFairPlayStreaming
        https://bugs.webkit.org/show_bug.cgi?id=199381
        <rdar://problem/52483103>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp:

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update bot configuration for WPE and GTK
        https://bugs.webkit.org/show_bug.cgi?id=199238

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/ews-build/config.json:

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Make PrintConfiguration platform aware
        https://bugs.webkit.org/show_bug.cgi?id=196657

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Specified platform-specific command lists.
        (PrintConfiguration.run): Override run method and specify platform specific commands.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-01  Justin Michaud  <justin_michaud@apple.com>

        [Wasm-References] Disable references by default
        https://bugs.webkit.org/show_bug.cgi?id=199390

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2019-07-01  Joonghun Park  <pjh0718@gmail.com>

        Unreviewed. Revert r246965 to fix build break
        since r247019 reverted its related changes.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::popupValue const): Deleted.

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

        Add new decidePolicyForNavigationAction SPI with preferences and userInfo
        https://bugs.webkit.org/show_bug.cgi?id=199371
        <rdar://problem/52352905>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[NavigationActionSPIDelegate webView:didFinishNavigation:]):
        (-[NavigationActionSPIDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[NavigationActionSPIDelegate spiCalled]):
        (TEST):

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

        Deprecate _webView:showCustomSheetForElement: after transition to UIContextMenuInteraction
        https://bugs.webkit.org/show_bug.cgi?id=199296
        <rdar://problem/51041960>

        Reviewed by Darin Adler.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _webView:showCustomSheetForElement:]):

2019-07-01  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246958.

        Broke inspector/dom/getAccessibilityPropertiesForNode.html

        Reverted changeset:

        "Enhance support of aria-haspopup per ARIA 1.1 specification."
        https://bugs.webkit.org/show_bug.cgi?id=199216
        https://trac.webkit.org/changeset/246958

2019-07-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK a11y tests fix after r246958

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::popupValue const):

2019-06-30  Andres Gonzalez  <andresg_22@apple.com>

        Enhance support of aria-haspopup per ARIA 1.1 specification.
        https://bugs.webkit.org/show_bug.cgi?id=199216
        <rdar://problem/46221342>

        Reviewed by Chris Fleizach.

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

2019-06-28  Robin Morisset  <rmorisset@apple.com>

        Adding myself as a reviewer to contributors.json.

        Unreviewed.

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

2019-06-28  Jer Noble  <jer.noble@apple.com>

        Add new -[WKWebView _closeAllMediaPresentations] SPI
        https://bugs.webkit.org/show_bug.cgi?id=199294
        <rdar://problem/51965958>

        Reviewed by Alex Christensen.

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

2019-06-28  Sihui Liu  <sihui_liu@apple.com>

        Add a regression test for change r246901
        https://bugs.webkit.org/show_bug.cgi?id=199290

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (-[LocalStorageNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/localstorage-open-window-private.html: Added.

2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
        https://bugs.webkit.org/show_bug.cgi?id=199317

        Reviewed by Michael Catanzaro.

        While IconDatabase and all code using it was removed,
        ENABLE_ICONDATABASE still exists as build option and C++ macro.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * gtk/manifest.txt.in: Remove reference to unused urlIcon.png file.
        * wpe/manifest.txt.in: Remove reference to unused urlIcon.png file.

2019-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        -[WKContentView _selectionClipRects] returns a bogus value in -reloadInputViews when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=199310
        <rdar://problem/52292137>

        Reviewed by Megan Gardner.

        Add a new API test to verify that _selectionClipRects returns the correct value when invoked under the scope of
        _elementDidFocus.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setDidStartInputSessionHandler:]):
        (-[TestInputDelegate didStartInputSessionHandler]):

        Add plumbing for a handler block in TestInputDelegate.

        (-[TestInputDelegate setWillStartInputSessionHandler:]):

        Drive-by style fixes to add a space between id and < for Objective-C protocols.

        (-[TestInputDelegate willStartInputSessionHandler]):
        (-[TestInputDelegate _webView:willStartInputSession:]):
        (-[TestInputDelegate _webView:didStartInputSession:]):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/ios/UIKitSPI.h:

        Add a declaration for _selectionClipRects.

2019-06-27  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r244633): e-mail with "height: 100%" causes unstable layout.
        https://bugs.webkit.org/show_bug.cgi?id=199303
        <rdar://problem/51340927>

        Reviewed by Tim Horton.

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

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * ContentExtensionTester/Configurations/SDKVariant.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig:
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        * WebEditingTester/Configurations/SDKVariant.xcconfig:
        * WebKitLauncher/Configurations/SDKVariant.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig:

2019-06-27  Saam Barati  <sbarati@apple.com>

        Make WEBGPU enabled only on Mojave and later.

        Rubber-stamped by Myles C. Maxfield.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-06-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not print worker environment variables in each build step
        https://bugs.webkit.org/show_bug.cgi?id=197319

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource.__init__): Disabled logging of environment variables.
        (ApplyPatch.__init__): Ditto.
        (KillOldProcesses.__init__): Ditto.
        (ArchiveBuiltProduct.__init__): Ditto.
        (DownloadBuiltProduct.__init__): Ditto.
        (ExtractBuiltProduct.__init__): Ditto.
        (RunAPITests.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-06-26  Jiewen Tan  <jiewen_tan@apple.com>

        SubFrameSOAuthorizationSession should preserve the referrer header when fall back to web path
        https://bugs.webkit.org/show_bug.cgi?id=199232
        <rdar://problem/51718328>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (TestWebKitAPI::TEST):
        Add a test that utilizes TCPServer as local files always omit referrer.

2019-06-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add configuration and architecture for WPE and GTK builders
        https://bugs.webkit.org/show_bug.cgi?id=199249

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-06-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add check for duplicate workers in config.json
        https://bugs.webkit.org/show_bug.cgi?id=199240

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (checkWorkersAndBuildersForConsistency._find_worker_with_name): Check for duplicate worker entry.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (TestcheckWorkersAndBuildersForConsistency.test_duplicate_worker): Added unit-test.

2019-06-26  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] MiniBrowser should make better font choices
        https://bugs.webkit.org/show_bug.cgi?id=199244

        Reviewed by Brent Fulgham.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::updateDeviceScaleFactor):
        * MiniBrowser/win/MiniBrowserLib.rc:

2019-06-26  Alex Christensen  <achristensen@webkit.org>

        testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set
        https://bugs.webkit.org/show_bug.cgi?id=199230
        <rdar://51757107>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp:
        (TestWebKitAPI::didGetTestHTTPCookieAcceptPolicy):
        (TestWebKitAPI::didGetUserHTTPCookieAcceptPolicy):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundleWithListener):
        (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundleWithListener):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundle): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-06-26  Ross Kirsling  <ross.kirsling@sony.com>

        [Win][MiniBrowser] Remove obsolete code after r246814.
        https://bugs.webkit.org/show_bug.cgi?id=199233

        Reviewed by Fujii Hironori.

        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFinishLoadForFrame):
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.

2019-06-25  Jiewen Tan  <jiewen_tan@apple.com>

        Implement a new SPI to inform clients about AppSSO
        https://bugs.webkit.org/show_bug.cgi?id=199085
        <rdar://problem/50028246>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationBasicDelegate webView:didFinishNavigation:]):
        (-[TestSOAuthorizationNavigationDelegate init]):
        (-[TestSOAuthorizationNavigationDelegate _webView:decidePolicyForSOAuthorizationLoadWithCurrentPolicy:forExtension:completionHandler:]):
        (TestWebKitAPI::TEST):

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

        [ews-build] Retry Layout test in case of failures
        https://bugs.webkit.org/show_bug.cgi?id=199194

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.evaluateCommand): Check if tests failed and retry them if required.
        (ReRunWebKitTests): Build step to re-run layout tests.
        (ReRunWebKitTests.evaluateCommand): Check if tests failed and retry on clean build if required.
        (RunWebKitTestsWithoutPatch): Build step to run tests without patch.
        (RunWebKitTestsWithoutPatch.evaluateCommand):

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

        [ews-build] Combine various patchFailed*Tests properties
        https://bugs.webkit.org/show_bug.cgi?id=199193

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py: Renamed patchFailedJSCTests and patchFailedAPITests to patchFailedTests. This property
        can also be used for layout-tests later on.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-06-25  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] MiniBrowser should default to webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=199201

        Reviewed by Don Olmstead.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/MiniBrowserReplace.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::loadHTMLString): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::loadHTMLString): Deleted.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

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

        [iOS] Occasional crash under -[UIPreviewTarget initWithContainer:center:transform:] when generating a drag preview
        https://bugs.webkit.org/show_bug.cgi?id=199192
        <rdar://problem/51554509>

        Reviewed by Tim Horton.

        Tweak the drag and drop simulator to ask for drag cancellation previews, and use this to write a couple tests to
        verify that we gracefully handle web process termination and web view unparenting mid-drag.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator liftPreviews]):
        (-[DragAndDropSimulator cancellationPreviews]):
        (-[DragAndDropSimulator setSessionWillBeginBlock:]):
        (-[DragAndDropSimulator sessionWillBeginBlock]):
        (-[DragAndDropSimulator _webView:dataInteraction:sessionWillBegin:]):

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

        [ews-build] UploadTestResults and ExtractTestResults clobber results in case of multiple layout test runs in a build
        https://bugs.webkit.org/show_bug.cgi?id=199178

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (UploadTestResults.__init__): Add an optional identifier and append the identifier to the file name.
        (ExtractTestResults.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit tests.

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add user agent quirk for bankofamerica.com
        https://bugs.webkit.org/show_bug.cgi?id=199154

        Reviewed by Carlos Garcia Campos.

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

2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully rename WebKitGTK+ -> WebKitGTK everywhere
        https://bugs.webkit.org/show_bug.cgi?id=199159

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/gtk/README:
        * MiniBrowser/gtk/BrowserWindow.c:
        * MiniBrowser/gtk/main.c:
        (aboutURISchemeRequestCallback):
        * Scripts/webkitpy/common/config/contributionareas.py:
        * Scripts/webkitpy/common/config/contributors.json:
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py:
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewResources):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewMouseTarget):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testDocumentLoadedSignal):
        (testWebExtensionFormControlsAssociated):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettingsUserAgent):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewRunJavaScript):
        * TestWebKitAPI/Tests/WebKitGtk/InspectorTestServer.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (prepareContextMenuTestView):
        (testContextMenuPopulateMenu):
        (testContextMenuCustomMenu):
        (testContextMenuDisableMenu):
        (testContextMenuSubMenu):
        (testContextMenuDismissed):
        (testContextMenuWebExtensionMenu):
        (testContextMenuWebExtensionNode):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        (testInspectorCustomContainerDestroyed):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        (testWebViewPrint):
        (testPrintOperationPrint):
        (testPrintOperationErrors):
        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * gtkdoc/generate-gtkdoc:
        * wpe/install-dependencies:

2019-06-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        contributors.json not canonicalized since r243297
        https://bugs.webkit.org/show_bug.cgi?id=199161

        Reviewed by Alexey Proskuryakov.

        Canonicalize it using 'validate-committer-lists --canonicalize'

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

2019-06-24  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Build style should be lower-case
        https://bugs.webkit.org/show_bug.cgi?id=199158

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Make all styles lower-case.

2019-06-24  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Remove iOS queue from old EWS and dashboard
        https://bugs.webkit.org/show_bug.cgi?id=199150

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        * QueueStatusServer/config/queues.py:

2019-06-21  Ryan Haddad  <ryanhaddad@apple.com>

        API Test [Mojave+ WK2 Debug ] TestWebKitAPI.WKAttachmentTestsMac.InsertDroppedFilePromisesAsAttachments is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=198795

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST): Disable flaky test.

2019-06-24  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable iOS-12-Build queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199149

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enable iOS-12-Build-EWS trigger. Also temporarily share ews152 and ews154 with
        this queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enable ios status-bubble. Also display the ios bubble first (left). Going forward
        will keep the builders to the left and testers to the right.

2019-06-24  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Upload test results after running layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=199120

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.evaluateCommand):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-06-24  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] EWS should provide option to download layout test results zip file
        https://bugs.webkit.org/show_bug.cgi?id=199121

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ExtractTestResults.resultsDownloadURL): Method to return layout test result zip file url.
        (ExtractTestResults.addCustomURLs): Add url to download layout test results zip file.

2019-06-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add user agent quirk for Google Drive
        https://bugs.webkit.org/show_bug.cgi?id=199153

        Reviewed by Carlos Garcia Campos.

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

2019-06-22  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (328 new tests -> 2652).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-22  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility objects contained in links should honor the aria-haspopup attribute in the ancestor link.
        https://bugs.webkit.org/show_bug.cgi?id=199107
        <rdar://problem/43663611>

        Reviewed by Chris Fleizach.

        iOS implementation for AccessibilityUIElement::hasPopup.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::hasPopup const):

2019-06-22  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, add myself to CMake watchlist

        * Scripts/webkitpy/common/config/watchlist:

2019-06-21  Sihui Liu  <sihui_liu@apple.com>

        openDatabase should return an empty object when WebSQL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=198805

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebSQLBasics.mm: Added.
        (-[WebSQLBasicsMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/opendatabase-always-exists.html: Added.

2019-06-21  Jiewen Tan  <jiewen_tan@apple.com>

        WebPageProxy::loadData should accept ShouldOpenExternalURLsPolicy
        https://bugs.webkit.org/show_bug.cgi?id=199114
        <rdar://problem/51671674>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationNavigationDelegate init]):
        (-[TestSOAuthorizationNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (configureSOAuthorizationWebView):
        (TestWebKitAPI::TEST):

2019-06-21  Youenn Fablet  <youenn@apple.com>

        WebPageProxy should use the right path for sandbox extension
        https://bugs.webkit.org/show_bug.cgi?id=198902
        <rdar://problem/50772810>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-06-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Bump minimum versions of GLib, GTK, libsoup, ATK, GStreamer, and Cairo
        https://bugs.webkit.org/show_bug.cgi?id=199094

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserTab.c:
        (runColorChooserCallback):
        (browserTabConstructed):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewSyncRequestOnMaxConns):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testWebSocketTLSErrors):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::~WebKitTestServer):
        (WebKitTestServer::getWebSocketURIForPath const):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::stringAtOffset):

2019-06-20  Dean Johnson  <dean_johnson@apple.com>

        test-webkitpy is broken on macOS Catalina
        https://bugs.webkit.org/show_bug.cgi?id=199078

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/test/main.py: Check if lldb tests are supported before adding them
        to the runner.
        (main):
        (_supports_building_and_running_lldb_tests): Check if you are running macOS Catalina.

2019-06-20  Dean Johnson  <dean_johnson@apple.com>

        Change status to "committer" in contributors.json

        Unreviewed.

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

2019-06-20  Alex Christensen  <achristensen@webkit.org>

        Add unit test for UIContextMenuConfiguration API
        https://bugs.webkit.org/show_bug.cgi?id=199043

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm: Added.
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[TestContextMenuUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuUIDelegate webView:contextMenuDidEndForElement:]):
        (TEST):
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h: Added.
        * TestWebKitAPI/cocoa/TestContextMenuDriver.mm: Added.
        (-[TestContextMenuDriver delegate]):
        (-[TestContextMenuDriver setDelegate:]):
        (-[TestContextMenuDriver view]):
        (-[TestContextMenuDriver setView:]):
        (-[TestContextMenuDriver allowableMovement]):
        (-[TestContextMenuDriver setAllowableMovement:]):
        (-[TestContextMenuDriver primaryGestureRecognizer]):
        (-[TestContextMenuDriver setPrimaryGestureRecognizer:]):
        (-[TestContextMenuDriver touchDuration]):
        (-[TestContextMenuDriver setTouchDuration:]):
        (-[TestContextMenuDriver locationInCoordinateSpace:]):
        (-[TestContextMenuDriver cancelInteraction]):
        (-[TestContextMenuDriver begin:]):
        (-[TestContextMenuDriver clickDown]):
        (-[TestContextMenuDriver clickUp]):
        (-[TestContextMenuDriver end]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-06-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should not turn orange when any build step is skipped
        https://bugs.webkit.org/show_bug.cgi?id=199079

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-06-20  Alex Christensen  <achristensen@webkit.org>

        Fix an internal engineering build after r246605
       ​https://bugs.webkit.org/show_bug.cgi?id=197800

        * TestWebKitAPI/TCPServer.cpp:

2019-06-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Triggered builds should use same revision as parent build
        https://bugs.webkit.org/show_bug.cgi?id=198289

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSpecificRevision): Build step to checkout specific revision.
        (CheckOutSpecificRevision.doStepIf): Run this step only if ews_revision property is set.
        (CheckOutSpecificRevision.hideStepIf): Hide this step when it is skipped.
        (CheckOutSpecificRevision.start): Run appropriate git command.
        (Trigger.propertiesToPassToTriggers): Pass ews_revision property to triggered builds, so that triggered
        builds use same revision as parent build.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Added CheckOutSpecificRevision step.

2019-06-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit tests for AnalyzeCompileWebKitResults
        https://bugs.webkit.org/show_bug.cgi?id=199073

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests for AnalyzeCompileWebKitResults.

2019-06-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Enable navigation swipe layout tests
        https://bugs.webkit.org/show_bug.cgi?id=198995

        Reviewed by Michael Catanzaro.

        Add a way for tests to enable and then control swipe gesture on GTK.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp: Hide
        empty implementations of beginBackSwipe() and completeBackSwipe() for GTK.
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setNavigationGesturesEnabled): Implemented.
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp: Added.
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):

2019-06-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] HTTP layout tests don't run in flatpak
        https://bugs.webkit.org/show_bug.cgi?id=199067

        Reviewed by Michael Catanzaro.

        Stop bind mounting /app/lib/perl to /etc/perl because Perl doesn't actually
        check that path. Instead, add /app/lib/perl to Apache config directly.

        /usr/manifest.json file is not guaranteed to exist in sandbox, check for
        /.flatpak-info instead.

        * Scripts/webkitpy/port/base.py:
        (Port._is_flatpak):
        (Port._in_flatpak_sandbox):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):
        (is_sandboxed):

2019-06-18  Darin Adler  <darin@apple.com>

        Tidy up the remaining bits of the AtomicString to AtomString rename
        https://bugs.webkit.org/show_bug.cgi?id=198990

        Reviewed by Michael Catanzaro.

        * Scripts/do-webcore-rename: Removed already-done renames.
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp: Rename one use of "atomic".

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove support for GTK2 plugins
        https://bugs.webkit.org/show_bug.cgi?id=199065

        Reviewed by Sergio Villar Senin.

        * EWSTools/ubuntu-ews-packages:
        * TestWebKitAPI/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * flatpak/org.webkit.GTK.yaml:
        * gtk/install-dependencies:

2019-06-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] IsoHeap's initialization is racy with IsoHeap::isInitialized
        https://bugs.webkit.org/show_bug.cgi?id=199053

        Reviewed by Saam Barati.

        Added a test stressing IsoHeap with multiple threads.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (assertHasObjects):
        (assertHasOnlyObjects):
        (assertClean):
        (TEST):

2019-06-19  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (1126 new tests -> 2324).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add WTF::crossThreadCopy(T&&) to utilize String::isolatedCopy() &&
        https://bugs.webkit.org/show_bug.cgi?id=198957

        Reviewed by Alex Christensen.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CrossThreadCopier.cpp: Added.

2019-06-19  Keith Rollin  <krollin@apple.com>

        Relocate some test tools in non-mac builds
        https://bugs.webkit.org/show_bug.cgi?id=198984
        <rdar://problem/51873261>

        Reviewed by Andy Estes.

        The tools DumpRenderTree, WebKitTestRunner, LayoutTestHelper, and
        TestNetscapePlugin get created in
        WebKit.framework/Versions/A/Resources on non-mac builds. This is
        incorrect, as those bundles are shallow bundles that don't use the
        Versions hierarchy. Instead, store these files directly in
        WebKit.framework.

        Note that getting rid of just the "Versions/A" path components and
        putting the files in WebKit.framework/Resources doesn't work as
        `codesign` treats the result as an invalid layout.

        The work in this patch involves changing the definition of the custom
        build variable WEBKIT_FRAMEWORK_RESOURCES_PATH. The standard build
        variable INSTALL_PATH is defined in terms of this variable. In order
        to increase visiblity into this relationship, move both of these
        variables into .xcconfig files if they weren't already. This
        refactoring was done in a way to be the least disruptive and most
        compatible with the previous definitions, even at the cost of being
        repetitive.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig:
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig:
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig:

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

        [ews-build] Patch link should open the pretty patch
        https://bugs.webkit.org/show_bug.cgi?id=199031

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.getPatchURL): Use the prettypatch url for patch.

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

        [ews-build] Add step to analyze Compile WebKit failures
        https://bugs.webkit.org/show_bug.cgi?id=199025

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Add AnalyzeCompileWebKitResults step.
        (CompileWebKitToT): set haltOnFailure to False since we need to run AnalyzeCompileWebKitResults step.
        (AnalyzeCompileWebKitResults): Class to analyze compile webkit steps results.
        (AnalyzeCompileWebKitResults.start): If ToT fails to build, retry the build, else marked the build as failed. Note that
        this step is run only when compile-webkit failed.

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

        [ews-build] Send email notifications for failures
        https://bugs.webkit.org/show_bug.cgi?id=198919

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-06-19  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        Make better abstractions for reading and writing from/to TCPServer.
        Add a unit test that causes a client certificate authentication challenge to happen.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::read):
        (TestWebKitAPI::TCPServer::write):
        (TestWebKitAPI::TCPServer::respondWithChallengeThenOK):
        (TestWebKitAPI::TCPServer::respondWithOK):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (credentialWithIdentity):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):
        (-[ClientCertificateDelegate webView:didFinishNavigation:]):
        (-[ClientCertificateDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[ClientCertificateDelegate challengeCount]):
        (TestWebKitAPI::TEST):
        (respondWithChallengeThenOK): Deleted.
        (credentialWithIdentityAndKeychainPath): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):
        (readRequest): Deleted.
        (writeResponse): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::respondWithChallengeThenOK): Deleted.

2019-06-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix build warnings in TestWebKitAPIInjectedBundle

        System headers are being included without SYSTEM again here.

        * TestWebKitAPI/PlatformGTK.cmake:

2019-06-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSLock should be WebThread aware
        https://bugs.webkit.org/show_bug.cgi?id=198911

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/JSLockTakesWebThreadLock.mm: Added.
        (TestWebKitAPI::TEST):

2019-06-18  Keith Miller  <keith_miller@apple.com>

        webkit-patch should allow for a bugzilla url not just bugzilla id
        https://bugs.webkit.org/show_bug.cgi?id=198972

        Reviewed by Dewei Zhu.

        When prompting for a bugzilla id or a new title we should also
        allow for a bugzilla url.

        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        (PromptForBugOrTitle.run):

2019-06-18  David Quesada  <david_quesada@apple.com>

        REGRESSION: _WKDownload.OriginatingWebView and _WKDownload.CrashAfterDownloadDidFinishWhenDownloadProxyHoldsTheLastRefOnWebProcessPool failing
        https://bugs.webkit.org/show_bug.cgi?id=198954
        rdar://problem/51711556

        Reviewed by Alex Christensen.

        For these tests, kill the web process after the download starts. This makes the deallocation
        of the download-originating web views, which these tests depend on, more reliable.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
        (-[WaitUntilDownloadCanceledDelegate _downloadDidStart:]):

2019-06-18  Dan Bernstein  <mitz@apple.com>

        Revert workaround for bug 198904 from run-webkit-archive
        https://bugs.webkit.org/show_bug.cgi?id=198931

        Reviewed by Alexey Proskuryakov.

        Reverted r245965, now that the load commands in the XPC service binaries make them correctly
        pick up the built frameworks.

        * WebKitArchiveSupport/run-webkit-archive:
        (set_dyld_framework_path):

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

        -[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=198854
        <rdar://problem/51386058>

        Reviewed by Geoffrey Garen.

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

2019-06-17  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak][JHBuild] Update build environments to use WPEBackend-fdo 1.3.1
        https://bugs.webkit.org/show_bug.cgi?id=198831

        Reviewed by Žan Doberšek.

        * flatpak/org.webkit.WPEModules.yaml: Bump versions of libwpe and WPEBackend-fdo to 1.3.1
        * wpe/jhbuild.modules: Ditto.
        * wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Removed.
        * wpe/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Removed.

2019-06-17  Jiewen Tan  <jiewen_tan@apple.com>

        Move SOAuthorization from WebKitAdditions to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=198874
        <rdar://problem/47573431>

        Reviewed by Brent Fulgham.

        This patch moves all SOAuthorization tests from WebKitAdditions to WebKit.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm: Added.
        (-[TestSOAuthorizationNavigationDelegate init]):
        (-[TestSOAuthorizationNavigationDelegate webView:didFinishNavigation:]):
        (-[TestSOAuthorizationNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[TestSOAuthorizationNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[TestSOAuthorizationViewController viewDidAppear]):
        (-[TestSOAuthorizationViewController viewDidDisappear]):
        (overrideCanPerformAuthorizationWithURL):
        (overrideSetDelegate):
        (overrideBeginAuthorizationWithURL):
        (overrideCancelAuthorization):
        (overrideAddObserverForName):
        (overrideIsURLFromAppleOwnedDomain):
        (resetState):
        (configureSOAuthorizationWebView):
        (generateHtml):
        (checkAuthorizationOptions):
        (TestWebKitAPI::TEST):

2019-06-17  Brent Fulgham  <bfulgham@apple.com>

        Ensure ITP state is relayed to Network Process on restart
        https://bugs.webkit.org/show_bug.cgi?id=198797
        <rdar://problem/51646944>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (cleanupITPDatabase): Added.
        (TEST:EnableDisableITP): Update to use cleanup method.
        (TEST:NetworkProcessRestart): Added.

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

        New EWS can't process patches larger than 640kb
        https://bugs.webkit.org/show_bug.cgi?id=198851

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/master.cfg: Increase the patch size limit to 100 MB.

2019-06-17  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add macOS Catalina, iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=198492

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Catalina.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Catalina@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        * BuildSlaveSupport/ews-build/steps.py:
        * Scripts/webkitpy/common/version_name_map.py:
        * Scripts/webkitpy/common/version_name_map_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2019-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK] Bump WPEBackend-fdo requirement to 1.3.1

        * gtk/jhbuild.modules:
        * gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Removed.
        * gtk/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Removed.

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (325 new tests -> 1198).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-16  Darin Adler  <darin@apple.com>

        Rename AtomicString to AtomString
        https://bugs.webkit.org/show_bug.cgi?id=195276

        Reviewed by Michael Catanzaro.

        * many files: Let do-webcore-rename do the renaming.

        * Scripts/do-webcore-rename: Updated with a list of all the identifiers
        that mention "atomic string" and changed them to instead say "atom string".

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Unreviewed test gardening.

        Unsupported alignments.

        fast/inline/absolute-positioned-inline-in-centred-block.html -align: center
        fast/borders/empty-outline-border-assert.html -vertical-align: super
        css2.1/20110323/vertical-align-boxes-001.htm - vertical-align: middle

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-15  Youenn Fablet  <youenn@apple.com>

        WPT test importer WTR option reader should not throw if the file is not proper UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=198780

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter._webkit_test_runner_options):
        In case the test file cannot be read as text, consider that there is no WTR option.

2019-06-14  Youenn Fablet  <youenn@apple.com>

        WebResourceLoadStatisticsStore should not use its network session if invalidated
        https://bugs.webkit.org/show_bug.cgi?id=198814

        Reviewed by Geoffrey Garen.

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

2019-06-14  Youenn Fablet  <youenn@apple.com>

        import-w3c-tests should respect WEBKIT_OUTPUTDIR
        https://bugs.webkit.org/show_bug.cgi?id=198682
        <rdar://problem/51536931>

        Reviewed by Jonathan Bedard.

        Check for WEBKIT_OUTPUTDIR environment variable to compute the w3c-tests folder.
        Made some refactoring to also teach WPTPaths users about WEBKIT_OUTPUTDIR.

        * Scripts/webkitpy/common/webkit_finder.py:
        (WebKitFinder.path_from_webkit_outputdir):
        * Scripts/webkitpy/w3c/common.py:
        (WPTPaths):
        (WPTPaths.checkout_directory):
        (WPTPaths.wpt_checkout_path):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (test_checkout_directory):

2019-06-13  Antoine Quint  <graouts@apple.com>

        REGRESSION (r246103) [ Mojave+ WK1 ] Layout Test scrollbars/scrollbar-iframe-click-does-not-blur-content.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=198800
        <rdar://problem/51679634>

        Reviewed by Tim Horton.

        We didn't detect an NSScroller in a sub-frame due to WebHTMLView's implementation of -[NSView hitTest:]. We now use a private method
        which lets us use the default implementation and correctly returns an NSScroller in a sub-frame.

        * DumpRenderTree/mac/EventSendingController.mm:
        (eventPressedMouseButtonsSwizzlerForViewAndEvent):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):

2019-06-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][WebKitTestRunner] pixel image dump outputs blank images
        https://bugs.webkit.org/show_bug.cgi?id=198820

        Reviewed by Ross Kirsling.

        WebView window paints nothing because it is moved out of the
        screen. Send WM_PRINT with memory DC instead of WM_PAINT as well
        as DumpRenderTree does.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Send WM_PRINT instead of BitBlt.

2019-06-13  Tim Horton  <timothy_horton@apple.com>

        Make it possible for validate-committer-lists to dump a mailmap file
        https://bugs.webkit.org/show_bug.cgi?id=198517

        Reviewed by Simon Fraser.

        Mailmaps wildly improve the output of various Git tools, including
        `git shortlog -sne`, mapping committers to our canonical name/email pair.

        * Scripts/validate-committer-lists:
        (CommitterListFromGit):
        (CommitterListBugzillaChecker.print_committers_with_invalid_bugzilla_emails):
        Add some missing legacy username mappings.

        (dump_mailmap):
        (dump_mailmap.format_email):
        (dump_mailmap.format_email_with_gitsvn_uuid):
        (dump_mailmap.map_emails_to_legacy_username):
        (main):
        Add `validate-committer-lists --dump-mailmap`, which generates
        one given committers.json and the existing mapping of legacy username
        to email addresses that exists in validate-committer-lists.

2019-06-12  Aakash Jain  <aakash_jain@apple.com>

        Replace double-quotes with single quotes in loadConfig.py
        https://bugs.webkit.org/show_bug.cgi?id=198792

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

22019-06-11  Brent Fulgham  <bfulgham@apple.com>

        Add mechanism and test case to check if ITP is active
        https://bugs.webkit.org/show_bug.cgi?id=198694
        <rdar://problem/51557704>

        Reviewed by Youenn Fablet.

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

2019-06-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Deprecate WebSQL APIs
        https://bugs.webkit.org/show_bug.cgi?id=195011

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataDatabases):

2019-06-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Enable hyperlink auditing
        https://bugs.webkit.org/show_bug.cgi?id=197845

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2019-06-11  Keith Rollin  <krollin@apple.com>

        Open up xcfilelist processing to more platforms
        https://bugs.webkit.org/show_bug.cgi?id=198675
        <rdar://problem/51533238>

        Reviewed by Jonathan Bedard.

        Now that it's been tested, add AppleTV{OS,Simulator} to the set of
        platforms on which to perform xcfilelist generation/updating.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):

2019-06-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Fix device ASan reporting, add testing for report configurations
        https://bugs.webkit.org/show_bug.cgi?id=198756

        Reviewed by Aakash Jain.

        ASan results were reporting an incorrect style. This indicates we need to be testing this upload
        configuration thoroughly in webkitpy.

        * Scripts/webkitpy/port/config.py:
        (clear_cached_configuration): Clearing configurations should clear the ASan cache as well.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.configuration_for_upload): Add ASan as style.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        (IOSDeviceTest.test_default_upload_configuration):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_default_upload_configuration):
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_asan_upload_configuration):
        * Scripts/webkitpy/port/port_testcase.py:
        (test_default_upload_configuration):
        (test_debug_upload_configuration):
        (test_asan_upload_configuration):
        (test_guard_malloc_configuration):
        * Scripts/webkitpy/port/watch_simulator_unittest.py:
        (WatchSimulatorTest):
        (WatchSimulatorTest.test_default_upload_configuration):

2019-06-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        tu-berlin university email web interface (Outlook Web App) goes directly to the light version instead of the normal web app
        https://bugs.webkit.org/show_bug.cgi?id=198749

        Reviewed by Carlos Garcia Campos.

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

2019-06-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Quotes are always inserted as smart quotes on stackblitz.com, causing compilation errors
        https://bugs.webkit.org/show_bug.cgi?id=198735
        <rdar://problem/51557159>

        Reviewed by Megan Gardner.

        Add a test to verify that spellcheck="false" disables smart quotes and dashes, but any other value defers to the
        user's preferences by using UITextSmartQuotesTypeDefault and UITextSmartDashesTypeDefault.

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

2019-06-11  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, add myself to the JavaScriptCore watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2019-06-11  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, change my status to be a WebKit reviewer

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

2019-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use new exported image API from fdo backend
        https://bugs.webkit.org/show_bug.cgi?id=198558

        Reviewed by Philippe Normand.

        * WebKitTestRunner/PlatformWPE.cmake: Do not find fdo backend and libxkb again here, since WKTR depends on
        WPEToolingBackends that already depends on fdo backend and libxkb
        * wpe/backends/CMakeLists.txt: Bump fdo requirements to 1.3.0 version.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::createSnapshot):
        (WPEToolingBackends::HeadlessViewBackend::performUpdate):
        (WPEToolingBackends::HeadlessViewBackend::displayBuffer):
        * wpe/backends/HeadlessViewBackend.h:
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::initialize):
        * wpe/backends/ViewBackend.h:
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::displayBuffer):
        * wpe/backends/WindowViewBackend.h:

2019-06-10  Dewei Zhu  <dewei_zhu@apple.com>

        Extend run-benchmark to allow diagnosing before closing browser on test failure.
        https://bugs.webkit.org/show_bug.cgi?id=198729

        Reviewed by Ryosuke Niwa.

        Add '--diagnose-directory' option to store diagnose information when test failed.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.diagnose_test_failure): Add default no-op function to base class.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Added '--diagnose-directory' option.
        (parse_args):
        (run_benchmark_plan):
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        (WebDriverBenchmarkRunner._run_one_test): Added 'diagnose_test_failure' invocation on test failure.
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner.__init__):
        (WebServerBenchmarkRunner._run_one_test): Added 'diagnose_test_failure' invocation on test failure.

2019-06-10  Sam Weinig  <weinig@apple.com>

        Remove Dashboard support
        https://bugs.webkit.org/show_bug.cgi?id=198615

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setUseDashboardCompatibilityModeCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setUseDashboardCompatibilityMode): Deleted.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseDashboardCompatibilityMode): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-06-10  Alexey Proskuryakov  <ap@apple.com>

        Tool binaries like WebKitTestRunner have too aggressive stripping, resulting in non-symbolicated crash logs
        https://bugs.webkit.org/show_bug.cgi?id=198616
        rdar://problem/36386573

        Reviewed by David Kilzer.

        Adding an explicit STRIP_STYLE to appropriate xcconfigs.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig:
        * ImageDiff/cg/Configurations/ImageDiff.xcconfig:
        * MiniBrowser/Configurations/MiniBrowser.xcconfig:
        * MobileMiniBrowser/Configurations/MobileMiniBrowser.xcconfig:
        * TestWebKitAPI/Configurations/TestWTF.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

2019-06-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] fast/xsl tests are flaky when run after certain viewport shrink-to-fit tests
        https://bugs.webkit.org/show_bug.cgi?id=198699
        <rdar://problem/50501718>

        Reviewed by Simon Fraser.

        Add logic to platformResetPreferencesToConsistentValues, to reset the "ShouldIgnoreMetaViewport" preference.
        While this is already being adjusted in platformConfigureViewForTest using the correct, TestOptions, this might
        happen too late, allowing the shrink-to-fit-content heuristic to unexpectedly kick in on tests where testing
        viewport parameters are used.

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

2019-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] UnlinkedCodeBlock should be eventually jettisoned in VM mini mode
        https://bugs.webkit.org/show_bug.cgi?id=198023

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2019-06-10  Timothy Hatcher  <timothy@apple.com>

        Integrate dark mode support for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=198687
        rdar://problem/51545643

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        webkitpy: xcrun simctl spawn *** launchctl print system output is not utf-8
        https://bugs.webkit.org/show_bug.cgi?id=198723

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Do not decode 'print system' output, it's already ASCII.

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

        [WKHTTPCookieStore getAllCookies:] may return duplicate cookies
        https://bugs.webkit.org/show_bug.cgi?id=198635
        <rdar://problem/46010232>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (areCookiesEqual):
        (TEST):

2019-06-10  Adrian Perez de Castro  <aperez@igalia.com>

        [JHBuild] Bump shared-mime-info to version ≥ 1.6
        https://bugs.webkit.org/show_bug.cgi?id=198714

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Bump shared-mime-info version to 1.10.
        * gtk/patches/shared-mime-info-xht-glob.patch: Removed.
        * gtk/patches/shared-mime-info-xhtml-magic.patch: Removed.

2019-06-10  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] Port to new wpe_fdo_egl_exported_image API
        https://bugs.webkit.org/show_bug.cgi?id=198713

        Reviewed by Carlos Garcia Campos.

        * flatpak/org.webkit.WPEModules.yaml: Include wpebackend-fdo
        patches currently used in JHBuild.

2019-06-10  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][Flatpak] webkit-build fails due to missing libwpe in Flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=198711

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.GTK.yaml: Also include modules from
        org.webkit.WPEModules.yaml, which brings in libwpe and WPEBackend-fdo

2019-06-10  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r246148. Add another WPEBackend-fdo patch that
        avoids double-free condition that's causing bots to exit early.

        * gtk/jhbuild.modules:
        * gtk/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Added.

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

        [WinCairo][MiniBrowser] Disable MediaCapabilities until it's ready
        https://bugs.webkit.org/show_bug.cgi?id=198655

        Reviewed by Ross Kirsling.

        MediaCapabilities is enabled by default for WK2, but WinCairo
        doesn't implemented yet. Disable it in MiniBrowser.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):

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

        [iOS] The default application name for user agent when requesting desktop content is still "Mobile/15E148"
        https://bugs.webkit.org/show_bug.cgi?id=198693
        <rdar://problem/51555371>

        Reviewed by Tim Horton.

        Augment an existing API test to exercise three additional scenarios:
            -   The web view configuration's application name is never set; the default should not include
                "Mobile/15E148" in desktop mode.
            -   The application name is explicitly set to nil; the default application name should still not include
                "Mobile/15E148".
            -   The application name is explicitly set to the default value, "Mobile/15E148". WKWebView should honor
                this when generating the user agent, even in desktop mode.

        * TestWebKitAPI/ios/PreferredContentMode.mm:
        (TestWebKitAPI::setUpWebViewForPreferredContentModeTestingWithoutNavigationDelegate):
        (TestWebKitAPI::setUpWebViewForPreferredContentModeTesting):
        (TestWebKitAPI::TEST):

2019-06-08  Zalan Bujtas  <zalan@apple.com>

        [LFC] Unreviewed test gardening.

        Remove rtl tests. They were mistakenly marked as pass.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r244182) [WK1]: Page updates should always scheduleCompositingLayerFlush() immediately
        https://bugs.webkit.org/show_bug.cgi?id=198664

        Reviewed by Simon Fraser.

        Delete repeated entries which were submitted by mistake.

        * Tracing/SystemTracePoints.plist:

2019-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow clients to vend custom -inputView and -inputAccessoryView by overriding WKWebView methods
        https://bugs.webkit.org/show_bug.cgi?id=198631
        <rdar://problem/51505431>

        Reviewed by Tim Horton.

        Add an API test that overrides -[WKWebView inputView] and -[WKWebView inputAccessoryView].

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[CustomInputWebView initWithFrame:configuration:inputView:inputAccessoryView:]):
        (-[CustomInputWebView inputView]):
        (-[CustomInputWebView inputAccessoryView]):
        (TestWebKitAPI::TEST):

2019-06-07  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Pretty-print all kinds of Documents
        https://bugs.webkit.org/show_bug.cgi?id=198620

        Reviewed by Simon Fraser.

        Register formatters for all classes derived from WebCore::Document so we get nice summaries
        without having to drill down in Xcode- or casting- to the base class, Document.

        Older LLDB versions use to do this automatically, but this functionality was removed in newer
        versions:
            [[
                Warning: previous versions of LLDB defined cascading to mean not only going through typedef
                chains, but also through inheritance chains. This feature has been removed since it
                significantly degrades performance. You need to set up your formatters for every type in
                inheritance chains to which you want the formatter to apply.
            ]]
            <https://lldb.llvm.org/use/variable.html> (as of 06/06/2019)

        * lldb/lldb_webkit.py:
        (__lldb_init_module):

2019-06-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support reporting results for uncommon test configurations
        https://bugs.webkit.org/show_bug.cgi?id=198662
        <rdar://problem/51524128>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Override wk1 and wk2 flavors with specified flavor.
        * Scripts/webkitpy/port/base.py:
        (Port.configuration_for_upload): Set flavor based on options.
        * Scripts/webkitpy/results/options.py:
        (upload_options): Add result-report-flavor option.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Set flavor based on options.

2019-06-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] At least 6 API tests are failing due to an exception when writing NSAttributedString to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=198641
        <rdar://problem/51266310>

        Reviewed by Tim Horton.

        Work around a bug in a lower-level framework, which currently prevents NSAttributedStrings from being written to
        UIPasteboard by way of -[NSItemProvider registerObject:visibility:]. This is because, when saving a
        representation of "public.rtfd" to disk, the default suggested filename (determined using CoreServices APIs
        _UTTypeCreateSuggestedFilename and UTTypeCopyDescription) ends up being nil; UIKit then subsequently tries to
        append nil as a path component using -URLByAppendingPathComponent:, which throws an exception. This only
        reproduces on iOS simulator.

        To work around this for the time being, simply avoid writing a representation of "public.rtfd" to disk. This
        representation is actually ignored by most clients anyways (including WebKit), in favor of using
        "com.apple.flat-rtfd".

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (applyWorkaroundToAllowWritingAttributedStringsToItemProviders):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):

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

        REGRESSION(r244857): [GTK][WPE] Many tests are no longer run in the bots after r244857
        https://bugs.webkit.org/show_bug.cgi?id=198607

        Reviewed by Michael Catanzaro.

        Since r244857 several test executables are compiled in the base tests directory instead of using their own sub
        directory. Our scripts to run the tests rely on the tests location to decide whether to run them or not, or
        determine the type of the tests.

        * Scripts/run-gtk-tests:
        (GtkTestRunner): Rename TEST_DIRS as TEST_TARGETS and use the executable names for tests not in a subdirectory.
        (GtkTestRunner._setup_testing_environment): Fix TestWebKitAccessibility directory name.
        (GtkTestRunner.is_glib_test): Use the test name for the ones not using a subdirectory.
        (GtkTestRunner.is_google_test): Ditto.
        * Scripts/run-wpe-tests:
        (WPETestRunner): Rename TEST_DIRS as TEST_TARGETS and use the executable names for tests not in a subdirectory.
        (WPETestRunner.is_glib_test): Use the test name for the ones not using a subdirectory.
        (WPETestRunner.is_google_test): Ditto.
        * glib/api_test_runner.py:
        (TestRunner): Rename TEST_DIRS as TEST_TARGETS.
        (TestRunner._get_tests): Handle test targets which can now contain directories and executables.

2019-06-06  Keith Rollin  <krollin@apple.com>

        Remove SSL-based tests from TestWebKitAPI on some configurations
        https://bugs.webkit.org/show_bug.cgi?id=198551
        <rdar://problem/51424996>

        Reviewed by Jonathan Bedard.

        Not all platforms have SSL handy, so don't include SSL-based tests on
        those platforms.

        * TestWebKitAPI/TCPServer.cpp:
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        * TestWebKitAPI/config.h:

2019-06-06  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] TypeError: cannot concatenate 'str' and 'int' objects when prettify SecurityOrigin with
        non-default port number
        https://bugs.webkit.org/show_bug.cgi?id=198618

        Reviewed by Brent Fulgham.

        WebCoreSecurityOriginProvider.port() returns an int data type. We need to explicitly convert this to
        a string before we concatenate it with another string when building the string representation
        for the WebCore::SecurityOrigin object. Otherwise, Python complains that we are concatenating a str
        with an int and we don't get a pretty-printed representation for WebCore::SecurityOrigin.

        * lldb/lldb_webkit.py:
        (WebCoreSecurityOriginProvider.to_string): Call str() on the port before concatenting it.

2019-06-06  Jonathan Bedard  <jbedard@apple.com>

        Remove obsolete TOOLCHAINS overrides from as asan.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=198613

        Reviewed by Alexey Proskuryakov.

        * asan/asan.xcconfig: XCBuild doesn't support overriding toolchains.

2019-06-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpluginhost: Support ASan as a style
        https://bugs.webkit.org/show_bug.cgi?id=198586
        <rdar://problem/51459088>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/base.py:
        (Port.configuration_for_upload): Add ASan as a style.
        * Scripts/webkitpy/port/config.py:
        (Config._read_configuration):
        (Config):
        (Config.asan): Add property to check if the ASan configuration is active.
        * Scripts/webkitpy/port/config_unittest.py:
        (ConfigTest.test_default_configuration__scripterror):
        (ConfigTest):
        (ConfigTest.test_asan):
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Add Asan as a style.

2019-06-06  Alexey Proskuryakov  <ap@apple.com>

        block-spammers tool doesn't block e-mail
        https://bugs.webkit.org/show_bug.cgi?id=198570

        Reviewed by Jonathan Bedard.

        * Scripts/block-spammers: (disable_user): Corrected the parameters, Bugzilla doesn't
        recognize "false" here. Also, request body is unnecessary.

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

        [GTK][WPE] Enable PSON
        https://bugs.webkit.org/show_bug.cgi?id=194979

        Reviewed by Žan Doberšek.

        Add WPEBackend-fdo patch required for PSON to work. It can be removed once we have a new version to depend on.

        * gtk/jhbuild.modules:
        * gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Added.

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

        [macOS] Stop calling -[NSDraggingItem setItem:]
        https://bugs.webkit.org/show_bug.cgi?id=198588
        <rdar://problem/48297453>

        On macOS Catalina, use -[NSDraggingItem _initWithItem:] instead.

        Reviewed by Wenson Hsieh.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Fixed up file paths in the
        TestRunnerShared group.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        Changed to call -[NSDraggingItem _initWithItem:] when available.

        * TestRunnerShared/spi/AppKitTestSPI.h: Renamed from
        Tools/DumpRenderTree/mac/AppKitTestSPI.h and moved NSDraggingItem internal interface
        declarations here from DumpRenderTree.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Added TestRunnerShared/spi/AppKitTestSPI.h.

        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        Changed to call -[NSDraggingItem _initWithItem:] when available.

2019-06-05  Jer Noble  <jer.noble@apple.com>

        -[WKWebView _suspendAllMediaPlayback] does not persist across navigation.
        https://bugs.webkit.org/show_bug.cgi?id=198585

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSuspendAllMediaPlayback.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html:

2019-06-05  Alex Christensen  <achristensen@webkit.org>

        Re-enable safe browsing in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=196161
        <rdar://problem/49171413>

        Reviewed by Ryosuke Niwa.

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

== Rolled over to ChangeLog-2019-06-05 ==
