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