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