2019-05-15  Youenn Fablet  <youenn@apple.com>

        Constant crashes under WebPage::isThrottleable() after r245299
        https://bugs.webkit.org/show_bug.cgi?id=197902
        <rdar://problem/50793796>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-05-15  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] misc cleanups and bumps
        https://bugs.webkit.org/show_bug.cgi?id=197913

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Bump to libva 2.4.1 and switch to Meson.
        * gtk/jhbuild.modules: Bump to Brotli 1.0.5 and Wayland 1.16.

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

        Flaky API Test: TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses
        https://bugs.webkit.org/show_bug.cgi?id=195102
        <rdar://problem/48456786>

        Reviewed by Alex Christensen.

        Try to wait longer for the number of processes to reach the expected number
        and before failing.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-05-15  Alex Christensen  <achristensen@webkit.org>

        Allow NSFileCoordinator to be called from WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=197895
        <rdar://problem/50107679>

        Reviewed by Brent Fulgham.

        Add a unit test that verifies calling the block succeeds.

        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLsPlugin.mm:
        (-[AdditionalReadAccessAllowedURLsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):

2019-05-14  Andy Estes  <aestes@apple.com>

        [Apple Pay] Payment APIs should be completely disabled in web views into which clients have injected user scripts
        https://bugs.webkit.org/show_bug.cgi?id=197751
        <rdar://problem/50631563>

        Reviewed by Alex Christensen.

        Added new API tests.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
        (-[TestApplePayScriptMessageHandler initWithAPIsAvailableExpectation:canMakePaymentsExpectation:]):
        (-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        (-[TestApplePayScriptMessageHandler initWithExpectation:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html:

2019-05-14  Youenn Fablet  <youenn@apple.com>

        A service worker process should app nap when all its clients app nap
        https://bugs.webkit.org/show_bug.cgi?id=185626
        <rdar://problem/46785908>

        Reviewed by Alex Christensen.

        Allow to enable app nap through test header.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-05-14  Commit Queue  <commit-queue@webkit.org>

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

        Broke API Test TestWebKitAPI.Challenge.ClientCertificate
        (Requested by aakashjain on #webkit).

        Reverted changeset:

        "Add a unit test for client certificate authentication"
        https://bugs.webkit.org/show_bug.cgi?id=197800
        https://trac.webkit.org/changeset/245281

2019-05-14  Youenn Fablet  <youenn@apple.com>

        Add support for webkit-test-runner options to WPT importer
        https://bugs.webkit.org/show_bug.cgi?id=197826

        Reviewed by Alex Christensen.

        In case of overwriting an existing test, check if the existing test
        contains a <!-- webkit-test-runner --> comment and insert it back if
        needed in the new test.

        For exporter, forbid creating a WPT PR if there are changes containing
        the webkit-test-runner string.

        * Scripts/webkitpy/w3c/test_converter.py:
        (convert_for_webkit):
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.add_webkit_test_runner_options_if_needed):
        (_W3CTestConverter.handle_starttag):
        (_W3CTestConverter.handle_comment):
        (_W3CTestConverter.handle_decl):
        (_W3CTestConverter.handle_pi):
        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter.write_git_patch_file):
        (WebPlatformTestExporter.make_pull_request):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.webkit_test_runner_options):
        (TestImporter):
        (TestImporter.add_webkit_test_runner_options_to_content):
        (TestImporter.copy_html_file):
        (TestImporter.write_html_template):
        (TestImporter.write_html_files_for_templated_js_tests):
        (TestImporter.import_tests):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (test_manual_slow_test):
        (test_webkit_test_runner_options):

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

        [ews-app] Status bubble should turn orange when any build step fails
        https://bugs.webkit.org/show_bug.cgi?id=197812

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Turn status-bubble orange if there is any failed step in the on-going build.
        (StatusBubble._does_build_contains_any_failed_step): Method to check if build contains any failed step.

2019-05-14  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-05-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Adding support for HEIF-sequence ('public.heics') images
        https://bugs.webkit.org/show_bug.cgi?id=197384

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        Parse the new webkit-test-runner paramter: additionalSupportedImageTypes.
        Make DRT call setAdditionalSupportedImageTypesForTesting() before starting
        the test.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::stringForKey):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::createTestSettingsDictionary):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        Parse the new webkit-test-runner paramter: additionalSupportedImageTypes.
        Make WTR call setAdditionalSupportedImageTypesForTesting() before starting
        the test.

2019-05-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress Watchpoint size by using enum type and Packed<> data structure
        https://bugs.webkit.org/show_bug.cgi?id=197730

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Packed.cpp: Added.
        (TestWebKitAPI::TEST):

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

        Unreviewed, fix ProcessSwap.OpenerLinkAfterAPIControlledProcessSwappingOfOpener API test

        It became flaky after r245198.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-05-10  Youenn Fablet  <youenn@apple.com>

        A service worker instance should be terminated when its SWServer is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=197801
        <rdar://problem/50587270>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        Do not wait until requestPermission() is called to fire deviceorientation events if permission was already granted
        https://bugs.webkit.org/show_bug.cgi?id=197750

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2019-05-10  Keith Miller  <keith_miller@apple.com>

        Remove legacy test262 import script
        https://bugs.webkit.org/show_bug.cgi?id=197788

        Reviewed by Yusuke Suzuki.

        import-test262-tests doesn't work anymore. We should be using test262-import instead.

        * Scripts/import-test262-tests: Removed.

2019-05-10  Charlie Turner  <cturner@igalia.com>

        [WPE] Forward libepoxy cflags
        https://bugs.webkit.org/show_bug.cgi?id=197784

        Reviewed by Žan Doberšek.

        Patch by Zan Dobersek.

        * wpe/backends/CMakeLists.txt: This is required to keep
        -DMESA_EGL_NO_X11_HEADERS in the build, if we don't do this, EGL ends
        up trying to include X11 headers even when they're not present in the
        environment.

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix a bunch of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=197785

        Reviewed by Don Olmstead.

        Add preprocessor guards to avoid -Wunused-function warnings.

        * TestWebKitAPI/Tests/WebCore/FloatRect.cpp:
        * TestWebKitAPI/Tests/WebCore/IntRect.cpp:
        * TestWebKitAPI/Tests/WebCore/TransformationMatrix.cpp:

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add webkit_frame_get_id() API
        https://bugs.webkit.org/show_bug.cgi?id=197270

        Reviewed by Carlos Garcia Campos.

        This was hard, but I added a test to verify that two different WebKitFrames of the same
        WebKitWebPage return two different frame IDs.

        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::willSubmitFormCallback):
        (WebKitFrameTest::testSubframe):
        (registerTests):
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameSubframe):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (willSubmitFormCallback):
        * TestWebKitAPI/Tests/WebKitGLib/resources/form-in-frame.html: Added.
        * TestWebKitAPI/Tests/WebKitGLib/resources/webkitglib-tests.gresource.xml:

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add WebKitWebPage::did-associate-form-controls-for-frame and deprecate original did-associate-form-controls
        https://bugs.webkit.org/show_bug.cgi?id=197271

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (formControlsAssociatedForFrameCallback):
        (pageCreatedCallback):
        (formControlsAssociatedCallback): Deleted.

2019-05-10  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak] Use the safe PyYAML loader if available
        https://bugs.webkit.org/show_bug.cgi?id=197771

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (load_manifest): Use yaml.safe_load() if available, with yaml.load()
        still used as fallback when the former is not provided by the module.

2019-05-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        WinCairo WebKitTestRunner should take platform/wk2/TestExpectations into account
        https://bugs.webkit.org/show_bug.cgi?id=197734

        Reviewed by Don Olmstead.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort._search_paths): Add 'wk2' and
        additional_platform_directory to paths as well as other ports do.

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

        [iOS] Numpad comma key has incorrect keyIdentifier property
        https://bugs.webkit.org/show_bug.cgi?id=197753
        <rdar://problem/50636274>

        Reviewed by Brent Fulgham.

        Recognize "numpadComma" and return the appropriate HID usage code.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

2019-05-09  Eric Carlson  <eric.carlson@apple.com>

        Refine AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=197742
        <rdar://problem/50590818>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::TEST):

2019-05-09  Alex Christensen  <achristensen@webkit.org>

        Remove unnecessary test SPI after r244883
        https://bugs.webkit.org/show_bug.cgi?id=197575

        Reviewed by Tim Horton.

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

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

        [ews-app] Add migrations file to repository
        https://bugs.webkit.org/show_bug.cgi?id=197729

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/migrations/0001_initial.py: Added. Auto-generated by Django based on models' information.

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

        [ews-build] Fix formatting issues and typos
        https://bugs.webkit.org/show_bug.cgi?id=197737

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Removed extra empty line.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunWebKitPerlTests): Fixed typo.
        * BuildSlaveSupport/ews-app/ews/models/step.py:
        (Step.save_step): Changed log level to info so that it is logged in production.

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

        [ews-app] Production and Development env should configure DEBUG appropriately
        https://bugs.webkit.org/show_bug.cgi?id=197700

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2019-05-09  Xan López  <xan@igalia.com>

        [CMake] Detect SSE2 at compile time
        https://bugs.webkit.org/show_bug.cgi?id=196488

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Do not add SSE2 flags here
        for x86 builds. This is now handled in WebKitCompilerFlags.cmake.

2019-05-08  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Update dependencies to use libwpe + WPEBackend-fdo 1.3.0
        https://bugs.webkit.org/show_bug.cgi?id=197697

        Reviewed by Žan Doberšek.

        * flatpak/org.webkit.WPEModules.yaml: Bump version and update checksums.
        * wpe/jhbuild.modules: Ditto.

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=197676

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake:
        Remove unnecessary library linkage.

2019-05-08  Stephan Szabo  <stephan.szabo@sony.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] build-webkit should be ready for Visual Studio 2019
        https://bugs.webkit.org/show_bug.cgi?id=196622

        Reviewed by Ross Kirsling.

        1. Accommodated to the new msbuild.exe location of VS 2019.
        2. Removed the hard coded "Visual Studio 15" generator.

        build-webkit is going to choose a Visual Studio generator version
        matching with the latest installed VS. If you invoke vcvars.bat
        before build-webkit, it chooses the corresponding Visual Studio
        generator version by cheking 'VisualStudioVersion' env var which
        is set by vcvars.bat.

        * Scripts/webkitdirs.pm: Renamed $vcBuildPath to $msBuildPath. Removed $msBuildInstallDir.
        (msBuildPath): When looking for MSBuild, look in
        "MSBuild\Current\bin" (the new expected location) and fallback
        to "MSBuild\15.0\bin" if we can't find an MSBuild.exe in the
        first location.
        (msBuildInstallDir): Renamed to msBuildPath.
        (generateBuildSystemFromCMakeProject): Use -A switch to specify x64.
        Add -G "Visual Studio " switch if a env var 'VisualStudioVersion'

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Update port options
        https://bugs.webkit.org/show_bug.cgi?id=197723

        Reviewed by Ross Kirsling.

        ICU headers were missing from TestWTF.

        * TestWebKitAPI/PlatformPlayStation.cmake:

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

        Don't crash when DOMNode.addEventListener:listener:useCapture: is called with a nil listener
        https://bugs.webkit.org/show_bug.cgi?id=197712
        <rdar://problem/50429770>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitLegacy/mac/DeallocWebViewInEventListener.mm:
        (TestWebKitAPI::TEST):

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

        Change my status to be a WebKit reviewer.

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

2019-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244952.

        Caused inspector to appear blank.

        Reverted changeset:

        "Web Inspector: Provide UIString descriptions to improve
        localizations"
        https://bugs.webkit.org/show_bug.cgi?id=195132
        https://trac.webkit.org/changeset/244952

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

        TestRunnerWKWebView's menu callbacks should be cleared upon UI script completion
        https://bugs.webkit.org/show_bug.cgi?id=197685

        Reviewed by Alex Christensen.

        Fixes a bug in the test runner wherein didShowMenuCallback and didHideMenuCallback are not reset upon UI script
        completion. See LayoutTests/ChangeLog for more details.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformClearAllCallbacks):

2019-05-07  Oriol Brufau  <obrufau@igalia.com>

        Unreviewed. Add myself as a committer.

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

2019-05-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245038.

        Breaks internal builds.

        Reverted changeset:

        "Add SPI to set a list of hosts to which to send custom header
        fields cross-origin"
        https://bugs.webkit.org/show_bug.cgi?id=197397
        https://trac.webkit.org/changeset/245038

2019-05-07  Joonghun Park  <pjh0718@gmail.com>

        Unreviewed. Add myself as a committer.

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

2019-05-07  Eric Carlson  <eric.carlson@apple.com>

        Define media buffering policy
        https://bugs.webkit.org/show_bug.cgi?id=196979
        <rdar://problem/28383861>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm: Added.
        (waitUntilBufferingPolicyIsEqualTo):
        (TEST):

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

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        (expectLegacyHeaders):
        (expectHeaders):
        (-[CustomHeaderFieldsDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]):
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.

2019-05-07  Keith Rollin  <krollin@apple.com>

        Add option to build-webkit to control whether or not XCBuild is used
        https://bugs.webkit.org/show_bug.cgi?id=197668
        <rdar://problem/50549728>

        Reviewed by Tim Horton.

        Add --[no-]xcbuild to build-webkit to force the use of XCBuild or not.
        Also update build-webkit and the makefiles with the foundation for
        automatically using XCBuild when the conditions allow it. This latter
        facility is currently turned off until Xcode fully supports building
        WebKit with XCBuild.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (XcodeOptions):
        (canUseXCBuild):

2019-05-07  Andy Estes  <aestes@apple.com>

        run-bindings-tests should test global scope constructor generation
        https://bugs.webkit.org/show_bug.cgi?id=197669

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/bindings/main.py:
        Updated to specify --testGlobalContextName and --testGlobalScopeConstructorsFile when
        invoking preprocess-idls.pl.

2019-05-07  Youenn Fablet  <youenn@apple.com>

        Flaky API Test: TestWebKitAPI.ServiceWorkers.ServiceWorkerAndCacheStorageDefaultDirectories
        https://bugs.webkit.org/show_bug.cgi?id=195997
        <rdar://problem/50509884>

        Reviewed by Chris Dumez.

        Spin test until successful.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-05-07  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak] webkit-build fails due to missing GTK2 in build environment
        https://bugs.webkit.org/show_bug.cgi?id=197352

        Reviewed by Philippe Normand.

        The Flatpak runtimes do not include GTK 2.x anymore, which means that we need
        to build it ourselves on top in order to be able to build the GTK 2.x plugin
        process.

        * flatpak/org.webkit.GTK.yaml: Add gtk2 package.

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

        [macOS] Avoid crashing the UI process when writing empty data to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=197644
        <rdar://problem/50526364>

        Reviewed by Tim Horton.

        Add a new API test to exercise a possible scenario where we may crash while writing data to the pasteboard.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:pasteboardDataForRange:]):

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

        [GTK][WPE] MiniBrowser: load about:blank for new web views in automation mode
        https://bugs.webkit.org/show_bug.cgi?id=197651

        Reviewed by Žan Doberšek.

        This is required since the process creation was delayed until something is loaded in the view.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_get_or_create_web_view_for_automation):
        * MiniBrowser/wpe/main.cpp:
        (main):

2019-05-06  Tim Horton  <timothy_horton@apple.com>

        _overrideViewportWithArguments does not work when called before loading
        https://bugs.webkit.org/show_bug.cgi?id=197638
        <rdar://problem/50505111>

        Reviewed by Wenson Hsieh.

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

2019-05-04  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510

        Reviewed by Alex Christensen.

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

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

        Temporarily disable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197619
        <rdar://problem/50507392>

        Reviewed by Alex Christensen.

        We need to perform a significant update to the generate-xcfilelist
        scripts. This work involves coordinated work with another facility. If
        the work does not occur in tandem, the build will be broken. To avoid
        this, disable the invoking of the scripts during the transition. The
        checking will be restored once the new scripts are in place.

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:

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

        Revert r244953 and r244954 because they broke internal builds.
        https://bugs.webkit.org/show_bug.cgi?id=197534

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h: Added.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

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

        Merge the three UIKitSPI.h files into a single one in PAL
        https://bugs.webkit.org/show_bug.cgi?id=197534

        Reviewed by Darin Adler.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h: Removed.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

2019-05-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Provide UIString descriptions to improve localizations
        https://bugs.webkit.org/show_bug.cgi?id=195132
        <rdar://problem/48457817>

        Reviewed by Devin Rousso.

        Allow WI.UIString to take:
        - WI.UIString(string, key, comment)
        - WI.UIString(string, comment)
        - WI.UIString(string)

        * Scripts/extract-localizable-js-strings:

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

        REGRESSION (r244897): Caret may appear wider than normal after zooming to focus an editable element
        https://bugs.webkit.org/show_bug.cgi?id=197579

        Reviewed by Tim Horton.

        Fixes a couple of flaky layout tests (ModifyInputAssistantItemBarButtonGroups and
        OverrideInputAssistantItemBarButtonGroups) by programmatically blurring focused elements and waiting for the
        input session to change, rather than relying on -resignFirstResponder and -waitForNextPresentationUpdate to
        ensure that the the focused element has been blurred.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2019-05-02  Alexey Proskuryakov  <ap@apple.com>

        Add a tool to block spammer accounts
        https://bugs.webkit.org/show_bug.cgi?id=197537

        Reviewed by Darin Adler.

        Usage: block-spammers email1 email2 ...

        The tool finds and hides all bugs and comments from this account. Before any work
        is done, these bugs and comments are displayed for confirmation.

        * Scripts/block-spammers: Added.
        (get_bugzilla_token):
        (invalidate_bugzilla_token):
        (get_user_info):
        (get_user_info_self):
        (can_use_this_tool):
        (disable_user):
        (get_bugs_created_by_user):
        (get_bugs_commented_on_by_user):
        (get_comments):
        (hide_bug):
        (hide_comments):
        (ask_yes_no):
        (sanitized_string):
        (main):

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

        run-apit-tests: Add --iterations and --repeat-each
        https://bugs.webkit.org/show_bug.cgi?id=197563

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager.run): Add --iterations and --repeat-each/
        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Duplicate the test list based on --iterations and --repeat-each.

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

        New EWS: Clicking on white bubble navigates to page with only bubbles
        https://bugs.webkit.org/show_bug.cgi?id=197520

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Disable clicking if bubble doesn't have any url.

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

        [lldb-webkit] Support adding pretty-printing for qualified types
        https://bugs.webkit.org/show_bug.cgi?id=197518

        Reviewed by Darin Adler.

        Remove all "::"s from the name of the specified type when computing the name for the Python classes
        that will provide summary and synthetic details as LLDB is not happy about registering such classes
        when they contain :: in their name.

        * lldb/lldb_webkit.py:
        (addSummaryAndSyntheticFormattersForRawBitmaskType):

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

        New EWS: patches on recently added queues listed as #1 for older bugs
        https://bugs.webkit.org/show_bug.cgi?id=197496

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._queue_position):

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

        webkit-patch --no-review upload does not submit patch to New EWS
        https://bugs.webkit.org/show_bug.cgi?id=197519
        <rdar://problem/50424887>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/tool/steps/submittoews.py:
        (SubmitToEWS.run): Submit to both old and new EWS.
        * Scripts/webkitpy/common/config/urls.py: Added url for new EWS server.
        * Scripts/webkitpy/common/net/ewsserver.py: Added.
        (EWSServer._server_url): Method to return server url.
        (EWSServer._post_patch_to_ews): Method to post patch to ews.
        (EWSServer.submit_to_ews): Method to submit the patch to ews using NetworkTransaction.
        * Scripts/webkitpy/common/net/ewsserver_mock.py: Added Mock EWS Server.
        * Scripts/webkitpy/common/net/ewsserver_unittest.py: Added unit-test for EWS Server.
        * Scripts/webkitpy/common/net/statusserver_mock.py:
        (MockStatusServer.submit_to_ews): Updated the log text.
        * Scripts/webkitpy/tool/commands/queues_unittest.py: Updated unit-tests.
        * Scripts/webkitpy/tool/commands/upload_unittest.py: Ditto.
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch.__init__): Initialize ews_server. 
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.__init__): Ditto.

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

        ASSERTION FAILED: [weakThis->m_view window] == weakThis->m_targetWindowForMovePreparation
        https://bugs.webkit.org/show_bug.cgi?id=197574
        <rdar://problem/50453181>

        Reviewed by Tim Horton.

        Add API test coverage.

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

2019-05-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Generator CodeBlock generation should be idempotent
        https://bugs.webkit.org/show_bug.cgi?id=197552

        Reviewed by Keith Miller.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/run-jsc-stress-tests:

2019-05-03  Commit Queue  <commit-queue@webkit.org>

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

        Breaks compilation of jsconly on linux, breaking compilation
        for jsc-i386-ews, jsc-mips-ews and jsc-armv7-ews (Requested by
        guijemont on #webkit).

        Reverted changeset:

        "[CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into
        WEBKIT_COPY_FILES"
        https://bugs.webkit.org/show_bug.cgi?id=197174
        https://trac.webkit.org/changeset/244881

2019-05-03  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix after r244898.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::abortModal): Add the missing (no-op) definition.

2019-05-02  Alex Christensen  <achristensen@webkit.org>

        Mark U+01C0 as a homograph of U+006C
        https://bugs.webkit.org/show_bug.cgi?id=197526
        <rdar://problem/50301904>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

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

        Add test coverage for <rdar://problem/49731231>
        https://bugs.webkit.org/show_bug.cgi?id=196730
        <rdar://problem/49731231>

        Reviewed by Ryosuke Niwa.

        Add support for testRunner.abortModal() in macOS's WebKitTestRunner in order
        to match DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::abortModal):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runModal):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::abortModal):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::abortModal):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::abortModal):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::abortModal):

2019-05-02  Christopher Reid  <chris.reid@sony.com>

        [CMake] Add support for LTO builds
        https://bugs.webkit.org/show_bug.cgi?id=188986

        Reviewed by Don Olmstead.

        Add support to configure --lto-mode with cmake builds.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-05-02  John Wilander  <wilander@apple.com>

        Make both filterForRegistrableDomains() in WebKit::NetworkProcess use WebCore::RegistrableDomain::uncheckedCreateFromHost()
        https://bugs.webkit.org/show_bug.cgi?id=197521
        <rdar://problem/49651503>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp:
        (TestWebKitAPI::TEST):
           Added a test for host strings with leading dots since they are
           often used for the domain attribute in cookies.

2019-05-02  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510

        Reviewed by Alex Christensen.

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

2019-05-02  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into WEBKIT_COPY_FILES
        https://bugs.webkit.org/show_bug.cgi?id=197174

        Reviewed by Alex Christensen.

        Make TestJSC dependent on JavaScriptCorePrivateFrameworkHeaders.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:

2019-05-02  Alex Christensen  <achristensen@webkit.org>

        Build fix for internal branch.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        RetainPtr.h was not explicitly included.

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

        webkitpy: Ignore errors when shutting down an already shutdown simulator
        <https://bugs.webkit.org/show_bug.cgi?id=197514>
        <rdar://problem/50390247>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice._shut_down):

2019-05-02  Frederic Wang  <fwang@igalia.com>

        [GTK][WPE] Disable "thin", "thick", "medium" values of mfrac@linethickness at runtime
        https://bugs.webkit.org/show_bug.cgi?id=196142

        This patch introduces some experimental runtime flag to let users
        disable MathML features that are removed from MathML Core [1]. For now,
        these features are only disabled on GTK and WPE ports.

        [1] https://mathml-refresh.github.io/mathml-core/

        Reviewed by Rob Buis.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2019-05-01  Don Olmstead  <don.olmstead@sony.com>

        TestWebKitAPI config.h should be aware of what suite is being built
        https://bugs.webkit.org/show_bug.cgi?id=196583

        Reviewed by Konstantin Tokarev.

        Migrate to WEBKIT_EXECUTABLE to define the Test* executables. As an added
        benefit the macro defines BUILDING_* for the executable which allows the includes
        of the config.h to be tailored to the test suite being built. Because of that the
        dependencies of the Test* executable are specific to the test suite which may
        speed up the build.

        Some source files were including "PlatformUtilities.h" which includes WebKit headers
        when "Utilities.h" is what was needed.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformMac.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/LineBreaking.mm:
        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        * TestWebKitAPI/config.h:

2019-05-01  Jiewen Tan  <jiewen_tan@apple.com>

        Move Document::domainIsRegisterable to SecurityOrigin::isMatchingRegistrableDomainSuffix
        https://bugs.webkit.org/show_bug.cgi?id=181950
        <rdar://problem/43357371>

        Reviewed by Brent Fulgham.

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

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

        Remove webkitpy and bindings EWS queues from dashboard
        https://bugs.webkit.org/show_bug.cgi?id=197475

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:

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

        Remove webkitpy and bindings test queues from old EWS
        https://bugs.webkit.org/show_bug.cgi?id=197468

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py:

2019-04-30  Tim Horton  <timothy_horton@apple.com>

        Fix the WebKitTestRunner build
        https://bugs.webkit.org/show_bug.cgi?id=197449
        <rdar://problem/50334169>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        (WTR::EventSenderProxy::mouseForceChanged):
        Use some SPI instead of IPI.

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

        Regression(PSON) URL scheme handlers can no longer respond asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=197426
        <rdar://problem/50256169>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme setShouldRespondAsynchronously:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        (-[PSONScheme webView:stopURLSchemeTask:]):

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

        Unreviewed, rolling out r244802.

        Caused an API test failure

        Reverted changeset:

        "Regression(PSON) URL scheme handlers can no longer respond
        asynchronously"
        https://bugs.webkit.org/show_bug.cgi?id=197426
        https://trac.webkit.org/changeset/244802

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

        Regression(PSON) URL scheme handlers can no longer respond asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=197426
        <rdar://problem/50256169>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme setShouldRespondAsynchronously:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        (-[PSONScheme webView:stopURLSchemeTask:]):

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

        Only use a related page's process if that page has not been closed yet
        https://bugs.webkit.org/show_bug.cgi?id=197393
        <rdar://problem/50302423>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-build] Enable Bindings tests queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=197424

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * BuildSlaveSupport/ews-build/config.json:

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

        [ews-build] Configure ews151 for running various tests
        https://bugs.webkit.org/show_bug.cgi?id=197419

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

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

        [ews-build] Parse and display bindings test failures
        https://bugs.webkit.org/show_bug.cgi?id=197423

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunBindingsTests.__init__): Set timeout of 5 minutes.
        (RunBindingsTests.start): Initialize log_observer for json output.
        (RunBindingsTests.getResultSummary): Update step and build summary based on bindings test results.
        (RunBindingsTests._addToLog): Method to add message to log.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-test accordingly.

2019-04-30  Pablo Saavedra  <psaavedra@igalia.com>

        Unreviewed. Add myself as a committer.

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

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

        [ews-build] Enable webkitpy queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=197396

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * BuildSlaveSupport/ews-build/config.json:

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

        [ews-build] Parse and display webkitpy failures
        https://bugs.webkit.org/show_bug.cgi?id=197395

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPyTests.start): Initialize log_observer for json output.
        (RunWebKitPyTests.getResultSummary): Update step and build summary based on webkitpy results.
        (RunWebKitPyTests._addToLog): Method to add message to log.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-test accordingly.

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

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

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

2019-04-29  Youenn Fablet  <youenn@apple.com>

        Remove spurious GVA printf logging
        https://bugs.webkit.org/show_bug.cgi?id=197368
        <rdar://problem/35975256>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip):

2019-04-29  Youenn Fablet  <youenn@apple.com>

        getDisplayMedia should be called on user gesture
        https://bugs.webkit.org/show_bug.cgi?id=197356
        <rdar://problem/50296074>

        Reviewed by Eric Carlson.

        Update test configuration to inject internals
        so that we can use it to simulate a user click to call getDisplayMedia.

        * TestWebKitAPI/Tests/WebKit/getDisplayMedia.html:
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::GetDisplayMediaTest::SetUp):

2019-04-26  Stephanie Lewis  <slewis@apple.com>

        run-benchmarks should have an intial prep and restore env call for tasks that are too expensive to do for every iteration
        https://bugs.webkit.org/show_bug.cgi?id=197339

        Reviewed by Dewei Zhu.

        Add two new functions prepare_inital_env and restore_env_after_all_testing around the entire
        test run for setup steps that are too expensive to do every iteration.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner._run_benchmark):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver):
        (BrowserDriver.prepare_initial_env):
        (BrowserDriver.restore_env_after_all_testing):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py:
        (LinuxBrowserDriver.prepare_initial_env):
        (LinuxBrowserDriver.restore_env_after_all_testing):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepare_initial_env):
        (OSXBrowserDriver.restore_env_after_all_testing):

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

        Fix the watchOS engineering build.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST): AVVideoPerformanceMetrics does not exist on watchOS.

2019-04-27  Chris Dumez  <cdumez@apple.com>

        [WKTR] Move test timeout handling to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=197333

        Reviewed by Darin Adler.

        Move test timeout handling in WebKitTestRunner to the UIProcess to play nicely with PSON. Previously,
        we'd start the timeout timer in the InjectedBundle, which would fail to account of the time spent in
        every WebContent process in the case of swapping.

        Also, because of process caching, the timeout timer would sometime fire in a cached process and it
        would lead to crashes when firing the timer.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::shouldDumpPixels const):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        (WTR::TestRunner::waitUntilDone):
        (WTR::TestRunner::setWaitUntilDone):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
        * WebKitTestRunner/InjectedBundle/wpe/TestRunnerWPE.cpp:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::createTestSettingsDictionary):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestInvocation::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestInvocation::waitToDumpWatchdogTimerFired):
        (WTR::TestInvocation::setWaitUntilDone):
        (WTR::TestInvocation::done):
        * WebKitTestRunner/TestInvocation.h:

2019-04-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] linkPolymorphicCall now does GC
        https://bugs.webkit.org/show_bug.cgi?id=197306

        Reviewed by Saam Barati.

        The test is sensitive to allocations and even adding $vm makes it non-reproducible.
        To add this test, we add `runWithoutBaseOption`.

        * Scripts/run-jsc-stress-tests:

2019-04-26  Alexey Proskuryakov  <ap@apple.com>

        Update inactive reviewers' status to 'contributor'.

        Accidentally skipped one at first.

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

2019-04-26  Alexey Proskuryakov  <ap@apple.com>

        Update inactive reviewers' status to 'contributor'.

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

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        Sadly, regression tests operate on a crazy mix of mock and live data for
        contributors.json. It would be a substantial project to mock all code paths,
        so changing the tests instead.

2019-04-26  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: Added.
        (TestWebKitAPI::TEST):

2019-04-26  David Kilzer  <ddkilzer@apple.com>

        WebKitTestRunner leaks an NSDictionary and multiple JSStringRef objects
        <https://webkit.org/b/197314>
        <rdar://problem/50245252>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        - Use adopt(JSStringCreateWithCFString(...)) to fix leaks.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator sendEventStream:completionBlock:]):
        - Call -autorelease to fix leak of NSDictionary.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::accessibilitySpeakSelectionContent const):
        (WTR::UIScriptController::selectFormPopoverTitle const):
        (WTR::UIScriptController::textContentType const):
        (WTR::UIScriptController::formInputLabel const):
        (WTR::UIScriptController::scrollingTreeAsText const):
        - Use adopt(JSStringCreateWithCFString(...)) to fix leaks.

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

        webkitpy: Running a single test will always use the default device
        https://bugs.webkit.org/show_bug.cgi?id=195472
        <rdar://problem/48724825>

        Reviewed by Lucas Forschler.

        It makes more sense to have the Manager class handle the case where a user specifically requests a test which is
        skipped on the current configuration. This changes the behavior when running part of a test shard, now tests explicitly
        requested will be run regardless of what shard they are in.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.skip_tests): Caller should manage running skipped tests which were explicitly requested.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): If a test is marked as skipped for the configuration, but was specifically requested, run it anyways
        on the default device type.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_run_chunk): Explicitly requesting a test will override sharing behavior.
        (RunTest.test_run_part): Ditto.

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

        Add ENABLE(CONTENT_EXTENSIONS) and namespace ContentExtensions to ResourceLoadInfo.h
        https://bugs.webkit.org/show_bug.cgi?id=197165

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

2019-04-26  Ryan Haddad  <ryanhaddad@apple.com>

        Replace iOS build queue hardware
        https://bugs.webkit.org/show_bug.cgi?id=197312

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Use newer hardware that supports macOS Mojave.

2019-04-26  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        check-webkit-style complains the first block in while loop.
        https://bugs.webkit.org/show_bug.cgi?id=197307

        The style checker shouldn't complain about an open brace on
        its own line if the last non-whitespace character on the previous
        non-blank line is another open brace, because it's likely to
        indicate the begining of a nested code block.

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_braces):

2019-04-26  Sihui Liu  <sihui_liu@apple.com>

        Stop IDB transactions to release locked database files when network process is ready to suspend
        https://bugs.webkit.org/show_bug.cgi?id=196372
        <rdar://problem/48930116>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm: Added.
        (-[IndexedDBSuspendImminentlyMessageHandler userContentController:didReceiveScriptMessage:]):
        (runTestAndCheckResult):
        (keepNetworkProcessActive):
        (TEST):

2019-04-25  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r234330): 3 legacy-animation-engine/compositing tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=188357
        <rdar://problem/42986633>

        Reviewed by Dean Jackson.

        DumpRenderTree had no code that set page.setCompositingPolicyOverride() to Normal, so some
        tests would fall into low memory mode and have different behavior.
        
        Fix by moving the code that calls setCompositingPolicyOverride(Normal) from the WK2 layer
        to Internals, so it's shared by DRT and WTR.
        
        We no longer need the WK2 C SPI glue.

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

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

        webkitpy: Including skipped tests in the final count
        https://bugs.webkit.org/show_bug.cgi?id=197298
        <rdar://problem/49705424>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_run_results): The total number of tests run should exclude delibrately skipped tests.

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable date and time inputs on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197287
        rdar://problem/46794376

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Fix test-webkitpy after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        Also use C++17.

2019-04-25  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:] never returns _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=196991
        <rdar://problem/45507423>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (-[NavigationTestDelegate init]):
        (-[NavigationTestDelegate waitForDidFinishNavigation]):
        (-[NavigationTestDelegate webView:didFinishNavigation:]):
        (-[NavigationTestDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):
        (TEST): Deleted.

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

        Revert some code accidentally committed with r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

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

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

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

        Reviewed by Darin Adler.

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

2019-04-25  Commit Queue  <commit-queue@webkit.org>

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

        Causing internal build failures (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244627

2019-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Hardcoded text color in input fields
        https://bugs.webkit.org/show_bug.cgi?id=126907

        Reviewed by Michael Catanzaro.

        Add dark-mode command line option to MiniBrowser.

        * MiniBrowser/gtk/main.c:
        (main):

2019-04-24  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST):
        The expected order of incoming events is
        1. didInvalidateIntrinsicContentSize
        2. didFirstLayout
        At setRenderingProgressDidChange, we already check if didInvalidateIntrinsicContentSize comes in first.
        However it's not guaranteed that the milestone event is delayed until after TestWebKitAPI::Util::run() is finished
        (and remember, all we care about is ordering).

2019-04-24  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: Added.
        (TestWebKitAPI::TEST):

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

        XMLHTTPRequest POSTs to a custom WKURLSchemeHandler protocol are missing the HTTP body.
        https://bugs.webkit.org/show_bug.cgi?id=191362

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm: Add a test that POSTs all sorts of things
          from an XHR to a custom protocol.

2019-04-25  Simon Fraser  <simon.fraser@apple.com>

        DumpRenderTree doesn't call Internals::resetToConsistentState() before the first test
        https://bugs.webkit.org/show_bug.cgi?id=197273

        Reviewed by Dean Jackson.

        Reorder code so that we create gTestRunner before calling resetWebViewToConsistentStateBeforeTesting(),
        so that WebCoreTestSupport::resetInternalsObject() is always run.

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

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

        Age out unconverted Ad Click Attributions after one week.
        https://bugs.webkit.org/show_bug.cgi?id=197238
        <rdar://problem/50177349>

        Reviewed by Chris Dumez.

        This patch adds infrastructure to allow tests to expire all unconverted
        attributions early.

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

2019-04-24  Chris Dumez  <cdumez@apple.com>

        Fix flaky crashes in a couple of PSON API tests
        https://bugs.webkit.org/show_bug.cgi?id=197239

        Reviewed by Tim Horton.

        Do not adopt the NSURLRequest returned by [NSURLRequest requestWithURL:].

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-24  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to control the renderTreeAsText output by setting options on testRunner
        https://bugs.webkit.org/show_bug.cgi?id=197133

        Reviewed by Sam Weinig.

        Add testRunner.setRenderTreeDumpOptions() and expose the subset of RenderAsTextFlag flags
        that make sense in testing (those that don't dump unstable data like addresses), and plumb
        these flags through the various framework layers.

        Convert RenderAsTextBehavior to an OptionSet<RenderAsTextFlag>.

        Fix code generation in WebKitTestRunner to generate bindings for IDL const values,
        and hand-code DumpRenderTree bindings.

        Some cleanup of the TestRunners, using member initializers.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (setRenderTreeDumpOptionsCallback):
        (TestRunner::staticFunctions):
        (TestRunner::setRenderTreeDumpOptions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::renderTreeDumpOptions const):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        (WTR::TestRunner::setRenderTreeDumpOptions):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::renderTreeDumpOptions const):

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

        WKContentRuleLists should have a maximum FileProtection of CompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=197078
        <rdar://problem/49564348>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (TEST_F):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]): Deleted.
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]): Deleted.
        Unfortunately, setting the NSFileProtectionKey attribute is only supported on iOS devices.

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

        Add unit test for r239322
        https://bugs.webkit.org/show_bug.cgi?id=197236

        Reviewed by Chris Dumez.

        I initially developed this as a unit test for rdar://problem/48797895 but it seems that isn't quite ready.
        May as well add the test infrastructure which was needed before and will be needed in the future.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::downloadAtRate):
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm: Added.
        (-[ProxyDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ProxyDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):

2019-04-24  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is communicated with the WebPageProxy but not the WebFrameProxy
        https://bugs.webkit.org/show_bug.cgi?id=197214
        <rdar://problem/49237544>

        Reviewed by Alex Christensen.

        Extend API test coverage.

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

2019-04-24  Philippe Normand  <pnormand@igalia.com>

        [Build][GStreamer] Update to 1.16.0
        https://bugs.webkit.org/show_bug.cgi?id=197157

        Reviewed by Xabier Rodriguez-Calvar.

        The upstreamed patches were removed and a new one was added for a
        regression detected in the scaletempo GStreamer element. The GNOME
        Flatpak was migrated to 3.32 and I switched a few modules to Meson
        on the way, as it is the preferred build system now in GStreamer
        1.16.

        * flatpak/files/httpd-autogen.sh:
        * flatpak/flatpakutils.py:
        (FlatpakPackage.install):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/org.webkit.CommonModules.yaml:
        * flatpak/org.webkit.WebKit.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-aomenc-Add-support-for-10-12bit-decoding.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0002-aomenc-Handle-8-bit_depth-images-with-AOM_IMG_FMT_HI.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0003-fdkaacenc-Remove-MODE_2_1.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0004-fdkaacdec-Use-WAV-channel-mapping-instead-of-interleave-setting.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0005-mssdemux-fix-protection-data-double-free.patch: Removed.
        * gstreamer/patches/gst-plugins-base-0001-parsebin-Post-STREAM_COLLECTION-on-EVENT_STREAM_COLL.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Detect-and-expose-CEA-608-708-Closed-Caption.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Do-not-run-the-preferred-decryptor-context-q.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0002-qtdemux-Do-not-unref-a-NULL-stream_tags.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0002-qtdemux-add-context-for-a-preferred-protection.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0003-qtdemux-Clarify-field-name-about-stream-encryption-s.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0003-qtdemux-also-push-buffers-without-encryption-info-in.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0004-qtdemux-Add-initial-support-for-AV1-demuxing.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0005-qtdemux-Extract-AV1-codec_data-and-put-it-in-the-cap.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-Recognize-more-AV1-atoms.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0011-matroska-Add-the-WebM-encrypted-content-support-in-m.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0012-matroskdemux-do-not-use-MapInfo.data-after-unmapping.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0013-Avoid-warning-when-reporting-about-decryptors.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0014-pulse-Mark-default-devices-as-default.patch: Removed.
        * gstreamer/patches/gst-plugins-good-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch: Added.
        * gstreamer/patches/gstreamer-0001-protection-Add-a-new-definition-for-unspecified-syst.patch: Removed.
        * gstreamer/patches/gstreamer-0002-protection-Fix-the-string-to-define-unspecified-syst.patch: Removed.

2019-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser: also set the passed bg-color when receiving arguments
        https://bugs.webkit.org/show_bug.cgi?id=197156

        Reviewed by Michael Catanzaro.

        The background color is only set when MiniBrowser is launched without arguments. This regressed when tabs
        support was added.

        * MiniBrowser/gtk/BrowserTab.c:
        (browser_tab_set_background_color): Set the passed in color as web view background color.
        * MiniBrowser/gtk/BrowserTab.h:
        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Initialize backgroundColor.
        (browser_window_append_view): Call browser_tab_set_background_color().
        (browser_window_set_background_color): Save the passed in color. This function should now be called before tabs
        are added.
        * MiniBrowser/gtk/main.c:
        (main): Call browser_window_set_background_color() before creating the tabs.

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

        Move Ad Click Attribution from internal feature to experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=197218
        <rdar://problem/47651691>

        Reviewed by Brent Fulgham.

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

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

        [iOS] QuickLook documents loaded from file: URLs should be allowed to perform same-document navigations
        https://bugs.webkit.org/show_bug.cgi?id=196749
        <rdar://problem/35773454>

        Reviewed by Daniel Bates.

        Added a new QuickLook API test and added new expectations to existing QuickLook tests.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookDelegate webView:didStartProvisionalNavigation:]):
        (-[QuickLookDelegate webView:didFinishNavigation:]):
        (-[QuickLookDelegate _webView:didFailNavigation:withError:userInfo:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (runTest):
        (runTestDecideBeforeLoading):
        (runTestDecideAfterLoading):
        (TEST):

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

        Remove Ad Click Attribution data when removing website data
        https://bugs.webkit.org/show_bug.cgi?id=197215
        <rdar://problem/47668988>

        Reviewed by Chris Dumez.

        This patch adds test infrastructure to delete Ad Click Attribution data
        through WebsiteDataStore::removeData().

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

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

        webkitpy: Kill unresponsive worker processes
        https://bugs.webkit.org/show_bug.cgi?id=197205
        <rdar://problem/50104388>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.__init__): Add close timeout.
        (_MessagePool._close): Send termination before joining workers, kill unresponsive workers.

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

        Add unit tests for WKWebView.serverTrust
        https://bugs.webkit.org/show_bug.cgi?id=197202

        Reviewed by Youenn Fablet

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::deleter<BIO>::operator()):
        (TestWebKitAPI::deleter<SSL>::operator()):
        (TestWebKitAPI::deleter<X509>::operator()):
        (TestWebKitAPI::deleter<SSL_CTX>::operator()):
        (TestWebKitAPI::deleter<EVP_PKEY>::operator()):
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::listenForConnections):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):
        (verifyCertificateAndPublicKey):
        (-[ServerTrustDelegate webView:didFinishNavigation:]):
        (-[ServerTrustDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::downloadAtRate):
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):

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

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

        Causing build failures on multiple builders (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244556

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

        Fix iOS build.
        https://bugs.webkit.org/show_bug.cgi?id=195537

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFilesMediaIcon):
        AdoptWK constructor is private now.  Use adoptWK instead.

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

        Accessibility text search and selection API enhancements.
        https://bugs.webkit.org/show_bug.cgi?id=197095
        <rdar://problem/48181791>

        Reviewed by Chris Fleizach.

        Added new API JS binding code for searchTextWithCriteria to both WTR and DRT.

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (searchTextWithCriteriaCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (convertVectorToObjectArray):
        (convertNSArrayToVector):
        (searchTextParameterizedAttributeForCriteria):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::rowHeaders const):
        (AccessibilityUIElement::columnHeaders const):
        (AccessibilityUIElement::uiElementArrayAttributeValue const):
        (AccessibilityUIElement::searchTextWithCriteria):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertVectorToObjectArray):
        (WTR::convertNSArrayToVector):
        (WTR::searchTextParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::searchTextWithCriteria):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::convertElementsToObjectArray): Deleted.

2019-04-23  Guy Lewin  <guy@lewin.co.il>

        Multiple File Input Icon Set Regardless of File List
        https://bugs.webkit.org/show_bug.cgi?id=195537

        Reviewed by Alexey Proskuryakov.

        Add setOpenPanelFilesMediaIcon to TestRunner in order to test icon and
        display string in iOS file inputs

        * DumpRenderTree/TestRunner.cpp:
        (SetOpenPanelFilesMediaIconCallback):
        (TestRunner::staticFunctions):
        (TestRunner::setOpenPanelFilesMediaIcon):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::openPanelFilesMediaIcon const):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFilesMediaIcon):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::runOpenPanel):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::openPanelFileURLsMediaIcon const):
        (WTR::TestController::setOpenPanelFileURLsMediaIcon):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2019-04-23  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: Added.
        (TestWebKitAPI::TEST):

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

        [ews-build] Add unit tests for UnApplyPatchIfRequired
        https://bugs.webkit.org/show_bug.cgi?id=197197

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestUnApplyPatchIfRequired):
        (TestUnApplyPatchIfRequired.test_success):
        (TestUnApplyPatchIfRequired.test_failure):
        (TestUnApplyPatchIfRequired.test_skip):

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

        [ews-build] Add unit tests for CleanWorkingDirectory
        https://bugs.webkit.org/show_bug.cgi?id=197195

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCleanWorkingDirectory):
        (TestCleanWorkingDirectory.test_success):
        (TestCleanWorkingDirectory.test_failure):

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

        [ews-build] Use explicit imports instead of wildcard imports
        https://bugs.webkit.org/show_bug.cgi?id=197194

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

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

        [ews-build] Add unit tests for DownloadBuiltProduct
        https://bugs.webkit.org/show_bug.cgi?id=197193

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestDownloadBuiltProduct):
        (TestDownloadBuiltProduct.setUp):
        (TestDownloadBuiltProduct.tearDown):
        (TestDownloadBuiltProduct.test_success):
        (TestDownloadBuiltProduct.test_failure):

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

        [ews-app] Exception while loading status-bubble when no build step has started
        https://bugs.webkit.org/show_bug.cgi?id=196676

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.get_build_timestamp): Check if build step is present before accessing its timestamp.

2019-04-23  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Support running of JSC tests on remote playstation devices
        https://bugs.webkit.org/show_bug.cgi?id=197170

        Reviewed by Ross Kirsling.

        Script changes

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Pass arguments for playstation to
        run-jsc-stress-tests
        * Scripts/run-jsc-stress-tests:
        Handle $hostOS=="playstation" for determineArchitecture, turning
        off $isFTLPlatform and runProfiler and defaulting test writer.
        * Scripts/webkitdirs.pm:
        (jscPath): PlayStation WebKit executables have .elf extension
        (executableProductDir): PlayStation builds on Windows hosts but
        uses bin directory rather than bin64/bin32 for executable output
        location.
        * Scripts/webkitruby/jsc-stress-test-writer-playstation.rb: Added.

2019-04-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use target oriented design for WebKit
        https://bugs.webkit.org/show_bug.cgi?id=197173

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake: Add WebKitFrameworkHeaders as a dependency.
        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp: Remove unused header.

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

        [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher
        https://bugs.webkit.org/show_bug.cgi?id=197097
        <rdar://problem/50048318>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme webView:startURLSchemeTask:]):

2019-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Implement AtkComponentIface scroll_to methods
        https://bugs.webkit.org/show_bug.cgi?id=196856

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::scrollToMakeVisible): Call atk_component_scroll_to().
        (WTR::AccessibilityUIElement::scrollToGlobalPoint): Call atk_component_scroll_to_point().
        * gtk/jhbuild.modules: Bump atk, at-spi2-core and at-spi2-atk to their latest stable version.

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

        [ews-build] Improve summary for UploadBuiltProduct step
        https://bugs.webkit.org/show_bug.cgi?id=197182

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (UploadBuiltProduct): Added descriptionDone.
        (UploadBuiltProduct.getResultSummary): Overrided getResultSummary.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestUploadBuiltProduct.test_success): Updated unit-test.
        (TestUploadBuiltProduct.test_failure): Added unit-test for failure case.

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

        [ews-build] Trigger queues only after uploading the archive
        https://bugs.webkit.org/show_bug.cgi?id=197180

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__):
        (BuildFactory.__init__): Remove trigger step from factories.
        (BuildFactory.propertiesToPassToTriggers): Deleted.
        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.__init__): Confiure triggers property.
        (Trigger): Step to trigger other queues.
        (Trigger.propertiesToPassToTriggers): Method to construct properties to pass to triggerred builds.
        (UploadBuiltProduct.finished): Trigger builds after upload is successful.

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

        Deprecate WKContextCreateWithInjectedBundlePath
        https://bugs.webkit.org/show_bug.cgi?id=197169

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        Use WKContextCreateWithConfiguration instead of WKContextCreateWithInjectedBundlePath after having set its injected bundle path.

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

        REGRESSION(r230681) Do not use stored credentials if WKBundlePageResourceLoadClient.shouldUseCredentialStorage returns false
        https://bugs.webkit.org/show_bug.cgi?id=197093
        <rdar://problem/49708268>

        Reviewed by Chris Dumez.

        Add a test that does two loads.  The first load shouldUseCredentialStorage returns true and we provide a persistent credential.
        The second load shouldUseCredentialStorage returns false and we verify that a challenge is received with no suggested credential.
        We also need to make the TCPServer able to handle more than one connection because we need these two loads to come from the same protection space,
        and our current Cocoa implementation of NetworkSession uses two NSURLSessions that don't share a connection cache, one for loads with credentials
        and one for loads without credentials, so there are two TCP connections to the same server in this test.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::~TCPServer):
        (TestWebKitAPI::TCPServer::socketBindListen):
        (TestWebKitAPI::TCPServer::waitForAndReplyToRequests): Deleted.
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BasicProposedCredentialPlugIn.mm: Added.
        (-[BasicProposedCredentialPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (respondWithChallengeThenOK):
        (TestWebKitAPI::TEST):
        (-[ProposedCredentialDelegate webView:didFinishNavigation:]):
        (-[ProposedCredentialDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):

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

        Delayed WebProcessLaunch may break the _relatedWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=197160

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-22  Dean Johnson  <dean_johnson@apple.com>

        Use curl to download packages for webkitpy autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=197164

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download): Use curl(1) to download packages necessary for
        webkitpy/thirdparty/autoinstalled since Python2's urllib2 module can result in unnecessary
        errors which are not present when using curl(1).

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

        Unreviewed, rolling out r244502.

        Caused crashes on the bots

        Reverted changeset:

        "Delayed WebProcessLaunch may break the _relatedWebView SPI"
        https://bugs.webkit.org/show_bug.cgi?id=197160
        https://trac.webkit.org/changeset/244502

2019-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244437.

        Still breaks internal tests.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/244437

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

        [ews-build] Use singular verb in failure description in case of single api test failure
        https://bugs.webkit.org/show_bug.cgi?id=197013

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults):

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

        Delayed WebProcessLaunch may break the _relatedWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=197160

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        REGRESSION(r241289): [GTK] accessibility/removed-continuation-element-causes-crash.html and accessibility/removed-anonymous-block-child-causes-crash.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=194630

        Reviewed by Michael Catanzaro.

        Return early from getAttributeSet() is passed in accessible is nullptr.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

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

        Defer EditorState updates until the next layer tree flush in a few additional circumstances
        https://bugs.webkit.org/show_bug.cgi?id=197145
        <rdar://problem/50078170>

        Reviewed by Darin Adler.

        Adjusts several editing API tests to wait for a presentation update following a selection change, programmatic
        focus, or showing the font manager.

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

2019-04-21  Brian Burg  <bburg@apple.com>

        WebDriver: add hooks to make it possible to easily run WPT WebDriver web server by itself
        https://bugs.webkit.org/show_bug.cgi?id=197125
        <rdar://problem/50061468>

        Reviewed by Darin Adler.

        Sometimes I want to run wptserve independently of tests. Make it easier to script that
        using this class rather than making our own ./wpt serve invocation.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer):
        (WebDriverW3CWebServer.document_root): Expose this to clients.
        (WebDriverW3CWebServer.wait): Add a method that blocks until the server dies.

        (WebDriverW3CWebServer.__enter__):
        (WebDriverW3CWebServer.__exit__):
        Make it possible to use the web server with a 'with' statement.

2019-04-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use target oriented design for WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=197112

        Reviewed by Konstantin Tokarev.

        Fix includes and libraries for DumpRenderTree after changes to WebKitLegacy targets.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/EventSender.cpp:

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

        Update text for old EWS submit button
        https://bugs.webkit.org/show_bug.cgi?id=197140

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/templates/statusbubble.html:

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

        [ews-app] New EWS should poll bugzilla more frequently
        https://bugs.webkit.org/show_bug.cgi?id=197138

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.__init__):

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

        [ews-app] Submit to EWS buttons are not aligned properly with status-bubbles
        https://bugs.webkit.org/show_bug.cgi?id=197139

        Reviewed by Alexey Proskuryakov.

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

2019-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build with recent SDKs.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:

2019-04-19  Keith Miller  <keith_miller@apple.com>

        Add script to merge run_benchmark jsons
        https://bugs.webkit.org/show_bug.cgi?id=197107

        Reviewed by Michael Saboff.

        The script basically recursively decends through all json objects until it gets
        to an array or JSON primitive and concats or takes the first value, respectively.

        This patch also adds +x bits to the compare-results script so it
        can be run directly from the command line. I had to add a new line so that svn
        will accept the change... yay svn!

        * Scripts/compare-results:
        * Scripts/merge-result-jsons: Added.
        (readJSONFile):
        (deepAppend):
        (mergeJSONs):
        (main):

2019-04-18  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in FrameLoader::stopAllLoaders via [WebView dealloc] inside ~ObjCEventListener
        https://bugs.webkit.org/show_bug.cgi?id=197079

        Reviewed by Darin Adler.

        Added a regression test. It hits a slightly different backtrace but of the same class of issues.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/DeallocWebViewInEventListener.mm: Added.

2019-04-18  Commit Queue  <commit-queue@webkit.org>

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

        caused 1 API test failure (Requested by zalan on #webkit).

        Reverted changeset:

        "Regression (r244291): Broken API Test
        AutoLayoutRenderingProgressRelativeOrdering"
        https://bugs.webkit.org/show_bug.cgi?id=196948
        https://trac.webkit.org/changeset/244434

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

        Add new compatibility mode API on WKNavigation
        https://bugs.webkit.org/show_bug.cgi?id=197069
        <rdar://problem/50025800>

        Reviewed by Tim Horton.

        Add a block property for -didCommitNavigation to TestNavigationDelegate.

        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:didCommitNavigation:]):

2019-04-18  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512
        <rdar://problem/37510435>

        Reviewed by Alex Christensen.

        Added WebCorePrivateFrameworkHeaders as a dependency of TestWebKitAPI for all
        ports.

        WebCore now uses WebCore_PRIVATE_INCLUDE_DIRECTORIES for all ports. Any includes
        of WebCore headers using "*.h" were modified to <WebCore/*.h>

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:

2019-04-18  Jer Noble  <jer.noble@apple.com>

        Add support for parsing FairPlayStreaming PSSH boxes.
        https://bugs.webkit.org/show_bug.cgi?id=197064

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp:
        (TestWebKitAPI::TEST):

2019-04-18  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm:
        (-[WebProcessPlugIn additionalClassesForParameterCoder]): Added.

2019-04-18  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST): 
        The expected order of incoming events is
        1. didInvalidateIntrinsicContentSize
        2. didFirstLayout
        At setRenderingProgressDidChange, we already check if didInvalidateIntrinsicContentSize comes in first.
        However it's not guaranteed that the milestone event is delayed until after TestWebKitAPI::Util::run() is finished
        (and remember, all we care about is ordering).

2019-04-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244299.

        Breaks internal tests.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/244299

2019-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] StringBuilder should set correct m_is8Bit flag when merging
        https://bugs.webkit.org/show_bug.cgi?id=197053

        Reviewed by Saam Barati.

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

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        [iOS Sim Debug] REGRESSION (r244151) TestWebKitAPI.WebKit.OverrideViewportArguments is failing (197028)
        https://bugs.webkit.org/show_bug.cgi?id=197028
        <rdar://problem/49985290>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/OverrideViewportArguments.mm:
        (TEST):
        Liberal application of waitForNextPresentationUpdate works around a race
        where if the page rapidly changes its viewport arguments (or an API client
        rapidly changes its viewport arguments), we'd get stuck thinking that the
        user had intentionally zoomed the page, and stop resetting the initial scale.
        This deserves a separate bug, but no need to keep the test failing while
        we think about it.

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r241988): Switching tabs is slow
        https://bugs.webkit.org/show_bug.cgi?id=197037
        <rdar://problem/49951473>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ReparentWebViewTimeout.mm: Added.
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView addToTestWindow]):
        Add a test that hangs without this fix.

2019-04-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244400.

        Caused testing to exit early with assertionon Debug WK2

        Reverted changeset:

        "UI↔Web deadlock when printing with a JavaScript alert
        visible"
        https://bugs.webkit.org/show_bug.cgi?id=196839
        https://trac.webkit.org/changeset/244400

2019-04-17  Brady Eidson  <beidson@apple.com>

        Link clicks in PDFs shouldn't send referrer headers.
        <rdar://problem/21142581> and https://bugs.webkit.org/show_bug.cgi?id=196980

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm: Added.
        (putPDFBytesCallback):
        (emptyReleaseInfoCallback):
        (createPDFWithLinkToURL):
        (TEST):

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        UI↔Web deadlock when printing with a JavaScript alert visible
        https://bugs.webkit.org/show_bug.cgi?id=196839
        <rdar://problem/49157642>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewPrintFormatter.mm: Added.
        (-[PrintOnAlertUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

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

        WKRetainPtr's adoption constructor should be private
        https://bugs.webkit.org/show_bug.cgi?id=197019

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        (TestWebKitAPI::Util::createInitializationDictionaryForInjectedBundleTest):
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        (TestWebKitAPI::Util::toWK):
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseThenTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::initialize):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::initialize):
        * TestWebKitAPI/Tests/WebKit/DeferredViewInWindowStateChange.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DidNotHandleKeyDown.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::didRemoveFrameFromHierarchyCallback):
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):
        * TestWebKitAPI/Tests/WebKit/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EvaluateJavaScript.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EventModifiers.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FailedLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Find.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ForceRepaint.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetInjectedBundleInitializationUserDataCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/HitTestResultNodeHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/HitTestResultNodeHandle_Bundle.cpp:
        (TestWebKitAPI::HitTestResultNodeHandleTest::getContextMenuFromDefaultMenu):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleNoDisableOverrideBuiltinsBehaviorTest::initialize):
        (TestWebKitAPI::InjectedBundleDisableOverrideBuiltinsBehaviorTest::initialize):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleFrameHitTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleFrameHitTest_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleFrameHitTestTest::frameLoadFinished):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleInitializationUserDataCallbackWins.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleMakeAllShadowRootOpenTest::initialize):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::loadAlternateHTMLString):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadCanceledNoServerRedirectCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadPageOnCrash.cpp:
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        * TestWebKitAPI/Tests/WebKit/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::buildAndPerformTest):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PasteboardNotifications.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ProcessDidTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeWindowAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ScrollPinningBehaviors.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/StopLoadingDuringDidFailProvisionalLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/TerminateTwice.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageCopySessionStateWithFiltering.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageGetScaleFactorNotZero.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WillSendSubmitEvent.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKit/mac/AttributedSubstringForProposedRangeWithImage.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleParameter.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/EditorCommands.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/InjectedBundleAppleEvent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/RestoreStateAfterTermination.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/mac/FirstResponderScrollingPosition.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::initializeView):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::getMenuItemTitleCallback):
        (WTR::createMouseMessageBody):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::mouseForceClick):
        (WTR::EventSendingController::startAndCancelMouseForceClick):
        (WTR::EventSendingController::mouseForceDown):
        (WTR::EventSendingController::mouseForceUp):
        (WTR::EventSendingController::mouseForceChanged):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::scheduleAsynchronousClick):
        (WTR::createKeyDownMessageBody):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::scheduleAsynchronousKeyDown):
        (WTR::EventSendingController::mouseScrollBy):
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSendingController::continuousMouseScrollBy):
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::setTouchPointRadius):
        (WTR::EventSendingController::touchStart):
        (WTR::EventSendingController::touchMove):
        (WTR::EventSendingController::touchEnd):
        (WTR::EventSendingController::touchCancel):
        (WTR::EventSendingController::clearTouchPoints):
        (WTR::EventSendingController::releaseTouchPoint):
        (WTR::EventSendingController::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::booleanForKey):
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::dumpToStdErr):
        (WTR::InjectedBundle::outputText):
        (WTR::InjectedBundle::postNewBeforeUnloadReturnValue):
        (WTR::InjectedBundle::postAddChromeInputField):
        (WTR::InjectedBundle::postRemoveChromeInputField):
        (WTR::InjectedBundle::postFocusWebView):
        (WTR::InjectedBundle::postSetBackingScaleFactor):
        (WTR::InjectedBundle::postSetWindowIsKey):
        (WTR::InjectedBundle::postSetViewSize):
        (WTR::InjectedBundle::postSimulateWebNotificationClick):
        (WTR::InjectedBundle::postSetAddsVisitedLinks):
        (WTR::InjectedBundle::setGeolocationPermission):
        (WTR::InjectedBundle::setMockGeolocationPosition):
        (WTR::InjectedBundle::setMockGeolocationPositionUnavailableError):
        (WTR::InjectedBundle::isGeolocationProviderActive const):
        (WTR::InjectedBundle::imageCountInGeneralPasteboard const):
        (WTR::InjectedBundle::setUserMediaPersistentPermissionForOrigin):
        (WTR::InjectedBundle::userMediaPermissionRequestCountForOrigin const):
        (WTR::InjectedBundle::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::InjectedBundle::setCustomPolicyDelegate):
        (WTR::InjectedBundle::setHidden):
        (WTR::InjectedBundle::setCacheModel):
        (WTR::InjectedBundle::shouldProcessWorkQueue const):
        (WTR::InjectedBundle::processWorkQueue):
        (WTR::InjectedBundle::queueBackNavigation):
        (WTR::InjectedBundle::queueForwardNavigation):
        (WTR::InjectedBundle::queueLoad):
        (WTR::InjectedBundle::queueLoadHTMLString):
        (WTR::InjectedBundle::queueReload):
        (WTR::InjectedBundle::queueLoadingScript):
        (WTR::InjectedBundle::queueNonLoadingScript):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::frameToStr):
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::dumpFrameDescriptionSuitableForTestResult):
        (WTR::dumpFrameScrollPosition):
        (WTR::dumpDescendantFrameScrollPositions):
        (WTR::dumpFrameText):
        (WTR::dumpDescendantFramesText):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::setDumpPixels):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::setWhatToDump):
        (WTR::TestRunner::setWaitUntilDone):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::setShouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::clearAllDatabases):
        (WTR::TestRunner::setIDBPerOriginQuota):
        (WTR::TestRunner::originsWithApplicationCache):
        (WTR::TestRunner::setCanOpenWindows):
        (WTR::TestRunner::setXSSAuditorEnabled):
        (WTR::TestRunner::setMediaDevicesEnabled):
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled):
        (WTR::TestRunner::setWebRTCUnifiedPlanEnabled):
        (WTR::TestRunner::setCustomUserAgent):
        (WTR::TestRunner::setWebAPIStatisticsEnabled):
        (WTR::TestRunner::setModernMediaControlsEnabled):
        (WTR::TestRunner::setWebGL2Enabled):
        (WTR::TestRunner::setWritableStreamAPIEnabled):
        (WTR::TestRunner::setReadableByteStreamAPIEnabled):
        (WTR::TestRunner::setEncryptedMediaAPIEnabled):
        (WTR::TestRunner::setAllowsAnySSLCertificate):
        (WTR::TestRunner::setPluginsEnabled):
        (WTR::TestRunner::setValueForUser):
        (WTR::TestRunner::setAudioResult):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        (WTR::TestRunner::setAlwaysAcceptCookies):
        (WTR::TestRunner::setOnlyAcceptFirstPartyCookies):
        (WTR::TestRunner::isDoingMediaCapture const):
        (WTR::TestRunner::queueLoad):
        (WTR::TestRunner::setRejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        (WTR::TestRunner::setHandlesAuthenticationChallenges):
        (WTR::TestRunner::setShouldLogCanAuthenticateAgainstProtectionSpace):
        (WTR::TestRunner::setShouldLogDownloadCallbacks):
        (WTR::TestRunner::setAuthenticationUsername):
        (WTR::TestRunner::setAuthenticationPassword):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::setBlockAllPlugins):
        (WTR::TestRunner::setPluginSupportedMode):
        (WTR::TestRunner::setShouldDecideNavigationPolicyAfterDelay):
        (WTR::TestRunner::setShouldDecideResponsePolicyAfterDelay):
        (WTR::TestRunner::setNavigationGesturesEnabled):
        (WTR::TestRunner::setIgnoresViewportScaleLimits):
        (WTR::TestRunner::setShouldDownloadUndisplayableMIMETypes):
        (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess):
        (WTR::TestRunner::terminateNetworkProcess):
        (WTR::TestRunner::terminateServiceWorkerProcess):
        (WTR::TestRunner::runUIScript):
        (WTR::TestRunner::setStatisticsDebugMode):
        (WTR::TestRunner::setStatisticsPrevalentResourceForDebugMode):
        (WTR::TestRunner::setStatisticsLastSeen):
        (WTR::TestRunner::setStatisticsPrevalentResource):
        (WTR::TestRunner::setStatisticsVeryPrevalentResource):
        (WTR::TestRunner::dumpResourceLoadStatistics):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::setStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::setStatisticsGrandfathered):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::setStatisticsSubframeUnderTopFrameOrigin):
        (WTR::TestRunner::setStatisticsSubresourceUnderTopFrameOrigin):
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectTo):
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectFrom):
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectTo):
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectFrom):
        (WTR::TestRunner::setStatisticsCrossSiteLoadWithLinkDecoration):
        (WTR::TestRunner::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback):
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestRunner::statisticsUpdateCookieBlocking):
        (WTR::TestRunner::statisticsSubmitTelemetry):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestRunner::setStatisticsIsRunningTest):
        (WTR::TestRunner::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WTR::TestRunner::setStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WTR::TestRunner::setStatisticsGrandfatheringTime):
        (WTR::TestRunner::setStatisticsMaxStatisticsEntries):
        (WTR::TestRunner::setStatisticsPruneEntriesDownTo):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::statisticsDeleteCookiesForHost):
        (WTR::TestRunner::setStatisticsCacheMaxAgeCap):
        (WTR::TestRunner::statisticsResetToConsistentState):
        (WTR::TestRunner::setStorageAccessAPIEnabled):
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::addMockMediaDevice):
        (WTR::TestRunner::clearMockMediaDevices):
        (WTR::TestRunner::removeMockMediaDevice):
        (WTR::TestRunner::resetMockMediaDevices):
        (WTR::TestRunner::connectMockGamepad):
        (WTR::TestRunner::disconnectMockGamepad):
        (WTR::TestRunner::setMockGamepadDetails):
        (WTR::TestRunner::setMockGamepadAxisValue):
        (WTR::TestRunner::setMockGamepadButtonValue):
        (WTR::TestRunner::removeAllSessionCredentials):
        (WTR::TestRunner::clearDOMCache):
        (WTR::TestRunner::clearDOMCaches):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::domCacheSize):
        (WTR::TestRunner::setAllowStorageQuotaIncrease):
        (WTR::TestRunner::getApplicationManifestThen):
        (WTR::TestRunner::injectUserScript):
        (WTR::TestRunner::sendDisplayConfigurationChangedMessageForTesting):
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::addTestKeyToKeychain):
        (WTR::TestRunner::cleanUpKeychain):
        (WTR::TestRunner::keyExistsInKeychain):
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation):
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess):
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount):
        (WTR::TestRunner::setShouldDismissJavaScriptAlertsAsynchronously):
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting):
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::parseStringTestHeaderValueAsRelativePath):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::runTest):
        (WTR::TestController::didReceiveLiveDocumentsList):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestController::didFinishNavigation):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::uiScriptDidComplete):
        (WTR::TestInvocation::didReceiveAllStorageAccessEntries):
        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::closeWebNotification):
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::ScriptItem::ScriptItem):
        (WTR::WorkQueueManager::queueLoad):
        (WTR::WorkQueueManager::queueLoadHTMLString):

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

        Add a comment to make my test from r244139 less mysterious.
        https://bugs.webkit.org/show_bug.cgi?id=196744

        As suggested by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm:
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):

2019-04-17  Chris Dumez  <cdumez@apple.com>

        Remember device orientation permission for the duration of the browsing session
        https://bugs.webkit.org/show_bug.cgi?id=196992
        <rdar://problem/49946067>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (-[DeviceOrientationPermissionUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):
        (TEST):

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

        [ews-app] Clicking 'submit to new ews' doesn't reload status-bubble
        https://bugs.webkit.org/show_bug.cgi?id=196675

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS): Added @xframe_options_exempt similar to statusbubble.py

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

        [iOS] [WebKit2] Add support for honoring -[UIMenuItem dontDismiss]
        https://bugs.webkit.org/show_bug.cgi?id=196919
        <rdar://problem/41630459>

        Reviewed by Tim Horton.

        Add iOS support for several new testing hooks. See below for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isDismissingMenu const):

        Add a new script controller method to query whether the platform menu (on iOS, the callout bar) is done
        dismissing. We consider the menu to be dismissing in between the `-WillHide` and `-DidHide` notifications sent
        by UIKit when dismissing the callout bar (i.e. UIMenuController).

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isDismissingMenu const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowedMenuActions):

        Add a new helper method to specify a list of allowed actions when bringing up the menu. On iOS, in the case of
        actions supported by the platform, this matches against method selector names (for instance, "SelectAll", or
        "Copy", or "Paste"). In the case of the custom actions installed via `installCustomMenuAction`, we instead match
        against the name of the custom action.

        (WTR::TestRunner::installCustomMenuAction):

        Add a new helper method to install a custom action for the context menu (on iOS, this is the callout bar). This
        takes the name of the action (which appears in a button in the callout bar), whether the action should cause
        the callout bar to automatically dismiss, and finally, a JavaScript callback that is invoked when the action is
        triggered.

        (WTR::TestRunner::performCustomMenuAction):

        Invoked when the custom menu action is triggered.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::installCustomMenuAction):
        (WTR::TestController::setAllowedMenuActions):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::performCustomMenuAction):

        Add plumbing to call back into the injected bundle when performing the custom action.

        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::installCustomMenuAction):
        (WTR::TestController::setAllowedMenuActions):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView becomeFirstResponder]):
        (-[TestRunnerWKWebView _addCustomItemToMenuControllerIfNecessary]):

        Helper method that converts web view's current custom menu action info into a UIMenuItem, and adds it to the
        shared menu controller. This is also invoked when the web view becomes first responder, which matches behavior
        in the Mail app on iOS.

        (-[TestRunnerWKWebView installCustomMenuAction:dismissesAutomatically:callback:]):
        (-[TestRunnerWKWebView setAllowedMenuActions:]):
        (-[TestRunnerWKWebView resetCustomMenuAction]):
        (-[TestRunnerWKWebView performCustomAction:]):
        (-[TestRunnerWKWebView canPerformAction:withSender:]):
        (-[TestRunnerWKWebView _willHideMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Reset both any custom installed actions on the shared menu controller, as well as the list of allowed actions,
        if specified.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isDismissingMenu const):

2019-04-16  Megan Gardner  <megan_gardner@apple.com>

        Allow sharing from imageSheet on an image document
        https://bugs.webkit.org/show_bug.cgi?id=196891
        <rdar://problem/25377386>

        Reviewed by Tim Horton.

        Test to make sure that the correct imageURL is extracted from an image element.

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

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

        REGRESSION(r244162) Clearing website data from ephemeral WKWebsiteDataStore should finish instead of asserting or hanging
        https://bugs.webkit.org/show_bug.cgi?id=196995

        Reviewed by Brady Eidson.

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

2019-04-16  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/open-window-then-write-to-it.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        (-[OpenWindowThenDocumentOpenUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2019-04-16  Commit Queue  <commit-queue@webkit.org>

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

        Causing all WK2 Debug builds to exit early after Assertion
        failures. (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "URL set by document.open() is not communicated to the
        UIProcess"
        https://bugs.webkit.org/show_bug.cgi?id=196941
        https://trac.webkit.org/changeset/244321

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

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948

        Reviewed by Zalan Bujtas.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST): Disabling the test for now to keep infrastructure happy, while the root-cause is being investigated.

2019-04-15  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/open-window-then-write-to-it.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        (-[OpenWindowThenDocumentOpenUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2019-04-15  Dean Johnson  <dean_johnson@apple.com>

        Using Tools/Scripts/clean-webkit should not install requests
        https://bugs.webkit.org/show_bug.cgi?id=196940

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/system/autoinstall.py: Drive-by fix for no logging handlers
        existing, depending on the path autoinstalled is run through.
        * Scripts/webkitpy/port/base.py: Import webkitpy.results.upload.Upload only where it's
        needed.
        (Port.configuration_for_upload):
        (Port.commits_for_upload):

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

        Add a DiagnosticLogging method taking an arbitrary dictionary of values.
        https://bugs.webkit.org/show_bug.cgi?id=196773

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDiagnosticLogging.mm:
        (-[TestLoggingDelegate _webView:logDiagnosticMessage:description:valueDictionary:]):
        (TEST):

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

        ews-build should clearly indicate flaky test failures
        https://bugs.webkit.org/show_bug.cgi?id=196947

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults):

2019-04-15  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm:
        (-[WebProcessPlugIn additionalClassesForParameterCoder]): Added.

2019-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        HashTable::removeIf always shrinks the hash table by half even if there is nothing left
        https://bugs.webkit.org/show_bug.cgi?id=196681

        Reviewed by Darin Adler.

        Added tests.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (WTF_HashSet.RemoveIf):
        (WTF_HashSet.RemoveIfShrinkToBestSize):

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

        Send delayed Ad Click Attribution conversion requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=196838
        <rdar://problem/47650157>

        Reviewed by Chris Dumez and Youenn Fablet.

        This patch adds test infrastructure to override the default behavior in
        WebKit::NetworkAdClickAttribution.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpAdClickAttribution):
        (WTR::TestRunner::clearAdClickAttribution):
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting):
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAdClickAttributionOverrideTimerForTesting):
        (WTR::TestController::setAdClickAttributionConversionURLForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        [ews-app] status-bubble should display position in queue
        https://bugs.webkit.org/show_bug.cgi?id=196607

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._queue_position): Method to calculate patch's position in queue.

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

        [ews-build] Do not run clean build by default on EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=196897

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch.start): Do not create .buildbot-patched file. This is a special file for Buildbot and if this
        file is present, during the Source checkout, Buildbot cleans the working directory completely (including removing 
        untracked directories like WebKitBuild).
        (CheckOutSource.__init__): Pass method=clean so that Buildbot clean the working directory. This does not remove
        untracked files/directories (like WebKitBuild).

2019-04-15  Per Arne Vollan  <pvollan@apple.com>

        TestRunner::notifyDone() should be safely reentrant
        https://bugs.webkit.org/show_bug.cgi?id=196898

        Reviewed by Darin Adler.

        It is currently possible that TestRunner::notifyDone() will call itself, since
        notifyDone() will force a repaint, which can start executing JavaScript, which
        may call notifyDone() again. This can lead to test failures and flakiness.
        Fix this by setting the m_waitToDump flag before calling the dump() method.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):

2019-04-15  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Add enable-media websetting
        https://bugs.webkit.org/show_bug.cgi?id=196863

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Add test for the enable-media web-setting.

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

        API test WKAttachmentTests.AddAttachmentToConnectedImageElement is a flaky failure on Mac Release builds
        https://bugs.webkit.org/show_bug.cgi?id=196905
        <rdar://problem/49886096>

        Reviewed by Tim Horton.

        This flaky test exercises a race condition between when attachment insertion updates are dispatched from the web
        process to the UI process, and when script is executed via -[WKWebView evaluateJavaScript:completionHandler:].
        Since attachment insertion and removal updates from the web process to the UI process are scheduled on a zero-
        delay timer, we end up with this sequence of events in the problematic (failure) case:

        (a) [UI]    Run script #1 (which calls `HTMLAttachmentElement.getAttachmentIdentifier`)
            ...IPC from UI to web process...
        (b) [Web]   Evaluate script #1 in the web process, which schedules attachment updates on a zero-delay timer
            ...IPC from web to UI process...
        (c) [UI]    Invoke completion handler for script #1
        (d) [UI]    Run script #2 (which calls `document.querySelector('img').attachmentIdentifier`)
            ...IPC from UI to web process...
        (e) [Web]   Evaluate script #2 in the web process
        (f) [Web]   Zero-delay timer fires and dispatches attachment updates to the UI process

        ...which means that script #2 will complete before the UI process has received the attachment updates sent in
        step (f). However, in the case where the flaky test succeeds, the zero-delay timer in (f) fires *before* script
        #2 is run in step (e).

        This patch fixes the flaky test by waiting until attachment insertion updates are guaranteed to be received in
        the UI process by waiting on a script message posted by the web process, after attachment updates are
        dispatched.

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

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

        Disable Flaky API Test WKAttachmentTests.AddAttachmentToConnectedImageElement
        https://bugs.webkit.org/show_bug.cgi?id=196909

        Reviewed by Wenson Hsieh.

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

2019-04-13  Tadeu Zagallo  <tzagallo@apple.com>

        CodeCache should check that the UnlinkedCodeBlock was successfully created before caching it
        https://bugs.webkit.org/show_bug.cgi?id=196880

        Reviewed by Yusuke Suzuki.

        Add a new function for bytecode cache tests that does not forceDiskCache
        for the second run: runBytecodeCacheNoAssetion. This is necessary for the
        test added in this patch, since the code is invalid and therefore won't be
        cached. It should also be useful for tests that evaluate dynamically
        generated code.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:
        * Scripts/run-jsc-stress-tests:

2019-04-12  Eric Carlson  <eric.carlson@apple.com>

        Update AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=196776
        <rdar://problem/46501611>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::routeSharingPolicyLongFormVideo):
        (TestWebKitAPI::routeSharingPolicyLongFormAudio):
        (TestWebKitAPI::TEST):

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

        [iOS] Software keyboard is shown too frequently on some websites
        https://bugs.webkit.org/show_bug.cgi?id=195856
        <rdar://problem/49191395>

        Reviewed by Darin Adler.

        Add support for attaching or detaching the hardware keyboard on iOS in layout tests.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setHardwareKeyboardAttached):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setHardwareKeyboardAttached):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

        Additionally link against GraphicsServices in WebKitTestRunner.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::UIScriptController::setHardwareKeyboardAttached):

2019-04-12  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK][WPE] Fix pacman install-dependencies packages
        https://bugs.webkit.org/show_bug.cgi?id=196817

        Reviewed by Žan Doberšek.
        
        python3-setuptools is called python-setuptools
        ruby-highline is only available on AUR
        libv4l-devel is incorporated in v4l-utils

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

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

        [GTK] REGRESSION(r243860): Many tests failing
        https://bugs.webkit.org/show_bug.cgi?id=196791

        Reviewed by Joanmarie Diggs.

        Rework the accessibility unit test to use DBus for the communication with the server. This way we can load
        multiple documents and check that accessibility hierarchy is updated after a navigation.

        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp:
        (loadChangedCallback):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::AccessibilityTest):
        (AccessibilityTest::~AccessibilityTest):
        (AccessibilityTest::loadHTMLAndWaitUntilFinished):
        (AccessibilityTest::findTestServerApplication):
        (AccessibilityTest::findDocumentWeb):
        (AccessibilityTest::findRootObject):
        (AccessibilityTest::waitUntilChildrenRemoved):
        (AccessibilityTest::ensureProxy):
        (testAtspiBasicHierarchy):
        (beforeAll):
        (afterAll):

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

        [ews-build] Handle bug titles with unicode characters
        https://bugs.webkit.org/show_bug.cgi?id=196802

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed):

2019-04-11  Michael Saboff  <msaboff@apple.com>

        Improve the Inline Cache Stats code
        https://bugs.webkit.org/show_bug.cgi?id=196836

        Reviewed by Saam Barati.

        Added a new script to consolidate and arrange the output of --useICStats option.

        This script merges the output from every group into one large table and sorts it from most common to
        least common.  It also counts the slow path GetById and PutById variants and then calculates the
        percentage of gets or puts for each unique base,property pair compared to all the gets and puts.
        Put together, this is useful to see what property accesses are not getting cached.

        * Scripts/ic-stats.py: Added.
        (ICStats):
        (ICStats.__init__):
        (ICStats.parse):
        (ICStats.dumpStats):
        (usage):

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

        WKNavigationResponse._downloadAttribute should be nil when no download attribute is present
        https://bugs.webkit.org/show_bug.cgi?id=196809
        <rdar://49800762>

        Reviewed by Brady Eidson.

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

2019-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * Tracing/SystemTracePoints.plist:

2019-04-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use a bundled vswhere.exe instead of downloading by update-vswhere.py
        https://bugs.webkit.org/show_bug.cgi?id=196760

        Reviewed by Don Olmstead.

        vswhere.exe has been bundled since Visual Studio 2017 version
        15.2. We shouldn't download vswhere.exe.

        * Scripts/build-jsc: Do not call update-vswhere.py.
        * Scripts/build-webkit: Ditto.
        * Scripts/update-vswhere.py: Removed.
        * Scripts/webkitdirs.pm:
        (requireModulesForVSWhere): Deleted.
        (pickCurrentVisualStudioInstallation): Deleted.
        (visualStudioInstallDirVSWhere): Return the latest installed VS
        installation path by using the bundled vswhere.exe.
        (setupCygwinEnv): Removed a unused variable $visualStudioPath.
        (visualStudioInstallDirFallback): Removed.

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

        [ews-build] PrintConfiguration should display Xcode version instead of SDKVersion
        https://bugs.webkit.org/show_bug.cgi?id=196780

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

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

        Add SPI WKNavigationResponse._downloadAttribute
        https://bugs.webkit.org/show_bug.cgi?id=196755
        <rdar://49587365>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (-[NavigationResponseTestDelegate navigationResponse]):
        (-[NavigationResponseTestDelegate waitForNavigationResponseCallback]):
        (-[NavigationResponseTestDelegate waitForNavigationFinishedCallback]):
        (-[NavigationResponseTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[NavigationResponseTestDelegate webView:didFinishNavigation:]):
        (-[NavigationResponseTestDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (readRequest):
        (writeResponse):
        (TEST):

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

        Add modern API for overriding the page's specified viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=167734
        <rdar://problem/30331795>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/OverrideViewportArguments.mm: Added.

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

        Add support for incremental bytecode cache updates
        https://bugs.webkit.org/show_bug.cgi?id=195000

        Reviewed by Filip Pizlo.

        Exit when the initial run to generate bytecode fails.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:

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

        RemoteObjectRegistry message receiver should be removed when WebPage::close is called instead of waiting until dealloc
        https://bugs.webkit.org/show_bug.cgi?id=196744
        <rdar://49415309>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm:
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):

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

        Add a way to opt into modern compatibility mode in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196770
        <rdar://problem/49777550>

        Reviewed by Antoine Quint.

        Add a new test option to enable modern compatibility mode in layout tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::enableModernCompatibilityMode):

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

        Try to fix the 32-bit watchOS build.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView evaluateJavaScriptAndWaitForInputSessionToChange:]):

2019-04-10  Antoine Quint  <graouts@apple.com>

        Enable Pointer Events on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=196771
        <rdar://problem/49040909>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed. Fix WPE accessibility tests after r244059.

        We are failing to load the injected bundle due to undefined symbol
        AccessibilityUIElement::replaceTextInRange().

        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-10  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][MiniBrowser] Pull down menu "Disable JavaScript" doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=196727

        Reviewed by Fujii Hironori.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):

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

        [ews-build] Add unit tests for PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=196752

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-04-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build maintenance -- update .xcfilelists.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:

2019-04-09  Zalan Bujtas  <zalan@apple.com>

        [AutoSizing] Avoid making text paragraphs scroll horizontally when there is a wide table
        https://bugs.webkit.org/show_bug.cgi?id=196743
        <rdar://problem/43897551>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm: expected behavior change.
        (TEST):

2019-04-09  Youenn Fablet  <youenn@apple.com>

        Close service worker database on network process suspension
        https://bugs.webkit.org/show_bug.cgi?id=196623
        <rdar://problem/48930869>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [iPad] Should open popover when the spacebar is pressed
        https://bugs.webkit.org/show_bug.cgi?id=196360
        <rdar://problem/49389129>

        Reviewed by Brent Fulgham.

        Add testing infrastructure to support waiting for a popover to be presented or dismissed.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::willPresentPopoverCallback const): Added.
        (WTR::UIScriptController::setDidDismissPopoverCallback): Added.
        (WTR::UIScriptController::didDismissPopoverCallback const): Added.
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]): Update some state.
        (-[TestRunnerWKWebView resetInteractionCallbacks]): Ditto.
        (-[TestRunnerWKWebView _willPresentPopover]): Added.
        (-[TestRunnerWKWebView _didDismissPopover]): Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.

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

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (+[SimpleLookupContext sharedLookupContext]):
        (-[SimpleLookupContext lookUpURL:completionHandler:]):
        (TEST):
        (+[Simple3LookupContext sharedLookupContext]): Deleted.
        (-[Simple3LookupContext lookUpURL:completionHandler:]): Deleted.

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

        Pick up Ad Click Attribution conversions in NetworkResourceLoader::willSendRedirectedRequest()
        https://bugs.webkit.org/show_bug.cgi?id=196558
        <rdar://problem/47650245>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Added tests of WebCore::AdClickAttribution::parseConversionRequest().

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Apple builds should use ICU_INCLUDE_DIRS
        https://bugs.webkit.org/show_bug.cgi?id=196720

        Reviewed by Konstantin Tokarev.

        * TestWebKitAPI/PlatformMac.cmake:

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

        iOS 12 Simulator Release WK2 frequently timing out while running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196694
        <rdar://problem/48388734>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image): If the ImageDiff process has data, kill it before running again.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.has_available_stdout): Check if stdout has data in it.
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        (ServerProcess._wait_for_data_and_update_buffers_using_win32_apis):
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.has_available_stdout):
        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.serial_test_basic):

2019-04-09  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Drive-by bug fix: allow tests to play audio without a user gesture by default.

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

2019-04-09  Pablo Saavedra  <psaavedra@igalia.com>

        [JSCOnly] Add an i386 JSCOnly EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=196690

        Reviewed by Michael Catanzaro.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2019-04-09  Chris Dumez  <cdumez@apple.com>

        Loads using loadHTMLString() cause flashing when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=196714
        <rdar://problem/49637354>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix ATK accessibility tests after r244059.

        We are failing to load the injected bundle due to undefined symbol
        AccessibilityUIElement::replaceTextInRange().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Unreviewed build fix for Windows port.

        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange): Added.

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:

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

        Log stack-trace for run-webkit-tests when interrupted
        https://bugs.webkit.org/show_bug.cgi?id=176393
        <rdar://problem/34262310>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/interrupt_debugging.py: Added.
        (log_stack_trace): Given a Python frame object, log a stack trace to the provided file.
        (StackTraceFileContext): Context which allows stack-traces to be printed to stderr or to a file. 
        (log_stack_trace_on_term): Attach a listener to SIGTERM so that a stack-trace can be logged when a program is terminated.
        (log_stack_trace_on_ctrl_c): Attach a listener to SIGINT so that a stack-trace can be logged when a program is CTRL+Ced. 
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Set handlers to log stack trace on interruption.

2019-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Unreviewed build fix for Windows port.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::replaceTextInRange): Changed the return value type from void to bool.

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

        [ews-build] Scripts using Buildbot API have CORS error
        https://bugs.webkit.org/show_bug.cgi?id=196709

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/master.cfg: Set allowed_origins appropriately.

2019-04-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Reviewed by Daniel Bates.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (replaceTextInRangeCallback):
        (AccessibilityUIElement::replaceTextInRange):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::replaceTextInRange):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::replaceTextInRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::replaceTextInRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::replaceTextInRange):

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

        [iOS] Do not allow starting selection drags when selection views are not visible
        https://bugs.webkit.org/show_bug.cgi?id=196686
        <rdar://problem/49399192>

        Reviewed by Tim Horton.

        Adjust some existing API tests to make the web view become first responder before trying to begin dragging, and
        also add some new API tests to cover scenarios where the web view is not first responder.

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

        Add a switch to optionally make the web view first responder when starting the simulated drag.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator runFrom:to:additionalItemRequestLocations:]):

2019-04-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix Web GPU experimental feature on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196632

        Reviewed by Myles C. Maxfield.

        Properly make Web GPU available on iOS 11+.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [ews-build] Do not upload archive when Compile Fails
        https://bugs.webkit.org/show_bug.cgi?id=196674

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.__init__): Remove steps which require dynamic decision about whether to run or not.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Dynamically decide which steps to run based on compile status.
        (CompileWebKitToT.evaluateCommand): Explicitly override Compile.evaluateCommand so that it 
        doesn't inherit CompileWebKit.evaluateCommand which dynamically adds more steps.

2019-04-08  Guillaume Emont  <guijemont@igalia.com>

        Enable DFG on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=196689

        Reviewed by Žan Doberšek.

        Since the bytecode change, we enabled the baseline JIT on mips in
        r240432, but DFG is still missing. With this change, all tests are
        passing on a ci20 board.

        * Scripts/run-jsc-stress-tests: Enable DFG tests on MIPS.

2019-04-08  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Second run update-webkitwpe-flatpak fails
        https://bugs.webkit.org/show_bug.cgi?id=192702

        Reviewed by Carlos Garcia Campos.

        * flatpak/flatpakutils.py:
        (FlatpakObject.flatpak): Fix typo.
        (FlatpakPackage.install): When installing, also update to the configured remote commit.
        * flatpak/org.webkit.WebKit.yaml: Update GNOME 3.28 SDK/runtime hashes.

2019-04-05  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WPE] outlook.live.com displays old-fashioned UI
        https://bugs.webkit.org/show_bug.cgi?id=196642

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): New Mac platform quirk test.

2019-04-07  Commit Queue  <commit-queue@webkit.org>

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

        Broke API Test SafeBrowsing.WKWebViewGoBackIFrame (Requested
        by aakashjain on #webkit).

        Reverted changeset:

        "Clicking "Go Back" from a safe browsing warning from an
        iframe should navigate the WKWebView back to the previous
        page"
        https://bugs.webkit.org/show_bug.cgi?id=196665
        https://trac.webkit.org/changeset/243956

2019-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Added tests for WeakHashSet::computesEmpty and WeakHashSet::computeSize
        https://bugs.webkit.org/show_bug.cgi?id=196669

        Reviewed by Geoffrey Garen.

        Added three new unit tests for WeakHashSet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (WTF_WeakPtr.WeakHashSetConstObjects):
        (WTF_WeakPtr.WeakHashSetComputesEmpty):
        (WTF_WeakPtr.WeakHashSetComputeSize):

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

        Hide next and previous form control buttons when WKWebView is editable
        https://bugs.webkit.org/show_bug.cgi?id=196672
        <rdar://problem/35625321>

        Reviewed by Tim Horton.

        Add a new API test.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[TestWKWebView lastTrailingBarButtonGroup]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-04-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should pass minimumEffectiveDeviceWidth to web process on new page creation.
        https://bugs.webkit.org/show_bug.cgi?id=196077
        <rdar://problem/49108202>

        Reviewed by Chris Dumez.

        Add an API test to verify the minimumEffectDeviceWidth is passed to web content process
        on new web view.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-05  Saam Barati  <sbarati@apple.com>

        Make compare-results understand MotionMark
        https://bugs.webkit.org/show_bug.cgi?id=196666

        Reviewed by Yusuke Suzuki.

        * Scripts/compare-results:
        (PLT5Results):
        (detectMotionMark):
        (detectMotionMark1_1):
        (motionMarkResults):
        (motionMark1_1Results):
        (detectBenchmark):
        (biggerIsBetter):
        (main):

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

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (+[SimpleLookupContext sharedLookupContext]):
        (-[SimpleLookupContext lookUpURL:completionHandler:]):
        (TEST):
        (+[Simple3LookupContext sharedLookupContext]): Deleted.
        (-[Simple3LookupContext lookUpURL:completionHandler:]): Deleted.

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

        [ews-build] Add configuration and architecture for windows builders
        https://bugs.webkit.org/show_bug.cgi?id=196660

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

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

        webkitpy: Don't run subsequent rounds if interrupted
        https://bugs.webkit.org/show_bug.cgi?id=196646

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Bail out if interrupted.

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

        Test sessionStorage in PSON private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=196561

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-05  Commit Queue  <commit-queue@webkit.org>

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

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

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

        Simple iframe scrolling test fails to get a composited scrolling frame in WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=196635

        Reviewed by Antti Koivisto.
        
        InjectedBundle::beginTesting() calling WKBundleSetAsyncFrameScrollingEnabled() makes it impossible
        for a test to enable async frame scrolling via:
            <!-- webkit-test-runner [ internal:AsyncFrameScrollingEnabled=true ] -->
        so remove it and have TestController::resetPreferencesToConsistentValues() set the default value.
        
        Test: scrollingcoordinator/ios/programmatic-frame-scroll.html

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-04-04  Alexey Proskuryakov  <ap@apple.com>

        Use a correct LC_RPATH when building with ASan
        https://bugs.webkit.org/show_bug.cgi?id=196576

        Reviewed by David Kilzer.

        * asan/asan.xcconfig: As a temporary hack, just force LC_RPATH on all binaries,
        so that ../Frameworks is checked. This is simpler and more reliable than updating
        each SPC service xcconfig.

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

        Disable Flaky API Test TestWebKitAPI.WebKit.FocusTextInputContext
        https://bugs.webkit.org/show_bug.cgi?id=196629

        Reviewed by Lucas Forschler.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:

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

        [ews-app] while waiting in queue status-bubble for testers queues should display build information from builder queue
        https://bugs.webkit.org/show_bug.cgi?id=196618

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added QUEUE_TRIGGERS.
        (StatusBubble._build_bubble): Get the build from builder if tester has not started the build yet.
        (StatusBubble._get_parent_queue): Get the name of the parent (builder) queue.
        (StatusBubble.get_latest_build_for_queue): If the queue doesn't have any build yet, return build information from
        its parent(builder).

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

        [ews-app] Status-bubble steps are sometimes displayed in reverse order
        https://bugs.webkit.org/show_bug.cgi?id=196625

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._steps_messages): Explicitly specify order_by('uid').

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

        Disable Flaky API Test TestWebKitAPI.KeyboardInputTests.KeyboardTypeForInput
        https://bugs.webkit.org/show_bug.cgi?id=196630

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2019-04-04  Youenn Fablet  <youenn@apple.com>

        Pass storage quota parameters from UIProcess to NetworkProcess as part of WebsiteDataStore parameters
        https://bugs.webkit.org/show_bug.cgi?id=196543

        Reviewed by Alex Christensen.

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

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

        [ews-app] Status bubble should not display skipped buildbot steps
        https://bugs.webkit.org/show_bug.cgi?id=196584

        Reviewed by Lucas Forschler.

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

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

        [ews-app] configure localhost as BUILDBOT_SERVER_HOST in testing mode
        https://bugs.webkit.org/show_bug.cgi?id=196620

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py:

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

        [Win] DumpRenderTreeWatchDog.py is not checked into source
        https://bugs.webkit.org/show_bug.cgi?id=196567
        <rdar://problem/49525901>

        Reviewed by Lucas Forschler.

        This script is used on Win EWS bots to terminate hanging DRT processes.

        * EWSTools/dumprendertreewatchdog.py: Added.

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r243858 which made tests time out.

        Disable new API tests on Windows instead.

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

2019-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Cleanup WebPageAccessibilityObjectAtk
        https://bugs.webkit.org/show_bug.cgi?id=196537

        Reviewed by Michael Catanzaro.

        Also consider files under atk directories as exceptions for GObject conventions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2019-04-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Unreviewed build fix for Windows port.

        error C3861: 'kill': identifier not found

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST): Replaced kill with WKPageTerminate.

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

        [ews-build] Cancel build and similar operations should have authentication
        https://bugs.webkit.org/show_bug.cgi?id=196520

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/master.cfg: Configure authentication using admin's username and password from
        environment variables.

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

        [ews-build] Do not trigger queues which are not in production yet
        https://bugs.webkit.org/show_bug.cgi?id=196581

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/config.json:

2019-04-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typo in the name of API test added in r243848.

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

2019-04-03  Chris Dumez  <cdumez@apple.com>

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::nullJavaScriptCallback):
        (TestWebKitAPI::didCrashCheckFrames):
        (TestWebKitAPI::TEST):

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

        run-webkit-tests: Upload test results (new results database)
        https://bugs.webkit.org/show_bug.cgi?id=196577
        <rdar://problem/34841155>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Upload results after each device shard, since the configuration will be
        different for each device.
        (Manager._results_to_upload_json_trie): Convert a TestRunResults object to a trie to be
        uploaded to a results database.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Add new 'Upload Options' and prepare 'Results JSON Options' for deprecation.

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
        builds.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformWin.cmake:

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

        [ews-app] Status bubble should not display certain infrastructure status messages
        https://bugs.webkit.org/show_bug.cgi?id=196550

        Reviewed by Lucas Forschler.

        Do not display the steps which are un-needed for end-user. This information is still avaiable
        if the user click on the bubble and look at the Buildbot build.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._steps_messages):
        (StatusBubble._should_display_step): Method to decide whether to display the step or not.

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

        [ews-build] Use https for sending data to ews-app
        https://bugs.webkit.org/show_bug.cgi?id=196492

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

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

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Add a test for DOMCache on multiple browsing in case of private browsing
        https://bugs.webkit.org/show_bug.cgi?id=196524

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForCacheStorage userContentController:didReceiveScriptMessage:]):

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

        [ews] Clean out ~/Library/Logs/CoreSimulator/ on reboot
        https://bugs.webkit.org/show_bug.cgi?id=196540

        Reviewed by Aakash Jain.

        * EWSTools/start-queue-mac.sh: Remove CoreSimulator logs.

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

        Add plumbing for a compatibility mode preference in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196005

        Reviewed by Tim Horton.

        Add new API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/ios/PreferredCompatibilityMode.mm: Added.

2019-04-03  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Update libsrtp dependency package for Debian
        https://bugs.webkit.org/show_bug.cgi?id=196528

        Reviewed by Frédéric Wang.

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

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478
        <rdar://problem/49535124>

        Unreviewed build fix for MSVC.

        > WebKitTestRunner\TestController.cpp(267): error C2397: conversion from 'double' to 'float' requires a narrowing conversion

        And, there is a style guideline. <https://webkit.org/code-style-guidelines/#floating-point-literals>

        * WebKitTestRunner/TestController.cpp:
        (WTR::printFrame): Use int and float literals.

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

        [ews-build] Reassign bots to queues

        * BuildSlaveSupport/ews-build/config.json: Reassigned ews150 and ews152.

2019-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478

        Reviewed by Alex Christensen.

        Add minimal implementation for printFrame in WebKitTestRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::printFrame):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

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

        [ews-app] Status bubble hover over message should clearly indicate that build is in-progress
        https://bugs.webkit.org/show_bug.cgi?id=196491

        Reviewed by Lucas Forschler.

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

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

        [ews-build] Configure buildbot try credentials in environment variables
        https://bugs.webkit.org/show_bug.cgi?id=196501

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py: Read credentials from environment variables.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py: Rename BUILDBOT_PB_USERNAME to BUILDBOT_TRY_USERNAME.
        * BuildSlaveSupport/ews-app/ews/config.py: Ditto.

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

        REGRESSION (r243726): Crash at unrecognized selector: -[WKWebpagePreferences webpagePreferences]
        https://bugs.webkit.org/show_bug.cgi?id=196496
        <rdar://problem/49521634>

        Reviewed by Chris Dumez.

        Add new API tests (see WebKit ChangeLog for more detail).

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesNavigationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (TEST):

2019-04-02  David Kilzer  <ddkilzer@apple.com>

        Rename CLANG_ADDRESS_SANITIZER Xcode variable to ENABLE_ADDRESS_SANITIZER
        <https://webkit.org/b/196499>

        Reviewed by Alexey Proskuryakov.

        * asan/asan.xcconfig: Change CLANG_ADDRESS_SANITIZER to
        ENABLE_ADDRESS_SANITIZER.

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
        https://bugs.webkit.org/show_bug.cgi?id=182757

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformGTK.cmake: Removed the workaround of using an intermediate target.
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.

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

        run-api-tests: Upload test results
        https://bugs.webkit.org/show_bug.cgi?id=196323
        <rdar://problem/49356714>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager):
        (Manager.run): Upload results to a results database.
        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Add upload arguments.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.configuration_for_upload): Creates a configuration dictionary for uploading results.
        (Port.commits_for_upload): Create a list of commits from the WebKit repository tests are run from along
        with commits from any other associated repositories.
        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.build_version): Access build_versoin of underlying platform device.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.test_configuration_for_upload):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.configuration_for_upload): Devices are unique because their configuration is not
        the same as the machine uploading results.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.configuration_for_upload): Define SDK in upload configuration for Mac.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_configuration_for_upload):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_device_with_runtime):
        (SimulatedDevice.__init__): Create simulated device with a build_version.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_existing_simulator):

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

        Remove extra newline characters (Follow-up fix to r243707)

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

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

        [ews-app] Use API_KEY to accept results data
        https://bugs.webkit.org/show_bug.cgi?id=196461

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/views/results.py:
        (Results.post): Validate EWS_API_KEY before accepting any data.
        * BuildSlaveSupport/ews-build/events.py:
        (Events.sendData): Send EWS_API_KEY if available along with event data.

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

        Unable to copy and paste a PDF from Notes into Mail compose body
        https://bugs.webkit.org/show_bug.cgi?id=196442
        <rdar://problem/48573098>

        Reviewed by Tim Horton.

        Add new API tests to exercise pasting CNContact and MKMapItem-backed item providers. Additionally, adjust an
        existing test that pastes a PDF file as an attachment to not require UIPreferredPresentationStyleAttachment
        to be specified on the item providers.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::mapItemForTesting):
        (TestWebKitAPI::contactItemForTesting):

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

        Make UIWKDocumentContext rects per-character instead of per-word
        https://bugs.webkit.org/show_bug.cgi?id=196459

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        Adjust test results due to switching to per-character rects.

2019-04-01  Chris Dumez  <cdumez@apple.com>

        UIProcess crash when a prewarmed process is terminated
        https://bugs.webkit.org/show_bug.cgi?id=196451
        <rdar://problem/49245471>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

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

        [ews-app] Display OS and Xcode configuration in status-bubble's hover-over message
        https://bugs.webkit.org/show_bug.cgi?id=196449

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.get_os_details): Method to get OS and Xcode details.
        (StatusBubble._build_bubble): Moved the timestamp logic to common method.
        (StatusBubble.get_build_timestamp): Method to get the timestamp to display for the build.

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

        [ews-build] Remove force schedulers from OpenSource EWS Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=196444

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py: Remove ForceSchedulers.

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

        Add SPI to canonicalize NSURLs with WTF::URL
        https://bugs.webkit.org/show_bug.cgi?id=196415
        <rdar://problem/44980271>

        Reviewed by Darin Adler.

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

2019-04-01  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] EventSenderProxy constructor is called before a PlatformWindow is usable
        https://bugs.webkit.org/show_bug.cgi?id=196441

        Reviewed by Carlos Garcia Campos.

        Don't cache the wpe_view_backend object that might not exist yet at the
        time of EventSenderProxy constructor invocation, but instead retrieve
        that object whenever it's required for event dispatching. This should
        avoid crashes in this constructor now that it's invoked before any
        PlatformWindow has been set up (as changed in r243496).

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::viewBackend):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::prepareAndDispatchTouchEvent):

2019-03-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKit] MiniBrowser should support high DPI display
        https://bugs.webkit.org/show_bug.cgi?id=196391

        Reviewed by Alex Christensen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Call resetZoom to set the page zoom factor.
        (WebKitBrowserWindow::resetZoom): Changed the default page zoom factor from 1 to the device scale factor.
        * MiniBrowser/win/stdafx.h: Define WEBCORE_EXPORT.

2019-03-31  Sam Weinig  <weinig@apple.com>

        Remove more i386 specific configurations
        https://bugs.webkit.org/show_bug.cgi?id=196430

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        ENABLE_WEB_AUTHN_macosx and ENABLE_WEB_RTC_macosx can now be enabled unconditionally on macOS.

2019-03-31  Andy Estes  <aestes@apple.com>

        [iOS] WebKit should consult the navigation response policy delegate before previewing a QuickLook document
        https://bugs.webkit.org/show_bug.cgi?id=196433
        <rdar://problem/49293305>

        Reviewed by Tim Horton.

        Enhanced API test coverage to include all navigation response policy decisions in both
        linked-before and linked-on-or-after modes. Also added new expectations for all tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ios/PreviewConverter.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (readFile):
        (-[QuickLookDelegate initWithExpectedFileURL:responsePolicy:]):
        (-[QuickLookDelegate initWithExpectedFileURL:previewMIMEType:responsePolicy:]):
        (-[QuickLookDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[QuickLookDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[QuickLookDelegate _webViewWebProcessDidCrash:]):
        (-[QuickLookDelegate _downloadDidStart:]):
        (-[QuickLookDelegate _download:didReceiveResponse:]):
        (-[QuickLookDelegate _download:didReceiveData:]):
        (-[QuickLookDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[QuickLookDelegate _downloadDidFinish:]):
        (-[QuickLookDelegate _download:didFailWithError:]):
        (-[QuickLookDelegate _downloadDidCancel:]):
        (-[QuickLookDelegate verifyDownload]):
        (runTest):
        (runTestDecideBeforeLoading):
        (runTestDecideAfterLoading):
        (TEST):
        (-[QuickLookAsyncDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookPasswordDelegate _webViewDidRequestPasswordForQuickLookDocument:]):
        (-[QuickLookFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[QuickLookNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): Deleted.
        (-[QuickLookNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): Deleted.
        (-[QuickLookNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[QuickLookDecidePolicyDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[QuickLookDecidePolicyDelegate webView:didFailProvisionalNavigation:withError:]): Deleted.
        (-[QuickLookDecidePolicyDelegate _webViewWebProcessDidCrash:]): Deleted.
        (-[QuickLookPasswordNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]): Deleted.

2019-03-30  Dominik Infuehr  <dinfuehr@igalia.com>

        [CMake] add testdfg as target with build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=196393

        Reviewed by Saam Barati.

        Added testdfg as one of the targets to build when
        using CMake.

        * Scripts/build-jsc:

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyBuffer.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyCommandQueue.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyDevice.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyFunction.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyLibrary.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyTest.h: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebMetalEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        REGRESSION (r243523): Six form-related watchOS layout tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=196405
        <rdar://problem/49428130>

        Reviewed by Wenson Hsieh.

        Add a shouldPresentPopovers=false WebKitTestRunner option to cause WKTR to swizzle
        the popover presentation methods to be no-ops. Use this in the new test added in
        r243523 so that we do not swizzle those methods for all tests. This is needed because
        those WatchOS tests rely on the popover getting presented and interactive.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformResetStateToConsistentValues):

2019-03-29  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Add Server Trust Evaluation Support.
        https://bugs.webkit.org/show_bug.cgi?id=191646

        Reviewed by Fujii Hironori.

        Implemented MiniBrowser UI for asking if user trusts the server.

        * MiniBrowser/win/Common.cpp:
        (askServerTrustEvaluation):
        (replaceString):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createPEMString):
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):
        (WebKitBrowserWindow::canTrustServerCertificate):
        * MiniBrowser/win/WebKitBrowserWindow.h:

2019-03-29  Cathie Chen  <cathiechen@igalia.com>

        Implement ResizeObserver.
        https://bugs.webkit.org/show_bug.cgi?id=157743

        Reviewed by Simon Fraser.

        Support resizeObserverEnabled webPreferences.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Resource Load Statistics: IPC to the WebsiteDataStore in the UI process from NetworkProcess::deleteWebsiteDataForRegistrableDomains()
        https://bugs.webkit.org/show_bug.cgi?id=196281
        <rdar://problem/48938748>

        Reviewed by Alex Christensen.

        This patch adds the function isStatisticsHasLocalStorage() to the
        TestRunner. With it, the page can query the WebsiteDataStore in the
        UI process to make sure that it sees LocalStorage.

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

2019-03-28  Jiewen Tan  <jiewen_tan@apple.com>

        API::Data::createWithoutCopying should do a null check before calling CFRelease
        https://bugs.webkit.org/show_bug.cgi?id=196276
        <rdar://problem/48059859>

        Reviewed by Alex Christensen.

        Add an API test that will pass a nil to API::Data::createWithoutCopying via NavigationState::NavigationClient::webCryptoMasterKey.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/navigation-client-default-crypto.html:
        * TestWebKitAPI/Tests/WebKitCocoa/WebCryptoMasterKey.mm: Added.
        (-[WebCryptoMasterKeyNavigationDelegate _webCryptoMasterKeyForWebView:]):
        (-[WebCryptoMasterKeyNavigationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] webkit_web_resource_get_data_finish can return NULL without setting error
        https://bugs.webkit.org/show_bug.cgi?id=186276

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (webViewLoadChanged):
        (testWebResourceGetDataError):
        (testWebResourceGetDataEmpty):
        (beforeAll):
        (webViewloadChanged): Deleted.

2019-03-27  Andy Estes  <aestes@apple.com>

        REGRESSION (r242686): package-root creates roots with broken symlinks in WebKit.framework/XPCServices/
        https://bugs.webkit.org/show_bug.cgi?id=196317

        Reviewed by Dan Bernstein.

        package-root copies built products into a staging directory using ditto(1), which does not
        follow symbolic links as it traverses a directory. Now that the files in
        WebKit.framework/XPCServices/ are symbolic links to a location outside of the framework
        itself, these become broken links when ditto'd into the staging directory.

        To account for this, change package-root to copy using cp(1) in a mode that follows symlinks.

        * Scripts/package-root:

2019-03-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Update display text of Submit for ews analysis
        https://bugs.webkit.org/show_bug.cgi?id=196309

        Reviewed by Dewei Zhu.

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

2019-03-27  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests should check for leaks in WebKit processes
        <https://webkit.org/b/193772>
        <rdar://problem/46526680>

        Reviewed by Ryosuke Niwa.

        This works by doing the following:
        - Add a "#LIST CHILD PROCESSES" command to WebKitTestRunnner.
          The list of child processes are returned one per line:
          process.name: pid
        - Run the "#LIST CHILD PROCESSES" command just before the
          "#CHECK FOR WORLD LEAKS" command, and store the list of child
          processes on the ServerProcess object.
        - When the `--leaks` switch is handled, run check_for_leaks() on
          each child process after the main test harness.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (handleControlCommand):
        - Use strncmp() instead of strcmp().
        - Add support for handling "#LIST CHILD PROCESSES" command.

        * Scripts/webkitpy/port/base.py:
        (Port.check_for_leaks):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/driver.py:
        (Driver.do_post_tests_work):
        - Restructure the logic since "#CHECK FOR WORLD LEAKS" is no
          longer the only command this sends to WebKitTestRunner.
        - If the `--leaks` switch is present, send the
          "#LIST CHILD PROCESSES" to WebKitTestRunner and store the
          result using Port.set_webkit_processes().
        (Driver._parse_child_processes_output):
        - Add helper method to parse list of child process names and
          process IDs returned from WebKitTestRunner.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._parse_leaks_output):
        - Return early if there is no leaks_output.
        (LeakDetector.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__):
        (ServerProcess.child_processes):
        (ServerProcess.set_child_processes):
        - Add instance variable to Port to store list of child process
          names and process IDs returned from WebKitTestRunner.
        (ServerProcess._start):
        - Clear self._child_processes.
        (ServerProcess.stop):
        - If self._child_processes is set, call
          self._port.check_for_leaks() for each child process.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (TrivialMockPort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop):
        - If self._child_processes is set, call
          self._port.check_for_leaks() for each child process.

        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::dumpResponse):
        - Extract method from findAndDumpWorldLeaks() so that it may be
          reused by findAndDumpWebKitProcessIdentifiers().
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Add method to output process name and process ID of both the
          WebContent and Networking processes.
        (WTR::TestController::findAndDumpWorldLeaks):
        - Fix missing newline in output when there were no abandoned
          documents.
        - Call dumpResponse() for extracted code.
        (WTR::TestController::handleControlCommand):
        - Restructure the logic for "#CHECK FOR WORLD LEAKS".
        - Use strncmp() instead of strcmp().
        - Call findAndDumpWebKitProcessIdentifiers() when
          "#LIST CHILD PROCESSES" command is sent.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::dumpResponse):
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Declare methods.

2019-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add GLib API test cases after r243434.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testWebViewActiveURI):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (sendRequestCallback):

2019-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Geolocation request not complete when watch request was started in a different web process
        https://bugs.webkit.org/show_bug.cgi?id=195996

        Reviewed by Alex Christensen.

        Add a test case.

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):

2019-03-26  Keith Rollin  <krollin@apple.com>

        Update the way generate-xcfilelists returns strings from functions
        https://bugs.webkit.org/show_bug.cgi?id=195975
        <rdar://problem/49040807>

        Reviewed by Dean Jackson.

        There are places where generate-xcfilelists executes assignments with
        statements like:

            FOO=$(some_function)

        where "some_function" return a string by echoing it. E.g.

            some_function()
            {
                echo "Hello, World"
            }

        This is a common idiom, but it has a problem if "some_function" needs
        to call "exit" in an attempt to halt the entire script right then and
        there. Since "some_function" is called inside of $(), it's being
        executed in a sub-shell. Calling exit in that sub-shell simply exits
        that shell; it doesn't not exit the outer shell in which the main part
        of the script is still running. As such, the main script keeps
        executing when the intent was for the script to halt.

        The solution to this is to use a different idiom for returning
        strings. The one we now is to pass in the name of the variable to
        receive the string result:

            some_function()
            {
                variable_name=$1
                eval $variable_name ="Hello, World"
            }

        The call site now looks like

            some_function FOO

        Because there's no invocation of a sub-shell, some_function can now
        call "exit" if it wants to, and the entire script will exit at that
        point.

        * Scripts/generate-xcfilelists:

2019-03-26  Chris Dumez  <cdumez@apple.com>

        Add basic layout test coverage for File Picker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196265

        Reviewed by Wenson Hsieh.

        Add layout test infrastructure to test the file picker on iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFilePicker):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dismissFilePicker):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overridePresentViewController):
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFilePicker):

2019-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement async paste method on UIWKInteractionViewProtocol
        https://bugs.webkit.org/show_bug.cgi?id=196267
        <rdar://problem/49236346>

        Reviewed by Tim Horton.

        Add a new test to exercise the new SPI. Additionally, add staging forward declarations for
        -pasteWithCompletionHandler:, and remove some old existing staging declarations for other bits of UIKit SPI that
        are now a part of all iOS 12 internal SDKs.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:

        While we're here, also change a few iOS 11.3 checks to just be about PLATFORM(IOS) (since we don't build for iOS
        prior to 12, these version checks are effectively only about iOS vs. tvOS or watchOS).

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _sendQueuedAdditionalItemRequest]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use PostgreSQL for ews.webkit.org database
        https://bugs.webkit.org/show_bug.cgi?id=196270

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2019-03-26  Jonathan Bedard  <jbedard@apple.com>

        [ews] Reset simctl states on reboot
        https://bugs.webkit.org/show_bug.cgi?id=196260

        Rubber-stamped by Aakash Jain.

        * EWSTools/start-queue-mac.sh:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use PostgreSQL for ews-build database
        https://bugs.webkit.org/show_bug.cgi?id=196229

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Get master_hostname dynamically in master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=196255

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg: Get hostname dynamically. Also do not
        send events data in test mode.

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set db_constraint to False for Foreign Keys
        https://bugs.webkit.org/show_bug.cgi?id=196252

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] is_test_mode_enabled should default to True
        https://bugs.webkit.org/show_bug.cgi?id=196248

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg: Reverse the environment variable used to decide is_test_mode_enabled.

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add webkitperl to ENABLED_QUEUES
        https://bugs.webkit.org/show_bug.cgi?id=196253

        Reviewed by Lucas Forschler.

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

2019-03-25  Alexey Proskuryakov  <ap@apple.com>

        Address NSWindow sometimes using WebKitTestRunnerEvent too early
        https://bugs.webkit.org/show_bug.cgi?id=196211
        rdar://problem/49110552

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::initialize):
        Make sure that EventSenderProxy always exists when running tests. We used to create
        it when resetting before the first test, which is a bit too late.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::TestController::finishCreatingPlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Moved some code that made NSWindow use NSEvent during web view creation. We may
        need to move more if some other case us found, but this is enough for now.

2019-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix typo in GLib geolocation API after r243285.

        gelocation -> geolocation.

        * TestWebKitAPI/Tests/WebKitGLib/TestGeolocationManager.cpp:
        (testGeolocationManagerWatchPosition):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added.
        (credentialWithIdentityAndKeychainPath):
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Expected shouldn't assume its contained types are copyable
        https://bugs.webkit.org/show_bug.cgi?id=195986

        Reviewed by JF Bastien.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::NonCopyable::operator== const):
        (TestWebKitAPI::NonCopyable::operator!= const):
        (TestWebKitAPI::TEST):

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

        Remove some now-unnecessary dynamic class lookup
        https://bugs.webkit.org/show_bug.cgi?id=196237

        Reviewed by Simon Fraser.

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

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

        Unreviewed, rolling out r243450.

        AppleWin and WinCairo port builds get broken.

        Reverted changeset:

        "Add test for fix of #196095"
        https://bugs.webkit.org/show_bug.cgi?id=196097
        https://trac.webkit.org/changeset/243450

2019-03-25  Commit Queue  <commit-queue@webkit.org>

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

        the test doesn't build (Requested by thorton on #webkit).

        Reverted changeset:

        "Do not terminate the NetworkProcess if a third party
        application sends a NSCredential with a SecIdentityRef"
        https://bugs.webkit.org/show_bug.cgi?id=196213
        https://trac.webkit.org/changeset/243465

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added.
        (credentialWithIdentityAndKeychainPath):
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

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

        [ews-build] Gracefully handle missing patch_id in events
        https://bugs.webkit.org/show_bug.cgi?id=196216

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:

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

        [ews-build] use lz4 compression for improving buildbot performance
        https://bugs.webkit.org/show_bug.cgi?id=196155

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

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

        Pull some API testing helper methods out of TestWKWebView
        https://bugs.webkit.org/show_bug.cgi?id=196212

        Reviewed by Tim Horton.

        Refactor some more API testing utility methods, so that they can be used in
        tests that do not use TestWKWebView.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView loadTestPageNamed:]):
        (-[WKWebView synchronouslyLoadHTMLString:baseURL:]):
        (-[WKWebView synchronouslyLoadHTMLString:]):
        (-[WKWebView synchronouslyLoadTestPageNamed:]):
        (-[TestWKWebView loadTestPageNamed:]): Deleted.
        (-[TestWKWebView synchronouslyLoadHTMLString:baseURL:]): Deleted.
        (-[TestWKWebView synchronouslyLoadHTMLString:]): Deleted.
        (-[TestWKWebView synchronouslyLoadTestPageNamed:]): Deleted.

2019-03-25  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Drive-by bug fix: allow tests to play audio without a user gesture by default.

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

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

        Pull IPadUserInterfaceSwizzler out into a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=196193

        Reviewed by Anders Carlsson.

        Pull the IPadUserInterfaceSwizzler helper class out into a separate file, so that it may
        be used in other API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler): Deleted.
        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom): Deleted.
        * TestWebKitAPI/ios/IPadUserInterfaceSwizzler.h: Added.
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler):
        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom):

2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove NavigatorContentUtils in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=196070

        Reviewed by Alex Christensen.

        NavigatorContentUtils was to support the custom scheme spec [1].
        However, in WebKit side, no port has supported the feature in
        WebKit layer after EFL port was removed. So there has been the
        only IDL implementation of the NavigatorContentUtils in WebCore.
        So we don't need to keep the implementation in WebCore anymore.

        [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [watchOS] Remove unused Proximity Networking code
        https://bugs.webkit.org/show_bug.cgi?id=196188

        Reviewed by Tim Horton.

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

2019-03-23  Keith Miller  <keith_miller@apple.com>

        Refactor clz/ctz and fix getLSBSet.
        https://bugs.webkit.org/show_bug.cgi?id=196162

        Reviewed by Saam Barati.

        Add tests for clz, ctz, getLSBSet, and getMSBSet.

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

2019-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] check-webkit-style doesn't complain about identifiers with underscores in files under glib, gtk or wpe dirs
        https://bugs.webkit.org/show_bug.cgi?id=196143

        Reviewed by Michael Catanzaro.

        Fix the check for the exception of identifiers starting with webkit_ in files under glib, gtk or wpe
        directories.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2019-03-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Manifest expanding fails for qt WPE extension
        https://bugs.webkit.org/show_bug.cgi?id=196148

        Reviewed by Alex Christensen.

        * flatpak/flatpakutils.py:
        (expand_submodules_recurse): The last recurse manifest expand
        iteration might lead to a single module so take it into account
        and don't try to recurse further.

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

        [ iOS Simulator] REGRESSION (r241821) Layout Test platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html is a flaky failure on bots
        https://bugs.webkit.org/show_bug.cgi?id=195348
        <rdar://problem/48622090>

        Reviewed by Alex Christensen.

        Make sure webView.configuration.preferences._shouldIgnoreMetaViewport gets reset
        to NO when test.options().shouldIgnoreMetaViewport is false.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):

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

        Prewarmed processes should be usable with any website data store
        https://bugs.webkit.org/show_bug.cgi?id=196104

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (runInitialWarmedProcessUsedTest):
        (TEST):

2019-03-22  David Kilzer  <ddkilzer@apple.com>

        Back out local changes to Alex's Subversion working directory

        They were accidentally committed.

        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive.wait_newest):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.running_pids):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_running_pids):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.check_for_leaks):
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector.check_for_leaks):
        - This was the hack attached to Bug 193772.

        * WebKitTestRunner/mac/WebKitTestRunnerEvent.mm:
        (+[WebKitTestRunnerEvent mouseLocation]):
        - This works around a crash on an internal build.

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

        Fix the build after r243354
        https://bugs.webkit.org/show_bug.cgi?id=196138
        <rdar://problem/49145951>

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

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

        Adopt UIWKDocumentContext
        https://bugs.webkit.org/show_bug.cgi?id=196040
        <rdar://problem/48642440>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm: Added.
        (makeRequest):
        (-[TestWKWebView synchronouslyRequestDocumentContext:]):
        (-[TestWKWebView synchronouslyAdjustSelectionWithDelta:]):
        (applyStyle):
        (TEST):
        Add tests for UIWKDocumentContext.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        (TEST):
        (recursiveFindWKContentView): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (recursiveFindWKContentView):
        (-[TestWKWebView wkContentView]):
        * TestWebKitAPI/ios/UIKitSPI.h:
        Share the WKContentView finding code between tests.

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn on async overflow scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=196011
        rdar://problem/48453859

        Reviewed by Antti Koivisto.
        
        Explicitly turn off the async overflow scrolling internal feature for tests by default,
        since so many basic layout tests have different results when compositing is triggered for
        overflow.
        
        Individual tests will re-enable with <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->.

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

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Retry API test in case of failures
        https://bugs.webkit.org/show_bug.cgi?id=196004

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (UnApplyPatchIfRequired.doStepIf): Updated doStepIf to include patchFailedAPITests.
        (CompileWebKitToT.doStepIf): Ditto.
        (RunAPITests.evaluateCommand): Check if tests failed and retry them if required.
        (ReRunAPITests): Re-run API tests.
        (ReRunAPITests.evaluateCommand): Check if tests failed and retry on clean build if required.
        (RunAPITestsWithoutPatch): Run API tests without patch.
        (RunAPITestsWithoutPatch.doStepIf):
        (RunAPITestsWithoutPatch.hideStepIf):
        (RunAPITestsWithoutPatch.evaluateCommand):
        (AnalyzeAPITestsResults): Analyze API test results from previous runs.
        (AnalyzeAPITestsResults.start):
        (AnalyzeAPITestsResults.analyzeResults): Analyze API test results.
        (AnalyzeAPITestsResults.getBuildStepByName): Search for a build step by name.
        (AnalyzeAPITestsResults.getTestsResults): Get the test results from previous API tesst steps.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Monkey patched FakeBuild.

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update queues configurations
        https://bugs.webkit.org/show_bug.cgi?id=196074

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/config.json: Updated queues from iOS11 to iOS12,
        added new bots, reassigned bots for various builders, moved few builders to another scheduler.

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Generate status-bubble hover-over messages (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=195680
        <rdar://problem/48903534>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Do not append to details_message in the cases in which it wasn't defined earlier.

2019-03-21  Andy Estes  <aestes@apple.com>

        [iOS] Apple Pay should be available in documents with no user agent scripts
        https://bugs.webkit.org/show_bug.cgi?id=196061
        <rdar://problem/48649391>

        Reviewed by Brady Eidson.

        Added API tests and related infrastructure.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm: Added.
        (-[TestApplePayScriptMessageHandler initWithExpectation:]):
        (-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-active-session.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-in-iframe.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html: Added.
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (-[TestProtocol startLoading]):
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.h: Added.
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.mm: Added.
        (-[WebProcessPlugInWithInternals webProcessPlugIn:didCreateBrowserContextController:]):
        (-[WebProcessPlugInWithInternals webProcessPlugInBrowserContextController:didClearWindowObjectForFrame:inScriptWorld:]):

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

        REGRESSSION (r243297): webkitpy tests broken
        https://bugs.webkit.org/show_bug.cgi?id=196108

        Reviewed by Aakash Jain.

        r243297 updated contributors.json, which broke a few unit tests.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:

2019-03-21  Chris Dumez  <cdumez@apple.com>

        WebKit should throw when trying to create a WKWebView with a related view that is using a different data store
        https://bugs.webkit.org/show_bug.cgi?id=196041
        <rdar://problem/49083230>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform applications of WKContentRuleList actions
        https://bugs.webkit.org/show_bug.cgi?id=195965
        <rdar://problem/42664365>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::allActionsForResourceLoad):
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (Notification::description):
        (Notification::operator== const):
        (toVector):
        (-[ContentRuleListNotificationDelegate _webView:URL:contentRuleListIdentifiers:notifications:]):
        (-[ContentRuleListNotificationDelegate _webView:contentRuleListWithIdentifier:performedActionOnURL:blockedLoad:blockedCookies:madeHTTPS:notifications:]):
        (makeContentRuleList):
        (TEST):
        (makeWarnContentRuleList): Deleted.

2019-03-21  Timothy Hatcher  <timothy@apple.com>

        Style check error "WK_MAC_TBA is neither a version number nor WK_IOS_TBA" is confusing.
        https://bugs.webkit.org/show_bug.cgi?id=196088

        Reviewed by Brian Burg.

        Fix the error messages used when looking for macos(WK_IOS_TBA) or ios(WK_MAC_TBA).
        Support checks when only one platform is specified. Also deprecate macosx() and
        force the use of macos() instead.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_min_versions_of_wk_api_available):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_min_versions_of_wk_api_available):

2019-03-21  Alexey Proskuryakov  <ap@apple.com>

        Update status inactive committers' status to 'contributor'.

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

2019-03-21  Xan Lopez  <xan@igalia.com>

        [JSC][x86] Drop support for x87 floating point
        https://bugs.webkit.org/show_bug.cgi?id=194853

        Reviewed by Don Olmstead.

        Force SSE2 on x86/32bit builds.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
        https://bugs.webkit.org/show_bug.cgi?id=196073

        Reviewed by Michael Catanzaro.

        Add test cases to check functions and constructors with no arguments but receiving user data.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (checkUserData):
        (testJSCFunction):
        (fooCreateWithUserData):
        (testJSCClass):

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with GLib < 2.58 after r243285.

        Add g_assert_cmpfloat_with_epsilon macro if not defined.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to provide geolocation information
        https://bugs.webkit.org/show_bug.cgi?id=195940

        Reviewed by Michael Catanzaro.

        Add a new test to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestGeolocationManager.cpp: Added.
        (testGeolocationManagerCurrentPosition):
        (testGeolocationManagerWatchPosition):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests): Stop using ENABLE(GEOLOCATION) conditionals for geolocation tests.
        (beforeAll): Ditto.
        * TestWebKitAPI/glib/CMakeLists.txt:

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLib] Returning G_TYPE_OBJECT from a method does not work
        https://bugs.webkit.org/show_bug.cgi?id=195574

        Reviewed by Michael Catanzaro.

        Add new test cases to check the behavior of constructors and functions returning GObject and boxed types.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (getGFile):
        (getParent):
        (createGString):
        (getGString):
        (getGStringCopyWillRaise):
        (getGStringCopy):
        (getGStringStr):
        (getGStringLen):
        (freeGString):
        (testJSCClass):

2019-03-20  Saam Barati  <sbarati@apple.com>

        DFG::AbstractValue::validateOSREntry is wrong when isHeapTop and the incoming value is Empty
        https://bugs.webkit.org/show_bug.cgi?id=195721

        Reviewed by Filip Pizlo.

        * Scripts/run-javascriptcore-tests:

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-20  Daniel Bates  <dabates@apple.com>

        REGRESSION (r243153): [iOS] TestWebKitAPI.FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState is failing
        https://bugs.webkit.org/show_bug.cgi?id=196031
        <rdar://problem/49078172>

        Reviewed by Tim Horton.

        The test incorrectly assumes that calling -[WKWebView resignFirstResponder] is identical to dismissing the
        <select> picker. This is no longer the case following r243135. Instead use testing SPI that invokes that
        same code path used when the Done button is pressed to dismiss the <select> picker.

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

2019-03-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): ViewGestureController is not properly notified of process swaps on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196029
        <rdar://problem/48954651>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Improve failure summary string for ApplyPatch step
        https://bugs.webkit.org/show_bug.cgi?id=195995

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch.getResultSummary): Override getResultSummary.

2019-03-20  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for new meter ARIA role
        https://bugs.webkit.org/show_bug.cgi?id=195966

        Reviewed by Chris Fleizach.

        Update Core role for ATK_ROLE_LEVEL_BAR from AXProgressIndicator
        to AXLevelIndicator.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2019-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement FIDO AppID extension
        https://bugs.webkit.org/show_bug.cgi?id=143491
        <rdar://problem/48298273>

        Reviewed by Brent Fulgham.

        Add a test that covers the new flag of convertToU2fSignCommand.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp:
        (TestWebKitAPI::TEST):

2019-03-19  Keith Rollin  <krollin@apple.com>

        Add support for more platforms to generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=195977

        Reviewed by Alexey Proskuryakov.

        generate-xcfilelists incorrectly complains when involved with building
        WebKit for iphonesimulator:

            $ make debug SDKROOT=iphonesimulator.internal -C Internal/
            …
            ### (die get_canonical_platform_name main main) Unrecognized platform name: iphonesimulator

        Address this by teaching generate-xcfilelists about more platforms.

        * Scripts/generate-xcfilelists:

2019-03-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Clear non-cookie website data for sites that have been navigated to, with link decoration, by a prevalent resource
        https://bugs.webkit.org/show_bug.cgi?id=195923
        <rdar://problem/49001272>

        Reviewed by Alex Christensen.

        This patch does the following to the TestRunner:
        - Adds setStatisticsCrossSiteLoadWithLinkDecoration().
        - Makes setStatisticsTimeToLiveUserInteraction() wait for completion.
        - Makes statisticsProcessStatisticsAndDataRecords() wait for completion.

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

2019-03-19  Christopher Reid  <chris.reid@sony.com>

        [CMake] Support more clang and gcc sanitizers
        https://bugs.webkit.org/show_bug.cgi?id=195956

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm: Updating ENABLE_ADDRESS_SANITIZER to ENABLE_SANITIZERS=address

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

        [ews-build] Improve summary for PrintConfiguration step
        https://bugs.webkit.org/show_bug.cgi?id=195945

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration.getResultSummary): Override getResultSummary.

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

        [ews-build] Improve summary for CheckOutSource step
        https://bugs.webkit.org/show_bug.cgi?id=195963

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource.getResultSummary):

2019-03-19  Daniel Bates  <dabates@apple.com>

        [iOS] Focus not preserved when switching between tabs
        https://bugs.webkit.org/show_bug.cgi?id=195820
        <rdar://problem/43614450>

        Reviewed by Brent Fulgham.

        Add tests to ensure that we restore focus when resigning and becoming first responder.

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

2019-03-19  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

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

2019-03-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Backported mssdemux protection data crash fix
        https://bugs.webkit.org/show_bug.cgi?id=195918

        Reviewed by Philippe Normand.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0005-mssdemux-fix-protection-data-double-free.patch: Added.

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243132.

        Broke GTK build

        Reverted changeset:

        "Make WTFLogChannelState and WTFLogLevel enum classes"
        https://bugs.webkit.org/show_bug.cgi?id=195904
        https://trac.webkit.org/changeset/243132

2019-03-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r243073, fixing WPE MiniBrowser launching.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Adjust the shared library name that's changed
        with the API version bump in r243073.

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

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

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Disable flaky test added in r2431100
        https://webkit.org/b/195785

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::TEST):
        Apparently bots don't hit 150kb/s as reliably as I do locally.  Can't say I'm too surprised.

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        WKWebView.GetContentsShouldReturnAttributedString is crashing on iOS Simulator.
        https://bugs.webkit.org/show_bug.cgi?id=195916

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST(WKWebView, GetContentsShouldReturnAttributedString): Fix iOS code path to pass.

2019-03-18  Alexey Proskuryakov  <ap@apple.com>

        Add a secondary e-mail address for Fujii Hironori to make tools happier.

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

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Implement DownloadMonitor to prevent long-running slow downloads from background apps
        https://bugs.webkit.org/show_bug.cgi?id=195785

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TCPServer.cpp: Added.
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::~TCPServer):
        (TestWebKitAPI::TCPServer::socketBindListen):
        (TestWebKitAPI::TCPServer::waitForAndReplyToRequests):
        * TestWebKitAPI/TCPServer.h: Added.
        (TestWebKitAPI::TCPServer::port const):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadMonitorTestDelegate _downloadDidStart:]):
        (-[DownloadMonitorTestDelegate _downloadDidCancel:]):
        (-[DownloadMonitorTestDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[DownloadMonitorTestDelegate _download:didReceiveData:]):
        (TestWebKitAPI::respondSlowly):
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):
        (TestWebKitAPI::downloadAtRate):
        (TestWebKitAPI::TEST):

2019-03-18  Saam Barati  <sbarati@apple.com>

        Add a plan file for JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=190734

        Reviewed by Mark Lam.

        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream2.plan: Added.

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

        Delay WebProcess launch until a load is triggered in a Web view
        https://bugs.webkit.org/show_bug.cgi?id=195758
        <rdar://problem/48126013>

        Reviewed by Geoff Garen.

        Add API test coverage. Also update some existing API tests to not expect
        constructing a WKWebView to launch both a WebProcess and a NetworkProcess.

        * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetBackingScaleFactor.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (testDidResignInputElementStrongPasswordAppearanceAfterEvaluatingJavaScript):

2019-03-18  Xan Lopez  <xan@igalia.com>

        [CMake] Prevent potential warning when determining $architecture
        https://bugs.webkit.org/show_bug.cgi?id=195891

        Reviewed by Michael Catanzaro.

        It's possible for generateBuildSystemForCMakeProject to be called
        before determineArchitecture() is ever called. This will make the
        first eq check with $architecture to be bogus (and print a
        warning). Change that to an eq check with architecture(), which
        implicitly calls determineArchitecture() if needed, and change all
        the other similar cases in the method in the same way to prevent
        future bugs like this one.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Tarballs generated with “make dist” cannot build documentation
        https://bugs.webkit.org/show_bug.cgi?id=195885

        Reviewed by Carlos Garcia Campos.

        * wpe/manifest.txt.in: Add missing Tools/glib/common.py file to be included in release tarballs.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Cryptic error from Tools/gtkdoc/generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=195883

        Reviewed by Carlos Garcia Campos.

        * gtkdoc/gtkdoc.py:
        (GTKDoc._run_command): When commands fail to run, include the full command line for
        the program invocation and the output it has generated on the standard error stream.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump dependencies to wpe-1.0 and wpebackend-fdo-1.0
        https://bugs.webkit.org/show_bug.cgi?id=195786

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WPEModules.yaml: Use libwpe 1.1.90 and wpebackend-fdo 1.1.91.
        * wpe/jhbuild.modules: Ditto.

2019-03-16  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Don't run clean builds on EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=195851

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/ews-build/factories.py:

2019-03-16  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r243019): Failing API test: WebKit.WebsiteDataStoreCustomPathsWithoutPrewarming
        https://bugs.webkit.org/show_bug.cgi?id=195849

        Reviewed by Chris Dumez.

        We should expect IDB database files to be at path IndexedDB/v1/ after r243019.

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

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

        webkitpy: Upload test results
        https://bugs.webkit.org/show_bug.cgi?id=195755
        <rdar://problem/48896182>

        Reviewed by Aakash Jain.

        Establish a new format for uploading results that is not tied to layout tests, apply
        that format to webkitpy tests.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.native_branch): Return what branch the current checkout is on.
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.native_branch): Ditto.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.build_version): Return a build version for Mac.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__):
        (MockPlatformInfo.build_version):
        * Scripts/webkitpy/results: Added.
        * Scripts/webkitpy/results/__init__.py: Added.
        * Scripts/webkitpy/results/options.py: Added.
        (upload_options): OptParse list for upload options.
        * Scripts/webkitpy/results/upload.py: Added.
        (Upload): Class which enforces the upload format expected by the results server.
        (Upload.Expectations):
        (Upload.create_configuration):
        (Upload.create_commit):
        (Upload.create_details):
        (Upload.create_run_stats):
        (Upload.create_test_result):
        (Upload.__init__):
        (Upload.Encoder): Encode Upload object as json.
        (Upload.upload): Upload results to the results server, returning 'True' if the upload is successful.
        * Scripts/webkitpy/results/upload_unittest.py: Added.
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args): Add upload arguments.
        (Tester._run_tests): Allow results to be uploaded.
        * Scripts/webkitpy/test/runner.py:
        (Runner.__init__): Record which tests were run, rather than just counting them.
        (Runner.handle):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_run):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Add requests auto-install.
        (AutoinstallImportHook._install_requests):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch): Update os name for testing.

2019-03-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Crash under -[TestRunnerWKWebView _didShowMenu] while running layout tests on iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=195810

        Reviewed by Tim Horton.

        Ensure that the process of resetting web view state between tests doesn't also invoke testing callbacks
        registered by the previous layout test. This fixes an occasional crash when hiding the callout menu after
        ending certain layout tests.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):

        Pull logic to reset all of TestRunnerWKWebView's callback handler blocks into a separate helper method; use this
        helper method when destroying the web view, and when resetting state between tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Hide the callout menu *after* clearing out interaction callbacks registered on the web view.

2019-03-15  Sihui Liu  <sihui_liu@apple.com>

        [ Mojave WK1 ] Layout Test storage/indexeddb/database-odd-names.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=190350
        <rdar://problem/45089503>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3-shm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3-wal:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName-2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName.mm: Added.
        (-[IndexedDBFileNameMessageHandler userContentController:didReceiveScriptMessage:]):
        (runTest):
        (createDirectories):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobThenDelete.mm:
        (TEST):

2019-03-15  Timothy Hatcher  <timothy@apple.com>

        Add support to WebPage for getting the contents as an attributed string.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST(WKWebView, GetContentsShouldReturnAttributedString): Added.

2019-03-15  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-15  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r242952.

        Causing API failures on iOS Simulator

        Reverted changeset:

        "[PSON] Make sure the WebProcessCache is leverage when
        relaunching a process after termination"
        https://bugs.webkit.org/show_bug.cgi?id=195747
        https://trac.webkit.org/changeset/242952

2019-03-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MinBrowser][WK2] Implement createNewPage of WKPageUIClient to open a new window
        https://bugs.webkit.org/show_bug.cgi?id=195740

        Reviewed by Ross Kirsling.

        window.open doesn't work for WebKitBrowserWindow because it is not
        implemented yet.

        1. Implemented createNewPage callback of WKPageUIClient.
        2. Changed MainWindow to take a BrowserWindow factory function
          instead of BrowserWindowType to be flexible to create
          BrowserWindow with extra settings.
        3. Renamed MainWindow::BrowserWindowType to BrowserWindowType
          because it is not relevant with MainWindow anymore.

        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        (CommandLineOptions::CommandLineOptions):
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::create):
        (MainWindow::init):
        (MainWindow::WndProc):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create): Moved WKPageConfigurationRef related code from WebKitBrowserWindow::WebKitBrowserWindow.
        (WebKitBrowserWindow::WebKitBrowserWindow): Added a WKPageConfigurationRef parameter.
        (WebKitBrowserWindow::updateProxySettings):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2019-03-14  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test scrolling tree layer manipulation more easily
        https://bugs.webkit.org/show_bug.cgi?id=195780

        Reviewed by Tim Horton.
        
        Add a boolean attribute 'scrollUpdatesDisabled' on UIScriptController that
        cuts off communication of scrolling tree scrolls back to the web process
        (in RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll()). This
        allows tests to trigger scrolls which run the scrolling tree layer positioning
        logic, but never get another commit from the web process that might mask
        scrolling tree bugs.
        
        WKWebView's testing protocol get @property _scrollingUpdatesDisabledForTesting,
        whose getters and setters are overridden by TestRunnerWKWebView. Plumbing
        via PageClient and WebPageProxy makes this flag reachable by RemoteScrollingCoordinatorProxy.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _scrollingUpdatesDisabledForTesting]):
        (-[TestRunnerWKWebView _setScrollingUpdatesDisabledForTesting:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):

2019-03-14  Youenn Fablet  <youenn@apple.com>

        Move IDB storage in private browsing mode to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=195602

        Reviewed by Brady Eidson.

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

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

        [ews-build] Make descriptionDone messages more readable
        https://bugs.webkit.org/show_bug.cgi?id=195760

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

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

        [ews-build] Generate status-bubble hover-over messages
        https://bugs.webkit.org/show_bug.cgi?id=195680

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        (StatusBubble._build_bubble): Generate bubble['details_message'] which would be displayed
        on hover-over.
        (StatusBubble._iso_time):
        (StatusBubble._steps_messages): Returns status messages from steps to be displayed in
        hover-over message.
        (StatusBubble._most_recent_step_message): Returns status message from most recent step.

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

        [ews-app] Gracefully handle the case when state_string is None
        https://bugs.webkit.org/show_bug.cgi?id=195753

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

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

        [ews-app] Status bubble display pending for currently running build step
        https://bugs.webkit.org/show_bug.cgi?id=195744

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:
        (Events.stepStarted): If state_string is pending, replace it with step name.

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Add WebsitePolicy for the client to specify the device orientation & motion access policy
        https://bugs.webkit.org/show_bug.cgi?id=195750

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationDelegate initWithDeviceOrientationAccessPolicy:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):

2019-03-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Make -[_WKAttachment setFileWrapper:contentType:completion:] robust when given a nil completion handler
        https://bugs.webkit.org/show_bug.cgi?id=195725
        <rdar://problem/48545062>

        Reviewed by Tim Horton.

        Test that we don't crash when changing the file wrapper of an invalid attachment, if the given completion
        handler is nil.

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

2019-03-13  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
        (TestWebKitAPI::TEST):
        Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Use a ServiceWorker process per registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=195649

        Reviewed by Youenn Fablet.

        Update API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-03-13  Chris Dumez  <cdumez@apple.com>

        REGRESSION(PSON, r240660): Navigation over process boundary is flashy when using Cmd-left/right arrow to navigate
        https://bugs.webkit.org/show_bug.cgi?id=195684
        <rdar://problem/48294714>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-app] Remove unused patch view
        https://bugs.webkit.org/show_bug.cgi?id=195669

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/patch.py: Removed.

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

        [ews-app] Use Buildbot result code variables
        https://bugs.webkit.org/show_bug.cgi?id=195668

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot): Added Buildbot result code variables.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Used Buildbot result code variables.

2019-03-13  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Expand submodule recursively
        https://bugs.webkit.org/show_bug.cgi?id=195672

        Building WPE with flatpak was impossible without that as it was raising an exception.
        Also update wpebackend-fdo to match what is built in jhbuild

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (expand_submodules_recurse):
        (expand_manifest):
        * flatpak/org.webkit.WPEModules.yaml:

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

        [ews-app] status bubble should be hidden for certain builds
        https://bugs.webkit.org/show_bug.cgi?id=194597

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._should_show_bubble_for_build): Hide bubble for builds which were skipped
        because the patch didn't have relevant changes.
        (StatusBubble._should_show_bubble_for_queue): Hide bubbles for queues which are not deployed
        in production yet.

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

        [Win] Fix a slew of simple clang-cl warnings.
        https://bugs.webkit.org/show_bug.cgi?id=195652

        Reviewed by Don Olmstead.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): -Wunused-variable

2019-03-12  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPURenderPipelineDescriptor and add GPUColorStateDescriptor.format
        https://bugs.webkit.org/show_bug.cgi?id=195518
        <rdar://problem/46322356>

        Reviewed by Myles C. Maxfield.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:

2019-03-12  Commit Queue  <commit-queue@webkit.org>

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

        "Broke webkitpy tests with my change to
        lldb_dump_class_layout.py" (Requested by rmorisset on
        #webkit).

        Reverted changeset:

        "Alter Tools/Scripts/dump-class-layout to be able to dump all
        classes with suspicious padding"
        https://bugs.webkit.org/show_bug.cgi?id=195573
        https://trac.webkit.org/changeset/242825

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

        [ews-build] Show status bubbles while the patch is waiting in queue
        https://bugs.webkit.org/show_bug.cgi?id=195618

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added ALL_QUEUES and ENABLED_QUEUES. Only certain queues are 
        enabled in initial deployment.
        (StatusBubble._build_bubble): Display bubble even when build hasn't started.
        (StatusBubble.get_latest_build_for_queue): Get latest build for a given queue.
        (StatusBubble.get_builds_for_queue): Get all builds for a given queue.
        (StatusBubble._should_show_bubble_for): Display bubble for only ENABLED_QUEUES for now.
        (StatusBubble._build_bubbles_for_patch):

2019-03-12  Robin Morisset  <rmorisset@apple.com>

        Alter Tools/Scripts/dump-class-layout to be able to dump all classes with suspicious padding
        https://bugs.webkit.org/show_bug.cgi?id=195573

        Reviewed by Simon Fraser.

        Also modified the script so that when multiple types match a given name it shows them all and not arbitrarily pick one.

        * Scripts/dump-class-layout:
        (main):
        * lldb/lldb_dump_class_layout.py:
        (ClassLayout.__init__):
        (ClassLayout._compute_padding_recursive):
        (LLDBDebuggerInstance.dump_layout_for_classname):
        (LLDBDebuggerInstance):
        (LLDBDebuggerInstance.dump_all_wasteful_layouts):
        (LLDBDebuggerInstance.layout_for_classname): Deleted.

2019-03-12  Chris Dumez  <cdumez@apple.com>

        Device Orientation access permission should be denied unless explicitly granted by the client
        https://bugs.webkit.org/show_bug.cgi?id=195625

        Reviewed by Youenn Fablet.

        add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm: Added.
        (-[DeviceOrientationMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[DeviceOrientationPermissionUIDelegate initWithHandler:]):
        (-[DeviceOrientationPermissionUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):
        (runDeviceOrientationTest):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):

2019-03-12  Jer Noble  <jer.noble@apple.com>

        Flaky API Test TestWebKitAPI.WebKitLegacy.ScrollingDoesNotPauseMedia
        https://bugs.webkit.org/show_bug.cgi?id=195137
        <rdar://problem/48810307>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        (TestWebKitAPI::TEST):

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

        [ews-build] Change urls from uat to production
        https://bugs.webkit.org/show_bug.cgi?id=195566

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py:
        * BuildSlaveSupport/ews-build/events.py:
        * BuildSlaveSupport/ews-build/steps.py:

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

        [ews-build] change max_builds for local-worker to 1
        https://bugs.webkit.org/show_bug.cgi?id=195568

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:

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

        Fix the build

        * TestRunnerShared/spi/PencilKitTestSPI.h:
        * TestWebKitAPI/ios/PencilKitTestSPI.h:

2019-03-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Load events may occur in unexpected order when JS redirects page before subresource load finishes
        https://bugs.webkit.org/show_bug.cgi?id=194131

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (uriChanged):
        (testUnfinishedSubresourceLoad):
        (serverCallback):
        (beforeAll):

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

        WTF::Expected should use std::addressof instead of operator&
        https://bugs.webkit.org/show_bug.cgi?id=195604

        Reviewed by Myles Maxfield.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::Unique::Unique):
        (TestWebKitAPI::Unique::operator&):
        (TestWebKitAPI::TEST):

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

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ApduTest.cpp:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        Remove unnecessary includes from headers.

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

        Add testing API to hit-test and scroll overflow scrollers
        https://bugs.webkit.org/show_bug.cgi?id=195278

        Reviewed by Antti Koivisto.
        
        Add UIScriptController::immediateScrollElementAtContentPointToOffset() to enable
        testing of the view hit-testing code path, and immediate scrolling of overflow:scroll.
        
        Tests: scrollingcoordinator/ios/scroll-element-at-point.html

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::enclosingScrollViewIncludingSelf):
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):

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

        API test WebKit.RequestTextInputContext fails on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195585

        Reviewed by Wenson Hsieh and Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (applyStyle):
        (TEST):
        Add a viewport, so that the coordinates match up on iOS.
        Scroll by moving the UIScrollView's contentOffset.

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

        Assert in WebPageProxy::suspendCurrentPageIfPossible()
        https://bugs.webkit.org/show_bug.cgi?id=195506
        <rdar://problem/48733477>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-11  Shawn Roberts  <sroberts@apple.com>

        Adding myself to contributors.json

        Unreviewed, addming myself to contributors.json .

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

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

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
        (TEST_F):

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

        Regression(r242664) WebKit.WebsitePoliciesDeviceOrientationEventEnabled API test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=195561

        Reviewed by Youenn Fablet.

        Make sure the JS in the test requests for permission to receive device orientation events.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

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

        Allow storage quota increase by default in WTR
        https://bugs.webkit.org/show_bug.cgi?id=195541

        Reviewed by Geoffrey Garen.

        Allow storage quota increase by default in WTR.
        Move from testRunner.allowStorageQuotaIncrease to testRunner.setAllowStorageQuotaIncrease.
        Use this for tests that explicitly need cache increase.

        Instead of increasing quota by 2, make sure the next request is
        granted by adding all given parameters.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowStorageQuotaIncrease):
        (WTR::TestRunner::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):

2019-03-11  Xan Lopez  <xan@igalia.com>

        [CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=194147

        Reviewed by Michael Saboff.

        To make --32-bit work correctly on Linux/64bit we need to:

        - Set FORCE_32BIT on, which will be read by CMake to set WTF_CPU
        correctly. Ideally we'd just redefine CMAKE_SYSTEM_PROCESSOR, but
        unfortunately CMake only allows us to do this during
        crosscompilation, which is overkill here.
        - Set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_ARCHITECTURE so that the
        pkg-config detection module uses the x86 .pc files instead of the
        x86_64 ones.
        - Set the -m32 flags for the compiler.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-08  Dewei Zhu  <dewei_zhu@apple.com>

        Add MotionMark-1.1 plan file for run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=195481

        Rubber-stamped by Darin Adler.

        Run-benchmark script should support MontionMark-1.1.

        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark1.1.plan: Added.

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

        [ews-app] Add support for submit-to-ews url
        https://bugs.webkit.org/show_bug.cgi?id=195477

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:
        * BuildSlaveSupport/ews-app/ews/templates/submittoews.html: Copied from QueueStatusServer/templates/submittoews.html.
        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/submittoews.py: Added.

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242688, r242643, r242624.

        Caused multiple layout test failures and crashes on iOS and macOS.

        Reverted changeset:

        "requestAnimationFrame should execute before the next frame"
        https://bugs.webkit.org/show_bug.cgi?id=177484
        https://trac.webkit.org/changeset/242624/webkit

        * Tracing/SystemTracePoints.plist:

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

        Resource Load Statistics: Make it possible exclude localhost from classification
        https://bugs.webkit.org/show_bug.cgi?id=195474
        <rdar://problem/47520577>

        Reviewed by Brent Fulgham.

        This patch allows for localhost to be excluded from classification and
        treatment as a prevalent resource.

        The WebKit Tools change adds a new function called
        testRunner.setStatisticsIsRunningTest() which can be used to control this
        behavior.

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

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

        [ews-build] Disable waterfall and console view for ews-build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=195560

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

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

        Unreviewed, rolling out r242698.

        API test crashes on bots.

        Reverted changeset:

        "Add a WKContentRuleList variant that uses copied memory
        instead of mmap'd shared memory for class A containerized
        apps"
        https://bugs.webkit.org/show_bug.cgi?id=195511
        https://trac.webkit.org/changeset/242698

2019-03-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

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

        [ews-app] Use port 17000 for worker communication
        https://bugs.webkit.org/show_bug.cgi?id=195558

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

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

        [ews-build] unit-tests fail when passwords.json is missing
        https://bugs.webkit.org/show_bug.cgi?id=195557

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_configuration):
        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242702.

        Broke High Sierra builders.

        Reverted changeset:

        "Add utility function to allow easy reverse range-based
        iteration of a container"
        https://bugs.webkit.org/show_bug.cgi?id=195542
        https://trac.webkit.org/changeset/242702

2019-03-11  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
        (TestWebKitAPI::TEST):
        Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

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

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
        (TEST_F):

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

        Add SPI to retrieve the set of text inputs in a given rect, and later focus one
        https://bugs.webkit.org/show_bug.cgi?id=195499

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm: Added.
        (-[WKWebView synchronouslyRequestTextInputContextsInRect:]):
        (-[WKWebView synchronouslyFocusTextInputContext:]):
        (applyStyle):
        (applyIframe):
        (TEST):
        Add some tests for this SPI.

2019-03-10  Yusuke Suzuki <utatane.tea@gmail.com>

        [WTF] Align assumption in RunLoopWin to the other platform's RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=181151

        Reviewed by Don Olmstead.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        Enable TestWTF RunLoop tests in all platforms.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::DerivedOneShotTimer::DerivedOneShotTimer):
        (TestWebKitAPI::DerivedOneShotTimer::fired):
        (TestWebKitAPI::TEST):
        Only a few platforms support nested RunLoop.

        (TestWebKitAPI::DerivedRepeatingTimer::DerivedRepeatingTimer):
        (TestWebKitAPI::DerivedRepeatingTimer::fired):

2019-03-10  David Quesada  <david_quesada@apple.com>

        ASSERT(m_downloads.isEmpty()) fails in DownloadProxyMap::~DownloadProxyMap()
        https://bugs.webkit.org/show_bug.cgi?id=152480

        Reviewed by Chris Dumez.

        Add a unit test based on Daniel Bates's test case that starts a download, ensures
        there are no additional references to the process pool besides the one held by
        the download, waits for the download to finish (in the sense that the
        DownloadProxyMap is done tracking the DownloadProxy), and doesn't crash. For good
        measure, also check that the process pool has been deallocated at the end of the
        test. The test wouldn't be meaningful if the process pool were still alive.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[WaitUntilDownloadCanceledDelegate _downloadDidStart:]):
        (-[WaitUntilDownloadCanceledDelegate _downloadDidCancel:]):
            The download will be canceled because the delegate does not implement the
            method to decide the download's destination, so this is where we know the
            DownloadProxyMap is done with the DownloadProxy.
        (TEST):

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Add support for Device Orientation / Motion permission API
        https://bugs.webkit.org/show_bug.cgi?id=195329
        <rdar://problem/47645367>

        Reviewed by Geoffrey Garen.

        Add test infrastructure to help test the Device Orientation / Motion permission API.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::shouldAllowDeviceOrientationAndMotionAccess):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::handleDeviceOrientationAndMotionAccessRequest):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2019-03-08  Saam barati  <sbarati@apple.com>

        Add a compare-results script to compare benchmark results
        https://bugs.webkit.org/show_bug.cgi?id=195486
        <rdar://problem/48723397>

        Reviewed by Geoffrey Garen.

        This patch adds a script to compare benchmark results using Welch's two-tailed t test.
        Initially, this patch only reasons about PLT5/JetStream2/Speedometer2. It will be easy
        to extend it to learn about our other benchmarks.

        * Scripts/compare-results: Added.
        (readJSONFile):
        (detectJetStream2):
        (JetStream2Results):
        (detectSpeedometer2):
        (Speedometer2Results):
        (detectPLT5):
        (PLT5Results):
        (detectBenchmark):
        (biggerIsBetter):
        (ttest):
        (getOptions):
        (main):

2019-03-08  Stephanie Lewis  <slewis@apple.com>

        Ensure old tab state is cleared between iterations of run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=195393
        <rdar://problem/46885583>

        Reviewed by Dewei Zhu.

        a) ensure the default to restore state is not set
        b) terminate Safari correctly
        c) Set the system default to ignore Persistent State in Safari

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver): fix terminate processes to call terminate before killing.
        (OSXBrowserDriver.prepare_env): 
        (OSXBrowserDriver.restore_env):
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._terminate_processes):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: add bundle id
        (OSXChromeDriver):
        (OSXChromeCanaryDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: ditto
        (OSXFirefoxDriver):
        (OSXFirefoxNightlyDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: add preferences to not restore state, bundle id
        (OSXSafariDriver):
        (OSXSafariDriver.prepare_env):

2019-03-08  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Several InputMethodFilter tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=195408

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit/gtk/InputMethodFilter.cpp:
        Regressed in r241751.
        Hexadecimal values of keycodes are expressed now in upper letters.
        Composited characters should be cast to UTF8 strings.

        (TestWebKitAPI::TEST):

2019-03-07  Tomas Popela  <tpopela@redhat.com>

        [GTK] Make Tools/gtkdoc python3 compatible
        https://bugs.webkit.org/show_bug.cgi?id=195359

        Reviewed by Carlos Garcia Campos.

        * gtkdoc/generate-gtkdoc:
        ConfigParser was reworked in Python 3.2 so we have adapt the code to
        work with Python 2 and 3.
        (get_gtkdoc_module_paths):
        The iteritems() was removed in Python 3, so let's use items() that's
        available in Python 2 and 3.
        (get_generator_for_config):
        * gtkdoc/gtkdoc.py:
        (GTKDoc._run_command):
        The sys.stdout.write() is expecting str in Python 3 and not bytes
        (that are coming from stdout.encode()). Use sys.stdout.buffer.write()
        for passing the bytes there.

2019-03-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346
        <rdar://problem/48667048>

        Unreviewed build fix for clang-cl.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setApplicationId): Replaced calling String::charactersWithNullTermination with String::wideCharacters to get wchar_t.

2019-03-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * Tracing/SystemTracePoints.plist:

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add a setting to be able to turn content change observation on/off
        https://bugs.webkit.org/show_bug.cgi?id=195353
        <rdar://problem/48626394>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible to purge only script-accessible cookies
        https://bugs.webkit.org/show_bug.cgi?id=195383
        <rdar://problem/48570136>

        Reviewed by Brent Fulgham.

        This patch adds test infrastructure to purge only script-accessible cookies,
        including a new testRunner function called statisticsDeleteCookiesForHost().git a

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

2019-03-07  Commit Queue  <commit-queue@webkit.org>

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

        breaks layout tests in all configurations (Requested by
        zdobersek on #webkit).

        Reverted changeset:

        "[WPE] Enable web process sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=195169
        https://trac.webkit.org/changeset/242354

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

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST):
        Delete wchar tests -- these are MSVC-only and we won't be using String::operator+ going forward anyway.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):
        (main):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::moduleDirectory):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        Use wchar helpers as needed.

2019-03-06  Rob Buis  <rbuis@igalia.com>

        Consider supporting the `referrerpolicy` attribute.
        https://bugs.webkit.org/show_bug.cgi?id=179053

        Reviewed by Darin Adler.

        Add a runtime flag for referrerpolicy attribute.

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

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

        Update expected API test result following r242379
        (https://bugs.webkit.org/show_bug.cgi?id=195125)

        Update expected x-coordinate of selection rect now that the left padding of
        a textarea is sized in ems (so dependent on the font size) just like the left
        padding of a text field.

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

2019-03-05  David Quesada  <david_quesada@apple.com>

        [WK2] It should be possible to follow links with 'download' attributes
        https://bugs.webkit.org/show_bug.cgi?id=195145
        rdar://problem/48462642

        Reviewed by Alex Christensen.

        Add a unit test to verify that activating links with 'download' attributes now
        navigates to the linked resource, rather than starts downloading it. Add another
        to verify that it is still possible to explicitly download the link via the
        'Download' navigation action policy.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadAttributeTestDelegate init]):
        (-[DownloadAttributeTestDelegate waitForDidFinishNavigation]):
        (-[DownloadAttributeTestDelegate waitForDownloadDidStart]):
        (-[DownloadAttributeTestDelegate webView:didFinishNavigation:]):
        (-[DownloadAttributeTestDelegate webView:didStartProvisionalNavigation:]):
        (-[DownloadAttributeTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DownloadAttributeTestDelegate _downloadDidStart:]):
        (TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:

2019-03-05  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement Cookie Accept Policy.
        https://bugs.webkit.org/show_bug.cgi?id=191645

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        (TestWebKitAPI::Curl::TEST_F):

2019-03-05  Youenn Fablet  <youenn@apple.com>

        Rename requestCacheStorageSpace to requestStorageSpace
        https://bugs.webkit.org/show_bug.cgi?id=195282

        Reviewed by Chris Dumez.

        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):
        (-[TestWebsiteDataStoreDelegate requestCacheStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]): Deleted.

2019-03-05  Brady Eidson  <beidson@apple.com>

        Correctly handle sandbox extensions when the same WKWebView loads multiple file:// URLs.
        <rdar://problem/47820581> and https://bugs.webkit.org/show_bug.cgi?id=195291

        Reviewed by Tim Horton.

        Loading a file: URL into a WKWebView and then loading another file: url from a completely
        different directory into that same WKWebView should work.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm: Added.

2019-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Add WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=195152

        Reviewed by Antti Koivisto.

        Added tests for WeakHashSet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::Base::Base): Moved.
        (TestWebKitAPI::Derived::foo): Moved.
        (WTF::WeakReference<TestWebKitAPI::Base>): Added to track the number of live WeakReference.
        (WTF::WeakReference<TestWebKitAPI::Base>::WeakReference):
        (WTF::WeakReference<TestWebKitAPI::Base>::~WeakReference):
        (TestWebKitAPI::computeSizeOfWeakHashSet): Added.

2019-03-04  Chris Dumez  <cdumez@apple.com>

        Do not share WebProcesses between private and regular sessions
        https://bugs.webkit.org/show_bug.cgi?id=195189
        <rdar://problem/48421064>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-03-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

2019-03-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLib] Returning G_TYPE_OBJECT from a constructor does not work
        https://bugs.webkit.org/show_bug.cgi?id=195206

        Reviewed by Žan Doberšek.

        Add a new test case.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCClass):

2019-03-04  Charlie Turner  <cturner@igalia.com>

        [WPE] Inline wl_array_for_each to workaround C++ compatibility issue
        https://bugs.webkit.org/show_bug.cgi?id=194898

        Reviewed by Žan Doberšek.

        * wpe/backends/WindowViewBackend.cpp: wl_array_for_each relies on
        a GCC extension that permits arithmetic on void* pointer. Inline
        the macro until this issue is fixed upstream.

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

        Rid the world of WK_API_ENABLED
        https://bugs.webkit.org/show_bug.cgi?id=195263

        Reviewed by Dan Bernstein.

        List of changed files elided because it's useless.

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

        Unreviewed follow-up to r242292.

        By Darin's suggestion, adopt an approach that uses EXPECT_STREQ without scattering utf8().data() everywhere.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::testStrip): Renamed from strip.
        (TestWebKitAPI::TEST):

2019-03-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove accidentally-committed URLHelpers.cpp test

        This test isn't built by any port and was committed in r240962 by mistake. See bug #174816
        and bug #194272 for details.

        * TestWebKitAPI/Tests/WTF/URLHelpers.cpp: Removed.

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

        Remove some more unused 32-bit code
        https://bugs.webkit.org/show_bug.cgi?id=195255

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/SupportsCarbonEventModel.cpp: Removed.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):
        (handleEventCarbon): Deleted.

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

        Unreviewed follow-up to r242292. Keep EXPECT_STREQ in tests per Darin's request.

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

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.
'
        * Tools/TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: Add tests for pad().

2019-03-01  Alex Christensen  <achristensen@webkit.org>

        Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=195229
        <rdar://problem/48520362>

        Reviewed by Chris Dumez.

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

2019-03-01  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace scope for event region building
        https://bugs.webkit.org/show_bug.cgi?id=195226

        Reviewed by Jon Lee.

        This trace scope measures the time spend converting element rects into Region objects,
        which can be large on some pages.

        The value for "Display Refresh Dispatch to main thread" was wrong and I fixed it.

        * Tracing/SystemTracePoints.plist:

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

        EnvironmentUtilities::stripValuesEndingWithString isn't thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=194612

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        Just test the new string-processing function and don't touch the actual environment.
        (Test cases are all as before, but based on operator== instead of strcmp.)

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

        [ews-app] Update primary keys for handling multiple Buildbot instances
        https://bugs.webkit.org/show_bug.cgi?id=195120

        Reviewed by Stephanie Lewis.

        Use a new primary key uid for build and step tables. Previous primary keys build_id and step_id
        were not enough to handle multiple buildbot instances. This new primary key uid would be generated
        by a combination of buildbot_instance_id and current primary key. e.g.: buildbot_instance_id + build_id

        * BuildSlaveSupport/ews-app/ews/models/build.py: Added new primary key uid.
        * BuildSlaveSupport/ews-app/ews/models/step.py: Ditto.
        * BuildSlaveSupport/ews-app/ews/models/buildbotinstance.py: Generate uid and instance_id.
        * BuildSlaveSupport/ews-app/ews/views/results.py: Updated to receive hostname in events.
        * BuildSlaveSupport/ews-build/events.py: Send hostname along-with events.
        * BuildSlaveSupport/ews-build/master.cfg: Ditto.

2019-03-01  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Enable service worker
        https://bugs.webkit.org/show_bug.cgi?id=188318

        Reviewed by Youenn Fablet.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/win/TestWebKitAPIPrefix.h:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2019-03-01  Justin Fan  <justin_fan@apple.com>

        [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=195191

        Rubber-stamped by Dean Jackson.

        Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix lldb webkitpy tests
        https://bugs.webkit.org/show_bug.cgi?id=194375

        Since we changed the value of Is8Bit flag in StringImpl, we change lldb webkitpy tests accordingly.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.is_8bit):

2019-02-28  David Quesada  <david_quesada@apple.com>

        Expose APINavigationAction.shouldPerformDownload() on WKNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=195121
        rdar://problem/48450302

        Reviewed by Alex Christensen.

        Add API tests for -WKNavigationAction._shouldPerformDownload in various
        configurations where the 'download' attribute is absent, blank, or populated
        with a filename, and where the anchor element is same-origin or cross-origin
        (meaning the 'download' attribute shouldn't be honored).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NavigationAction.mm: Added.
        (-[NavigationActionTestDelegate init]):
        (-[NavigationActionTestDelegate navigationAction]):
        (-[NavigationActionTestDelegate waitForNavigationActionCallback]):
        (-[NavigationActionTestDelegate waitForDidFinishNavigation]):
        (-[NavigationActionTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[NavigationActionTestDelegate webView:didFinishNavigation:]):
        (TEST):

2019-02-28  Antoine Quint  <graouts@apple.com>

        Enable the Pointer Events runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=195156

        Reviewed by Dean Jackson.

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

2019-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Several PasteImage API tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=195160

        Reviewed by Tim Horton.

        Some of these tests, such as PasteTIFFImage, don't wait for the inserted image element to finish loading before
        querying the image element's size; a few other tests, such as PastePNGFile, are racy since they may begin
        listening for a "load" event after image load is already complete.

        To address this, make these tests first register a "load" event handler, then run script to insert an image
        element into the document, and finally wait until the load event is observed before checking image size.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

2019-02-28  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.PageZoomLevelAfterSwap
        https://bugs.webkit.org/show_bug.cgi?id=195107

        Reviewed by Alex Christensen.

        Give some time for the zoom level to get restored.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Stop using legacy IDB path by default when creating WebProcessPool from websiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=194958

        Reviewed by Geoffrey Garen.

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

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

        [ews-app] Update method to save build to handle builder_display_name
        https://bugs.webkit.org/show_bug.cgi?id=195047

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/models/build.py: Updated to handle builder_name and builder_display_name.
        * BuildSlaveSupport/ews-app/ews/views/results.py: Ditto.

2019-02-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enable Web GPU only on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=195139

        Because Metal is only supported on 64 bit apps.

        Unreviewed build fix.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-27  Youenn Fablet  <youenn@apple.com>

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

        Reviewed by Chris Dumez.

        Spin loop until getting the condition to remove flakiness.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [ews-build] Buildbot should include builder_display_name in the build events
        https://bugs.webkit.org/show_bug.cgi?id=195045

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/events.py:
        (Events.buildStarted): Included builder_display_name in event data. Also renamed
        buildername to builder_name to be consistent in naming style.
        (Events.buildFinished): Ditto.

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SessionStorage
        https://bugs.webkit.org/show_bug.cgi?id=194480

        Reviewed by Brady Eidson.

        Update existing API test to make it more likely to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-27  Brady Eidson  <beidson@apple.com>

        Universal links from Google search results pages don't open the app.
        <rdar://problem/46887179> and https://bugs.webkit.org/show_bug.cgi?id=195126

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses
        https://bugs.webkit.org/show_bug.cgi?id=195102

        Reviewed by Geoffrey Garen.

        If the number of processes is not yet what we expect, wait a bit and check again to give
        processes some time to exit.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NavigateToDataURLThenBack
        https://bugs.webkit.org/show_bug.cgi?id=194545

        Reviewed by Brady Eidson.

        Make sure the test navigates forward and then back only once. Previously, navigating
        back would trigger a navigation again in a timer.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-13  Ryan Haddad  <ryanhaddad@apple.com>

        High Sierra Debug JSC test queue should use faster hardware
        https://bugs.webkit.org/show_bug.cgi?id=194603

        Rubber-stamped by Alexey Proskuryakov.

        Adjust queues to free up faster hardware for use on the High Sierra Debug JSC queue.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2019-02-27  John Wilander  <wilander@apple.com>

        Adopt WebCore::RegistrableDomain in WebCore::ResourceLoadStatistics and WebKit::NetworkProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=195071
        <rdar://problem/48417690>

        Reviewed by Alex Christensen and Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::createURL):
            Convenience function.
        (TestWebKitAPI::TEST):
            WebCore::AdClickAttribution now takes a URL when creating Source and
            Destination.
        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp:
        (TestWebKitAPI::TEST):
            WebCore::AdClickAttribution now takes a URL when creating Source and
            Destination.

2019-02-27  Antoine Quint  <graouts@apple.com>

        Support Pointer Events on macOS
        https://bugs.webkit.org/show_bug.cgi?id=195008
        <rdar://problem/47454419>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures): Enable the PointerEvents runtime feature in DumpRenderTree such that tests targeting WK1 may test the Pointer Events feature.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Remove remaining poisoning code.
        https://bugs.webkit.org/show_bug.cgi?id=194138

        Reviewed by Saam Barati.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedRefPtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp: Removed.

2019-02-26  Alex Christensen  <achristensen@webkit.org>

        Move ephemeral local storage from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=195074
        <rdar://problem/47937975>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

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

2019-02-26  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Load HTTP body of 401 response when AuthenticationChange is cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=191652

        Reviewed by Alex Christensen.

        Fix WinCairo MiniBrowser behavior of authentication dialog.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):

2019-02-26  Youenn Fablet  <youenn@apple.com>

        WebPageProxy should nullify m_userMediaPermissionRequestManager after resetting the media state
        https://bugs.webkit.org/show_bug.cgi?id=195028
        <rdar://problem/48243733>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-26  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add API for webview background color configuration
        https://bugs.webkit.org/show_bug.cgi?id=192305

        Reviewed by Michael Catanzaro.

        * MiniBrowser/wpe/main.cpp:
        (main): Add a new option to configure the webview background
        color. Example: --bg-color=transparent.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewBackgroundColor): Enable background color API tests for WPE.
        (beforeAll): Ditto.

2019-02-25  Yongjun Zhang  <yongjun_zhang@apple.com>

        scalableNativeWebpageParameters() is not preserved on new page navigation.
        https://bugs.webkit.org/show_bug.cgi?id=194892
        <rdar://problem/47538280>

        Reviewed by Wenson Hsieh.
        
        Allow UIScriptController to set WKWebView's _allowsViewportShrinkToFit property with a new `setAllowsViewportShrinkToFit` method.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::allowsViewportShrinkToFit):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):

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

        [ews-app] Add model for handling multiple Buildbot instances
        https://bugs.webkit.org/show_bug.cgi?id=194863

        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/ews-app/ews/models/buildbotinstance.py: Added.

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

        [ews-app] Remove BuilderMapping table
        https://bugs.webkit.org/show_bug.cgi?id=194961

        Reviewed by Stephanie Lewis.

        Store builder name directly in build table, instead of having a separate
        table for it.

        * BuildSlaveSupport/ews-app/ews/models/__init__.py:
        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py: Removed.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-02-25  John Wilander  <wilander@apple.com>

        Introduce and adopt new class RegistrableDomain for eTLD+1
        https://bugs.webkit.org/show_bug.cgi?id=194791
        <rdar://problem/48179240>

        Reviewed by Alex Christensen, Fujii Hironori, and Brent Fulgham.

        This patch adds an API test and replaces two instances of
        "TopPrivatelyOwnedDomains" with "RegistrableDomains" in message names.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Changed two strings to make sure the registrable domains are still considered
            invalid and pass the test.
        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp: Added.
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):

2019-02-25  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump WPEBackend-fdo requirement to API version 1.0
        https://bugs.webkit.org/show_bug.cgi?id=195001

        Reviewed by Carlos Garcia Campos.

        API version 1.0 always includes the functionality previously guarded with
        WPE_BACKEND_CHECK_VERSION(): remove the guards and always use the new functions
        unconditionally.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend): Remove usage of WPE_BACKEND_CHECK_VERSION().
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow): Ditto.
        (WebViewTest::hideView): Ditto.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Ditto.
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::ViewBackend): Use libWPEBackend-fdo-1.0 as library name.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Remove usage of
        WPE_BACKEND_CHECK_VERSION().
        * wpe/jhbuild.modules: Build a version WPEBackend-fdo with the updated API version.

2019-02-25  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add support for flatpak > 1.1.2
        https://bugs.webkit.org/show_bug.cgi?id=194088

        Flatpak 1.2 is now out so we need to support that
        version now.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (check_flatpak):
        (FlatpakPackages.__init__):
        (FlatpakPackages.__detect_packages):
        (FlatpakPackages.__detect_packages.in):
        (FlatpakRepos.update):

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

        [WPE] Bump WPEBackend-fdo Jhbuild package to latest changes
        https://bugs.webkit.org/show_bug.cgi?id=194998

        Reviewed by Carlos Garcia Campos.

        * wpe/jhbuild.modules: Bump the WPEBackend-fdo package, converting it
        to a Git checkout and using the latest commit containing various fixes
        and improvements.

2019-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove user agent quirk for washingtonpost.com
        https://bugs.webkit.org/show_bug.cgi?id=194981

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST):

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2019-02-22  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WinCairo] Enable wk1/wk2 suffix for platform search path.
        https://bugs.webkit.org/show_bug.cgi?id=194846

        Reviewed by Don Olmstead.

        Added _search_paths() and _port_specific_expectations_files() for
        WinCairoPort.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.default_baseline_search_path):
        (WinCairoPort):
        (WinCairoPort._port_specific_expectations_files):
        (WinCairoPort._search_paths):

2019-02-22  Tim Horton  <timothy_horton@apple.com>

        ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=194963

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Do a `contains` check instead of `equals`, because in debug builds we
        put the GraphicsLayer pointer in a prefix.

2019-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Callout menu overlaps in-page controls when editing a comment in github.com's issue tracker
        https://bugs.webkit.org/show_bug.cgi?id=194873
        <rdar://problem/46701974>

        Reviewed by Tim Horton.

        Add a couple of UIScriptController methods to make callout menu testing on iOS easier (see below).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::menuRect const):
        (WTR::UIScriptController::isShowingMenu const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::menuRect const):

        Add a function to query the bounds of the callout menu in content coordinates.

        (WTR::UIScriptController::isShowingMenu const):

        Add a function to query whether the callout menu is shown (i.e., has finished its appearance animation).

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::rectForMenuAction const):
        (WTR::UIScriptController::menuRect const):
        (WTR::UIScriptController::isShowingMenu const):
        (WTR::findViewInHierarchyOfType): Deleted.

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

        Regression(PSON) Unable to preview password-protected documents on iCloud.com
        https://bugs.webkit.org/show_bug.cgi?id=194954
        <rdar://problem/48127957>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]):
        (-[PSONNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[PSONNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):

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

        REGRESSION(PSON) Scroll position is sometimes not restored on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194924
        <rdar://problem/48216125>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Unreviewed, disable API test added in r241928 on iOS.

        The cache is not enabled on devices with less than 3GB of RAM.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Simon Fraser  <simon.fraser@apple.com>

        Hardcode Visual Viewports on everywhere except iOS WK1
        https://bugs.webkit.org/show_bug.cgi?id=194928

        Reviewed by Zalan Bujtas.

        Remove the WK1 and WK2 preferences and MiniBrowser menu item for "visual viewports",
        change the default value of the Setting to 'true', and hardcode WebView on iOS to
        set it to false. The setting has shipped for several years and there's no need to turn
        it off now.

        Similarly, disable the "Visual Viewport API" on iOS WK1, since it makes no sense if
        Visual Viewports are not enabled.
        
        Remove the "visualViewportEnabled" flag and unused code paths from scrolling tree code
        that only runs in WK2

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController init]):
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController visualViewportEnabled]): Deleted.
        (-[SettingsController toggleVisualViewportEnabled:]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2019-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Discard cached processes when clearing website data store
        https://bugs.webkit.org/show_bug.cgi?id=194894

        Reviewed by Chris Dumez.

        Added a test case.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses): Added.

2019-02-21  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" on a safe browsing warning before a WKWebView has loaded any page should request to close the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=194914
        <rdar://problem/47586889>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webViewDidClose:]):
        (TEST):
        (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]): Deleted.

2019-02-21  David Kilzer  <ddkilzer@apple.com>

        Leak of CFErrorRef objects (1.92 Kbytes) in com.apple.WebKit.WebContent.Development running WebKit layout tests on iOS Simulator
        <https://webkit.org/b/194761>

        Reviewed by Myles Maxfield.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::activateSystemCoreWebFonts): Log `error` to console if
        CTFontManagerRegisterFontsForURL() fails (macOS only).  Update
        to use ARC-compliant cast.
        (WTR::activateFonts): Change `0` to `nullptr`.  Update to use
        ARC-compliant cast.
        (WTR::installFakeHelvetica): Log `error` to console if
        CTFontManagerRegisterFontsForURL() fails, but only on supported
        platforms (macOS Mojave/iOS 12 and newer, not iOS Simulator).
        Call CFRelease() on `error` to fix the leak.  Update to use
        ARC-compliant cast.
        (WTR::uninstallFakeHelvetica): Update to use ARC-compliant
        cast.

2019-02-21  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SuspendedPageLimit
        https://bugs.webkit.org/show_bug.cgi?id=194481

        Reviewed by Alex Christensen.

        Give the processes a chance to shutdown and wait until we reached the expected number
        of processes.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix the macOS build

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix ProcessSwap.PageOverlayLayerPersistence on macOS

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        I am a backwards.

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix ProcessSwap.PageOverlayLayerPersistence on macOS

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        We can't find the UI-side layer on macOS because we don't use UI-side compositing.
        We could force on UI-side compositing, but I feel like the test might be more
        valuable exercising the normal path on each platform (though the original
        bug was also UI-side specific). Though we can't validate that the overlay
        layer was installed successfully, there are layout tests that do that.

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Crash under RemoteLayerTreePropertyApplier::applyProperties when reattaching to old process
        https://bugs.webkit.org/show_bug.cgi?id=194845
        <rdar://problem/47944579>

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Add support for placing formatting roots in-between floats.
        https://bugs.webkit.org/show_bug.cgi?id=194902

        Reviewed by Antti Koivisto.

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

2019-02-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Do not hardcode WPEBackend-fdo library name for linking tests
        https://bugs.webkit.org/show_bug.cgi?id=194901

        Unreviewed build fix.

        * TestWebKitAPI/PlatformWPE.cmake: Set TestWebKitAPIBase to be linked
        against the detected ${WPEBACKEND_FDO_LIBRARIES} instead of hardcoding
        WPEBackend-fdo-0.1 as library name.

2019-02-21  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Darin Adler.

        Add tests involving leading and trailing whitespace, non-token
        characters and quoted strings.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::TEST):

2019-02-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Only build DumpRenderTree when WebKit Legacy is enabled
        https://bugs.webkit.org/show_bug.cgi?id=194884

        Reviewed by Michael Catanzaro.

        * PlatformWin.cmake:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Add API test for <rdar://problem/47471222>
        https://bugs.webkit.org/show_bug.cgi?id=194847

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) "Reload without content extensions" does not work when the main resource is blocked
        https://bugs.webkit.org/show_bug.cgi?id=194872
        <rdar://problem/47924500>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        Add a git utility method that allows the caller to determine if a specific commitish is within a specified range of commits.
        https://bugs.webkit.org/show_bug.cgi?id=191332

        Reviewed by Dean Jackson.

        * Scripts/git-is-in-range: Added.

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebKit::WebPageProxy::decidePolicyForNavigationActionSync
        https://bugs.webkit.org/show_bug.cgi?id=194857
        <rdar://problem/47759323>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        [WKTR] Avoid starting new NetworkProcesses unnecessarily when running the layout tests
        https://bugs.webkit.org/show_bug.cgi?id=194829
        <rdar://problem/47889906>

        Reviewed by Alexey Proskuryakov.

        Every time the TestOptions were changing we were creating both a new Web view and
        a new WKContext, which would start a new Network process. In most cases, we only
        need to contruct a new Web view and we do can keep reusing the same WKContext.
        This patch implements this optimization and thus avoids spinning a lot of new
        Network processes while running the layout tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::ContextOptions::hasSameInitializationOptions const):
        (WTR::TestOptions::ContextOptions::shouldEnableProcessSwapOnNavigation const):
        (WTR::TestOptions::hasSameInitializationOptions const):
        (WTR::TestOptions::shouldEnableProcessSwapOnNavigation const): Deleted.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformAddTestOptions const):

2019-02-20  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Enable support for CONTENT_EXTENSIONS
        https://bugs.webkit.org/show_bug.cgi?id=167941

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (filterSavedCallback): Added.
        (main): Support loading a JSON rule set file for content filtering.
        * MiniBrowser/wpe/main.cpp:
        (filterSavedCallback): Added.
        (main): Support loading a JSON rule set file for content filtering.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentFilterStore.cpp: Added.
        (WTF::refGPtr): Added locally for WebKitUserContentFilter, as it would not be used anywhere else.
        (WTF::derefGPtr): Ditto.
        (testEmptyStore):
        (testSaveInvalidFilter):
        (testSaveLoadFilter):
        (testSavedFilterIdentifierMatch):
        (testRemoveFilter):
        (testSaveMultipleFilters):
        (testSaveFilterFromFile):
        (testFilterPersistence):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (removeOldInjectedContentAndResetLists): Also reset content filters.
        (isCSSBlockedForURLAtPath): Added. Tests whether the test filter, which blocks a
        CSS style sheet, has blocked the load of the CSS by looking at the resulting style of
        the element affected by the style sheet.
        (getUserContentFilter): Added. Stores the test filter in a WebKitUserContentFilterStore
        and returns it to be used by tests.
        (testUserContentManagerContentFilter): Added. Tests whether adding and removing a filter
        from the WebKitUserContentManager results in the a CSS style sheet being blocked.
        (serverCallback): Add support for serving a CSS style sheet for testing.
        (beforeAll): Add call to testUserContentManagerContentFilter().
        * TestWebKitAPI/glib/CMakeLists.txt: Added TestWebKitUserContentFilterStore.

2019-02-19  Keith Rollin  <krollin@apple.com>

        Add timing information to build output
        https://bugs.webkit.org/show_bug.cgi?id=194839
        <rdar://problem/48219609>

        Reviewed by Alexey Proskuryakov.

        Configure xcodebuild with -ShowBuildOperationDuration, causing it to
        emit each project's build time to its output. E.g.,

            ** BUILD SUCCEEDED ** [0.132 sec]

        * Scripts/webkitdirs.pm:
        (XcodeOptions):

2019-02-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241784.

        Broke all OpenSource builds.

        Reverted changeset:

        "Web Inspector: Improve ES6 Class instances in Heap Snapshot
        instances view"
        https://bugs.webkit.org/show_bug.cgi?id=172848
        https://trac.webkit.org/changeset/241784

2019-02-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Remove redundant intersecting logic
        https://bugs.webkit.org/show_bug.cgi?id=194804

        Reviewed by Antti Koivisto.

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

2019-02-19  Dean Jackson  <dino@apple.com>

        Clean-up output from generate-xcfilelists so it can be filtered
        https://bugs.webkit.org/show_bug.cgi?id=194795

        Reviewed by Joseph Pecoraro (and Keith Rollin).

        Replace the "..." with "GXCF:" in generate-xcfilelists output, and
        make a slight tweak to filter-build-webkit so such lines are marked
        as plain.

        * Scripts/filter-build-webkit:
        * Scripts/generate-xcfilelists:

2019-02-19  Pablo Saavedra  <psaavedra@igalia.com>

        pytest is not correctly auto-installed
        https://bugs.webkit.org/show_bug.cgi?id=194707

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pytest):

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

        REGRESSION (PSON): Can't access optumbank.com from myuhc.com
        https://bugs.webkit.org/show_bug.cgi?id=194797
        <rdar://problem/48055151>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support pasting item-provider-backed data on the pasteboard as attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=194670
        <rdar://problem/39066529>

        Reviewed by Tim Horton.

        Remove code and tests for subresource URL replacement, and also add a new test to verify that copied data can be
        pasted in an editable area as attachment elements.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:replacementURLForResource:mimeType:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r241728
       ​https://bugs.webkit.org/show_bug.cgi?id=194723

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        The test should check the default preference value, not make sure the preference is NO after setting it to YES :/

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

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Fix a bug where the wrong usage code was used for F13 thru F24.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey):

2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>

        Bytecode cache should a have a boot-specific validation
        https://bugs.webkit.org/show_bug.cgi?id=194769
        <rdar://problem/48149509>

        Reviewed by Keith Miller.

        Add test for WTF::bootSessionUUIDString()

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/UUID.cpp: Added.
        (TEST):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Disable safe browsing in WKWebView and remove its WKPreferences API
        https://bugs.webkit.org/show_bug.cgi?id=194723
        <rdar://problem/48122993>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):
        Make tests use SPI instead of API.

2019-02-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use dumpJSConsoleLogInStdErr=true webkit-test-runner option for non-imported tests instead of using DumpJSConsoleLogInStdErr expectation in TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=194586

        Reviewed by Ross Kirsling.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Pass true to setDumpJSConsoleLogInStdErr if options.dumpJSConsoleLogInStdErr is true.
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input): Convert Cygwin absolute path of tests to Windows path.

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] RenderImage's default intrinsic size is 0.
        https://bugs.webkit.org/show_bug.cgi?id=194745

        Reviewed by Antti Koivisto.

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

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block replaced intrinsic width.
        https://bugs.webkit.org/show_bug.cgi?id=194705

        Reviewed by Simon Fraser.

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

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Apply min/max width constraints to preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=194739

        Reviewed by Simon Fraser.

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

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

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree):
        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):
        (WTR::getOutputDir):
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/gtk/main.cpp:
        (main):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/wpe/main.cpp:
        (main):
        Utilize WTF::Environment where possible.

2019-02-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView callout bar is missing Change Writing Direction item
        https://bugs.webkit.org/show_bug.cgi?id=190015
        <rdar://problem/44810366>

        Reviewed by Tim Horton.

        Make an existing API test that exercises platform SPI to change the inline text writing direction run only on
        macOS, and add a new API test that uses similarly named SPI on iOS to change the base writing direction.

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

2019-02-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Navigating quickly back and forth can lead to getting 'about:blank' in the backforward list
        https://bugs.webkit.org/show_bug.cgi?id=194717
        <rdar://problem/47884404>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make navigator.mediaDevices SecureContext
        https://bugs.webkit.org/show_bug.cgi?id=194666

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (MediaCaptureDisabledTest::loadTestAndWaitForMessage):
        (TEST_F):

2019-02-15  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        Remove unnecessary soft linking macro usage.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL):
        (SOFT_LINK_STAGED_FRAMEWORK): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2019-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Out-of-flow box is never a float box
        https://bugs.webkit.org/show_bug.cgi?id=194704

        Reviewed by Antti Koivisto.

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

2019-02-10  Darin Adler  <darin@apple.com>

        Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases)
        https://bugs.webkit.org/show_bug.cgi?id=194487

        Reviewed by Daniel Bates.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (applicationId): Use makeString instead of String::format.
        (main): Ditto.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createURLForResource): Ditto.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Ditto.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributeSetToString): Use StringBuilder functions directly instead of g_strconcat.
        (WTR::attributesOfElement): Use StringBuilder functions directly instead of String::format.
        (WTR::createStringWithAttributes): Use appendLiteral.
        (WTR::AccessibilityUIElement::helpText const): Ditto.
        (WTR::AccessibilityUIElement::attributedStringForRange): Use StringBuilder functions
        directly instead of using String::format.
        (WTR::AccessibilityUIElement::url): Use makeString instead of String::format.
        (WTR::stringAtOffset): Use StringBuilder::appendNumber instead of String::format.

2019-02-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241564.

        Caused 50+ Timeouts on Mac WK2, mostly in the http/ directory

        Reverted changeset:

        "[Mac] WebInspectorUI.framework does not need to be soft-
        linked anymore"
        https://bugs.webkit.org/show_bug.cgi?id=194411
        https://trac.webkit.org/changeset/241564

2019-02-15  Saam barati  <sbarati@apple.com>

        [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
        https://bugs.webkit.org/show_bug.cgi?id=194036

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::drawSquareInEditableImage):

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::drawSquareInEditableImage):

2019-02-14  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        Remove unnecessary soft linking macro usage.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL):
        (SOFT_LINK_STAGED_FRAMEWORK): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

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

        [ews-app] status bubble should fetch builder name info from BuilderMapping table
        https://bugs.webkit.org/show_bug.cgi?id=194599

        Reviewed by Lucas Forschler.

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

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

        [ews-app] Set Foreign Key in Django build model
        https://bugs.webkit.org/show_bug.cgi?id=194667

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build):

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

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree):
        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication):
        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::strip):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):
        (WTR::getOutputDir):
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/gtk/main.cpp:
        (main):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/wpe/main.cpp:
        (main):
        Utilize WTF::Environment where possible.

2019-02-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Introduce a WebContent Process cache
        https://bugs.webkit.org/show_bug.cgi?id=194594
        <rdar://problem/46793397>

        Reviewed by Geoff Garen.

        Update API tests to turn on the WebContent Process cache.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r241480

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator initWithWebView:]):

2019-02-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA Reflection was disabled in error
        https://bugs.webkit.org/show_bug.cgi?id=194647
        <rdar://problem/48068336>

        Reviewed by Ryosuke Niwa.

        Remove test override now that this feature should be enabled by default.

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

2019-02-14  Commit Queue  <commit-queue@webkit.org>

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

        causing API failures in builds (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "[Cocoa] Media elements will restart network buffering just
        before suspending"
        https://bugs.webkit.org/show_bug.cgi?id=193691
        https://trac.webkit.org/changeset/241486

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapse] Replaced boxes don't collapse through their margins
        https://bugs.webkit.org/show_bug.cgi?id=194622

        Reviewed by Antti Koivisto.

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

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC] Shrink-to-fit-width should be constrained by min/max width
        https://bugs.webkit.org/show_bug.cgi?id=194653

        Reviewed by Antti Koivisto.

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

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WKBundleFrameGetParentFrame when called inside didRemoveFrameFromHierarchy
        https://bugs.webkit.org/show_bug.cgi?id=194641

        Reviewed by Geoffrey Garen.

        Added a call to WKBundleFrameGetParentFrame to an existing test for didRemoveFrameFromHierarchy
        so that the test would fail without this fix.

        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::didRemoveFrameFromHierarchyCallback):

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

        [ews-app] Change log level for a log statement

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch):

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

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

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

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

        [ews-app] Fetch builder id to name mapping
        https://bugs.webkit.org/show_bug.cgi?id=194355

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.get_builder_id_to_name_mapping):
        (Buildbot._get_display_name_from_builder_name):

2019-02-12  Jiewen Tan  <jiewen_tan@apple.com>

        Further restricting webarchive loads
        https://bugs.webkit.org/show_bug.cgi?id=194567
        <rdar://problem/47610130>

        Reviewed by Youenn Fablet.

        Besides adding API tests, this patch also enhances DragAndDropSimulator to allow
        navigations on drop.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/LoadWebArchive.mm: Added.
        (-[TestLoadWebArchiveNavigationDelegate webView:didFinishNavigation:]):
        (-[TestLoadWebArchiveNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestLoadWebArchiveNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/helloworld.webarchive: Added.
        * TestWebKitAPI/Tests/mac/load-web-archive-1.html: Added.
        * TestWebKitAPI/Tests/mac/load-web-archive-2.html: Added.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator _webView:dragDestinationActionMaskForDraggingInfo:]):

2019-02-13  John Wilander  <wilander@apple.com>

        Store Ad Click Attribution requests in the network process
        https://bugs.webkit.org/show_bug.cgi?id=194510
        <rdar://problem/47650118>

        Reviewed by Alex Christensen and Daniel Bates.

        This patch adds two TestRunner functions:
        - dumpAdClickAttribution()
        - clearAdClickAttribution()

        They call into the network process to dump and clear Ad Click
        Attribution state, respectively.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpAdClickAttribution):
        (WTR::TestRunner::clearAdClickAttribution):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::AdClickAttributionStringResultCallbackContext::AdClickAttributionStringResultCallbackContext):
        (WTR::adClickAttributionStringResultCallback):
        (WTR::TestController::dumpAdClickAttribution):
        (WTR::AdClickAttributionVoidCallbackContext::AdClickAttributionVoidCallbackContext):
        (WTR::adClickAttributionVoidCallback):
        (WTR::TestController::clearAdClickAttribution):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::dumpAdClickAttribution):
        * WebKitTestRunner/TestInvocation.h:

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

        [ews-app] Generate status-bubble
        https://bugs.webkit.org/show_bug.cgi?id=194572

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._should_show_bubble_for):
        (StatusBubble._build_bubbles_for_patch):

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

        [ews-app] Add status bubble html template
        https://bugs.webkit.org/show_bug.cgi?id=194571

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/templates: Added.
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Copied from QueueStatusServer/templates/statusbubble.html.

2019-02-12  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared()
        https://bugs.webkit.org/show_bug.cgi?id=194568
        <rdar://problem/47944490>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):

2019-02-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove bug_dummy from parsed test expectations
        https://bugs.webkit.org/show_bug.cgi?id=194562
        <rdar://problem/47853999>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test): Remove DUMMY_BUG_MODIFIER from
        skipped tests.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:

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

        [ews-app] Add method to fetch patch
        https://bugs.webkit.org/show_bug.cgi?id=194518

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.get_patch):

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (60 new tests -> 860)

        Unreviewed test gardening (run-singly, --child-processes=1).

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

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

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Tim Horton.

        Add support for interacting with the callout bar on iOS during layout tests. See below for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):
        (WTR::UIScriptController::rectForMenuAction const):

        Add new mechanisms to make it possible to interact with and query the state of the callout menu on iOS. This
        includes determining the rect (in content view coordinates) of the menu's controls, and callbacks to register
        for when the menu is shown or hidden.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowMenuCallback):
        (WTR::UIScriptController::didShowMenuCallback const):
        (WTR::UIScriptController::setDidHideMenuCallback):
        (WTR::UIScriptController::didHideMenuCallback const):
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):
        (WTR::UIScriptController::rectForMenuAction const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:

        Add a new test option to determine whether DOM paste is enabled. DOM paste is currently enabled everywhere by
        default, but these new programmatic paste tests require it to be disabled in order for confirmation UI to show.

        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::platformUndoManager const):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _didShowMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):

        Listen to when the callout bar is presented and dismissed, and invoke testing callbacks as needed.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::handleMenuWillHideNotification):
        (WTR::handleMenuDidHideNotification):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        (WTR::TestController::platformResetStateToConsistentValues):

        Additionally ensure that any callout menu presented by a previous layout test is dismissed before running the
        next test by hiding the callout bar if necessary, and then waiting for the "DidHide" notification.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::forEachViewInHierarchy):
        (WTR::findViewInHierarchyOfType):

        Move `forEachViewInHierarchy` so that we can use it throughout the file, and then add some additional helper
        functions that dig through a given view's hierarchy in search of a view of a given class.

        (WTR::UIScriptController::selectionStartGrabberViewRect const):
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):

        Tweak these to use `platformContentView` instead of grabbing the content view from WKWebView directly.

        (WTR::UIScriptController::rectForMenuAction const):

        Add a new UIScriptController method to get the rect of the action in the contextual menu (on iOS, this is the
        callout bar) whose label matches the given string.

        (WTR::UIScriptController::platformContentView const):

        Add a `platformContentView()` helper on UIScriptController so that we can stop grabbing the value for key
        "_currentContentView" from various places in this file. Additionally, rewrite `platformUndoManager()` in terms
        of this new helper, and move the code out from iOS/macOS-specific files into UIScriptControllerCocoa.

        (WTR::UIScriptController::platformUndoManager const): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformContentView const):
        (WTR::UIScriptController::platformUndoManager const): Deleted.

2019-02-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: No option to only show unexpected failures in results.html for iPad
        https://bugs.webkit.org/show_bug.cgi?id=194554
        <rdar://problem/47922442>

        Rubber-stamped by Aakash Jain.

        Just because a TestExpecations file does not exist for a specific platform does not mean that
        TestExpecations are not being used, given that platforms inherit test expectations.

        * Scripts/webkitpy/port/base.py:
        (Port.uses_test_expectations_file): Check all possible locations of a TestExpectations file.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_uses_test_expectations_file):

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Remove setDefersLoading infrastructure from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=194506

        Reviewed by Brady Eidson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDefersLoading): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        WebPage::close needs to remove all message receivers associated with that WebPage, not WebPage::~WebPage
        https://bugs.webkit.org/show_bug.cgi?id=194522
        <rdar://problem/47789393>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm: Added.
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for float boxes.
        https://bugs.webkit.org/show_bug.cgi?id=194528

        Reviewed by Antti Koivisto.

        Expand tests coverage (2 new tests -> 800).
        (This is the correct test ordering --runs-singly --child-processes=1)

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

2019-02-12  Rob Buis  <rbuis@igalia.com>

        Implement serializing in MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=193909

        Reviewed by Darin Adler.

        Add various tests involving upper case, non-ASCII, control/null characters,
        various HTTP whitespace, single quotes and an unpaired surrogate.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::escapeNonASCIIPrintableCharacters):
        (TestWebKitAPI::serializeIfValid):
        (TestWebKitAPI::TEST):

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

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Allow testing infrastructure to use fonts that are returned from CTFontDescriptorCreateForCSSFamily().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2019-02-11  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Add content extensions support in WKTR and unskip layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193622

        Reviewed by Michael Catanzaro.

        This adds support for loading content extension rule sets from the JSON files which
        accompany the corresponding layout test, using the C API. The Cocoa specific parts
        of WKTR for this could be removed, but that is left for a follow-up patch with
        cleanups.

        * Scripts/webkitperl/FeatureList.pm: Add an option to toggle CONTENT_EXTENSIONS.
        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath): Subtract one from the length when constructing the result std::string to
        avoid having the null-terminator copied into the result.
        (WTR::TestController::configureViewForTest): Call configureContentExtensionForTest() as
        part of the preparations to run a test.
        (WTR::ContentExtensionStoreCallbackContext::ContentExtensionStoreCallbackContext): Added.
        (WTR::contentExtensionStoreCallback): Added.
        (WTR::contentExtensionJSONPath): Used to calculate the path to the JSON rule set to be
        used for content extensions test.
        (WTR::TestController::configureContentExtensionForTest): Added, handles enabling content
        extensions and compiling the JSON rule set for tests involving content extensions.
        (WTR::TestController::resetContentExtensions): Removes the content extension built for
        testing and disables content extensions.
        (WTR::TestController::resetPreferencesToConsistentValues): Add a call to
        resetContentExtensions().
        (WTR::TestController::userContentController): Added implementation for ports other than Cocoa.
        * WebKitTestRunner/TestController.h: Add declarations for resetContentExtensions(),
        configureContentExtensionForTest(), and userContentController().

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

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Add support infrastructure for testing touch and stylus taps when holding modifier keys. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength):
        (WTR::parseModifierArray):
        (WTR::UIScriptController::singleTapAtPoint): Implemented in terms of singleTapAtPointWithModifiers().
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPoint): Implemented in terms of stylusTapAtPointWithModifiers().
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.

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

        Unreviewed, rolling out r241272 and r241276.
        https://bugs.webkit.org/show_bug.cgi?id=194514

        Broke the Apple Internal build and the fix requires human
        intervention :( (Requested by dydz on #webkit).

        Reverted changesets:

        "[iOS] Mouse/Touch/Pointer events are missing modifier keys"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241272

        "Fix internal iOS build after r241272"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241276

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241269.

        Caused 5 layout tests crashes on Mac WK1

        Reverted changeset:

        "DumpRenderTree should report unknown options"
        https://bugs.webkit.org/show_bug.cgi?id=191303
        https://trac.webkit.org/changeset/241269

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

        fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html does not work on iPad
        https://bugs.webkit.org/show_bug.cgi?id=194313

        Reviewed by Tim Horton.

        Add a helper to determine whether the web view is presenting modal UI.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isPresentingModally const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isPresentingModally const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isPresentingModally const):
        (WTR::UIScriptController::calendarType const):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::calendarType const):

2019-02-11  Joseph Pecoraro  <pecoraro@apple.com>

        GCHeapInspector: Show the retained sizes in more places
        https://bugs.webkit.org/show_bug.cgi?id=194464

        Reviewed by Simon Fraser.

        * GCHeapInspector/gc-heap-inspector.html:
        * GCHeapInspector/script/interface.js:
        (HeapInspectorUtils.humanReadableSize):
        (HeapInspectorUtils.spanForNode.let.nodeHTML.node.className.span):
        (HeapInspectorUtils.spanForNode.span.span):
        (HeapSnapshotInspector.prototype.buildAllObjectsByType):
        (HeapSnapshotInspector.prototype.buildRoots):

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

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Add support infrastructure for testing touch and stylus taps when holding modifier keys. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength):
        (WTR::parseModifierArray):
        (WTR::UIScriptController::singleTapAtPoint): Implemented in terms of singleTapAtPointWithModifiers().
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPoint): Implemented in terms of stylusTapAtPointWithModifiers().
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.

2019-02-11  Darshan Kadu  <dkadu@igalia.com>

        DumpRenderTree should report unknown options
        https://bugs.webkit.org/show_bug.cgi?id=191303

        Reviewed by Frédéric Wang.

        Added RELEASE_ASSERT_NOT_REACHED for DumpRenderTree/TestOptions.cpp
        to report unknown options.
        Added and assigned test options which are currently used in tests.

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

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241229.

        Revision broke internal builds for watchOS.

        Reverted changeset:

        "[Cocoa] Ask platform for generic font family mappings"
        https://bugs.webkit.org/show_bug.cgi?id=187723
        https://trac.webkit.org/changeset/241229

2019-02-11  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][MiniBrowser] Basic authentication always fails.
        https://bugs.webkit.org/show_bug.cgi?id=194496

        Reviewed by Don Olmstead.

        * MiniBrowser/win/DialogHelper.h:
        (Dialog::getText):

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

        [GStreamer] GstMappedBuffer testsuite build fails
        https://bugs.webkit.org/show_bug.cgi?id=194495

        Reviewed by Carlos Garcia Campos.

        Fix the build by explicitely adding the gstreamer1.0-audio include
        directories to the include path.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:

2019-02-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add enable-javascript-markup setting
        https://bugs.webkit.org/show_bug.cgi?id=193439

        Reviewed by Michael Catanzaro.

        Add test cases to check the new setting.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (testWebKitSettingsJavaScriptMarkup):
        (beforeAll):

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * WebKitTestRunner/TestController.cpp: Removed unnecessary include of HexNumber.h.

2019-02-09  Benjamin Poulain  <benjamin@webkit.org>

        Add more tests for clampTo<>()
        https://bugs.webkit.org/show_bug.cgi?id=194462

        Reviewed by Geoffrey Garen.

        Darin suggested to test the very last floating point number
        at the boundaries when truncating to integer.
        I added test for max/min and max-1/min-1.

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

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST): Change tests to use EXPECT_STREQ so failure messages are easier
        to understand. Updated tests for changes to FormattedNumber::fixedPrecision.

2019-02-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for basic inline containers
        https://bugs.webkit.org/show_bug.cgi?id=194473

        Reviewed by Antti Koivisto.

        Expand tests coverage (11 new tests -> 798)

        * LayoutReloaded/misc/LFC-passing-tests.txt: not sure why run-singly keeps producing different ordering.

2019-02-09  Benjamin Poulain  <benjamin@webkit.org>

        Fix MiniBrowser's entitlements
        https://bugs.webkit.org/show_bug.cgi?id=192431

        Reviewed by Joseph Pecoraro.

        MiniBrowser's Extensions Manager was broken. The entitlement was missing for opening
        files, making it impossible to load any extension.

        * MiniBrowser/MiniBrowser.entitlements:

2019-02-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Allow testing infrastructure to use fonts that are returned from CTFontDescriptorCreateForCSSFamily().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2019-02-08  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Implement back/forward touchpad gesture
        https://bugs.webkit.org/show_bug.cgi?id=193919

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Add a test for 'enable-back-forward-navigation-gestures' property.

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

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen

        * MiniBrowser/MiniBrowser.entitlements:

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

        [ews-build] Ensure that every builder in config.json has short name
        https://bugs.webkit.org/show_bug.cgi?id=194461

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: Updated unit-tests.

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

        [ews-build] Add short name to config.json
        https://bugs.webkit.org/show_bug.cgi?id=194456

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json: Added short name.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Set the short name as the builder description.

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

        webkitpy: CrashLogs.find_all_logs may return a string or a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=194418

        Reviewed by Lucas Forschler.

        Do not include errors trying when finding crashlogs at the end of
        a run-webkit-tests run since we don't process those errors.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._look_for_all_crash_logs_in_log_dir):
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir):
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort._look_for_all_crash_logs_in_log_dir):

2019-02-08  Beth Dakin  <bdakin@apple.com>

        Add afterScreenUpdates to WKSnapshotConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=194362
        -and corresponding-
        <rdar://problem/40655528> Please add an "after screen updates" property to 
        WKSnapshotConfiguration (to solve blank snapshots)

        Reviewed by Tim Horton.

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

2019-02-08  Benjamin Poulain  <benjamin@webkit.org>

        clampTo(): do not convert the input to double when dealing with integers
        https://bugs.webkit.org/show_bug.cgi?id=194263
        <rdar://problem/47692312>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::testClampFloatingPointToFloatingPoint):
        (TestWebKitAPI::testClampFloatingPointToInteger):
        (TestWebKitAPI::testClampSameSignIntegers):
        (TestWebKitAPI::testClampUnsignedToSigned):
        (TestWebKitAPI::testClampSignedToUnsigned):

2019-02-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Respect --dedicated-simulators flag
        https://bugs.webkit.org/show_bug.cgi?id=194416
        <rdar://problem/47894722>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.supported_device_types): If --dedicated-simulators is passed, all
        available devices can be safely ignored.

2019-02-07  Keith Rollin  <krollin@apple.com>

        Remove extra copy of 100x100-red.tga
        https://bugs.webkit.org/show_bug.cgi?id=194371
        <rdar://problem/47873465>

        Reviewed by Said Abou-Hallawa.

        In order to help it pass its tests, Bug 194190 added a second copy of
        the file 100x100-red.tga. However, it turns out that this additional
        file wasn't actually needed, and that that sole previous copy was
        sufficient. At the same time, this second copy -- which was copied to
        the same location in the build output as the first copy -- now caused
        XCBuild to complain because there were two production rules for the
        same output file. Address this by removing the newly-added extra copy.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/100x100-red.tga: Removed.

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

        Deprecate WKBundlePageSetDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=191394

        Reviewed by Dean Jackson.

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

2019-02-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Use the containing block's padding width when computing min/max width.
        https://bugs.webkit.org/show_bug.cgi?id=194391

        Reviewed by Antti Koivisto.

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

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

        Remove Info.plist from MobileMiniBrowser.framework's Copy Bundle Resources phase
        https://bugs.webkit.org/show_bug.cgi?id=193975
        <rdar://problem/47643306>

        Reviewed by Tim Horton.

        The MobileMiniBrowser.framework's Copy Bundle Resources phase copies
        the Info.plist file into the bundle. This step is not necessary as the
        implicit "bundle up all the build products into a framework" build
        phase does this already. Having the Copy Bundle Resources phase do
        this causes a conflict under XCBuild, which objects to two build
        phases producing the same file (Info.plist). Address this by removing
        Info.plist from the Copy Bundle Resources phase.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

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

        Really enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194357
        <rdar://problem/47861231>

        Reviewed by Chris Dumez.

        Bug 194124 was supposed to enable the automatic checking and
        regenerating of .xcfilelist files during the build. While related
        changes were included in that patch, the change to actually enable the
        operation somehow was omitted. This patch actually enables the
        operation. The check-xcfilelist.sh scripts now check
        WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
        from the checking.

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:

2019-02-06  David Kilzer  <ddkilzer@apple.com>

        WTR::InjectedBundlePage::willSendRequestForFrame() leaks a WKDataRef
        <https://webkit.org/b/194286>
        <rdar://problem/47815558>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Use
        WKRetainPtr<> to avoid leaking the WKDataRef.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix a typo

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:

2019-02-06  Olivier Blin  <olivier.blin@softathome.com>

        [GTK][WPE] force libpsl build to use ICU in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194288

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:
        Require ICU for libpsl build in jhbuild, like done in WPE.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r240785): [SOUP] Broke cookie persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=194209

        Reviewed by Carlos Garcia Campos.

        Enhance TestCookieManager to ensure this doesn't happen again.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerPersistentStorage):
        (beforeAll):

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

        Rename TestOptions.ignoreSynchronousMessagingTimeoutsForTesting
        https://bugs.webkit.org/show_bug.cgi?id=194324

        Reviewed by Andy Estes.

        Rename ignoreSynchronousMessagingTimeoutsForTesting to just ignoreSynchronousMessagingTimeouts. The -ForTesting
        part of the name is already implicit, since this is in testing code in TestOptions.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

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

        [ews-build] Allow * as platform for builders and workers
        https://bugs.webkit.org/show_bug.cgi?id=188533

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (checkWorkersAndBuildersForConsistency):

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

        [ews-build] Add few bots to config.json
        https://bugs.webkit.org/show_bug.cgi?id=194304

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        * Scripts/generate-xcfilelists:

2019-02-05  Olivier Blin  <olivier.blin@softathome.com>

        [GTK][WPE] force libpsl build to use ICU in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194288

        Reviewed by Philippe Normand.

        In jhbuild, libpsl depends on ICU, but its configure script may decide to use libidn instead of ICU.
        This can cause build failures if libidn is detected but libunistring is not available.

        Make sure that ICU is used for runtime and builtin PSL data.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

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

        [ews-app] Modified timestamp should be updated on updating data
        https://bugs.webkit.org/show_bug.cgi?id=194295

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-02-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r240742.

        Causes crashes on iOS simulator.

        Reverted changeset:

        "[iOS] Keyups for non-modifier keys identified as "Dead" when
        not focused in a content-editable element"
        https://bugs.webkit.org/show_bug.cgi?id=192824
        https://trac.webkit.org/changeset/240742

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

        run-webkit-tests emits message "...running None" when running tests
        https://bugs.webkit.org/show_bug.cgi?id=194133
        <rdar://problem/47724738>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__str__): Use both version mapping tables and use just the variant
        name if no version name is available.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_unmapped_version): Test case where the version does not have
        an associated named.

2019-02-05  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] require python3-setuptools for meson build in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194287

        Reviewed by Philippe Normand.

        python3-setuptools is needed to build meson in jhbuild.
        It is already required by the GTK port.

        * wpe/install-dependencies:

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

        [ews-app] Add method to save BuilderMapping to database
        https://bugs.webkit.org/show_bug.cgi?id=194264

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping.__str__):
        (BuilderMapping):
        (BuilderMapping.save_mapping):
        (BuilderMapping.update_mapping):
        (BuilderMapping.get_existing_mapping):
        (BuilderMapping.is_valid_mapping):

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

        [ews-app] Add timestamp fields for BuilderMappings
        https://bugs.webkit.org/show_bug.cgi?id=194266

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping):

2019-02-04  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add tests for webkit_uri_for_display().

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitURIUtilities.cpp: Added.
        (testURIForDisplayUnaffected):
        (testURIForDisplayAffected):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:

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

        webkitpy: Precedence of booted devices should match precedence in DEFAULT_DEVICE_TYPES
        https://bugs.webkit.org/show_bug.cgi?id=194158
        <rdar://problem/47737268>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.supported_device_types): Sort supported device types by the DEFAULT_DEVICE_TYPES.

2019-02-04  Said Abou-Hallawa  <said@apple.com>

        [CG] Enable setAdditionalSupportedImageTypes for WK1
        https://bugs.webkit.org/show_bug.cgi?id=194190

        Reviewed by Tim Horton.

        Add a test similar to the one under WebKit Cocoa but make it create a
        WebView instead of a WKWebView.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/100x100-red.tga: Added.
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.html: Added.
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.mm: Added.
        (-[AdditionalSupportedImageTypesTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::runTest):
        (TestWebKitAPI::TEST):

2019-02-04  Zalan Bujtas  <zalan@apple.com>

        [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
        https://bugs.webkit.org/show_bug.cgi?id=194168

        Reviewed by Simon Fraser.

        Test if the firstVisuallyNoneEmpty milestone fires before the deferred script's post-message. 

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm: Added.
        (-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit/deferred-script-load.html: Added.
        * TestWebKitAPI/Tests/WebKit/deferred-script.js: Added.

2019-02-04  Dean Johnson  <dean_johnson@apple.com>

        REGRESSION (r237269): webkit-patch what-broke is broken 
        https://bugs.webkit.org/show_bug.cgi?id=193025

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/host.py:
        (Host.buildbot):
        (Host.bugzilla): Renamed to 'buildbot'.

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

        [iOS] API test WKAttachmentTests.InsertAndRemoveDuplicateAttachment is failing after r240902
        https://bugs.webkit.org/show_bug.cgi?id=194207

        Reviewed by Tim Horton.

        Fix this API test by making it robust against smart paste on iOS. Currently, this test pastes an attachment
        element and assumes that the pasted attachment is adjacent to the original one. However, after enabling smart
        paste, we now insert an extra space in between. Instead of executing "DeleteBackward" twice to test removing the
        attachment elements, we delete backwards once to remove the pasted attachment, and move the selection to the
        start and delete forwards to remove the original attachment.

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

2019-02-04  Youenn Fablet  <youenn@apple.com>

        Capture state should be managed consistently when doing process swapping
        https://bugs.webkit.org/show_bug.cgi?id=194122
        <rdar://problem/47609293>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[GetUserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[GetUserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[GetUserMediaUIDelegate _webView:mediaCaptureStateDidChange:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isDoingMediaCapture const):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isDoingMediaCapture const):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::isDoingMediaCapture const):

2019-02-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WebKitTestRunners is failing to create the IndexedDB directory.
        https://bugs.webkit.org/show_bug.cgi?id=194142

        Reviewed by Ross Kirsling.

        There three 'separator' variables in TestController.cpp. Renamed
        it 'pathSeparator', and unified them.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::createTestURL):
        (WTR::TestController::platformAdjustContext):

2019-02-03  Simon Fraser  <simon.fraser@apple.com>

        Make setNeedsLayout on the root more explicitly about triggering its side-effects
        https://bugs.webkit.org/show_bug.cgi?id=194198

        Reviewed by Antti Koivisto.

        No need to set the banner heights on navigation now, since Page stores them.

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

2019-02-03  John Wilander  <wilander@apple.com>

        Parse and handle Ad Click Attribution attributes in HTMLAnchorElement::handleClick()
        https://bugs.webkit.org/show_bug.cgi?id=194104
        <rdar://problem/47649991>

        Reviewed by Chris Dumez, Daniel Bates, and Darin Adler.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Changed numeric types from unsigned short to uint32_t.

2019-02-02  David Kilzer  <ddkilzer@apple.com>

        Leak of NSArray (4.25 Kbytes) in com.apple.WebKit.WebContent running WebKit layout tests on iOS Simulator
        <https://webkit.org/b/194178>
        <rdar://problem/47753473>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::uninstallFakeHelvetica): Pass nullptr into
        CTFontManagerUnregisterFontsForURLs() to ignore any errors.

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Initialize ICB's style with fixed width/height.
        https://bugs.webkit.org/show_bug.cgi?id=194188

        Reviewed by Antti Koivisto.

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

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add missing case to out-of-flow non-replaced horizontal used margin value computation
        https://bugs.webkit.org/show_bug.cgi?id=194185

        Reviewed by Antti Koivisto.

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

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::originUserVisibleName): Use makeString and reduce the use of std::string
        as an intermediate in code that ultimately constructs a WTF::String.
        (WTR::userMediaOriginHash): Use makeString.
        (WTR::TestController::didNavigateWithNavigationData): More of the same.
        (WTR::TestController::didPerformClientRedirect): Ditto.
        (WTR::TestController::didPerformServerRedirect): Ditto.
        (WTR::TestController::didUpdateHistoryTitle): Ditto.

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

        [ews-build] Add unit test to verify builder keys
        https://bugs.webkit.org/show_bug.cgi?id=194152

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_builder_keys): Added unit-test.

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (12 new tests -> 787)

        Unreviewed test gardening.

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

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix statically positioned replaced out-of-flow horizontal geometry
        https://bugs.webkit.org/show_bug.cgi?id=194163

        Reviewed by Simon Fraser.

        775

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

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

        [iOS] Consistent 1 sec hang when triggering modal alerts while handling synchronous touch events
        https://bugs.webkit.org/show_bug.cgi?id=194140
        <rdar://problem/47728098>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldDismissJavaScriptAlertsAsynchronously):

        Add a new TestRunner hook to make modal JavaScript alerts dismiss asynchronously. This is used by the new layout
        test to induce an IPC deadlock when presenting a modal alert during touch start.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::runJavaScriptAlert):

        Add a client callback function for running JavaScript alerts.

        (WTR::TestController::createOtherPage):
        (WTR::TestController::generateContextConfiguration const):

        Add a test option to disable IPC timeouts for a layout test. This forces the test to reliably time out without
        the fix in this patch.

        (WTR::TestController::createWebViewWithOptions):

        Plumb TestOptions to generateContextConfiguration.

        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::setShouldDismissJavaScriptAlertsAsynchronously):
        (WTR::TestController::handleJavaScriptAlert):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-02-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
        https://bugs.webkit.org/show_bug.cgi?id=193740
        <rdar://problem/47527267>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-app] Add display name field to BuilderMapping model
        https://bugs.webkit.org/show_bug.cgi?id=194153

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping):

2019-02-01  Youenn Fablet  <youenn@apple.com>

        API Test broken: TestWebKitAPI.WebKit2.GetUserMediaReprompt
        https://bugs.webkit.org/show_bug.cgi?id=194155

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:
        Revert use of async functions as it seems it cannot be evaluated from TestWebKitAPI.
        Keep calling enumerateDevices to continue cover https://bugs.webkit.org/show_bug.cgi?id=194106.

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust replaced element's intrinsic ratio
        https://bugs.webkit.org/show_bug.cgi?id=194154

        Reviewed by Antti Koivisto.

        761

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

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Show test results in minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=194150

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.show_results_html_file):

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] MiniBrowser: add ky bindings for back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=194151

        Reviewed by Žan Doberšek.

        ALT + <- go back
        ALT + -> go forward

        * MiniBrowser/wpe/main.cpp:
        (main):

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Set intrinsic size on Layout::Replaced
        https://bugs.webkit.org/show_bug.cgi?id=194139

        Reviewed by Antti Koivisto.

        744

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

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] MiniBrowser: use g_file_new_for_commandline_arg
        https://bugs.webkit.org/show_bug.cgi?id=194146

        Reviewed by Xabier Rodriguez-Calvar.

        It allows to open relative paths.

        * MiniBrowser/wpe/main.cpp:
        (main):

2019-01-31  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration after recent queue changes
        https://bugs.webkit.org/show_bug.cgi?id=194127

        Rubber-stamped by Aakash Jain.

        Apple Windows queues were updated in r237755, and Sierra was removed in r239859.

        * TestResultServer/static-dashboards/builders.jsonp:

2019-01-31  Youenn Fablet  <youenn@apple.com>

        Add an API test to cover UIClient checkUserMediaPermissionForOrigin being nullptr
        https://bugs.webkit.org/show_bug.cgi?id=194106
        <rdar://problem/47676333>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2019-01-31  Chris Dumez  <cdumez@apple.com>

        Page zoom level is lost after a process swap or a crash
        https://bugs.webkit.org/show_bug.cgi?id=194105
        <rdar://problem/47610781>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didCommitNavigation:]):

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

        Revert r238819 which is unneeded and caused a performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=192272
        <rdar://problem/46664625>

        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm:
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]):
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]): Deleted.

2019-01-31  Jiewen Tan  <jiewen_tan@apple.com>

        Formalize WebKitAdditions mechanism of LoadOptimizer
        https://bugs.webkit.org/show_bug.cgi?id=193886
        <rdar://problem/47696809>

        Reviewed by Brent Fulgham.

        * MiniBrowser/MiniBrowser.entitlements:
        Make com.apple.security.temporary-exception.mach-lookup.global-name an array.

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Margin before/after/start/end initial value is 0 and not auto.
        https://bugs.webkit.org/show_bug.cgi?id=194090

        Reviewed by Antti Koivisto.

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

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedHorizontalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194074

        Reviewed by Antti Koivisto.

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

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block level replaced box.
        https://bugs.webkit.org/show_bug.cgi?id=194071

        Reviewed by Antti Koivisto.

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

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

        Fix WebKitTestRunner's testPath with Windows full paths
        https://bugs.webkit.org/show_bug.cgi?id=194012

        Reviewed by Alex Christensen.

        updateTestOptionsFromTestHeader failed to open test files because
        testPath returned wrong file paths. It returned a path "/C:/..."
        if a URL "file:///C:/..." was given.

        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath): Removed the first '/' if the path starts with something like "/C:/".

2019-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Bump font related dependencies to match the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=194017

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.
        * wpe/patches/icudata-stdlibs.patch: Added.

2019-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Enable swipe tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194076

        Reviewed by Geoffrey Garen.

        Removed the superflous call to prepareForAsyncTask and asyncTaskComplete as
        it causes a debug assertion failure in runUIScript.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):

2019-01-30  Keith Rollin  <krollin@apple.com>

        Use correct printf format specifier
        https://bugs.webkit.org/show_bug.cgi?id=194062
        <rdar://problem/47686167>

        Reviewed by Alexey Proskuryakov.

        LayoutTestSpellChecker.mm is trying to format a variable of type
        NSTextCheckingType with %tu (unsigned ptrdiff_t), when the type is
        actually an unsigned long long. Fix this by formatting with %llu.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (-[LayoutTestTextCheckingResult description]):

2019-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r240541): WebKit.WebsitePoliciesCustomJavaScriptUserAgent is failing since introduction on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193979

        Reviewed by Wenson Hsieh.

        Fix the test for iOS. Make the test work with iOS UA string.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-01-30  Ryan Haddad  <ryanhaddad@apple.com>

        Replace High Sierra LLINT CLoop bot due to hardware failure
        https://bugs.webkit.org/show_bug.cgi?id=194066

        Reviewed by Aakash Jain.

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

2019-01-30  Keith Rollin  <krollin@apple.com>

        [NSDragItem init] is unavailable
        https://bugs.webkit.org/show_bug.cgi?id=194059
        <rdar://problem/47685715>

        Reviewed by Wenson Hsieh.

        [NSDragItem init] is marked as NS_UNAVAILABLE. This affects
        DumpRenderTree and TestWebKitAPI, which both try to create an
        NSDragItem in a manner that invokes this method. Address this by using
        -initWithPasteboardWriter instead.

        Note that the parameter passed to initWithPasteboardWriter is likely
        incorrect. In both cases, the object passed does not conform to
        NSPasteboardWriting. However, with this fix, we're no worse off than
        before, and can now perform builds with newer compilers and SDKs until
        a real fix can be crafted. That work is tracked in
        https://bugs.webkit.org/show_bug.cgi?id=194060

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):

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

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Fix a bug where the wrong usage code was used for F13 thru F24.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey):

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

        Regression(PSON) Load hang can occur on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194030
        <rdar://problem/47656939>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [LFC] Expand tests coverage.

        Unreviewed test gardening.

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

2019-01-30  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add openjpeg support
        https://bugs.webkit.org/show_bug.cgi?id=194019

        Reviewed by Michael Catanzaro.

        * flatpak/org.webkit.CommonModules.yaml:

2019-01-30  Commit Queue  <commit-queue@webkit.org>

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

        It broke WPE build (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Bump font related dependencies to match the GTK+ port"
        https://bugs.webkit.org/show_bug.cgi?id=194017
        https://trac.webkit.org/changeset/240708

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

        [LFC][IFC] nextBreakablePosition returns the same position on hyphen characters
        https://bugs.webkit.org/show_bug.cgi?id=194001

        Reviewed by Antti Koivisto.

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

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

        [LFC] Use the used margin values in outOfFlowReplacedVerticalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194020

        Reviewed by Antti Koivisto.

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

2019-01-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Support color well on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194010

        Reviewed by Joanmarie Diggs.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):

2019-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Bump font related dependencies to match the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=194017

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.
        * wpe/patches/icudata-stdlibs.patch: Added.

2019-01-29  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Update window scale API usage
        https://bugs.webkit.org/show_bug.cgi?id=193991
        rdar://problem/47614795

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (changeWindowScaleIfNeeded):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

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

        REGRESSION: ProcessSwap.DoSameSiteNavigationAfterCrossSiteProvisionalLoadStarted Failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193977
        <rdar://problem/47643716>

        Reviewed by Geoff Garen.

        Update API test to address flakiness on iOS. Instead of doing the last navigation after receiving the
        didStartProvisionalLoad, do we right after we answer the navigation policy request. Flakiness was due
        to the previous provisional committing *before* we make the last load. 

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-29  Youenn Fablet  <youenn@apple.com>

        Adopt new SPI to evaluate server certificate trust
        https://bugs.webkit.org/show_bug.cgi?id=193355

        Reviewed by Alex Christensen.

        Add infrastructure to handle HTTPS server trust evaluation testing.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation):
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess):
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::serverTrustEvaluationCallbackCallsCount const):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const):

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

        [ews-build] Add build step to print bot Configuration
        https://bugs.webkit.org/show_bug.cgi?id=193887

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Build step to print configuration.
        * BuildSlaveSupport/ews-build/factories.py:

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

        Regression (r240046): [PSON] Spurious changes to [WKWebView url] and [WKWebView loading] after [WKWebView loadRequest]
        https://bugs.webkit.org/show_bug.cgi?id=193967
        <rdar://problem/47635348>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONLoadingObserver observeValueForKeyPath:ofObject:change:context:]):

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

        [ews-app] Handle incoming results data
        https://bugs.webkit.org/show_bug.cgi?id=193973

        Reviewed by Lucas Forschler.

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

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

        [ews-app] Make the results url generic
        https://bugs.webkit.org/show_bug.cgi?id=193928

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/urls.py:

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

        [ews-build] Configure buildbot to send events to ews-app
        https://bugs.webkit.org/show_bug.cgi?id=193968

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py: Added.
        * BuildSlaveSupport/ews-build/master.cfg:

2019-01-29  Keith Rollin  <krollin@apple.com>

        Add .xcfilelists to Run Script build phases
        https://bugs.webkit.org/show_bug.cgi?id=193792
        <rdar://problem/47201785>

        Reviewed by Alex Christensen.

        As part of supporting XCBuild, update the necessary Run Script build
        phases in their Xcode projects to refer to their associated
        .xcfilelist files.

        Note that the addition of these files bumps the Xcode project version
        number to something that's Xcode 10 compatible. This change means that
        older versions of the Xcode IDE can't read these projects. Nor can it
        fully load workspaces that refer to these projects (the updated
        projects are shown as non-expandable placeholders). `xcodebuild` can
        still build these projects; it's just that the IDE can't open them.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-29  John Wilander  <wilander@apple.com>

        Add data abstraction and validation for Ad Click Attribution
        https://bugs.webkit.org/show_bug.cgi?id=193916
        <rdar://problem/47603481>

        Reviewed by Daniel Bates, Brent Fulgham, and Alex Christensen.

        Ad click attribution has two steps. First, the storage of an ad
        campaign ID for a click that takes the user to a destination
        site. Second, a conversion on the destination site that can be
        attributed to the ad click.

        This patch adds a class that represents a request for ad click
        attribution. Validation makes sure that the bits of entropy
        reported through this mechanism is limited.

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

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

        REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab
        https://bugs.webkit.org/show_bug.cgi?id=193932
        <rdar://problem/47598947>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Adding new passing LFC tests.

        Unreviewed test gardening.

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

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

        [LFC][BFC][MarginCollapsing] Remove incorrect downcast<Container>
        https://bugs.webkit.org/show_bug.cgi?id=193964

        Reviewed by Antti Koivisto.

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

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

        [LFC][BFC] Do not ignore next sibling box while laying out BFC.
        https://bugs.webkit.org/show_bug.cgi?id=193954

        Reviewed by Antti Koivisto.

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

2019-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for running subtests
        https://bugs.webkit.org/show_bug.cgi?id=193904

        Reviewed by Michael Catanzaro.

        pytest already supports it by passing test.py::subtest, so we can do the same.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (get_item_name): Made this global.
        (CollectRecorder.__init__): Receive the parameter to ignore.
        (CollectRecorder.pytest_collectreport): Collect also the subtests.
        (TestExpectationsMarker.pytest_collection_modifyitems): Use get_item_name().
        (collect): Add parameter to ignore.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.collect): Pass the driver name as parameter to ignore.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.collect_tests): Handle subtest name in test path.
        (WebDriverTestRunnerSelenium.run): Ditto.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.collect_tests): Ditto.
        (WebDriverTestRunnerW3C.run): Ditto.

2019-01-28  Ryosuke Niwa  <rniwa@webkit.org>

        User agent string override for navigator.userAgent should be site specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=193950

        Reviewed by Brent Fulgham.

        Updated per the _WKWebsitePolicies rename.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):

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

        Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
        https://bugs.webkit.org/show_bug.cgi?id=193941

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/ConcurrentPtrHashSet.cpp:
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WTF/ScopedLambda.cpp:
        * TestWebKitAPI/Tests/WTF/Time.cpp:
        * TestWebKitAPI/Tests/WTF/UniqueArray.cpp:
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:

2019-01-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, reorder my emails to fix autocomplete in bugzilla

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

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-28  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r236481): Move soft-linking of LocalAuthentication.framework out of LocalAuthenticationSoftLink.h
        <https://webkit.org/b/193884>

        Reviewed by Jiewen Tan.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add LocalAuthentication to
        `frameworks_with_soft_links`.

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

        [Win][WebKitTestRunner] Error: test and reference images have different sizes. Test image is 784x561, reference image is 800x600
        https://bugs.webkit.org/show_bug.cgi?id=193891

        Reviewed by Ross Kirsling.

        There were three problems in window sizes of WebView and the host window.
        1. The sizes of pixel image output were incorrect.
        2. The host window is going to appear after window.resize was invoked.
        3. window.resize resized only the host window, not WebView.

        This change solves them with a following approach.
        a. PlatformWebView::PlatformWebView creates the initial host window as zero size.
        b. Changes the host window style from WS_OVERLAPPEDWINDOW to WS_POPUP
           as well as DumpRenderTree in order to match the client area and the window area.
        c. PlatformWebView::resizeTo simply calls PlatformWebView::setWindowFrame as well as Mac port and GTK port.
        d. PlatformWebView::setWindowFrame changes both window sizes.
        e. PlatformWebView::setWindowFrame moves the host window to the out side of screen if m_options.shouldShowWebView.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): Create the host window
        and WebView as zero size. Use WS_POPUP instead of WS_OVERLAPPEDWINDOW.
        (WTR::PlatformWebView::resizeTo): Calls PlatformWebView::setWindowFrame.
        (WTR::PlatformWebView::setWindowFrame): Change both window sizes.

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

        [ews-app] Add method to save Step data to database
        https://bugs.webkit.org/show_bug.cgi?id=193890

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/step.py:
        (Step.save_step): Method to save step data.
        (Step.update_step): Method to update step data.
        (Step.get_existing_step): Method to fetch existing step from database.
        (Step.is_valid_result): Method to validate valid step result.

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

        [ews-app] Add method to save Build data to database
        https://bugs.webkit.org/show_bug.cgi?id=193735

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build.save_build): Method to save build information to database.
        (Build.get_existing_build): Method to fetch existing build from database.
        (Build.is_valid_result): Method to validate build result.
        * BuildSlaveSupport/ews-app/ews/common/util.py:
        (is_valid_int_id): Method to validate valid id.

2019-01-28  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebPageProxy::didStartProgress()
        https://bugs.webkit.org/show_bug.cgi?id=193915
        <rdar://problem/47560907>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-app] Rename id variables
        https://bugs.webkit.org/show_bug.cgi?id=193883

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:
        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/patch.py:
        * BuildSlaveSupport/ews-app/ews/views/results.py:
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

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

        [ews-app] Allow certain fields to be empty
        https://bugs.webkit.org/show_bug.cgi?id=193892

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-01-28  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::TEST):

2019-01-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][MarginCollapsing][Quirks] Quirk margin values get propagated through margin collapsing
        https://bugs.webkit.org/show_bug.cgi?id=193896

        Reviewed by Antti Koivisto.

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

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

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge): Use makeString.
        (WTR::TestController::downloadDidFail): Use an ASCIILiteral via the _s syntax.

2019-01-27  Jiewen Tan  <jiewen_tan@apple.com>

        Use a load optimizer for some sites
        https://bugs.webkit.org/show_bug.cgi?id=193881
        <rdar://problem/46325455>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm: Added.

2019-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Introduce a static accessibility tree
        https://bugs.webkit.org/show_bug.cgi?id=193348
        <rdar://problem/47203295>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] The default values for top/bottom in contentHeightForFormattingContextRoot should not be 0.
        https://bugs.webkit.org/show_bug.cgi?id=193867

        Reviewed by Antti Koivisto.

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

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Ignore last inflow child's collapsed through margin after when computing containing block's height.
        https://bugs.webkit.org/show_bug.cgi?id=193865

        Reviewed by Antti Koivisto.

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

2019-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Need a mechanism to override navigator.userAgent
        https://bugs.webkit.org/show_bug.cgi?id=193762
        <rdar://problem/47504939>

        Reviewed by Brent Fulgham.

        Added test cases for _WKWebsitePolicies.customJavaScriptUserAgent.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomJavaScriptUserAgentDelegate webView:didFinishNavigation:]):

2019-01-25  Dean Jackson  <dino@apple.com>

        REGRESSION: Some USDz from 3rd party websites don't go directly to AR QL
        https://bugs.webkit.org/show_bug.cgi?id=193831
        <rdar://problem/47399263>

        Reviewed by Chris Dumez.

        Two new tests that exercise cross-origin and same-origin System
        Previews.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Check .xcfilelists" build phase
        https://bugs.webkit.org/show_bug.cgi?id=193790
        <rdar://problem/47201374>

        Reviewed by Alex Christensen.

        Support for XCBuild includes specifying inputs and outputs to various
        Run Script build phases. These inputs and outputs are specified as
        .xcfilelist files. Once created, these .xcfilelist files need to be
        kept up-to-date. In order to check that they are up-to-date or not,
        add an Xcode build step that invokes an external script that performs
        the checking. If the .xcfilelists are found to be out-of-date, update
        them, halt the build, and instruct the developer to restart the build
        with up-to-date files.

        At this time, the checking and regenerating is performed only if the
        WK_ENABLE_CHECK_XCFILELISTS environment variable is set to 1. People
        who want to use this facility can set this variable and test out the
        checking/regenerating. Once it seems like there are no egregious
        issues that upset a developer's workflow, we'll unconditionally enable
        this facility.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/check-xcfilelists.sh: Added.
        * WebKitTestRunner/Scripts/check-xcfilelists.sh: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Apply Configuration to XCFileLists" build target
        https://bugs.webkit.org/show_bug.cgi?id=193781
        <rdar://problem/47201153>

        Reviewed by Alex Christensen.

        Part of generating the .xcfilelists used as part of adopting XCBuild
        includes running `make DerivedSources.make` from a standalone script.
        It’s important for this invocation to have the same environment as
        when the actual build invokes `make DerivedSources.make`. If the
        environments are different, then the two invocations will provide
        different results. In order to get the same environment in the
        standalone script, have the script launch xcodebuild targeting the
        "Apply Configuration to XCFileLists" build target, which will then
        re-invoke our standalone script. The script is now running again, this
        time in an environment with all workspace, project, target, xcconfig
        and other environment variables established.

        The "Apply Configuration to XCFileLists" build target accomplishes
        this task via a small embedded shell script that consists only of:

            eval "${WK_SUBLAUNCH_SCRIPT_PARAMETERS[@]}"

        The process that invokes "Apply Configuration to XCFileLists" first
        sets WK_SUBLAUNCH_SCRIPT_PARAMETERS to an array of commands to be
        evaluated and exports it into the shell environment. When xcodebuild
        is invoked, it inherits the value of this variable and can `eval` the
        contents of that variable. Our external standalone script can then set
        WK_SUBLAUNCH_SCRIPT_PARAMETERS to the path to itself, along with a set
        of command-line parameters needed to restart itself in the appropriate
        state.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform an application that "Go Back" has been clicked from a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193802
        <rdar://problem/46010580>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]):
        (TEST):

2019-01-25  Daniel Bates  <dabates@apple.com>

        [iOS] uiController.keyDown() does not translate Control modified key
        https://bugs.webkit.org/show_bug.cgi?id=192898

        Reviewed by Wenson Hsieh.

        Implement uiController.keyDown() in terms of HIDEventGenerator so that UIKit performs
        key translation, as applicable. Among other cases, key translation occurs when performing
        a Control key modified key sequence. Writing uiController.keyDown() in terms of HIDEventGenerator
        also makes the behavior of uiController.keyDown() more closely match the behavior of a
        human pressing down and releasing key(s) using a hardware keyboard.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator sendMarkerHIDEventWithCompletionBlock:]): Renamed; formerly named _sendMarkerHIDEventWithCompletionBlock.

        (-[HIDEventGenerator touchDown:touchCount:completionBlock:]):
        (-[HIDEventGenerator liftUp:touchCount:completionBlock:]):
        (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusUpAtPoint:completionBlock:]):
        (-[HIDEventGenerator stylusTapAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
        (-[HIDEventGenerator longPress:completionBlock:]):
        (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
        Update code for above renaming.

        (hidUsageCodeForCharacter): Translate \b to a backspace and teach this function to recognize the
        DumpRenderTree EventSender-compatible modifier key names (e.g. "metaKey").

        (-[HIDEventGenerator keyDown:]): Added.
        (-[HIDEventGenerator keyUp:]): Added.
        (-[HIDEventGenerator keyPress:completionBlock:]):
        (-[HIDEventGenerator eventDispatchThreadEntry:]):
        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]): Deleted; renamed to sendMarkerHIDEventWithCompletionBlock.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::parseModifierArray): Modified to return a vector of strings that represent the modifier keys to press.
        (WTR::UIScriptController::keyDown): Write in terms of HIDEventGenerator.
        (WTR::parseModifier): Deleted.

2019-01-25  Keith Rollin  <krollin@apple.com>

        Complete the implementation of generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193782

        Reviewed by Alex Christensen.

        A preliminary version of generate-xcfilelists was added in r238008.
        This patch updates that script in order to:

        - Support checking of .xcfilelists
        - Perform better execution of `make DerivedSources.make` by
          relaunching generate-xcfilelists under xcodebuild
        - Support incremental generation and checking of .xcfilelists
        - Support supplementary .xcfilelists files from WebKitAdditions
        - Support being wrapped by parallel version of generate-xcfilelists in
          Internal that adds support for (re)generating WebKit projects in
          that repo.
        - Support builds that have been performed in WebKitBuild as well as
          ~/Library/Developer/code/DerivedData
        - Increase robustness and debugging facilities.

        * Scripts/generate-xcfilelists:

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Unreviewed test case fix.

        These test cases require ResourceLoadStatistics to be active, so the feature must be turned on.
        Previously, the default data store turned the feature on automatically, allowing these tests to pass.

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

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update existing .xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193791
        <rdar://problem/47201706>

        Reviewed by Alex Christensen.

        Many .xcfilelist files were added in r238824 in order to support
        XCBuild. Update these with recent changes to the set of build files
        and with the current generate-xcfilelist script.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:
        * WebKitTestRunner/DerivedSources-input.xcfilelist:
        * WebKitTestRunner/DerivedSources-output.xcfilelist:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Fix missing dependencies in extract-dependencies-from-makefile
        https://bugs.webkit.org/show_bug.cgi?id=193783
        <rdar://problem/47201571>

        Reviewed by Alex Christensen.

        The extract-dependencies-from-makefile script generates .xcfilelists
        for XCBuild by invoking a makefile in --debug mode, parsing the
        dependency information in the output, and extracting information
        regarding targets and dependents. However, the way `make` emits this
        dependency information is not rigorous, and so we need to determine
        what lines to look for and parse by trial and error. This approach
        didn't coriginally atch all the information we needed to collect, so
        update the script to look for the additional lines we now know to look
        for.

        * Scripts/extract-dependencies-from-makefile:
        (Parser):
        (Parser.addTarget):
        (Parser.addPrereq):
        (Parser.doParse):

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit Cocoa/ResourceLoadStatistics.mm:
            Revise tests to ensure a running NetworkProcess before attempting ResourceLoadStatistics operations.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
        activating the message used to trigger the callback when it is set.

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        WKWebView.goBack should reload if there is a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193805
        <rdar://problem/46908216>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (+[Simple3LookupContext sharedLookupContext]):
        (-[Simple3LookupContext lookUpURL:completionHandler:]):
        (-[WKWebViewGoBackNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) cross-site provisional page is not canceled if a new same-site one is started
        https://bugs.webkit.org/show_bug.cgi?id=193788
        <rdar://problem/47531231>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):

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

        webkitpy: Missing PID in crashlog name should not be fatal (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=193771

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs): Correct syntax for catching multiple exception types.

2019-01-25  Alexey Proskuryakov  <ap@apple.com>

        * Scripts/webkitpy/common/config/contributors.json: Removing a stray comma.

2019-01-25  Alexey Proskuryakov  <ap@apple.com>

        Add contributors.json entries for Ling Ho and for a new bot watchers group.

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

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON?) Crash under NavigationState::NavigationClient::decidePolicyForNavigationAction()
        https://bugs.webkit.org/show_bug.cgi?id=193779
        <rdar://problem/46170903>

        Reviewed by Antti Koivisto.

        Add API test that quickly navigates forward to a previous process without waiting for it to
        suspend. I suspect the crash could have been happening due to receiving leftover IPC from
        the process' previous page when reconnecting the it for the forward navigation.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Need a way for JavaScript (or bundle) code to participate in undo
        https://bugs.webkit.org/show_bug.cgi?id=190009
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Add UIScriptController helpers to grab the platform undo and redo action labels. Currently only implemented for
        Cocoa platforms in WebKit2. See other ChangeLogs for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        (WTR::UIScriptController::platformUndoManager const):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        (WTR::UIScriptController::platformUndoManager const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformUndoManager const):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformUndoManager const):

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add "clear" to static position computation.
        https://bugs.webkit.org/show_bug.cgi?id=193824

        Reviewed by Antti Koivisto.

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

2019-01-24  Ryan Haddad  <ryanhaddad@apple.com>

        Update macOS JSC bot configurations
        https://bugs.webkit.org/show_bug.cgi?id=193739

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove 32-bit BuildAndTest queue.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Move JSC EWS to Mojave section.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Remove 32-bit BuildAndTest queue from dashboard.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update unit test.

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

        [Win][WebKitTestRunner] Implement EventSenderProxy
        https://bugs.webkit.org/show_bug.cgi?id=193755

        Reviewed by Don Olmstead.

        * WebKitTestRunner/EventSenderProxy.h: Removed unused members m_buttonState and m_mouseButtonsCurrentlyDown.
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::dispatchMessage):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

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

        Unreviewed fix for API test failure after r240437.

        TestWTF.WTF.StringOperators apparently can't deal with another test using String::operator+. This is fine...

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

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

        [webkitdirs] iosSimulatorApplicationsPath may not have iOS.simruntime in its path
        https://bugs.webkit.org/show_bug.cgi?id=193787
        <rdar://problem/47497634>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (iosSimulatorApplicationsPath): Pick from available runtime directories.

2019-01-24  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240446.

        Casued 5 API failures

        Reverted changeset:

        "Activate the WebResourceLoadStatisticsStore in the
        NetworkProcess and deactivate it in the UIProcess."
        https://bugs.webkit.org/show_bug.cgi?id=193297
        https://trac.webkit.org/changeset/240446

2019-01-24  Zalan Bujtas  <zalan@apple.com>

        DidFirstVisuallyNonEmptyLayout milestone should always fire at some point.
        https://bugs.webkit.org/show_bug.cgi?id=193741
        <rdar://problem/47135030>

        Reviewed by Antti Koivisto and Simon Fraser.

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

2019-01-24  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
        activating the message used to trigger the callback when it is set.

2019-01-24  John Wilander  <wilander@apple.com>

        Add Ad Click Attribution as an internal/experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=193685
        <rdar://problem/47450399>

        Reviewed by Brent Fulgham.

        Added test option adClickAttributionEnabled.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2019-01-24  Antti Koivisto  <antti@apple.com>

        [PSON] Flash on back navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193716
        <rdar://problem/47148458>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

        Closing of the previous page is delayed so waiting for didFinishNavigation is
        not sufficient to guarantee we have received all the messages. Wait for them.

2019-01-24  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Back/Forward list items' URL sometimes gets replaced with the URL of a subframe
        https://bugs.webkit.org/show_bug.cgi?id=193761
        <rdar://problem/47456405>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        webkitpy: Missing PID in crashlog name should not be fatal
        https://bugs.webkit.org/show_bug.cgi?id=193771

        If we can't determine the PID of a crashlog, just ignore the crashlog instead
        of raising an exception.

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs):

2019-01-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        test_exporter.py: webkitpy.common.system.executive.ScriptError from create_branch_with_patch
        https://bugs.webkit.org/show_bug.cgi?id=193746

        Reviewed by Youenn Fablet.

        It calls 'git apply --index --abort', but --abort is not a valid argument to 'git apply',
        so we'd best just not call it.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter.create_branch_with_patch):

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

        Move FileSystem to WTF
        https://bugs.webkit.org/show_bug.cgi?id=193602

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/FileSystem.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp.
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:

2019-01-24  Philippe Normand  <pnormand@igalia.com>

        [WPE] Remove hard dependency on subprocess32 for the API tests

        Rubber-stamped by Carlos Garcia Campos.

        * glib/api_test_runner.py:
        (TestRunner._run_test_qt): Lazily import subprocess32 and check
        its presence only when running WPEQt tests.

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

        [GLIB] Expose JavaScriptCore options in GLib public API
        https://bugs.webkit.org/show_bug.cgi?id=188742

        Reviewed by Michael Catanzaro.

        Add a test for the new API.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testsJSCOptions):
        (main):

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

        [GTK][WPE] Support JPEG 2000 images
        https://bugs.webkit.org/show_bug.cgi?id=186272

        Reviewed by Žan Doberšek.

        Add OpenJPEG to jhbuild since 2.2.0 version is required and it's not available in debian stable.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should warn when using soft-linking macros in a header
        <https://webkit.org/b/193750>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add softlink/header check by refactoring the
        softlink/framework check.
        (CppChecker): Enable softlink/header check by default.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_softlink_framework): Rename from
        CppStyleTest.test_softlink() and change test framework name in
        case AVFoundation gets its own AVFoundationSoftLink.{h,mm}
        files. Set file_name for macros that only appear in headers.
        (CppStyleTest.test_softlink_header): Add tests for using
        soft-link macros in headers.

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

        Deprecate API to limit the maximum number of WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=193725
        <rdar://problem/47464879>

        Reviewed by Geoff Garen.

        Update existing API tests to stop using deprecated API.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):

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

        [ews-app] Rename ews model buildermappings to buildermapping
        https://bugs.webkit.org/show_bug.cgi?id=193729

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/buildermappings.py.
        (BuilderMapping): Renamed BuildMappings to BuilderMapping.
        * BuildSlaveSupport/ews-app/ews/models/__init__.py: Ditto.

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

        [ews-app] Rename ews model steps to step
        https://bugs.webkit.org/show_bug.cgi?id=193697

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/step.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/steps.py.
        (Step): Renamed Steps to Step.

2019-01-23  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796
        <rdar://problem/46824999>

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext):
        (WTR::RemoveAllIndexedDatabasesCallback):
        (WTR::TestController::ClearIndexedDatabases):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        [ews-app] Rename ews model Builds to Build
        https://bugs.webkit.org/show_bug.cgi?id=193695

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/builds.py.
        (Build): Renamed Builds to Build.

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

        webkitpy: Wait longer when launching WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=193734

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Increase timeout from 6 seconds to 15 seconds.

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

        [iOS] fast/events/touch/ios/hover-when-style-change-is-async.html times out
        https://bugs.webkit.org/show_bug.cgi?id=193182
        <rdar://problem/47452154>

        Reviewed by Tim Horton.

        This test was timing out because one of its preceding tests (drag-to-autoscroll-in-single-line-editable.html)
        long presses and drags to select text, but does not end the touch by lifting up; subsequently, the tap gesture
        recognizer isn't fired when simulating a tap in hover-when-style-change-is-async.html.

        To fix this, tweak the test runner to make it safe for tests to end while touching the web view without
        preventing later tests from recognizing gestures.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Cancel all touches in the UIApplication when resetting to a consistent state between tests.

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

        webkitpy: Use correct config for --iphone-simulator and --ipad-simulator
        https://bugs.webkit.org/show_bug.cgi?id=193722
        <rdar://problem/47481475>

        Reviewed by Lucas Forschler.

        iPhone and iPad ports should both use the iOS config.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IPhoneSimulatorPort.__init__):
        (IPadSimulatorPort.__init__):

2019-01-23  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        Add unit tests for both parse modes of ParsedContentType.

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

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

        [ews-app] fetch loop should not stop on network issues
        https://bugs.webkit.org/show_bug.cgi?id=193666

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.run): Ensure that fetch loop doesn't exit on any exception.

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

        [iOS] Multiple WKWebViewAutofillTests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=189165
        <rdar://problem/47433765>

        Reviewed by Tim Horton.

        These tests are currently flaky because they expect an invocation of "Element.blur()" in the web process to
        immediately dispatch an IPC message to notify the UI process that the element has been blurred. In particular,
        the -textInputHasAutofillContext helper assumes that waiting for the next remote layer tree commit in the UI
        process in sufficient to ensure that any previous action that blurred the focused element in the web process
        would make its way to the UI process by the time the layer tree commit is finished.

        However, WebPage::elementDidBlur sends its IPC message to the UI process asynchronously, using callOnMainThread.
        This means that if a layer tree flush was already scheduled in the web process before the element was blurred,
        the element blur IPC message to the UI process will lose the race against the layer tree commit, and the test
        will fail because it asks for -_autofillContext too early.

        To fix this, we tweak these tests to actually wait until the intended input session change triggered by script
        is handled in the UI process.

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:

        Tweak some of these tests to wait for input session changes before checking for the presence of an autofill
        context. The only exception is an existing test that doesn't allow programmatic focus to begin input sessions
        by default; to fix this test, we simply wait for _WKInputDelegate to be invoked, instead of waiting for a new
        input session.

        (-[AutofillTestView textInputHasAutofillContext]):

        Remove the incorrect presentation update here. This helper now assumes that the UI process is up to date.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (nextInputSessionChangeCount):

        Monotonically increasing identifier that's incremented whenever an input session is started in the UI process.
        This includes changing the focused element from one to another.

        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        (-[TestWKWebView didStartFormControlInteraction]):
        (-[TestWKWebView didEndFormControlInteraction]):
        (-[TestWKWebView evaluateJavaScriptAndWaitForInputSessionToChange:]):

        Add a helper to evaluate JavaScript and wait for this script to cause some change in the input session. This
        handles three cases: (1) changing focus from an element that doesn't require an input session to one that does,
        (2) changing focus between elements that require input sessions, and (3) changing focus from an input session
        that doesn't require an input session to one that doesn't.

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style reports false-positive whitespace/init warning in C++ initialization parameters
        <https://webkit.org/b/193676>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        - Don't report missing whitespace around colon if the colon at
          the start of the line is formatted correctly.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):
        - Add a test for a missing permutation of existing tests.
        - Add a test this false-positive.
        - Add blank lines between subtests to make them easier to read.

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

        [build.webkit.org] Unit-test failure after r237113
        https://bugs.webkit.org/show_bug.cgi?id=193669

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (Factory.__init__): Properly check for --no-experimental-features flag when additionalArguments has 
        multiple or zero flags.

2019-01-22  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add test helper to execute bytecode-cache tests: it executes each test
        twice, the first with JSC_diskCachePath set to a temporary directory
        and second with JSC_forceDiskCache=true (in addition to the cache path)
        to guarantee that only the disk cache is being used and no new
        UnlinkedCodeBlocks are being created.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh: Added.
        * Scripts/run-jsc-stress-tests:

2019-01-22  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        Allow tests to enable the CSSLogicalEnabled flag in WK1.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Allow CSS property definitions to have a 'runtime-flag' parameter which
        disables the property when the specified runtime flag is disabled.

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

        [GTK][WPE] libgcrypt-1.7.6 can't be compiled on Ubuntu 18.10
        https://bugs.webkit.org/show_bug.cgi?id=193643

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Bumped to libgcrypt-1.8.4.
        * wpe/jhbuild.modules: Ditto.

2019-01-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Take float top position into account when computing containing block height.
        https://bugs.webkit.org/show_bug.cgi?id=193655

        Reviewed by Antti Koivisto.

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

2019-01-21  David Kilzer  <ddkilzer@apple.com>

        Switch remaining VideoToolbox soft-linking in WebCore over to VideoToolboxSoftLink.{cpp,h}
        <https://webkit.org/b/193645>
        <rdar://problem/47421574>

        Reviewed by Alex Christensen.

        - Now checks for local soft-linking of all frameworks that have
          their own *SoftLinking.{cpp,h,mm} files.
        - Changes softlink/uikit warning to softlink/framework.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):

2019-01-20  Saam Barati  <sbarati@apple.com>

        Rollout r240210: It broke tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193640

        Unreviewed.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper:
        * Scripts/run-jsc-stress-tests:

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):

2019-01-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, add my new email address

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

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] <body>'s overflow property value is propagated to viewport
        https://bugs.webkit.org/show_bug.cgi?id=193617

        Reviewed by Antti Koivisto.

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

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r240209.

        Broke GTK/WPE injected bundle

        Reverted changeset:

        "AX: Support returning relative frames for accessibility"
        https://bugs.webkit.org/show_bug.cgi?id=193414
        https://trac.webkit.org/changeset/240209

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * DumpRenderTree/mac/LayoutTestHelper.m: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * TestWebKitAPI/Configurations/Base.xcconfig: Removed -iframework options from OTHER_CFLAGS
          and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.

2019-01-20  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add test helper to execute bytecode-cache tests: it executes each test
        twice, the first with JSC_diskCachePath set to a temporary directory
        and second with JSC_forceDiskCache=true (in addition to the cache path)
        to guarantee that only the disk cache is being used and no new
        UnlinkedCodeBlocks are being created.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper: Added.
        * Scripts/run-jsc-stress-tests:

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):

2019-01-20  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        Unreviewed. Also enable Pointer Events for iosmac.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Ensure that floats in FloatingContext::m_floats are always horizontally ordered.
        https://bugs.webkit.org/show_bug.cgi?id=193613

        Reviewed by Antti Koivisto.

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

2019-01-19  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-18  Zhifei FANG  <zhifei_fang@apple.com>

        Disable the run-jsc-stress-test remote host key check [second round].
        https://bugs.webkit.org/show_bug.cgi?id=192988

        Reviewed by Dewei Zhu.

        * Scripts/run-jsc-stress-tests:

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

        [build.webkit.org] unit-test failure Builder GTK Linux 32-bit Release doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=193597

        Reviewed by Lucas Forschler.

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

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

        [build.webkit.org] api tests failures are incorrectly named as unit test failures
        https://bugs.webkit.org/show_bug.cgi?id=193595

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/factories.py: Renamed RunUnitTests to RunAPITests.
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

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

        Regression(PSON) Content blockers are sometimes lost on back navigation cross-site
        https://bugs.webkit.org/show_bug.cgi?id=193588
        <rdar://problem/47131566>

        Reviewed by Alex Christensen.

        Add layout test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        Add a check-webkit-style check that ensures all SDKVariant.xcconfig files match.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/SDKVariant.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/sdkvariant.py: Added.
        (SDKVariantChecker):
        (SDKVariantChecker.__init__):
        (SDKVariantChecker.check):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig: Added.
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig: Added.
        * WebKitLauncher/Configurations/SDKVariant.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig: Added.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig: Added.

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        Switch remaining UIKit soft-linking in WebCore, WebKitLegacy over to UIKitSoftLink.{cpp,h}
        <https://webkit.org/b/193568>
        <rdar://problem/47381130>

        Reviewed by Alex Christensen.

        Make sure no one re-introduces UIKit soft-linking by adding a
        style rule.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add softlink/uikit check.
        (CppChecker): Enable softlink/uikit check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest): Add test for softlink/uikit.

2019-01-18  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] install-dependencies tool looks for libunistring-dev for dnf
        https://bugs.webkit.org/show_bug.cgi?id=193584

        Change "-dev" to "-devel".

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

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

        webkitpy: Add iPhone and iPad ports
        https://bugs.webkit.org/show_bug.cgi?id=193537
        <rdar://problem/47353390>

        Reviewed by Lucas Forschler.

        Add --iphone-simulator and --ipad-simulator commands to run-webkit-tests which separate iPhone and iPad into separate
        ports. Note that this separation is optional, the --ios-simulator command remains.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_test_division): Drive-by fix.
        (RunTest.test_device_type_specific_listing): Ditto.
        (RunTest.test_ipad_test_division):
        (RunTest):
        (RunTest.test_ipad_listing):
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add --iphone-simulator and --ipad-simulator flags.
        (PortFactory):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IPhoneSimulatorPort):
        (IPadSimulatorPort):

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

        Regression(PSON) Scroll position is not always restored properly when navigating back
        https://bugs.webkit.org/show_bug.cgi?id=193578
        <rdar://problem/47386331>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Add a new SPI to request for cache storage quota increase
        https://bugs.webkit.org/show_bug.cgi?id=193323

        Reviewed by Alex Christensen.

        Implement WebsiteDataStore quota delegate to handle quota requests.
        By default, do not update quota.
        Update quota if test calls the new testRunner.allowCacheStorageQuotaIncrease method.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::allowCacheStorageQuotaIncrease):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::allowCacheStorageQuotaIncrease):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (-[CacheStorageQuotaManager init]):
        (-[CacheStorageQuotaManager _requestCacheStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::allowCacheStorageQuotaIncrease):

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

        [ews-build] Pass owner to the triggered builds
        https://bugs.webkit.org/show_bug.cgi?id=193574

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.propertiesToPassToTriggers):

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

        [ews-app] Send patch author as a build property
        https://bugs.webkit.org/show_bug.cgi?id=193560

        Reviewed by Lucas Forschler.

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

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

        webkitpy: Implement device type specific expected results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Don't boot a device if no tests are available to run on it.

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

        webkitpy: Implement device type specific expected results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Use DEVICE_TYPE when running API tests.

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

        webkitpy: Implement device type specific expected results (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Rubber-stamped by Aakash Jain.

        This change uses device_type to select a different set of TestExpectation files based on the type of device running
        tests. This requires multiple baseline search paths to be used in a single instantiation of run-webkit-tests. Note
        that while multiple baseline search paths are used, any single test will only ever be run on a single device type.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_tests): Pass device_type through.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        (LayoutTestFinderTests.test_touched_but_skipped_test): Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Make _expectations an OrderedDict indexed by device_type, add current_device_type.
        (Manager._collect_tests): Pass device type to test finder.
        (Manager._needs_web_platform_test):
        (Manager._prepare_lists): Index _expectations by device type.
        (Manager._test_input_for_file):
        (Manager._test_is_slow): Ditto.
        (Manager._test_should_dump_jsconsolelog_in_stderr):
        (Manager._test_should_dump_jsconsolelog_in_stderr): Ditto.
        (Manager._get_test_inputs):
        (Manager._update_worker_count):
        (Manager._set_up_run): Use current_device_type instead of passing device_type in.
        (Manager.run): Re-write function to gather and parse expectations from multiple baseline search paths. In the event
        that a test can be run on multiple device types, the first device in the device type list which is eligible will be
        the one which runs the test.
        (Manager._run_test_subset):
        (Manager._run_tests): Index _expectations by current_device_type.
        (Manager._print_expectation_line_for_test): Ditto.
        (Manager._print_expectations_for_subset): Ditto.
        (Manager.print_expectations): Re-write function to gather and parse expectations from multiple baseline search paths.
        Unlike run, this function will behave the same regardless of what devices are available.
        (Manager._custom_device_for_test): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_uses_custom_device): Deleted.
        (ManagerTest.test_uses_custom_device.get_manager): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Pass expectations as a dictionary indexed by device type.
        (JSONLayoutResultsGenerator._insert_failure_summaries): The number of fixable tests must take into consideration
        all of the expectations.
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py:
        (FakePort.skipped_layout_tests): Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__): Allow device_type to be passed through.
        (TestExpectations.parse_all_expectations): Pick expectations_dict by device type.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results): Expectations are stored in a dictionary indexed by device_type. When determining the expectation
        a test ran with, one must check all expectations to find the first non-skip expectation.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_test_division):
        (RunTest):
        (RunTest.test_device_type_specific_listing):
        * Scripts/webkitpy/port/base.py:
        (Port): Add default values for DEVICE_TYPE and DEFAULT_DEVICE_TYPES.
        (Port.supported_device_types): The result of this function will change based on what devices are available.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._device_type_with_version): Replace DEFAULT_DEVICE_TYPE with DEVICE_TYPE.
        (DevicePort.default_child_processes): DEVICE_TYPE is a general type, so the built-in comparison of the DeviceType object
        can be used.
        (DevicePort.supported_device_types): Generates a list of device types determined by the available devices, if there are
        any, or the DEFAULT_DEVICE_TYPES of the port.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Change DEFAULT_DEVICE_TYPE to DEVICE_TYPE.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Set the DEFAULT_DEVICE_TYPES to the devices currently used to run layout tests.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort): Change DEFAULT_DEVICE_TYPE to DEVICE_TYPE.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort): Set the DEFAULT_DEVICE_TYPES to the device currently used to run layout tests.
        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType):
        (DeviceType.__hash__): Allow DeviceType to be used as a dictionary index.

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] run-qt-wpe-minibrowser needlessly expects a --wpe argument
        https://bugs.webkit.org/show_bug.cgi?id=193575

        Reviewed by Michael Catanzaro.

        Allow the script to run without explicit port argument because
        it's specific to the WPE port anyway.

        * Scripts/run-qt-wpe-minibrowser: Manually insert --wpe in argv
        and simplify the rest of the code accordingly.

2019-01-18  Charlie Turner  <cturner@igalia.com>

        [GStreamer][EME][ClearKey] Request keys from CDMInstance rather than passing via bus messages
        https://bugs.webkit.org/show_bug.cgi?id=192229

        Reviewed by Xabier Rodriguez-Calvar.

        * MiniBrowser/wpe/main.cpp:
        (main): Enable encrypted-media by default.

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Missing KeyboardInterrupt exception handler
        https://bugs.webkit.org/show_bug.cgi?id=193570

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Basic KeyboardInterrupt handling.

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Collapsing through should not ignore floats.
        https://bugs.webkit.org/show_bug.cgi?id=193564

        Reviewed by Antti Koivisto.

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

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not skip float boxes that are not part of the current formatting context when computing bottom.
        https://bugs.webkit.org/show_bug.cgi?id=193562

        Reviewed by Antti Koivisto.

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

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Check for inflow children while computing height for block formatting context roots.
        https://bugs.webkit.org/show_bug.cgi?id=193555

        Reviewed by Antti Koivisto.

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

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add Qt extension
        https://bugs.webkit.org/show_bug.cgi?id=191464

        Reviewed by Carlos Garcia Campos.

        MiniBrowser and API tests for the WPE Qt API. To run the
        MiniBrowser a new script is introduced. Example invocation:

        $ run-qt-wpe-minibrowser -platform wayland https://webkit.org

        Also note-worthy is the introduction of the python2-subprocess32
        dependency to run the GLib API tests.

        * MiniBrowser/wpe/CMakeLists.txt:
        * MiniBrowser/wpe/qt/CMakeLists.txt: Added.
        * MiniBrowser/wpe/qt/main.cpp: Added.
        (main):
        * MiniBrowser/wpe/qt/main.qml: Added.
        * MiniBrowser/wpe/qt/qml.qrc: Added.
        * Scripts/run-gtk-tests:
        (GtkTestRunner.is_google_test):
        (GtkTestRunner):
        (GtkTestRunner.is_qt_test):
        * Scripts/run-qt-wpe-minibrowser: Added.
        * Scripts/run-wpe-tests:
        (WPETestRunner):
        (WPETestRunner.is_google_test):
        (WPETestRunner.is_qt_test):
        * TestWebKitAPI/Tests/WPEQt/TestLoad.cpp: Added.
        (TestLoad::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadHtml.cpp: Added.
        (TestLoadHtml::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadRequest.cpp: Added.
        (TestLoadRequest::main):
        * TestWebKitAPI/Tests/WPEQt/TestRunJavaScript.cpp: Added.
        (TestRunJavaScript::main):
        * TestWebKitAPI/Tests/WPEQt/WPEQtTest.cpp: Added.
        (waitForSignal):
        * TestWebKitAPI/Tests/WPEQt/WPEQtTest.h: Added.
        (LoadSpy::LoadSpy):
        (LoadSpy::~LoadSpy):
        (LoadSpy::onLoadingChanged):
        (LoadStartedCatcher::LoadStartedCatcher):
        (LoadStartedCatcher::~LoadStartedCatcher):
        (LoadStartedCatcher::onLoadingChanged):
        (waitForLoadSucceeded):
        (waitForLoadFailed):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/org.webkit.CommonModules.yaml:
        * flatpak/org.webkit.WPE.yaml:
        * flatpak/org.webkit.WPEModules.yaml:
        * flatpak/org.webkit.WPEQT.yaml: Copied from Tools/flatpak/org.webkit.WebKit.yaml.
        * flatpak/org.webkit.WebKit.yaml:
        * glib/api_test_runner.py:
        (TestRunner._run_test_qt):
        (TestRunner.is_qt_test):
        (TestRunner._run_test):

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

        [iOS] Content offset jumps erratically when autoscrolling near scroll view content inset areas
        https://bugs.webkit.org/show_bug.cgi?id=193494
        <rdar://problem/46859627>

        Reviewed by Simon Fraser and Tim Horton.

        Add a new test option to add a top content inset to the test runner's WKWebView's scroll view, and automatically
        scroll to reveal this top content inset area when beginning the test (i.e., scroll to (0, -topContentInset)).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        Also add new UIScriptController methods to ask for the content offset of the platform scroll view.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Alex Christensen  <achristensen@webkit.org>

        Fix string concatenation API test after r239920
        https://bugs.webkit.org/show_bug.cgi?id=193551
        <rdar://problem/47359304>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST):
        Cocoa platforms' interpretation of UChar/unsigned short equality is not affected by ICU's recent change of UChar's type
        in WebKit's build configuration like it apparently is on Linux.

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

        [ews-build] validate-patch should handle the case when bug_id is None
        https://bugs.webkit.org/show_bug.cgi?id=193547

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed): Gracefully handle the case when bug_id is None.
        (ValidatePatch.start): If bug_id is set as None in build properties, fetch it from the patch.

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

        [ews-build] Add patch author information in build
        https://bugs.webkit.org/show_bug.cgi?id=193465

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_patch_obsolete):

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

        [ews-build] Pass bug_id to the triggered builds
        https://bugs.webkit.org/show_bug.cgi?id=193548

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.propertiesToPassToTriggers):

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        Add a check-webkit-style check that ensures all SDKVariant.xcconfig files match.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/SDKVariant.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/sdkvariant.py: Added.
        (SDKVariantChecker):
        (SDKVariantChecker.__init__):
        (SDKVariantChecker.check):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig: Added.
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig: Added.
        * WebKitLauncher/Configurations/SDKVariant.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig: Added.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig: Added.

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] An element with transform is a containing block for positioned descendants.
        https://bugs.webkit.org/show_bug.cgi?id=193534

        Reviewed by Antti Koivisto.

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

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Take body padding and border into account when stretching height.
        https://bugs.webkit.org/show_bug.cgi?id=193528

        Reviewed by Antti Koivisto.

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

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] For height computation, the bottom edge of the last line box value should include top border/padding
        https://bugs.webkit.org/show_bug.cgi?id=193520

        Reviewed by Antti Koivisto.

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

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

        [ews-build] unapply-patch step should not update source
        https://bugs.webkit.org/show_bug.cgi?id=193234

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanWorkingDirectory): Use clean-webkit script to clean the working directory.
        (UnApplyPatchIfRequired): Use CleanWorkingDirectory as base class.

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

        Add a new SPI for controlling getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=192793

        Reviewed by Eric Carlson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForFrame:devices:decisionHandler:]):
        (-[WK2BrowserWindowController _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (-[MediaStreamTrackDetachedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        (-[SimulateFailedSandboxUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Inflow non-replaced used width should not be negative.
        https://bugs.webkit.org/show_bug.cgi?id=193495

        Reviewed by Antti Koivisto.

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

2019-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Set used vertical margin values when top/height/bottom are non-auto.
        https://bugs.webkit.org/show_bug.cgi?id=193470

        Reviewed by Antti Koivisto.

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

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust margin box verification.
        https://bugs.webkit.org/show_bug.cgi?id=193482

        Reviewed by Antti Koivisto.

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

2019-01-15  Sihui Liu  <sihui_liu@apple.com>

        Fix API test WebKit.WebsiteDataStoreCustomPathsWithoutPrewarming after 193354
        https://bugs.webkit.org/show_bug.cgi?id=193451

        Reviewed by Geoffrey Garen.

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

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

        webkitpy: Support boolean simctl isAvailable
        https://bugs.webkit.org/show_bug.cgi?id=193472
        <rdar://problem/47296150>

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_runtimes):
        (SimulatedDeviceManager._create_device_with_runtime):

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r239993, r239995, r239997, and
        r239999.

        Caused assertions under
        ViewGestureController::disconnectFromProcess()

        Reverted changesets:

        "Regression(PSON) View becomes blank after click a cross-site
        download link"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239993

        "Unreviewed iOS build fix after r239993."
        https://trac.webkit.org/changeset/239995

        "Fix iOS build after r239993"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239997

        "Unreviewed, revert part of r239997 as it is not needed to fix
        the build."
        https://trac.webkit.org/changeset/239999

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

        Cannot tab out of WKWebView on macOS
        https://bugs.webkit.org/show_bug.cgi?id=161448
        <rdar://problem/28100085>

        Reviewed by Dean Jackson.

        Add a test that tabbing into and out of WKWebView works correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTest::SetUp):
        (-[CommandBackForwardOffscreenWindow isKeyWindow]): Deleted.
        (-[CommandBackForwardOffscreenWindow isVisible]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/TabOutOfWebView.mm: Added.
        (-[FocusableView canBecomeKeyView]):
        (TEST):
        * TestWebKitAPI/mac/OffscreenWindow.h: Added.
        * TestWebKitAPI/mac/OffscreenWindow.mm: Added.
        (-[OffscreenWindow initWithSize:]):
        (-[OffscreenWindow isKeyWindow]):
        (-[OffscreenWindow isVisible]):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::initialize):
        (-[ActiveOffscreenWindow isKeyWindow]): Deleted.
        (-[ActiveOffscreenWindow isVisible]): Deleted.
        Factor ActiveOffscreenWindow out into OffscreenWindow and share it.

2019-01-15  Ryan Haddad  <ryanhaddad@apple.com>

        Adjust the arguments passed to run-javascriptcore-tests for the 32-bit JSC bot
        https://bugs.webkit.org/show_bug.cgi?id=193459

        Reviewed by Mark Lam.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (Run32bitJSCTests): This queue should not run JIT, testair, testb3, or testmasm.

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Ignore bottom when the vertical values are over-constrained
        https://bugs.webkit.org/show_bug.cgi?id=193448

        Reviewed by Antti Koivisto.

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

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

        webkitpy: Implement device type specific expected results (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=192162

        Reviewed by Lucas Forschler.

        Device type specific expected results covers two related ideas. The first (covered by this change)
        is where to search for -expected.* files. The second is which tests to run based on the
        TestExpectations.txt file.

        After this change, the baseline search path will be determined by the type of device running a
        test. Device type will be passed into any function which picks a file based on the baseline search
        path.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._update_test_input): Pass device_type to self._port.reference_files(...).
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Print baseline search path for each round of devices.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Pass device_type into expected_*(...).
        (SingleTestRunner._expected_driver_output): Ditto.
        (SingleTestRunner._driver_input): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config): Move printing of baseline search path to a separate function.
        (Printer.print_baseline_search_path): Moved from Printer.print_config.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):
        (Testprinter.test_print_baseline_search_path):
        * Scripts/webkitpy/port/base.py:
        (Port.baseline_search_path): Pass device_type through.
        (Port._expected_baselines_for_suffixes): Ditto.
        (Port.expected_baselines): Ditto.
        (Port.expected_filename): Ditto.
        (Port.expected_checksum): Ditto.
        (Port.expected_image): Ditto.
        (Port.expected_audio): Ditto.
        (Port.expected_text): Ditto.
        (Port.reference_files): Ditto.
        (Port.tests): Ditto.
        (Port._expanded_paths): Ditto.
        (Port.skipped_layout_tests): Ditto.
        (Port.expectations_dict): Ditto.
        (Port._port_specific_expectations_files): Ditto.
        (Port.expectations_files): Ditto.
        (Port.test_search_path): Ditto.
        (Port._tests_for_other_platforms): Ditto.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_additional_platform_directory): Accept, but do not use, device_type.
        (PortTest.test_nonexistant_expectations): Ditto.
        (test_ref_tests_platform_directory): Ditto.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._port_specific_expectations_files): Accept device_type.
        * Scripts/webkitpy/port/driver.py:
        (DriverProxy):
        (DriverProxy.host): Expose _target_host for device_type information.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._port_specific_expectations_files): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort. default_baseline_search_path): Remove memoized, since it does not accept **kwargs.
        * Scripts/webkitpy/port/mac.py:
        (MacPort. default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/port_testcase.py:
        (TestWebKitPort._tests_for_other_platforms): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch.py:
        (WatchPort. default_baseline_search_path): Remove memoized, since it does not accept **kwargs.
        * Scripts/webkitpy/port/win.py:
        (WinPort.test_search_path): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._port_specific_expectations_files): Ditto.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort.baseline_search_path): Ditto.

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the containing block's padding box to position out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=193431

        Reviewed by Antti Koivisto.

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

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

        Move a test implementation file that got misplaced in the Xcode project

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2019-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239901, r239909, r239910, r239912,
        r239913, and r239914.
        https://bugs.webkit.org/show_bug.cgi?id=193407

        These revisions caused an internal failure (Requested by
        Truitt on #webkit).

        Reverted changesets:

        "[Cocoa] Avoid importing directly from subumbrella frameworks"
        https://bugs.webkit.org/show_bug.cgi?id=186016
        https://trac.webkit.org/changeset/239901

        "Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901."
        https://trac.webkit.org/changeset/239909

        "Tried to fix the build."
        https://trac.webkit.org/changeset/239910

        "Fixed iOS builds after r239910."
        https://trac.webkit.org/changeset/239912

        "More build fixing."
        https://trac.webkit.org/changeset/239913

        "Tried to fix USE(APPLE_INTERNAL_SDK) 32-bit builds."
        https://trac.webkit.org/changeset/239914

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Re-enable ability to build --cloop builds.
        https://bugs.webkit.org/show_bug.cgi?id=192955
        <rdar://problem/46882363>

        Reviewed by Saam barati and Keith Miller.

        The --cloop build option was being ignored this whole time since r236381.
        This patch makes it possible to build CLoop builds again.

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

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

        webkitpy: Expose device_type from host-like objects
        https://bugs.webkit.org/show_bug.cgi?id=193406
        <rdar://problem/47262305>

        Reviewed by Lucas Forschler.

        Devices should expose device_type. As a result, all host objects should
        provide a device_type property, even if they do not yet define a device_type.

        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost):
        (SystemHost.device_type):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost):
        (MockSystemHost.device_type):
        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.device_type):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._find_exisiting_device_for_request):
        (SimulatedDeviceManager._disambiguate_device_type):
        (SimulatedDeviceManager._does_fulfill_request):
        (SimulatedDeviceManager.device_count_for_type):
        (SimulatedDeviceManager.initialize_devices):
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_available_devices):
        (test_swapping_devices):

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

        webkitpy: Support alternate simctl device list output (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=193362
        <rdar://problem/47122965>

        Rubber-stamped by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):

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

        [iOS] Expose SPI to access the current sentence boundary and selection state
        https://bugs.webkit.org/show_bug.cgi?id=193398
        <rdar://problem/45893108>

        Reviewed by Dean Jackson.

        Add an API test to verify that an SPI client can observe changes in the `@"_selectionAttributes"` key path on
        WKWebView, and that inserting text, deleting, and changing the selection cause selection attributes to change as
        expected.

        * TestWebKitAPI/EditingTestHarness.h:
        * TestWebKitAPI/EditingTestHarness.mm:
        (-[EditingTestHarness moveBackward]):
        (-[EditingTestHarness moveForward]):
        (-[EditingTestHarness moveForwardAndExpectEditorStateWith:]):

        Add a couple of new helper methods on EditingTestHarness.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (-[SelectionChangeObserver initWithWebView:]):
        (-[SelectionChangeObserver webView]):
        (-[SelectionChangeObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[SelectionChangeObserver currentSelectionAttributes]):

2019-01-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add basic box-sizing support.
        https://bugs.webkit.org/show_bug.cgi?id=193392

        Reviewed by Antti Koivisto.

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

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [WPE] API test gardening
        https://bugs.webkit.org/show_bug.cgi?id=193319

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/glib/TestExpectations.json: Remove some now
        passing tests.

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Add sharedBuffer utility to GstMappedBuffer, and a testsuite
        https://bugs.webkit.org/show_bug.cgi?id=192977

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformGTK.cmake: Build the new GStreamer test harness
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.
        * TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp: Added.
        (TestWebKitAPI::GStreamerTest::SetUp):
        (TestWebKitAPI::GStreamerTest::TearDown):
        * TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.h: Added.
        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp: Added.
        (TestWebKitAPI::TEST_F):

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [WPE] Workaround for incorrect template specialization being selected when UChar=char16_t
        https://bugs.webkit.org/show_bug.cgi?id=193332

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: When UChar is
        defined as a char16_t, which changed in ICU 59, the
        StringTypeAdapter<UnsignedInt, ...> overload catches casts to
        unsigned short. This test is relying on the behaviour that
        UChar=unsigned short, which doesn't hold across platforms and ICU
        library versions. The full fix would be a special syntax for
        literal characters so that these ambiguities do not arise. That
        work is proposed in https://bugs.webkit.org/show_bug.cgi?id=193101.
        (TestWebKitAPI::TEST):

2019-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK][WPE] Run distcheck with gtkdoc and MiniBrowser enabled

        * Scripts/make-dist:
        (Distcheck.configure):

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

        [ews-build] Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193365
        <rdar://problem/47221073>

        Unreviewed, renamed mac-high-sierra to mac-highsierra to match with build.webkit.org configuration.

        * BuildSlaveSupport/ews-build/config.json:

2019-01-13  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust assert for statically positioned fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=193385

        Reviewed by Antti Koivisto.

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

2019-01-13  Philippe Normand  <pnormand@igalia.com>

        [WPE][MiniBrowser] Ephemeral WebContext leaks in automation mode
        https://bugs.webkit.org/show_bug.cgi?id=193387

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/wpe/main.cpp:
        (main):

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions.
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm:

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * DumpRenderTree/mac/LayoutTestHelper.m: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * TestWebKitAPI/Configurations/Base.xcconfig: Removed -iframework options from OTHER_CFLAGS
          and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.

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

        Compile out Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=193370
        <rdar://problem/45388584>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
            Defined ENABLE_WEB_API_STATISTICS, off by default.

2019-01-11  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add Tools/gtkdoc to manifest.txt.in files.
        This should have been done in r238853 and caused failure in building WebKitGTK+ unstable release 2.23.2.

        * gtk/manifest.txt.in: Add Tools/gtkdoc directory.
        * wpe/manifest.txt.in: Add Tools/gtkdoc directory and uncomment lines to move documentation artifacts.

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

        [iOS] Precision drop state thrashes when dragging near the top edge of an editable element
        https://bugs.webkit.org/show_bug.cgi?id=193364
        <rdar://problem/47214117>

        Reviewed by Tim Horton.

        Add a test to verify that dragging near the top of a textarea element does not flag the drop proposal as
        precise, whereas dragging near the middle of the textarea does.

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

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

        webkitpy: Support alternate simctl device list output
        https://bugs.webkit.org/show_bug.cgi?id=193362
        <rdar://problem/47122965>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):

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

        [ews-build] Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193365

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

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

        webkitpy: Incorporate device type into baseline search path
        https://bugs.webkit.org/show_bug.cgi?id=193356
        <rdar://problem/47215515>

        Reviewed by Lucas Forschler.

        We need a way to include device type in the baseline search path for iOS to support device specific test expectations.

        * Scripts/webkitpy/port/base.py:
        (Port.default_baseline_search_path): Allow device type to be passed in.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.default_baseline_search_path): Ignore device type.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Optionally allow device type to be incorporated into the baseline search path.
        (IOSPort.test_expectations_file_position): Update index for the additional device-type specific baseline search path.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Ignore device type.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort.default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort.default_baseline_search_path): Ditto.
        (WinCairoPort.default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.default_baseline_search_path): Ditto.

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

        webkitpy: Print abbreviated baseline search path that includes only folders that exist
        https://bugs.webkit.org/show_bug.cgi?id=193352
        <rdar://problem/47210736>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config): Print list on only baseline search paths which exist. 
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):

2019-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup possible WK*Copy/Create leaks in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=193340

        Reviewed by David Kilzer.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        Pull the strings out into a WKRetainPtr.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::closeWebNotification):
        Adopt the created value into the WKRetainPtr.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateWhitelist):
        Immediately adopt a created value to avoid potential mistakes.

2019-01-11  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Run again JIT-tests
        on ARM by default.

        * Scripts/run-jsc-stress-tests:

2019-01-11  Timothy Hatcher  <timothy@apple.com>

        Unreviewed, fix #ifdef in API test added in r239851.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm:

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

        Introduce IDL files for runtime-enabled UndoManager and UndoItem JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=193109
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Introduce and respect a test option to enable the UndoManager API.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

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

        [LFC][BFC][MarginCollapsing] Adjust vertical position when box margin collapses through.
        https://bugs.webkit.org/show_bug.cgi?id=193346

        Reviewed by Antti Koivisto.

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

2019-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix typo that breaks dashboard link.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2019-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193329

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.macos-sierra img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        MiniBrowser should be able to navigate to about:blank
        https://bugs.webkit.org/show_bug.cgi?id=193345

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController addProtocolIfNecessary:]):
        Don't prepend "http://" to "about:" prefixed URLs like "about:blank".

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController fetch:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        Clean up the code that uses this to match style.

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Remove MiniBrowser custom "Process Swap" menu item which does not work
        https://bugs.webkit.org/show_bug.cgi?id=193344

        Reviewed by Simon Fraser.

        There is a menu item under the Experimental menu that does work.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController processSwapOnNavigationEnabled]): Deleted.
        (-[SettingsController toggleProcessSwapOnNavigation:]): Deleted.

2019-01-10  Timothy Hatcher  <timothy@apple.com>

        Add WKBundlePage SPI to temporarily force light or dark appearance on a page.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm: Added.
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm: Added.
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::ForceLightAppearanceInBundleTest):
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didCreatePage):
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKit/mac/dark-mode.html: Added.

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Leak of WKWebProcessPlugInHitTestResult (160 bytes) in com.apple.WebKit.WebContent running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193338
        <rdar://problem/46664774>

        Reviewed by David Kilzer.

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

2019-01-10  Commit Queue  <commit-queue@webkit.org>

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

        Broke tests on armv7/linux bots (Requested by guijemont on
        #webkit).

        Reverted changeset:

        "Enable DFG on ARM/Linux again"
        https://bugs.webkit.org/show_bug.cgi?id=192496
        https://trac.webkit.org/changeset/239825

2019-01-10  Zhifei Fang  <zhifei_fang@apple.com>

        Disable the run-jsc-stress-test remote host key check.
        https://bugs.webkit.org/show_bug.cgi?id=192988

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

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

        Override the session configuration for cookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=190925
        <rdar://problem/45497382>

        Reviewed by Alexey Proskuryakov and Alex Christensen.

        Test infrastructure for setting a first-party-only cookie policy.

        * DumpRenderTree/TestRunner.cpp:
        (setOnlyAcceptFirstPartyCookiesCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setOnlyAcceptFirstPartyCookies):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setOnlyAcceptFirstPartyCookies):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOnlyAcceptFirstPartyCookies):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-01-09  Matt Rajca  <mrajca@apple.com>

        Put per-document autoplay behavior behind runtime website policies quirk instead of a compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=193301

        Reviewed by Jer Noble.
        
        Added API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/autoplaying-multiple-media-elements.html: Added.

2019-01-10  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Take collapsed through siblings into account when computing vertical position
        https://bugs.webkit.org/show_bug.cgi?id=193310

        Reviewed by Antti Koivisto.

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

2019-01-10  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Run again JIT-tests
        on ARM by default.

        * Scripts/run-jsc-stress-tests:

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

        [Win][MiniBrowser] wchar_t strings shouldn't be treated as BSTR
        https://bugs.webkit.org/show_bug.cgi?id=193271

        Reviewed by Brent Fulgham.

        BSTR is a special data structure created by SysAllocString, not a
        wchar_t null-terminated string.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setDatabaseQuota): Use L"" instead of "" for _bstr_t.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFinishLoadForFrame): Use _bstr_t to create
        BSTR from wide string literals.

2019-01-09  Alexey Proskuryakov  <ap@apple.com>

        Tweak wording for build/version_check style checker error
        https://bugs.webkit.org/show_bug.cgi?id=193256

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):

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

        [ews-build] Add link to bug along with bug title
        https://bugs.webkit.org/show_bug.cgi?id=193293

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed): Fetch bug title from Bugzilla and add it to the build.
        (ConfigureBuild.add_bug_id_url): Deleted.
        (ConfigureBuild.getBugURL): Deleted.

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

        [ews-build] Use https for ews-build server
        https://bugs.webkit.org/show_bug.cgi?id=193193

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:

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

        [ews-build] Parse and display number of style failures
        https://bugs.webkit.org/show_bug.cgi?id=193280

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckStyle): Use TestWithFailureCount as base class.
        (CheckStyle.countFailures): Count the number of style failures.

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

        [ews-build] use patch_id instead of ewspatchid
        https://bugs.webkit.org/show_bug.cgi?id=193235

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py: Replaced ewspatchid with patch_id.
        * BuildSlaveSupport/ews-build/steps.py: Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Ditto.

2019-01-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add support for peculiar cases.
        https://bugs.webkit.org/show_bug.cgi?id=192625

        Reviewed by Antti Koivisto.

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

2019-01-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Purge use of g_assert() under TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=192841

        Reviewed by Carlos Garcia Campos.

        There are separate g_assert_*() macros for use in tests, which we use inconsistently
        currently. Use them always. We'll get nicer error messages now when tests fail, and the
        assertions will now run during tests even if G_DISABLE_ASSERT is used when building.

        Note that the documentation of g_assert() says that it is not to be used when writing tests.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/EditorTest.cpp:
        (WebKitWebEditorTest::testSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testMainFrame):
        (WebKitFrameTest::testURI):
        (WebKitFrameTest::testJavaScriptContext):
        (WebKitFrameTest::testJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationRequest):
        (testWebViewAuthenticationLoadCancelled):
        (testWebViewAuthenticationFailure):
        (testWebViewAuthenticationStorage):
        (ProxyAuthenticationTest::ProxyAuthenticationTest):
        (testWebViewAuthenticationProxy):
        (testWebViewAuthenticationProxyHTTPS):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (testBackForwardListNavigation):
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
        (ConsoleMessageTest::consoleMessageReceivedCallback):
        (testWebKitConsoleMessageConsoleAPI):
        (testWebKitConsoleMessageJavaScriptException):
        (testWebKitConsoleMessageNetworkError):
        (testWebKitConsoleMessageSecurityError):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerAcceptPolicy):
        (testCookieManagerCookiesChanged):
        (testCookieManagerPersistentStorage):
        (testCookieManagerPersistentStorageDeleteAll):
        (testCookieManagerEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/TestDOMElement.cpp:
        (testWebKitDOMElementAutoFill):
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (downloadLocalFileSuccessfully):
        (createFileAtDestination):
        (testDownloadOverwriteDestinationDisallowed):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testWebViewDownloadURI):
        (testPolicyResponseDownload):
        (testPolicyResponseDownloadCancel):
        (testDownloadMIMEType):
        (contextMenuCallback):
        (testContextMenuDownloadActions):
        (testBlobDownload):
        * TestWebKitAPI/Tests/WebKitGLib/TestEditor.cpp:
        (testWebKitWebEditorSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameMainFrame):
        (testWebKitFrameURI):
        (testWebKitFrameJavaScriptContext):
        (testWebKitFrameJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (LoadStopTrackingTest::loadFailed):
        (testWebViewTitle):
        (testURIRequestHTTPHeaders):
        (testURIRequestHTTPMethod):
        (testURIResponseHTTPHeaders):
        (testRedirectToDataURI):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (testProcessPerWebView):
        (testWebProcessLimit):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewResources):
        (testWebResourceLoading):
        (testWebResourceSuggestedFilename):
        (testWebResourceGetData):
        (testWebResourceGetDataError):
        (testWebViewResourcesHistoryCache):
        (testWebResourceSendRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL):
        (testInsecureContent):
        (testTLSErrorsPolicy):
        (testTLSErrorsRedirect):
        (testTLSErrorsHTTPAuth):
        (testLoadFailedWithTLSErrors):
        (testSubresourceLoadFailedWithTLSErrors):
        (httpsServerCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):
        (testWebViewJavaScriptDialogs):
        (testWebViewWindowProperties):
        (testWebViewMouseTarget):
        (testWebViewFileChooserRequest):
        (testWebViewColorChooserRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testDocumentLoadedSignal):
        (testWebKitWebViewProcessCrashed):
        (testWebExtensionWindowObjectCleared):
        (testWebExtensionIsolatedWorld):
        (permissionRequestCallback):
        (didAssociateFormControlsCallback):
        (testWebExtensionFormControlsAssociated):
        (FormSubmissionTest::FormSubmissionTest):
        (FormSubmissionTest::testFormSubmissionResult):
        (testWebExtensionFormSubmissionSteps):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized):
        (testClearDatabase):
        (testPrivateBrowsing):
        (testGetFavicon):
        (testWebViewFavicon):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp:
        (testFindControllerTextFound):
        (testFindControllerTextNotFound):
        (testFindControllerMatchCount):
        (testFindControllerMaxMatchCount):
        (testFindControllerNext):
        (testFindControllerPrevious):
        (testFindControllerCountedMatches):
        (testFindControllerOptions):
        (testFindControllerHide):
        (testFindControllerInstance):
        (testFindControllerGetters):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
        (testNavigationPolicy):
        (testResponsePolicy):
        (testNewWindowPolicy):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp:
        (testSecurityOriginBasicConstructor):
        (testSecurityOriginURIConstructor):
        (testSecurityOriginDefaultPort):
        (testSecurityOriginFileURI):
        (testOpaqueSecurityOrigin):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (testWebKitSettingsNewWithSettings):
        (testWebKitSettingsUserAgent):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testWebViewNewWithUserContentManager):
        (isStyleSheetInjectedForURLAtPath):
        (isScriptInjectedForURLAtPath):
        (testUserContentManagerInjectedStyleSheet):
        (testUserContentManagerInjectedScript):
        (UserScriptMessageTest::scriptMessageReceived):
        (UserScriptMessageTest::waitUntilMessageReceived):
        (UserScriptMessageTest::runJavaScriptFinished):
        (testUserContentManagerScriptMessageReceived):
        (testUserContentManagerScriptMessageInWorldReceived):
        (testUserContentManagerScriptMessageFromDOMBindings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextDefault):
        (testWebContextEphemeral):
        (testWebContextGetPlugins):
        (testWebContextURIScheme):
        (testWebContextSpellChecker):
        (testWebContextLanguages):
        (consoleMessageReceivedCallback):
        (testWebContextSecurityFileXHR):
        (ProxyTest::ProxyTest):
        (testWebContextProxySettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (testWebViewWebBackend):
        (testWebViewEphemeral):
        (testWebViewCustomCharset):
        (testWebViewSettings):
        (testWebViewRunJavaScript):
        (testWebViewCanShowMIMEType):
        (testWebViewSubmitForm):
        (testWebViewSave):
        (testWebViewPageVisibility):
        (testWebViewSnapshot):
        (testWebViewNotification):
        (testWebViewNotificationInitialPermissionAllowed):
        (testWebViewNotificationInitialPermissionDisallowed):
        (testWebViewIsPlayingAudio):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (WebsiteDataTest::WebsiteDataTest):
        (WebsiteDataTest::remove):
        (WebsiteDataTest::clear):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataCache):
        (testWebsiteDataStorage):
        (testWebsiteDataDatabases):
        (testWebsiteDataAppcache):
        (testWebsiteDataCookies):
        (testWebsiteDataDeviceIdHashSalt):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (emitDocumentLoaded):
        (emitURIChanged):
        (sendRequestCallback):
        (contextMenuCallback):
        (consoleMessageSentCallback):
        (emitFormControlsAssociated):
        (formControlsAssociatedCallback):
        (emitFormSubmissionEvent):
        (willSubmitFormCallback):
        (windowObjectCleared):
        (methodCallCallback):
        (registerGResource):
        (webkit_web_extension_initialize_with_user_data):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (checkLeaks):
        (WebProcessTest::create):
        (runTest):
        * TestWebKitAPI/Tests/WebKitGtk/AutocleanupsTest.cpp:
        (AutocleanupsTest::testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/DOMClientRectTest.cpp:
        (WebKitDOMClientRectTest::testDivBoundingClientRectPosition):
        (WebKitDOMClientRectTest::testDivClientRectsPositionAndLength):
        * TestWebKitAPI/Tests/WebKitGtk/DOMDOMWindowTest.cpp:
        (WebKitDOMDOMWindowTest::testSignals):
        (WebKitDOMDOMWindowTest::testDispatchEvent):
        (WebKitDOMDOMWindowTest::testGetComputedStyle):
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeFilterTest.cpp:
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testHierarchyNavigation):
        (WebKitDOMNodeTest::testInsertion):
        (WebKitDOMNodeTest::testTagNamesNodeList):
        (WebKitDOMNodeTest::testTagNamesHTMLCollection):
        (WebKitDOMNodeTest::testDOMCache):
        * TestWebKitAPI/Tests/WebKitGtk/DOMXPathNSResolverTest.cpp:
        (WebKitDOMXPathNSResolverTest::evaluateFooChildTextAndCheckResult):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverNative):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKitGtk/TestAutocleanups.cpp:
        (testUIProcessAutocleanups):
        (testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (testContextMenuPopulateMenu):
        (testContextMenuDismissed):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMClientRect.cpp:
        (testWebKitDOMClientRectDivBoundingClientRectPosition):
        (testWebKitDOMClientRectDivClientRectsPositionAndLength):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMDOMWindow.cpp:
        (testWebKitDOMDOMWindowSignals):
        (testWebKitDOMDOMWindowDispatchEvent):
        (testWebKitDOMDOMWindowGetComputedStyle):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNode.cpp:
        (testWebKitDOMNodeHierarchyNavigation):
        (testWebKitDOMNodeInsertion):
        (testWebKitDOMNodeTagNamesNodeList):
        (testWebKitDOMNodeTagNamesHTMLCollection):
        (testWebKitDOMObjectCache):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNodeFilter.cpp:
        (testWebKitDOMNodeFilterTreeWalker):
        (testWebKitDOMNodeFilterNodeIterator):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMXPathNSResolver.cpp:
        (testWebKitDOMXPathNSResolverNative):
        (testWebKitDOMXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        (testInspectorCustomContainerDestroyed):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:
        (startTestServer):
        (testInspectorServerPageList):
        * TestWebKitAPI/Tests/WebKitGtk/TestOptionMenu.cpp:
        (OptionMenuTest::showOptionMenuCallback):
        (OptionMenuTest::menuCloseCallback):
        (OptionMenuTest::close):
        (OptionMenuTest::activateItem):
        (OptionMenuTest::selectItem):
        (testOptionMenuSimple):
        (testOptionMenuGroups):
        (testOptionMenuActivate):
        (testOptionMenuSelect):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        (testPrintOperationPrintSettings):
        (webViewPrintCallback):
        (testPrintOperationPrint):
        (testPrintCustomWidget):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (checkAtspiAccessible):
        (testAtspiBasicHierarchy):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitVersion.cpp:
        (testWebKitCheckVersion):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        (loadContentsAndTryToCutSelection):
        (testWebViewEditorNonEditable):
        (testWebViewEditorEditable):
        (testWebViewEditorEditorStateTypingAttributes):
        (testWebViewEditorInsertImage):
        (testWebViewEditorCreateLink):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (loadFailedCallback):
        (loadFailedWithTLSErrorsCallback):
        (LoadTrackingTest::LoadTrackingTest):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (registerGResource):
        (removeNonEmptyDirectory):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::adoptView):
        (Test::~Test):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::getOrCreateConnection):
        (WebKitTestBus::createProxy):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::getWebSocketURIForPath const):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        (WebViewTest::loadURI):
        (WebViewTest::loadHtml):
        (WebViewTest::loadPlainText):
        (WebViewTest::loadBytes):
        (WebViewTest::loadRequest):
        (WebViewTest::loadAlternateHTML):
        (WebViewTest::goBack):
        (WebViewTest::goForward):
        (WebViewTest::goToBackForwardListItem):
        (resourceGetDataCallback):
        (WebViewTest::mainResourceData):
        (WebViewTest::javascriptResultToCString):
        (WebViewTest::javascriptResultToNumber):
        (WebViewTest::javascriptResultToBoolean):
        (WebViewTest::javascriptResultIsNull):
        (WebViewTest::javascriptResultIsUndefined):
        (onSnapshotReady):
        (WebViewTest::runWebProcessTest):
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::platformInitializeWebView):
        (WebViewTest::showInWindow):
        (WebViewTest::showInWindowAndWaitUntilMapped):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::emitPopupMenuSignal):
        (WebViewTest::keyStroke):
        (WebViewTest::doMouseButtonEvent):

2019-01-09  Philippe Normand  <pnormand@igalia.com>

        [WPE] API tests can't run in flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=193242

        Reviewed by Michael Catanzaro.

        * Scripts/run-wpe-tests: Add --wpe to arguments passed to
        flatpakutils so that it knows which port it's dealing with.
        * glib/common.py: Remove build_dir globals so that subsequent
        calls actually take args into account.
        (library_build_path):
        (binary_build_path):

2019-01-08  Dean Jackson  <dino@apple.com>

        Blob references for System Previews don't get a correct file extension
        https://bugs.webkit.org/show_bug.cgi?id=193268
        <rdar://problem/47133037>

        Reviewed by Tim Horton.

        New test that a Blob download of a USDZ file gets named correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[BlobWithUSDZExtensionDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[BlobWithUSDZExtensionDownloadDelegate _downloadDidFinish:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreviewBlobNaming.html: Added.

2019-01-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support U2F HID Authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191535
        <rdar://problem/47102027>

        Reviewed by Brent Fulgham.

        This patch:
        1) adds support for U2F mocking mechanism;
        2) updates tests to reflect U2fCommandConstructor changes.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

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

        [iOS] Dispatch a synthetic mousedown event prior to starting drags
        https://bugs.webkit.org/show_bug.cgi?id=193229
        <rdar://problem/46717097>

        Reviewed by Tim Horton.

        Add a cross-platform drag and drop test to verify that calling `preventDefault()` on the mousedown event
        prevents a drag from starting.

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/link-and-target-div.html:

        Tweak this test to make it robust when dragging the link to the target element multiple times in a single test.

2019-01-08  Zhifei Fang  <zhifei_fang@apple.com>
  
        Layout test will generate a perf metric file to results dir.
        https://bugs.webkit.org/show_bug.cgi?id=192030
        <rdar://problem/32779516>

        Reviewed by Aakash Jain.

        Layout test running time will be collected to a perf metric file.
        For now, instead of outputing running time of all tests (which is huge),
        we aggregate them by test directories which are at most two level deep. 

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._end_test_run):
        (Manager._output_perf_metrics):
        (Manager._print_expectation_line_for_test):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (add_test_perf_metric):
        (test_perf_metrics):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.test_test_timings_trie):
        (JSONGeneratorTest):
        (JSONGeneratorTest.test_test_perf_metrics):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

2019-01-08  Patrick Griffis  <pgriffis@igalia.com>

        [WPE][GTK] Add php-json to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=193233

        Reviewed by Michael Catanzaro.

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

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Regression(PSON-r239182): Blank view when navigating back and forth between google.com and stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=193224
        <rdar://problem/47097726>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Leak of ScrollCompletionCallbackData (16 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193222>
        <rdar://problem/46862309>

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::executeCallback): Fix camel case of variable name.
        (WTR::EventSendingController::callAfterScrollingCompletes): If
        WKBundlePageRegisterScrollOperationCompletionCallback() returns
        false, make sure to release the ScrollCompletionCallbackData
        object.  This fixes the leak.

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

        [Win] EWS: wincairo-ews cannot apply a patch with *.png
        https://bugs.webkit.org/show_bug.cgi?id=193044

        Reviewed by Daniel Bates.

        WinCairo EWS bots are using Windows Perl. Binary files should be
        opened as binary mode.

        * Scripts/svn-apply:
        (handleGitBinaryChange): Use 'binmode' for binary file handles.

2019-01-07  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add ENABLE_CSS_TYPED_OM option
        https://bugs.webkit.org/show_bug.cgi?id=193216

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

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

        Prefer RetainPtr<NSObject> to RetainPtr<NSObject *>
        <https://webkit.org/b/193056>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checker.py:
        - Ignore use of new runtime/retainptr check in
          Tools/TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm since it
          contains tests to ensure RetainPtr<NSObject *> is compatible
          with RetainPtr<NSObject>.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        - Add checker for use of '*' in RetainPtr<> type.  A for loop
          was used instead of a single regex so that angle brackets
          could be matched up when checking the type contained within
          the RetainPtr<> type.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        - Add unit test for new runtime/retainptr check.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.h:
        * TestWebKitAPI/EditingTestHarness.h:
        - Remove '*' from RetainPtr<> type.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add cf/RetainPtr.cpp back to TestWTFLibrary target!  This
          regressed in r201938.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        (TestWebKitAPI::TEST):
        - Update tests to match RetainPtr.mm tests (except for the
          `*SimilarNSType` tests since there is no CF equivalent of
          RetainPtr<NSString> and RetainPtr<NSString *>).

        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        - Update tests to:
          - Not conflict by name with equivalent CF tests in
            RetainPtr.cpp.
          - Add test cases for RetainPtr<NSObject>,
            RetainPtr<NSObject *> and RetainPtr<id> were appropriate.
          - Add `*SimilarNSType` tests for converting between
            RetainPtr<NSObject> and RetainPtr<NSObject *>.
          - Change `0` to `nil` as appropriate.
          - Re-alphabetize the tests by name.
          - Add Optional<RetainPtr<>> tests.
          - Add retainPtr() tests.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/IconLoadingDelegate.mm:
        (TEST):
        - Remove '*' from RetainPtr<> type.

        * TestWebKitAPI/Tests/WebKitCocoa/JITEnabled.mm:
        (TEST(WebKit, JITEnabled)):
        - Add missing WTFMove().  Apparently a temporary was being
          created before in the argument list due to mismatched
          RetainPtr<> types.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::setUpWebViewForTestingVideoControlsManager):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::resourcesDirectoryURL):
        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        - Remove '*' from RetainPtr<> type.

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        A MediaTime timescale must never be zero
        https://bugs.webkit.org/show_bug.cgi?id=193156
        <rdar://problem/32504501>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST): Add tests for zero timescale.

2019-01-07  Youenn Fablet  <youenn@apple.com>

        API test broken: TestWebKitAPI.WebKit.CustomDataStorePathsVersusCompletionHandlers
        https://bugs.webkit.org/show_bug.cgi?id=193175

        Reviewed by Chris Dumez.

        Updated API test as we bumped the SW schema to version 4.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-4.sqlite3: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-3.sqlite3.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

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

        [Win][Clang] Fix compilation warnings of MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=193029

        Reviewed by Ross Kirsling.

        * MiniBrowser/win/MiniBrowserWebHost.h: Removed unused m_oldFont
        and m_URLBarFont. Reorder member variables to fix -Wreorder
        warning.
        * MiniBrowser/win/PageLoadTestClient.cpp:
        (PageLoadTestClient::PageLoadTestClient): Reorder the member initializer list.
        * MiniBrowser/win/PageLoadTestClient.h: Removed 'virtual' of
        pageLoadStartedAtTime and pageLoadEndedAtTime. Removed unused
        m_currentURLIndex.
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Initialize
        navigationClient with '{ }' to fix the missing field warning.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (initDocStruct): Changed the argument type docname to const.

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

        [WebAuthN] Import U2F command/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=193150
        <rdar://problem/47054028>

        Reviewed by Brent Fulgham.

        Adds API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::getTestAttestedCredentialDataBytes):
        (TestWebKitAPI::getTestAuthenticatorDataBytes):
        (TestWebKitAPI::getTestAttestationObjectBytes):
        (TestWebKitAPI::getTestSignResponse):
        (TestWebKitAPI::getTestU2fRegisterResponse):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::convertToVector): Deleted.
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp: Added.
        (TestWebKitAPI::constructMakeCredentialRequest):
        (TestWebKitAPI::constructGetAssertionRequest):
        (TestWebKitAPI::TEST):

2019-01-05  Oriol Brufau  <obrufau@igalia.com>

        [GTK] Add python3-setuptools, libunistring-dev, bison and flex dependencies
        https://bugs.webkit.org/show_bug.cgi?id=193136

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:
        Add python3-setuptools, libunistring-dev, bison and flex to install-dependencies,
        they are needed by update-webkitgtk-libs.

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

        Unreviewed follow-up fix to r239650
        https://bugs.webkit.org/show_bug.cgi?id=193140
        <rdar://problem/47063037>

        Typecast patch_id to string.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_patch_obsolete):

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

        [lldb-webkit]: Add support for pretty-printing raw bitmask types
        https://bugs.webkit.org/show_bug.cgi?id=193024

        Reviewed by Jer Noble.

        Add support infrastructure to pretty-print a raw bitmask type. Included is a pretty-printer
        for the bitmask type WebEventFlags as an example.

        Exposed a new function lldb_webkit.addSummaryAndSyntheticFormattersForRawBitmaskType()
        that can be used to register summary and synthetic child formatters for a bitmask type.
        For example, consider the following enum and bitmask typedefs:

        typedef enum {
            A = 1 << 0,
            B = 1 << 1,
            C = 1 << 2,
        } SpecialFlagValues;
        typedef unsigned SpecialFlags;

        To teach lldb-webkit how to pretty print SpecialFlags types, add the following code inside
        __lldb_init_module():

            addSummaryAndSyntheticFormattersForRawBitmaskType(debugger, "SpecialFlags", {
                    1 << 0: "A",
                    1 << 1: "B",
                    1 << 2: "C",
            })

        * lldb/lldb_webkit.py:
        (addSummaryAndSyntheticFormattersForRawBitmaskType):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.GeneratedRawBitmaskProvider):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.raw_bitmask_summary_provider):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.lldb_webkit):
        A convenience function to dynamically creaste a synthetic formatter class and summary
        string function for the specified bitmask type and enumerator value to name map. This
        function register the dynamically created class and function with LLDB.

        (__lldb_init_module):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._enumerator_value_to_name_map):
        (FlagEnumerationProvider._bitmask):
        (FlagEnumerationProvider._update):
        (FlagEnumerationProvider.has_children):
        (FlagEnumerationProvider.num_children):
        (FlagEnumerationProvider.get_child_index):
        (FlagEnumerationProvider.get_child_at_index):
        (FlagEnumerationProvider.update):
        Extract out provider logic from WTFOptionSetProvider into a base class that can be shared.

        (WTFOptionSetProvider):
        (WTFOptionSetProvider._enumerator_value_to_name_map):
        (WTFOptionSetProvider._bitmask):
        (WTFOptionSetProvider._update):
        Write in terms of the base class.

        (RawBitmaskProviderBase):
        (RawBitmaskProviderBase._enumerator_value_to_name_map):
        (RawBitmaskProviderBase._bitmask):
        Added. Base synthetic formatter class for a raw bitmask type. Derived classes are expected to
        override the class variable ENUMERATOR_VALUE_TO_NAME_MAP with a dictionary of the form:
        {
            1 << 0: "A",
            1 << 1: "B",
            1 << 2: "C",
        }
        It is not necessary to instantiate such a derived class directory. Instead use the convenience
        function addSummaryAndSyntheticFormattersForRawBitmaskType.

        (WTFOptionSetProvider.has_children): Deleted.
        (WTFOptionSetProvider.num_children): Deleted.
        (WTFOptionSetProvider.get_child_index): Deleted.
        (WTFOptionSetProvider.get_child_at_index): Deleted.
        (WTFOptionSetProvider.update): Deleted.

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

        [ews-build] Add build step to validate the patch before processing it
        https://bugs.webkit.org/show_bug.cgi?id=193140

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Added ValidatePatch step.
        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch):
        (ValidatePatch.fetch_data_from_url): Fetch data from a url.
        (ValidatePatch.get_patch_json): Get patch json data.
        (ValidatePatch.get_bug_json): Get bug json data.
        (ValidatePatch.get_bug_id_from_patch): Get bug id from a patch id.
        (ValidatePatch._is_patch_obsolete): Check if the patch is obsolete.
        (ValidatePatch._is_patch_review_denied): Check if the patch is marked r-.
        (ValidatePatch._is_bug_closed): Check if the bug is already closed.
        (ValidatePatch.skip_build): Skip the build.
        (ValidatePatch.start):

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

        Progress towards fixing Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=193105

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformMac.cmake:

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

        Fix API test after r239631
        https://bugs.webkit.org/show_bug.cgi?id=193118

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        This test relied on m_maximumProcessCount being set to 1 in ProcessPoolConfiguration::createWithLegacyOptions.
        Do the same thing via the API to fix the test.

2019-01-04  Jer Noble  <jer.noble@apple.com>

        [WebKitLegacy] Media playback pauses on scroll
        https://bugs.webkit.org/show_bug.cgi?id=192829

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/StopSuspendResumeAllMedia.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm: Added.
        (-[ScrollingDoesNotPauseMediaDelegate webViewDidFinishLoad:]):
        (-[ScrollingDoesNotPauseMediaDelegate uiWebView:didCommitLoadForFrame:]):
        (-[ScrollingDoesNotPauseMediaDelegate handleEvent:]):
        (TestWebKitAPI::TEST):

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Add support for toggling device orientation API support per site
        https://bugs.webkit.org/show_bug.cgi?id=193143
        <rdar://problem/46605724>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[DataMappingSchemeHandler setTaskHandler:]):
        (-[DataMappingSchemeHandler webView:startURLSchemeTask:]):
        (-[WebsitePoliciesDeviceOrientationDelegate initWithDeviceOrientationEventEnabled:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationDelegate webView:didFinishNavigation:]):

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

        [ews-build] use svn-apply script to apply the patches
        https://bugs.webkit.org/show_bug.cgi?id=193138

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Add the ApplyPatch step.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): Added step name.
        (CheckOutSource.__init__): Used alwaysUseLatest so that it doesn't apply patch.
        (ApplyPatch): Build step to apply patch using svn-apply script.
        (UnApplyPatchIfRequired):
        (UnApplyPatchIfRequired.__init__): Deleted, since the alwaysUseLatest parameter is now in base class.

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

        Deprecate WKContextCreate
        https://bugs.webkit.org/show_bug.cgi?id=193118

        Reviewed by Brady Eidson.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        * TestWebKitAPI/Tests/WebKit/AboutBlankLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseThenTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EvaluateJavaScript.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EventModifiers.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FailedLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Find.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ForceRepaint.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::loadAlternateHTMLString):
        * TestWebKitAPI/Tests/WebKit/LoadPageOnCrash.cpp:
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        * TestWebKitAPI/Tests/WebKit/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::buildAndPerformTest):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NavigationClientDefaultCrypto.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageGroup.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ProcessDidTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeWindowAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ScrollPinningBehaviors.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/TerminateTwice.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageConfiguration.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageCopySessionStateWithFiltering.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageGetScaleFactorNotZero.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WebCoreStatisticsWithNoWebProcess.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/RestoreStateAfterTermination.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTestWKView::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeRegistry.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):

2019-01-03  Matt Rajca  <mrajca@apple.com>

        Make DidPlayMediaPreventedFromPlaying autoplay event more generic.
        https://bugs.webkit.org/show_bug.cgi?id=193128
        rdar://34554231

        Reviewed by Jer Noble.

        Today, the "DidPlayMediaPreventedFromPlaying" autoplay event is only sent for
        media prevented from autoplaying. It could be generalized to a "DidPlayMediaWithUserGesture"
        event along with a flag that indicates whether or not autoplay was actually prevented.

        Tests: existing API tests were updated to reflect the new names. New API tests
        were added for the new case in which the "DidPlayMediaWithUserGesture" event is sent.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/long-test.mp4: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/audio-with-play-button.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/video-with-play-button.html: Added.

2019-01-04  Chris Dumez  <cdumez@apple.com>

        [PSON] Calling history.back() from inside the load event handler prevents process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=193120

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessPool::addSuspendedPage()
        https://bugs.webkit.org/show_bug.cgi?id=193110

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-build] Check patch relevance before applying the patch
        https://bugs.webkit.org/show_bug.cgi?id=193102

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Moved CheckPatchRelevance step to base class.

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

        [ews-build] Check patch relevance step should print patch id
        https://bugs.webkit.org/show_bug.cgi?id=193137

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance.start): Update the status to include patch id.

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

        webkitpy: Increase simulator teardown timeout
        https://bugs.webkit.org/show_bug.cgi?id=193141
        <rdar://problem/46174217>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Use SIMULATOR_BOOT_TIMEOUT.

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

        test262-runner misbehaves when test file YAML has a trailing space
        https://bugs.webkit.org/show_bug.cgi?id=193053

        Reviewed by Yusuke Suzuki.

        * Scripts/test262/Runner.pm:
        (parseData):
        Accept trailing space when parsing a test file's YAML block.

2019-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        UserMedia test should use WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=192913

        Reviewed by Youenn Fablet.

        The test currently uses the deprecated WKPageLoaderClient. It should use
        WKPageNavigationClient instead, which provides the same callback under a similar name.

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

2019-01-02  Alex Christensen  <achristensen@webkit.org>

        Homograph with LATIN SMALL LETTER R WITH FISHHOOK
        https://bugs.webkit.org/show_bug.cgi?id=192944

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

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

        Add support for using the current text selection as the find string on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193034
        <rdar://problem/45138739>

        Reviewed by Tim Horton.

        Add a new API test to verify that the new WebKit SPI (_stringForFind, _takeFindStringFromSelection:, and
        _setStringForFind) works as expected.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/UseSelectionAsFindString.mm: Added.

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

        [ews-build] Use git on OpenSource EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=193092

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): Use git instead of svn.
        (CheckOutSource.__init__): Use timeout of 2 hours since the initial checkout might take a long time.

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

        [lldb-webkit] Remove broken code to print WTF::OptionSet::m_storage
        https://bugs.webkit.org/show_bug.cgi?id=193023

        Reviewed by Simon Fraser.

        The code to print WTF::OptionSet::m_storage as an item in the set never worked and does
        not seem meaningful to fix because WTF::OptionSet::m_storage is just the sum of the printed
        enumerator values. We should just remove this code.

        * lldb/lldb_webkit.py:
        (WTFOptionSetProvider.has_children):
        (WTFOptionSetProvider.num_children):
        (WTFOptionSetProvider.get_child_index):
        (WTFOptionSetProvider.get_child_at_index):

2018-12-29  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        .ycm_extra_conf.py should handle XXXInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=193055

        Reviewed by Carlos Garcia Campos.

        compile_commands.json database only records flags and options for cpp source files.
        So, when we open headers, this database does not have any information for that.
        Our .ycm_extra_conf.py alleviates this by using XXX.cpp's configuration for XXX.h.
        But this mitigation does not handle XXXInlines.h well since we do not have XXXInlines.cpp.
        This patch adds support for XXXInlines.h in .ycm_extra_conf.py. When XXXInlines.h is queried,
        we attempt to find XXX.cpp and use the configuration if it exists.

        * gtk/ycm_extra_conf.py:
        (getImplementationFilename):
        (FlagsForFile):

2018-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Support PHP 7.3 in Debian.

        Add 7.3 to the list of php versions supported in Debian.

        * Scripts/webkitpy/port/base.py:
        (Port._debian_php_version):

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * TestWebKitAPI/PlatformMac.cmake:

2018-12-26  Adrian Perez de Castro  <aperez@igalia.com>

        [Tools] Remove references to Bison and Flex
        https://bugs.webkit.org/show_bug.cgi?id=193033

        Reviewed by Michael Catanzaro.

        The Bison and Flex tools are not needed anymore since r209883.

        * CygwinDownloader/cygwin-downloader.py:
        * EWSTools/ubuntu-ews-packages:
        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):
        * gtk/install-dependencies:
        * wpe/install-dependencies:

2018-12-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: warn about non existing tests when parsing expectations
        https://bugs.webkit.org/show_bug.cgi?id=192979

        Reviewed by Michael Catanzaro.

        It's common to update web driver tests and forget updating the test expectations in case of tests removed or
        renamed.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__):

2018-12-21  Chris Dumez  <cdumez@apple.com>

        navigator.userAgent in service workers does not reflect customUserAgent set by client
        https://bugs.webkit.org/show_bug.cgi?id=192951

        Reviewed by Youenn Fablet.

        Extend API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWCustomUserAgentDelegate initWithUserAgent:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[SWUserAgentMessageHandler initWithExpectedMessage:]):
        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] userPresence should always be true
        https://bugs.webkit.org/show_bug.cgi?id=192835
        <rdar://problem/46538788>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):

2018-12-19  Simon Fraser  <simon.fraser@apple.com>

        Add support to run-benchmark to use non-default copies of the browser apps
        https://bugs.webkit.org/show_bug.cgi?id=192905
        rdar://problem/46845840

        Reviewed by Dewei Zhu.
        
        Add support for a --browser-path argument to run-benchmark, which allows you to use
        a custom app bundle for a given browser (only implemented for Safari at present).

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory.create):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver._launch_process):
        (OSXBrowserDriver._launch_process_with_caffeinate): Fix spelling.
        (OSXBrowserDriver._launch_process_with_caffinate): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeCanaryDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxNightlyDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.__init__):
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args):
        (run_benchmark_plan):
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner.__init__):
        * Scripts/webkitpy/browserperfdash/browserperfdash_unittest.py:
        (FakeBenchmarkRunner.__init__):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import an APDU coder from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=192949
        <rdar://problem/46879933>

        Reviewed by Brent Fulgham.

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

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

        Setting the file wrapper and content type of an attachment to a PDF should update its image
        https://bugs.webkit.org/show_bug.cgi?id=192984
        <rdar://problem/46798028>

        Reviewed by Tim Horton.

        Add an API test to verify that setting the file wrapper for a _WKAttachment with an enclosing image element with
        PDF data correctly updates the image element.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2018-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add JSCOnly to bot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=192964

        Reviewed by Alexey Proskuryakov.

        Apparently we have five JSCOnly test bots and multiple developers working on keeping them in
        good shape. Sadly, they are hidden bots not exposed in the dashboard. They would be more
        useful if they were not so secret, so add them.

        There appear to be no build-only bots, so the first column is blank. And of course there are
        no WebKit1 or WebKit2 bots, because this is JSCOnly, so the second and third columns are
        blank too. That's OK. This will be the last bot on the dashboard, so it won't look too bad,
        and there's plenty of room in the final column for all the bots.

        I had a hard time picking a logo to use, because the JavaScript language does not have an
        official logo. But I believe I've found one that will be satisfactory.

        I will sneak in one bonus change: WPE's EWS queue was missing, and has been added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/SquirrelFish.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/SquirrelFish@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.linux-jsconly img.logo):

2018-12-21  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/46194315> macOS: WebKit1 does not handle occlusion changes
        https://bugs.webkit.org/show_bug.cgi?id=192821

        Reviewed by Chris Dumez.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:

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

        [Win][Clang] Fix compilation warnings of DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=192924

        Reviewed by Alex Christensen.

        * DumpRenderTree/AccessibilityController.h: Added member variable initializations in the class definition.
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController): Moved member variable initializations to the class definition.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem): String literals can't be converted non-const type. Use auto for them.
        (resetWebPreferencesToConsistentValues): Pass a temporal _bstr_t
        object to the argument of setDefaultTextEncodingName instead of a
        const string literal.
        (createWebViewAndOffscreenWindow): Use %lx for HRESULT (aka 'long').
        (main): Exit if _dup2 fails. Use %lu for'DWORD'(aka 'unsigned long').
        (setCacheFolder): Deleted.
        * DumpRenderTree/win/DumpRenderTreeWin.h: Fix class/struct mismatch of FrameLoadDelegate and PolicyDelegate declarations.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (dump): Use %d for int.
        * DumpRenderTree/win/FrameLoadDelegate.cpp: Removed unused variable g_delegateWaitingOnTimer.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (BSTRFromString): Deleted unused function.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setDatabaseQuota): Pass a temporal _bstr_t object to
        the arguemnt of setQuota instead of const string literal.
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (jsStringRefToWString): Deleted unused function.

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Add API test coverage for customUserAgent client setting and service workers
        https://bugs.webkit.org/show_bug.cgi?id=192952

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[SWSchemes webView:startURLSchemeTask:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CBORWriterTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Add style script rule to check for uses of std::optional<>
        https://bugs.webkit.org/show_bug.cgi?id=192931

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_optional):
        (check_style):

2018-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a runtime flag for local authenticator
        https://bugs.webkit.org/show_bug.cgi?id=192792
        <rdar://problem/46798738>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-12-20  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Autoinstall package URLs have changed
        https://bugs.webkit.org/show_bug.cgi?id=192909
        <rdar://problem/46860359>

        Rubber-stamped by Alexey Proskuryakov.

        PyPi urls have been moved around, we need to update our auto-installed packages.

        We should check for Selenium before asking PyPi for the latest version.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize): Update with new pypi url.
        (AutoinstallImportHook._install_keyring): Ditto.
        (AutoinstallImportHook._install_pep8): Ditto.
        (AutoinstallImportHook._install_mozlog): Ditto.
        (AutoinstallImportHook._install_mozprocess): Ditto.
        (AutoinstallImportHook._install_pytest_timeout): Ditto.
        (AutoinstallImportHook._install_pytest): Ditto.
        (AutoinstallImportHook._install_pylint): Ditto.
        (AutoinstallImportHook._install_buildbot): Ditto.
        (AutoinstallImportHook._install_coverage): Ditto.
        (AutoinstallImportHook._install_twisted_15_5_0): Ditto.
        (AutoinstallImportHook._install_selenium): Update with new pypi url, only check
        for new Selenium if the installed version isn't sufficient.
        (AutoinstallImportHook.get_latest_pypi_url): Update with new pypi url.

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::checkURL):

2018-12-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r239417.

        Introduced two API test failures on macOS.

        Reverted changeset:

        "<rdar://problem/46194315> macOS: WebKit1 does not handle
        occlusion changes"
        https://bugs.webkit.org/show_bug.cgi?id=192821
        https://trac.webkit.org/changeset/239417

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: UIString should take an optional key and description to aid localization
        https://bugs.webkit.org/show_bug.cgi?id=153962
        <rdar://problem/24542505>

        Reviewed by Brian Burg.

        * Scripts/extract-localizable-js-strings:

2018-12-20  Tim Horton  <timothy_horton@apple.com>

        Unparented WKWebView can't retrieve main resource data for a main frame plugin
        https://bugs.webkit.org/show_bug.cgi?id=192923
        <rdar://problem/46859068>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/WebKitCocoa/GetResourceData.mm:
        Add a test ensuring that both parented and unparented WKWebViews can
        retrieve main resource data when loading a PDF.

2018-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Bump webkitgtk-test-fonts to 0.0.8
        https://bugs.webkit.org/show_bug.cgi?id=192852

        Reviewed by Michael Catanzaro.

        EmojiOne font was replaced by Noto Color Emoji.

        * WebKitTestRunner/gtk/fonts/fonts.conf: Use Noto Color Emoji when Apple Color Emoji font family is used in tests.
        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2018-12-19  Chris Dumez  <cdumez@apple.com>

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        * DumpRenderTree/*:
        * MiniBrowser/*:
        * TestRunnerShared/*:
        * TestWebKitAPI/*:
        * WebGPUAPIStructure/*:
        * WebKitTestRunner/*:

2018-12-19  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/46194315> macOS: WebKit1 does not handle occlusion changes
        https://bugs.webkit.org/show_bug.cgi?id=192821

        Reviewed by Chris Dumez.

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

2018-12-19  Alex Christensen  <achristensen@webkit.org>

        Navigations away from the SafeBrowsing interstitial show a flash of old content
        https://bugs.webkit.org/show_bug.cgi?id=192676

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (safeBrowsingView):
        (TEST):
        (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): Deleted.

2018-12-19  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Unify TestController::platformRunUntil() and honor condition flag
        https://bugs.webkit.org/show_bug.cgi?id=192855

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::notifyDone): Use the WPE implementation.
        (WTR::TestController::platformRunUntil): Use the WPE implementation.
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformRunUntil): Honor the condition flag.

2018-12-19  Megan Gardner  <megan_gardner@apple.com>

        Allow clients to set the navigator platform
        https://bugs.webkit.org/show_bug.cgi?id=192735

        Reviewed by Tim Horton.

        Add a test for setting a custom navigator platform.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomNavigatorPlatformDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomNavigatorPlatformDelegate webView:didFinishNavigation:]):

2018-12-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r239358.

        Revision caused imported/w3c/web-platform-tests/IndexedDB/ to
        crash on Debug bots

        Reverted changeset:

        "Clean up IndexedDB files between tests"
        https://bugs.webkit.org/show_bug.cgi?id=192796
        https://trac.webkit.org/changeset/239358

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A copied text selection is pasted as a web archive attachment in the entry view in Messages
        https://bugs.webkit.org/show_bug.cgi?id=192842
        <rdar://problem/46823586>

        Reviewed by Tim Horton.

        Adjusts an existing API test to verify that "com.apple.webarchive" is not one of the types registered to the
        item provider when dragging a rich text selection.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-12-18  David Quesada  <david_quesada@apple.com>

        REGRESSION: [iOS] API test TestWebKitAPI._WKDownload.OriginatingWebView is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=192810
        <rdar://problem/46812536>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
            After releasing our reference to the web view, wait until the next turn of the runloop
            before checking that the originatingWebView has been zeroed, since the web view might
            still be referenced in the autorelease pool. This _WKDownload unit test isn't about
            testing general memory management of WKWebViews, only that _WKDownload does not retain
            its web view via the 'originatingWebView' property.

2018-12-18  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext):
        (WTR::RemoveAllIndexedDatabasesCallback):
        (WTR::TestController::ClearIndexedDatabases):
        * WebKitTestRunner/TestController.h:

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

        Fix API test introduced in r239339 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=192675

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        The iOS implementation of the safe browsing warning is a little different.
        It does some element creation when it is added to the window so it knows how big it is.
        To test these elements, we need to simulate adding it to the window.
        A similar technique is done in other iOS API tests, such as SafeBrowsing.ShowWarningSPI.

2018-12-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore device type for test when using --force
        https://bugs.webkit.org/show_bug.cgi?id=192786
        <rdar://problem/46794894>

        Reviewed by Daniel Bates.

        It is sometimes the case that a contributor will wish to run a test on a specific device,
        despite expectations which indicate a test should not be run on that device.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.default_child_processes): Strip device type information when using --force.
        (DevicePort.setup_test_run): Only allow incomplete match when using --force.

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

        WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations
        https://bugs.webkit.org/show_bug.cgi?id=192675

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (TEST):
        (visitUnsafeSite):
        (-[SafeBrowsingHelper observeValueForKeyPath:ofObject:change:context:]):
        (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

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

        Regression(r239182) SuspendedPage's process reuse for link navigation optimization sometimes broken
        https://bugs.webkit.org/show_bug.cgi?id=192772

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, JHBuild GTK build fix attempt

        * gtk/jhbuild.modules: There's no libffi in this moduleset anymore.
        There's no ninja module either, it should be provided by the
        host system.

2018-12-17  Chris Dumez  <cdumez@apple.com>

        Allow passing nil as session state to [WKWebView _restoreSessionState:]
        https://bugs.webkit.org/show_bug.cgi?id=192789
        <rdar://problem/46755277>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm:
        (TEST):

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

        Don't use more expensive layer backing store formats when subpixel text antialiasing is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=192780
        rdar://problem/43394387

        Reviewed by Tim Horton.

        No need to set "AppleFontSmoothing" defaults for WK2.

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

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

        webkitpy: Handle case where stdout and stderr don't accept unicode
        https://bugs.webkit.org/show_bug.cgi?id=192775
        <rdar://problem/46497303>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): If unicode cannot be written to the stream, replace unicode
        characters with '?'.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_stream_with_encoding):

2018-12-17  Daniel Bates  <dabates@apple.com>

        Support concatenating StringView with other string types
        https://bugs.webkit.org/show_bug.cgi?id=177566

        Reviewed by Darin Adler.

        Add some tests to ensure we do not regress the number of allocations needed when performing
        string concatenation with string views.

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

2018-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239265 and r239274.
        https://bugs.webkit.org/show_bug.cgi?id=192765

        unorm_normalize is deprecated, and broke an internal build
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "[GTK][WPE] Need a function to convert internal URI to display
        ("pretty") URI"
        https://bugs.webkit.org/show_bug.cgi?id=174816
        https://trac.webkit.org/changeset/239265

        "Fix the Apple Internal Mac build with a newer SDK"
        https://trac.webkit.org/changeset/239274

2018-12-17  Daniel Bates  <dabates@apple.com>

        Implement UIScriptController::toggleCapsLock() for iOS
        https://bugs.webkit.org/show_bug.cgi?id=191815

        Reviewed by Andy Estes.

        Add support for toggling the caps lock state in WebKitTestRunner on iOS.

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Clear the current modifier state
        before running a test. This ensures that the caps lock state does not persist between
        tests should a test enable caps lock and not disable it.
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter): Map "capsLock" to the Caps Lock key usage code.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::createUIPhysicalKeyboardEvent): Modified to take the keyboard input flags to use to
        create the event. Also substituted NSString* for const String& as the data type for the first
        two parameters to avoid conversions in the implementation of UIScriptController::toggleCapsLock()
        below.
        (WTR::UIScriptController::keyDown): Update as needed due to changes to prototype of createUIPhysicalKeyboardEvent().
        (WTR::UIScriptController::toggleCapsLock): Dispatch a UIEvent to toggle caps lock.

2018-12-17  Daniel Bates  <dabates@apple.com>

        [iOS] Remove -[WebEvent initWithKeyEventType:...:characterSet:]
        https://bugs.webkit.org/show_bug.cgi?id=192633

        Reviewed by Wenson Hsieh.

        Update code to use the modern initializer.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: loop variable is copied but only used as const reference in WebCore, WebKit, Tools
        <https://webkit.org/b/192751>
        <rdar://problem/46771623>

        Reviewed by Daniel Bates.

        Change loop variables to const references to avoid unnecessary
        copies.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard pasteboardItems]):

2018-12-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add tests for userVisibleString() and (for GTK and WPE) webkit_uri_for_display().

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/URLHelpers.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitURIUtilities.cpp: Added.
        (testURIForDisplayUnaffected):
        (testURIForDisplayAffected):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:

2018-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add a test case to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFrameDisplayed):
        (beforeAll):
        * wpe/jhbuild.modules: Bump WPEBackend-fdo to 1.1.0.

2018-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix after r239253

        * gtk/jhbuild.modules: Fix typo in libpsl dependency name.

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

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon): Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.
        * DumpRenderTree/mac/TextInputControllerMac.m:
        (-[TextInputController interpretKeyEvents:withSender:]): Use
        IGNORE_WARNINGS_BEGIN/END.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseForceClick): Use
        IGNORE_NULL_CHECK_WARNINGS_BEGIN/END.
        (WTR::EventSenderProxy::startAndCancelMouseForceClick): Ditto.
        (WTR::EventSenderProxy::mouseForceDown): Ditto.
        (WTR::EventSenderProxy::mouseForceUp): Ditto.
        (WTR::EventSenderProxy::mouseForceChanged): Ditto.

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

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge): Use makeString.
        (WTR::TestController::downloadDidFail): Use an ASCIILiteral via the _s syntax.

2018-12-15  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Add libpsl to JHBuild module sets
        https://bugs.webkit.org/show_bug.cgi?id=192740

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add libpsl module.
        * wpe/jhbuild.modules: Ditto.

2018-12-14  Alexey Proskuryakov  <ap@apple.com>

        Add a style checker rule for Xcode version macros use
        https://bugs.webkit.org/show_bug.cgi?id=192703

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        (process_line):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls
        https://bugs.webkit.org/show_bug.cgi?id=192704

        Reviewed by Geoffrey Garen.

        Extend existing API test to reproduce the problem.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] WebsitePolicies are lost on process-swap
        https://bugs.webkit.org/show_bug.cgi?id=192694
        <rdar://problem/46715748>

        Reviewed by Brady Eidson.

        Extend existing API test to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2018-12-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Error writing data to TLS socket in some sites when using the jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=192678

        Reviewed by Carlos Garcia Campos.

        Update our ancient versions of libsoup and glib-networking.

        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * gtk/patches/libsoup-auth-Fix-async-authentication-when-flag-SOUP_MESSAGE.patch: Removed.
        * gtk/patches/libsoup-auth-do-not-use-cached-credentials-in-lookup-method-.patch: Removed.
        * gtk/patches/libsoup-soup-message-io-Do-not-fail-when-there-s-no-empty-li.patch: Removed.
        * gtk/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Removed.
        * wpe/install-dependencies:
        * wpe/jhbuild.modules:
        * wpe/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Removed.

2018-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use new view state API from libwpe
        https://bugs.webkit.org/show_bug.cgi?id=191906

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (beforeAll): Enable /webkit/WebKitWebView/page-visibility in WPE.
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend): Make the view initially hidden for consistency with GTK+ tests.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow): Add wpe_view_activity_state_visible, wpe_view_activity_state_in_window and
        wpe_view_activity_state_focused state flags.
        (WebViewTest::hideView): Remove wpe_view_activity_state_visible and wpe_view_activity_state_focused state flags.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Assume view is always visible, focused and in window.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Update the view state flags depending on state
        received in configure callback.
        * wpe/jhbuild.modules: Bump libwpe to 1.1.0

2018-12-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory'
        https://bugs.webkit.org/show_bug.cgi?id=192688

        Reviewed by Ross Kirsling.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (copyEnvironmentVariable): Moved.
        (getStringValue): Enclosed with #if !defined(WIN_CAIRO).
        (applePathFromRegistry): Ditto.
        (appleApplicationSupportDirectory): Ditto.
        (prependPath): Ditto.

2018-12-13  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed. Changed my status to a reviewer.

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

2018-12-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support dropping contact card data (public.vcard) in editable content
        https://bugs.webkit.org/show_bug.cgi?id=192570
        <rdar://problem/35626913>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

        Add API tests to verify that registering `MKMapItem`s and `CNContact`s to item providers and dropping them in
        attachment-enabled rich text editable areas inserts attachment elements (and in the case of `MKMapItem`,
        additionally inserts a link).

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::createMapItemForTesting):
        (TestWebKitAPI::createContactItemForTesting):

        Add API tests to verify that dropping map items and contact items into rich and plain editable areas behaves as
        expected (in the case where a URL is present, e.g. dropping a map item, we insert the URL as an anchor, and when
        there is no other suitable representation in the item provider, we do nothing at all, which is the case for the
        dropped `CNContact`). Also, add a test to verify that drag and drop can be used to upload these items as .vcf
        files.

2018-12-13  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed -- update my status to "reviewer".

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

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

        On page close, WebPage::m_userMediaPermissionRequestManager is nullified too early
        https://bugs.webkit.org/show_bug.cgi?id=192657

        Reviewed by Eric Carlson.

        Add a test that loads a page registering ondevicechange,
        load another page in the same process, closes the first page.
        Ensure that the process does not crash in that case.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didCrashCallback):
        * TestWebKitAPI/Tests/WebKit/ondevicechange.html: Added.

2018-12-13  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GStreamer][JHBuild] update-webkit{gtk,wpe}-libs fails with libfdk-2.0.0
        https://bugs.webkit.org/show_bug.cgi?id=192643

        Reviewed by Philippe Normand.

        This problem happens with Arch Linux users which have libfdk-2.0.0
        installed (which is anybody with gst-plugins-bad 1.14.4 installed).

        The problem has already been solved upstream at
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/77.

        Adding patches while this problem is not in a release yet.

        * gstreamer/jhbuild.modules: Add patches to fix build of gst-plugins-bad with libfdk-2.0.0.
        * gstreamer/patches/gst-plugins-bad-0003-fdkaacenc-Remove-MODE_2_1.patch: Added.
        * gstreamer/patches/gst-plugins-bad-0004-fdkaacdec-Use-WAV-channel-mapping-instead-of-interleave-setting.patch: Added.

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

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        Add cairo patch to avoid crashes.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.

2018-12-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][WebKitLegacy] WebFrame.cpp: warning: delete called on non-final 'WebFrame' that has virtual functions but non-virtual destructor [-Wdelete-non-virtual-dtor]
        https://bugs.webkit.org/show_bug.cgi?id=192618

        Reviewed by Alex Christensen.

        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/UIDelegate.h:

2018-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        Make TextInputController.legacyAttributedString take DOM nodes and offsets
        https://bugs.webkit.org/show_bug.cgi?id=192653

        Reviewed by Wenson Hsieh.

        Updated TextInputController.legacyAttributedString to take DOM nodes and offsets instead of
        a DOM Range object in preparation to add layout tests for HTMLConverter which crosses
        shadow boundaries.

        * DumpRenderTree/mac/TextInputControllerMac.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]): Updated the selector signature.
        (+[TextInputController webScriptNameForSelector:]): Ditto.
        (-[TextInputController legacyAttributedString:offset:to:offset:]): Made this function take
        start node and offset then end node and offset pairs.

2018-12-12  Alex Christensen  <achristensen@webkit.org>

        Implement safe browsing in WebKit on WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=192641
        <rdar://problem/46376188>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate _webViewDidShowSafeBrowsingWarning:]):
        (safeBrowsingView):
        Add a test that the new delegate callback is called.

2018-12-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed manual rollout of r239100-r239102 and r239116
        https://bugs.webkit.org/show_bug.cgi?id=192151
        <rdar://problem/46655586>

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Removed.

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

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

        It broke the built because it depends on another patch that
        didn't land yet (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Add API to notify about frame displayed view backend
        callback"
        https://bugs.webkit.org/show_bug.cgi?id=192224
        https://trac.webkit.org/changeset/239103

2018-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add a test case to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFrameDisplayed):
        (beforeAll):

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

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        Add cairo patch to avoid crashes.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.

2018-12-11  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag for CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192610

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-12-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix bad check in API test added in r239080.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [Win][Clang] Fix warning -Wmissing-field-initializers
        https://bugs.webkit.org/show_bug.cgi?id=192584

        Reviewed by Yusuke Suzuki.

        Initialize a struct with '{ }' instead of '= {0}'.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/EventSender.cpp:
        (makeMsg):
        (replaySavedEvents):
        (beginDragWithFilesCallback):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (updateMenuItemForHistoryItem):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * TestWebKitAPI/win/HostWindow.cpp:
        (TestWebKitAPI::HostWindow::clientRect const):
        (TestWebKitAPI::HostWindow::registerWindowClass):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::registerWindowClass):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::windowSnapshotImage):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        PSON logic gets confused by concurrent decidePolicyForNavigationAction requests
        https://bugs.webkit.org/show_bug.cgi?id=192482
        <rdar://problem/46470145>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-11  Andy Estes  <aestes@apple.com>

        Introduce makeBlockPtr for lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192594

        Reviewed by Alex Christensen.

        Adopted makeBlockPtr and added API tests.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::callUIScriptCallback):
        * TestWebKitAPI/Tests/WTF/BlockPtr.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner init]):
        (-[DownloadProgressTestRunner subscribeAndWaitForProgress]):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238764-238783): TestWTF.WTF.StringOperators is failing
        https://bugs.webkit.org/show_bug.cgi?id=192361
        <rdar://problem/46524903>

        Reviewed by Alex Christensen.

        Compile StringOperators.cpp with -O1 optimization level instead of -Os. This
        fixes the failures for me locally.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2018-12-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after r239028

        The FLATPAK_USER_DIR env var is not set early enough, leading to:

        Traceback (most recent call last):
        File "/home/phil/WebKit/Tools/Scripts/webkit-flatpak", line 28, in <module>
          sys.exit(WebkitFlatpak.load_from_args().run())
        File "/home/phil/WebKit/Tools/flatpak/flatpakutils.py", line 761, in run
          if not self.clean_args():
        File "/home/phil/WebKit/Tools/flatpak/flatpakutils.py", line 574, in clean_args
          _log.debug("Using flatpak user dir: %s" % os.environ["FLATPAK_USER_DIR"])
        File "/usr/lib/python2.7/UserDict.py", line 40, in __getitem__
          raise KeyError(key)
        KeyError: 'FLATPAK_USER_DIR'

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

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

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [CMake] Add ENABLE_RESOURCE_LOAD_STATISTICS to WebKitFeatures.cmake
        https://bugs.webkit.org/show_bug.cgi?id=192574

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

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

        Sync FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=192565

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to upload data that conforms to "public.item" but not "public.content"
        https://bugs.webkit.org/show_bug.cgi?id=192555
        <rdar://problem/35204990>

        Reviewed by Tim Horton.

        Add a test to verify that `.p12` files may be uploaded as files via drag and drop. "com.rsa.pkcs-12" is an
        example of a data type that conforms to "public.item", but not "public.content"; before this patch, we would
        only support uploading "public.content", so files such as these would not be accepted when dropping into file
        inputs, or be exposed as files on DataTransfer.

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

2018-12-10  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Follow-up to address Darin's feedback.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::keyExistsInKeychain):

2018-12-10  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ref tests don't respect platform specific expectations
        https://bugs.webkit.org/show_bug.cgi?id=192515
        <rdar://problem/46564839>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/base.py:
        (Port._expected_baselines_for_suffixes): Accept multiple suffixes so ref tests can use this function.
        (Port.expected_baselines): Move implementation to _expected_baselines_for_suffixes.
        (Port.expected_filename): Remove irrelevant FIXME, code clean-up.
        (Port.reference_files): Instead of just searching a single directory, use _expected_baselines_for_suffixes to
        search all platform expectations as well.
        * Scripts/webkitpy/port/base_unittest.py:
        (test_ref_tests_platform_directory):

2018-12-10  Chris Dumez  <cdumez@apple.com>

        Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192509
        <rdar://problem/46500832>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[DataMappingSchemeHandler addMappingFromURLString:toData:]):
        (-[DataMappingSchemeHandler webView:startURLSchemeTask:]):
        (-[DataMappingSchemeHandler webView:stopURLSchemeTask:]):
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomUserAgentDelegate webView:didFinishNavigation:]):

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Caret is obscured by finger when dragging over an editable element
        https://bugs.webkit.org/show_bug.cgi?id=192499
        <rdar://problem/46570101>

        Reviewed by Tim Horton.

        Augment some existing API tests to check that the `precise` flag is either on or off on `UIDropProposal`.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator lastKnownDropProposal]):

        Rename `currentDropProposal` to `lastKnownDropProposal`, and expose it as a readonly property.

        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator setShowCustomActionSheetBlock:]):
        (-[DragAndDropSimulator showCustomActionSheetBlock]):
        (-[DragAndDropSimulator setConvertItemProvidersBlock:]):
        (-[DragAndDropSimulator convertItemProvidersBlock]):
        (-[DragAndDropSimulator setOverridePerformDropBlock:]):
        (-[DragAndDropSimulator overridePerformDropBlock]):
        (-[DragAndDropSimulator setOverrideDragUpdateBlock:]):
        (-[DragAndDropSimulator overrideDragUpdateBlock]):
        (-[DragAndDropSimulator setDropCompletionBlock:]):
        (-[DragAndDropSimulator dropCompletionBlock]):

        Refactor these properties to return and take normal Objective-C blocks, rather than `BlockPtr`s. However, use
        `BlockPtr` instance variables to manage the lifetimes of these blocks.

        (-[DragAndDropSimulator _webView:willUpdateDropProposalToProposal:forSession:]):
        (-[DragAndDropSimulator _webView:willUpdateDataInteractionOperationToOperation:forSession:]): Deleted.

        Update this to use the new WebKit delegate hook for overriding the drop proposal.

2018-12-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] run-minibrowser improperly creates webkit-flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=190241

        Reviewed by Carlos Garcia Campos.

        run-minibrowser calls into webkit-flatpak to check if a flatpak environment is available.
        Currently this actually creates the directories needed for the flatpak environment. Fix it.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run):

2018-12-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Don't use the slice allocator
        https://bugs.webkit.org/show_bug.cgi?id=192360

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (aboutDataRequestFree):
        (aboutDataRequestNew):

2018-12-10  Tim Horton  <timothy_horton@apple.com>

        WKWebView should support custom tintColor
        https://bugs.webkit.org/show_bug.cgi?id=192518
        <rdar://problem/37243261>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        (TestWebKitAPI::TEST):
        Add a test that tintColor affects UITextInputTraits' interaction colors.

2018-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] DragAndDropTests.RespectsExternalSourceFidelityRankings is flaky
        https://bugs.webkit.org/show_bug.cgi?id=192524

        Reviewed by Ryosuke Niwa.

        This test started failing on certain builds of iOS where UIKit now attempts to reveal the selection by scrolling
        (see <rdar://problem/28300343>). This API test simulates two drops from external sources, both from the point
        (300, 400) to (100, 300) in window coordinates. On these aforementioned builds of iOS, what happens is that the
        first drop inserts text that overflows the editable region by an enormous amount, which creates an extremely
        wide selection rect and increases the width of the document; revealing this selection causes the web view to
        scroll horizontally, such that the second attempt to simulate a drag from (300, 400) to (100, 300) fails, since
        these window coordinates no longer correspond to the drop destination element in the document.

        To fix this test, we simply mark the drop destination as `overflow: hidden` to ensure that we don't try and
        scroll horizontally after the first drop.

        * TestWebKitAPI/Tests/WebKitCocoa/autofocus-contenteditable.html:

2018-12-08  Daniel Bates  <dabates@apple.com>

        Fix lldb_webkit.py following r238771
        (https://bugs.webkit.org/show_bug.cgi?id=190234)

        Substitute WTFURLProvider for WebCoreURLProvider in one call site that was inadvertently
        missed in r238771.

        * lldb/lldb_webkit.py:
        (WebCoreDocumentProvider.url):

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] check-patch-relevance failure should not mark the overall build as failure
        https://bugs.webkit.org/show_bug.cgi?id=192510

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance.start):

2018-12-07  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.UseSessionCookiesAfterProcessSwapInPrivateBrowsing API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=192362
        <rdar://problem/46460360>

        Reviewed by Ryosuke Niwa.

        Move the call to _setCookieAcceptPolicy *after* we've constructed a WKWebView and thus
        *after* we know for sure we have a network process to communicate the policy to.
        This should address the failures on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-07  Jiewen Tan  <jiewen_tan@apple.com>

        Add keychain access entitlement to WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=192489
        <rdar://problem/45057952>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/Configurations/WebKitTestRunnerApp-iOS.entitlements:

2018-12-07  Saam Barati  <sbarati@apple.com>

        WKWebProcessPlugInLoadDelegate should have API for saying which rendering events it wants to listen for
        https://bugs.webkit.org/show_bug.cgi?id=192473

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgress.mm: Added.
        (-[DidFirstMeaningfulPaintRemoteObject didFirstMeaningfulPaint]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgressPlugIn.mm: Added.
        (-[RenderingProgressPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RenderingProgressPlugIn webProcessPlugInBrowserContextControllerRenderingProgressEvents:]):
        (-[RenderingProgressPlugIn webProcessPlugInBrowserContextController:renderingProgressDidChange:]):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgressProtocol.h: Added.

2018-12-07  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: run-webkit-tests may fail when using booted simulators (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192470
        <rdar://problem/46532001>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.setup_test_run): Check that the number of initialized devices matches the
        number of child processes.

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Send bug id as a build property
        https://bugs.webkit.org/show_bug.cgi?id=192494

        Reviewed by Lucas Forschler.

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

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Builds should have a link to patch and bug
        https://bugs.webkit.org/show_bug.cgi?id=192492

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.add_patch_id_url): Method to add Patch URL.
        (ConfigureBuild.add_bug_id_url): Method to add Bug URL.
        (ConfigureBuild.getPatchURL): Method to get Patch URL.
        (ConfigureBuild.getBugURL): Method to get Bug URL.

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Configure logfile for ews-app logs
        https://bugs.webkit.org/show_bug.cgi?id=192493

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py:

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        Style queue exception on some security bugs
        https://bugs.webkit.org/show_bug.cgi?id=190793

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/tool/steps/applywatchlist.py:
        (ApplyWatchList.run):

2018-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Cloned attachment elements lose their unique identifiers
        https://bugs.webkit.org/show_bug.cgi?id=192483

        Reviewed by Tim Horton.

        Introduce a new API test.

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

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        Consecutive DumpRenderTree crashes are happening again on WinCairo BuildBots since r238903
        https://bugs.webkit.org/show_bug.cgi?id=192486

        Unreviewed infrastructure fix.

        WinCairo bots define WEBKIT_TEST_CHILD_PROCESSES to run less processes due to RAM restrictions.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):

2018-12-06  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Reviewed by Simon Fraser.

        This patch:
        - Fixes leaks in various injected bundle methods that return +1
          retained WKTypeRef objects via pointer.
        - Asserts the returned object is the expected WKTypeRef.
        - Replaces 0 with nullptr in many places.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestRunner::statisticsUpdateCookieBlocking):
        (WTR::TestRunner::statisticsSubmitTelemetry):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::statisticsResetToConsistentState):
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::domCacheSize):
        (WTR::TestRunner::injectUserScript):
        (WTR::TestRunner::keyExistsInKeychain):

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: run-webkit-tests may fail when using booted simulators
        https://bugs.webkit.org/show_bug.cgi?id=192470
        <rdar://problem/46532001>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Logging uses the number of child processes to print out information about how efficiently tests
        were sharded after the fact. This number is the most meaningful if it is the maximum number of child processes used.
        * Scripts/webkitpy/port/base.py:
        (Port.max_child_processes): By default, Ports do not support running on any specific kind of device.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.default_child_processes): Rather than using the currently initialized devices as a proxy for how many
        child processes are being used, check the device manager every time. Regardless of which devices are attached or
        available, iOS cannot boot watchOS devices and vice-versa. dedicated_simulators is not a known argument to
        device_count_for_type, use use_booted_simulator instead.
        (DevicePort.max_child_processes): Simulators can boot more devices than what is specified by device_count_for_type,
        but, if no devices are available, then max_child_processes should return 0 even for simulators.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        (IOSDeviceTest.test_max_child_processes):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.test_max_child_processes):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.test_max_child_processes):
        * Scripts/webkitpy/port/watch_simulator_unittest.py:
        (WatchSimulatorTest):
        (WatchSimulatorTest.test_max_child_processes):

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore case when comparing device types (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192409
        <rdar://problem/46491558>

        Unreviewed typo fix.

        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_comparison_lower_case):
        (DeviceTypeTest.test_comparsion_lower_case): Deleted.

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Create device given lower-case DeviceType
        <https://bugs.webkit.org/show_bug.cgi?id=192472>
        <rdar://problem/46532650>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._get_device_identifier_for_type): Comparing simctl device identifiers with DeviceTypes
        should be letter-case agnostic.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_lower_case_device_type):

2018-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView should match UITextView behavior when editing text with an RTL keyboard
        https://bugs.webkit.org/show_bug.cgi?id=187554
        <rdar://problem/42075638>

        Reviewed by Tim Horton.

        Add support for simulating the keyboard input mode in layout tests using UIScriptController, as well as a new
        `TestOption` to make the web view editable.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::overriddenKeyboardInputMode const):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::swizzleCurrentInputMode):
        (WTR::TestController::setKeyboardInputModeIdentifier):

        Swizzle out several `UIKeyboardInputModeController` methods in order to convince UIKit that the user has
        selected a `UIKeyboardInputMode` corresponding to the given identifier. The call to
        `-prepareKeyboardInputModeFromPreferences:` is also necessary on iOS 12 in order to update cached writing
        direction state in UIKit.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::setEditable):

2018-12-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Share ClassMethodSwizzler and InstanceMethodSwizzler between TestWebKitAPI and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=192437

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.h: Renamed from Tools/TestWebKitAPI/ClassMethodSwizzler.h.
        * TestRunnerShared/cocoa/ClassMethodSwizzler.mm: Renamed from Tools/TestWebKitAPI/ClassMethodSwizzler.mm.
        (ClassMethodSwizzler::ClassMethodSwizzler):
        (ClassMethodSwizzler::~ClassMethodSwizzler):
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.h: Renamed from Tools/TestWebKitAPI/cocoa/InstanceMethodSwizzler.h.
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.mm: Renamed from Tools/TestWebKitAPI/cocoa/InstanceMethodSwizzler.mm.
        (InstanceMethodSwizzler::InstanceMethodSwizzler):
        (InstanceMethodSwizzler::~InstanceMethodSwizzler):

        Move these swizzling helper classes into TestRunnerShared.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (safeBrowsingView):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):

        Remove namespacing around ClassMethodSwizzler and InstanceMethodSwizzler in a few API tests.

        * TestWebKitAPI/mac/TestFontOptions.mm:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::ClassMethodSwizzler::ClassMethodSwizzler): Deleted.
        (WTR::ClassMethodSwizzler::~ClassMethodSwizzler): Deleted.

        Remove this duplicate implementation of ClassMethodSwizzler in WebKitTestRunner.

2018-12-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Clean-up apple_additions
        https://bugs.webkit.org/show_bug.cgi?id=192413
        <rdar://problem/46493491>

        Reviewed by Lucas Forschler.

        After the addition of watchOS, some functions which were originally iOS specific were
        generalized to include all devices.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._driver_class): Replace iOS specific call with generalized device call.
        (IOSDevicePort.path_to_crash_logs): Ditto.
        (IOSDevicePort.clean_up_test_run): Ditto.

2018-12-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore case when comparing device types
        https://bugs.webkit.org/show_bug.cgi?id=192409
        <rdar://problem/46491558>

        Reviewed by Lucas Forschler.

        This allows DeviceTypes constructed with lowercase strings to correctly compare
        against DeviceTypes coming from the simulator runtime.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__eq__):
        (DeviceType.__contains__):
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_comparsion_lower_case):

2018-12-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Sort tests by associated device type
        https://bugs.webkit.org/show_bug.cgi?id=192161
        <rdar://problem/46345392>

        Reviewed by Lucas Forschler.

        Sort tests by device type and make an effort to run each specified device type.
        Do not run tests if their specified device is not available.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.is_watchos): Add watchos bits to platform info.
        (PlatformInfo._determine_os_name): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Assign each test a device type. Then, generate a list of
        device types to sequentially iterate through. Note that a test will run
        on the first device which matches.
        (Manager._end_test_run): Handle the case where no devices are available and no
        tests are run.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Manage child processes in manager.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.default_child_processes): Accept additional arguments.
        (Port.max_child_processes): Add upper limit for number of child processes.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort._device_type_with_version): Adds version to the DeviceType.
        (DevicePort.default_child_processes): Allows default_child_processes to be
        attached to a device type.
        (DevicePort.max_child_processes): Add upper limit to the maximum number of child processes.
        (DevicePort.setup_test_run): Use _device_type_with_version.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort.default_child_processes): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.default_child_processes): Deleted.
        (IOSSimulatorPort.check_sys_deps): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_child_processes): Accept additional arguments.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort):
        (WatchDevicePort.default_child_processes): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.default_child_processes): Deleted.
        (WatchSimulatorPort.check_sys_deps): Deleted.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.device_count_for_type): Count the number of devices
        available for a specific device type.

2018-12-05  Devin Rousso  <drousso@apple.com>

        Unreviewed, add myself to some watch lists.

        * Scripts/webkitpy/common/config/watchlist:

2018-12-05  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove the AppendPipeline state machine
        https://bugs.webkit.org/show_bug.cgi?id=192204

        Reviewed by Xabier Rodriguez-Calvar.

        Updated AbortableTaskQueue tests:

        Added test: AbortedBySyncTaskHandler.

        Renamed test: AbortDuringSyncTask -> AbortBeforeSyncTaskRun (in
        order to avoid confusion with the new test).

        Added checks for the correct destruction of response objects.

        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::FancyResponse::FancyResponse):
        (TestWebKitAPI::FancyResponse::~FancyResponse):
        (TestWebKitAPI::TEST):

2018-12-04  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.UseSessionCookiesAfterProcessSwapInPrivateBrowsing API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=192362

        Reviewed by Alex Christensen.

        Set the cookie policy to Accept to make sure the cookies are saved.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Update GLib
        https://bugs.webkit.org/show_bug.cgi?id=191222

        Reviewed by Žan Doberšek.

        When I try running API tests locally, they crash with:

        GLib-GIO-WARNING **: unknown schema extension 'd'

        We need to update our old glib to support the 'd' value type, otherwise schemas that may
        exist on the host using this type will cause instant crashes.

        Also, switch the GLib build to use meson. This requires updating meson as well.

        * gtk/jhbuild.modules:
        * gtk/patches/glib-cast-function-type.patch: Removed.
        * gtk/patches/glib-gtester-do-not-consider-skipped-tests-as-failures.patch: Removed.
        * wpe/jhbuild.modules:
        * wpe/patches/glib-cast-function-type.patch: Removed.
        * wpe/patches/glib-revert-wakeup-changes.patch: Removed.

2018-12-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Run BugzillaPatchFetcher periodically
        https://bugs.webkit.org/show_bug.cgi?id=192241

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py:
        * BuildSlaveSupport/ews-app/ews/apps.py:
        (EwsConfig.ready): This method is called by Django on startup.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop): Class which invokes BugzillaPatchFetcher every 60s.

2018-12-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support unicode in MeteredStream
        https://bugs.webkit.org/show_bug.cgi?id=192260

        Reviewed by Aakash Jain.

        It's possible that the test runner returns unicode characters to be logged when
        running layout tests.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Print message without attempting to encode/decode it.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_unicode):

2018-12-04  Keith Rollin  <krollin@apple.com>

        Update scripts for generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192081
        <rdar://problem/46312290>

        Reviewed by Brent Fulgham.

        The initial pass at generate-xcfilelists (a script for
        creating/updating the .xcfilelist files needed for various Generate
        Foo Source build phases in Xcode) only generated the .xcfilelist files
        that held the output files; it did not generate the list of input
        files. As well, for the sources generated by DerivedSources.make
        makefiles, the script accomplished this via the implementation of a
        convention in the makefile that allowed the printing of these output
        files when invoked with the 'print_all_generated_files' target. Use of
        this convention is inconvenient and error-prone.

        The script is now updated to address both of these issues. First, it
        generates for the input and output sets of files. Second, it does away
        with the convention in the DerivedSources.make makefiles and instead
        works from the dependency output information printed when `make` is
        invoked with --debug. This second part is implemented in the new
        script extract-dependencies-from-makefile.

        * Scripts/extract-dependencies-from-makefile: Added.
        (Parser):
        (Parser.__init__):
        (Parser.nextLine):
        (Parser.addTarget):
        (Parser.addPrereq):
        (Parser.doParse):
        (Parser.printInputs):
        (Parser.printOutputs):
        (parseArgs):
        (main):
        * Scripts/generate-xcfilelists:

2018-12-04  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add gtk-doc to WPE port. This patch tries to reuse as much code from
        WebKitGTK+ as possible.

        * gtkdoc/generate-gtkdoc: Renamed from Tools/gtk/generate-gtkdoc.
        (get_gtkdoc_module_paths): Add GDK and GTK only if building for GTK.
        (prepare_environment_for_gtkdoc_generation):
        (build_gtkdoc_for_wpe): Code to generate doc for WPE.
        (build_gtkdoc_for_wkgtk): Code to generate doc for WebKitGTK+. Moved from main.
        * gtkdoc/gtkdoc.py: Renamed from Tools/gtk/gtkdoc.py.
        (GTKDoc.__init__): Initialized required variables according to pylint.
        (GTKDoc.api_missing_documentation):
        * wpe/install-dependencies: Add gtkdoc dependency.

2018-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move URLSoup back to WebCore after r238771
        https://bugs.webkit.org/show_bug.cgi?id=192306

        Reviewed by Michael Catanzaro.

        Include GUniquePtrSoup from WebCore again.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:

2018-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump freetype, fontconfig, harfbuzz, cairo and icu in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=192310

        Reviewed by Michael Catanzaro.

        Update those dependencies to their latest stable versions.

        * gtk/jhbuild.modules:

2018-12-03  Tomas Popela  <tpopela@redhat.com>

        [GTK] Can't run MiniBrowser due to missing python2-yaml
        https://bugs.webkit.org/show_bug.cgi?id=192308

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2018-12-03  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Google OAuth is broken in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=192337
        <rdar://problem/46353558>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GetSessionCookie.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SetSessionCookie.html: Added.

2018-12-03  Chris Dumez  <cdumez@apple.com>

        [PSON] Request by the client to process-swap is ignored if the window has an opener
        https://bugs.webkit.org/show_bug.cgi?id=192267
        <rdar://problem/46386886>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-03  Keith Rollin  <krollin@apple.com>

        Add .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192082
        <rdar://problem/46312533>

        Reviewed by Brent Fulgham.

        Add .xcfilelist files for Generate Derived Sources and Generate
        Unified Sources build phases in Xcode. These are just being staged for
        now; they'll be added to the Xcode projects later.

        * DumpRenderTree/DerivedSources-input.xcfilelist: Added.
        * DumpRenderTree/DerivedSources-output.xcfilelist: Added.
        * WebKitTestRunner/DerivedSources-input.xcfilelist: Added.
        * WebKitTestRunner/DerivedSources-output.xcfilelist: Added.

2018-12-03  Alex Christensen  <achristensen@webkit.org>

        Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=192272

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm:
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]):
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]):

2018-12-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Unable to upload non-image files using drag and drop in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=192283
        <rdar://problem/46399461>

        Reviewed by Ryosuke Niwa.

        Add a new API test to check that an item provider which contains plain text data and a file URL (but is not
        marked as an attachment) is still treated as an attachment upon drop. Furthermore, verify that "text/uri-list"
        does not expose the actual file URL written to the item provider.

        Additionally, rebaseline an existing API test to remove an extraneous "text/uri-list" type that appears in
        `DataTransfer.types`, but whose data is inaccessible via `getData` anyways.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-12-01  Don Olmstead  <don.olmstead@sony.com>

        Cleanup WebKit Features
        https://bugs.webkit.org/show_bug.cgi?id=192262

        Reviewed by Michael Catanzaro.

        Removes obsolete ENABLE options and variable names. Syncs the option's
        descriptions with what is present in WebKitFeatures.cmake. Sorts the
        options based on the associated define.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-01  Chris Dumez  <cdumez@apple.com>

        [PSON] process-swapping may occur even though opener has handle to openee
        https://bugs.webkit.org/show_bug.cgi?id=192277

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Unreviewed, rolling out r238764.

        Breaks existing layout tests

        Reverted changeset:

        "webkitpy: Support unicode in MeteredStream"
        https://bugs.webkit.org/show_bug.cgi?id=192260
        https://trac.webkit.org/changeset/238764

2018-12-01  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Move URL tests from TestWebKitAPI to TestWTF
        https://bugs.webkit.org/show_bug.cgi?id=192275

        Reviewed by Keith Miller.

        Since URL is moved from WebCore to WTF, we also move tests for them from TestWebKitAPI (TestWebCore) to TestWTF.
        But we still have some tests in TestWebCore since only WebCore implements TextEncoding. That part is now decoupled
        from URLParser tests and new URLParserTextEncoding.cpp is created.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/URL.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/URL.cpp.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/URLParser.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp: Added.
        (TestWebKitAPI::ExpectedParts::isInvalid const):
        (TestWebKitAPI::eq):
        (TestWebKitAPI::insertTabAtLocation):
        (TestWebKitAPI::invalidParts):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

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

        Unreviewed LFC passing test list update.

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

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Move URL from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=190234

        Reviewed by Keith Miller.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::createURL):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::originalDataAsString):
        (TestWebKitAPI::userVisibleString):
        (TestWebKitAPI::literalURL):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        (literalURL):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        * TestWebKitAPI/Tests/mac/SSLKeyGenerator.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createURLForResource):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WTFURL_SummaryProvider):
        (WTFURLProvider):
        (WebCoreURL_SummaryProvider): Deleted.
        (WebCoreURLProvider): Deleted.
        (WebCoreURLProvider.__init__): Deleted.
        (WebCoreURLProvider.to_string): Deleted.

2018-11-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support unicode in MeteredStream
        https://bugs.webkit.org/show_bug.cgi?id=192260

        Reviewed by Stephanie Lewis.

        It's possible that the test runner returns unicode characters to be logged when
        running layout tests.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Message written to metered stream should be unicode.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_unicode):

2018-11-30  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r238749): run-api-tests dies with AttributeError: 'IOSSimulatorPort' object has no attribute 'DEFAULT_DEVICE_CLASS'
        https://bugs.webkit.org/show_bug.cgi?id=192257
        <rdar://problem/46384671>

        Reviewed by Stephanie Lewis.

        Follow-up fix for r238749.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Use DEFAULT_DEVICE_TYPE instead of DEFAULT_DEVICE_CLASS.

2018-11-30  Chris Dumez  <cdumez@apple.com>

        [PSON] We are sometimes swapping processes even though there is an opened window with an opener link to us
        https://bugs.webkit.org/show_bug.cgi?id=192242

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-30  Don Olmstead  <don.olmstead@sony.com>

        Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=192197

        Reviewed by Jiewen Tan.

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

2018-11-30  Dean Jackson  <dino@apple.com>

        Add first-class support for .mjs files in jsc binary
        https://bugs.webkit.org/show_bug.cgi?id=192190
        <rdar://problem/46375715>

        Reviewed by Keith Miller.

        Add .mjs files to the regexp looking for all JS files.

        * Scripts/run-jsc-stress-tests:

2018-11-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use DeviceType instead of str to represent device class
        https://bugs.webkit.org/show_bug.cgi?id=192160
        <rdar://problem/46344845>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._custom_device_for_test): Use DeviceTypes instead of strings to represent device type.
        (Manager._set_up_run): Do not set _options.device_class, use device_type instead of device_class.
        (Manager.run): Use device_type instead of device_class.
        (Manager._print_expectations_for_subset): Ditto.
        (Manager.print_expectations): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_uses_custom_device): Use DeviceType and actual device definition.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_workers_and_shards): Outputting the device suffix doesn't really help, and means
        device type needs to be passed around.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.setup_test_run): Receive device_type as DeviceType object.
        (DevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort):
        (IOSSimulatorPort.__init__): Deleted.
        (IOSSimulatorPort._set_device_class): Deleted.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch.py:
        (WatchPort):
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort):
        (WatchSimulatorPort.__init__): Deleted.
        (WatchSimulatorPort._set_device_class): Deleted.
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type): Using the existing devices for this is
        a problem if no such device exists yet. Use the _device_identifier_to_name dictionary instead
        since this should have hardware types in the device names.

2018-11-30  David Quesada  <david_quesada@apple.com>

        -[WKProcessPool _downloadURLRequest:] should allow specifying the initiating web view
        https://bugs.webkit.org/show_bug.cgi?id=192212
        rdar://problem/46363706

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):

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

        [LFC][BFC] Compute min/maxHeight margins only when they are needed.
        https://bugs.webkit.org/show_bug.cgi?id=192223

        Reviewed by Antti Koivisto.

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

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

        [LFC][BFC][MarginCollapsing] Do not use computed display box values for border and padding
        https://bugs.webkit.org/show_bug.cgi?id=192214

        Reviewed by Antti Koivisto.

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

2018-11-30  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][MiniBrowser] Handle Device Info permission requests
        https://bugs.webkit.org/show_bug.cgi?id=191585

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserTab.c:
        (permissionRequestDataNew):
        (permissionRequestDataFree):
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (browserTabConstructed):

2018-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK+ gardening. Stop running tests without complex text enforced

        We have enforced complex text in GTK+ for one release cycle without noticing any major issue nor performance
        regression.

        * WebKitTestRunner/gtk/main.cpp:
        (main):

2018-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r238635): Dragging a text selection within WKWebView causes the selection highlight to get into a bad state
        https://bugs.webkit.org/show_bug.cgi?id=192165
        <rdar://problem/46346682>

        Reviewed by Daniel Bates.

        Fixes 11 API tests that started failing or timing out after r238635. See below for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::webViewForEditActionTestingWithPageNamed):

        Ensure that the web view becomes first responder before executing edit actions.

        * TestWebKitAPI/Tests/WebKitCocoa/autofocus-contenteditable.html:
        * TestWebKitAPI/Tests/WebKitCocoa/contenteditable-and-textarea.html:

        Tweak these tests to allow selected content to overflow the width of the web view. Without this change,
        ContentEditableToContentEditable and ContentEditableToTextarea will sometimes fail because the content causes
        the body to scroll horizontally, so we miss the drop destination.

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

        Add a new helper to load a test page with a given name, become first responder, and wait until an input session
        starts. Use this in various drag and drop tests to reduce code duplication.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):

        To more accurately emulate UIKit behavior, begin focus preservation when starting a drag, and attempt to clear
        the focus preservation token when the drag session ends. This allows us to simulate and test the scenario that
        regressed with r238635.

        (-[DragAndDropSimulator ensureInputSession]):
        (-[DragAndDropSimulator _webView:didStartInputSession:]):
        (-[DragAndDropSimulator waitForInputSession]): Deleted.

        Refactored into -ensureInputSession. Instead of assuming that an input session has not yet been started, simply
        wait for an input session to start if needed.

        * TestWebKitAPI/ios/UIKitSPI.h:

        Add a new SPI declaration.

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Inform clients when editable image attachment backing data changes
        https://bugs.webkit.org/show_bug.cgi?id=192206
        <rdar://problem/46350277>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[AttachmentUpdateObserver init]):
        (-[AttachmentUpdateObserver dataInvalidated]):
        (-[AttachmentUpdateObserver _webView:didInvalidateDataForAttachment:]):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::expectAttachmentInvalidation):
        (webViewForTestingAttachments):
        (TestWebKitAPI::forEachViewInHierarchy):
        (TestWebKitAPI::findEditableImageCanvas):
        (TestWebKitAPI::drawSquareInEditableImage):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/PencilKitTestSPI.h: Added.
        Add a test ensuring that we get an invalidation callback when an editable image is changed.

2018-11-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238445)[Buildbot] Unknown builder 'GTK Linux 32-bit Release' in scheduler 'trunk'
        https://bugs.webkit.org/show_bug.cgi?id=192143

        Reviewed by Philippe Normand.

        Buildbot can't start since r238445.

        > Configuration Errors:
        >   Unknown builder 'GTK Linux 32-bit Release' in scheduler 'trunk'
        >   Unknown builder 'GTK Linux ARM Release' in scheduler 'trunk'

        * BuildSlaveSupport/build.webkit.org-config/config.json: Removed deprecated builders.

2018-11-29  David Quesada  <david_quesada@apple.com>

        Add SPI to publish NSProgress on active downloads
        https://bugs.webkit.org/show_bug.cgi?id=192021
        rdar://problem/44405661

        Reviewed by Alex Christensen.

        Add API tests to exercise the progress-publishing functionality in a variety of scenarios.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm: Added.
        (+[DownloadProgressTestProtocol registerProtocolForTestRunner:]):
        (+[DownloadProgressTestProtocol unregisterProtocol]):
        (+[DownloadProgressTestProtocol canInitWithRequest:]):
        (+[DownloadProgressTestProtocol canonicalRequestForRequest:]):
        (+[DownloadProgressTestProtocol requestIsCacheEquivalent:toRequest:]):
        (-[DownloadProgressTestProtocol startLoading]):
        (-[DownloadProgressTestProtocol stopLoading]):
        (-[DownloadProgressTestRunner init]):
        (-[DownloadProgressTestRunner startLoadingWithProtocol:]):
        (-[DownloadProgressTestRunner tearDown]):
        (-[DownloadProgressTestRunner _didGetProgress:]):
        (-[DownloadProgressTestRunner _didLoseProgress]):
        (-[DownloadProgressTestRunner subscribeAndWaitForProgress]):
        (-[DownloadProgressTestRunner waitToLoseProgress]):
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):
        (-[DownloadProgressTestRunner publishProgress]):
        (-[DownloadProgressTestRunner receiveData:]):
        (-[DownloadProgressTestRunner finishDownloadTask]):
        (-[DownloadProgressTestRunner failDownloadTask]):
        (-[DownloadProgressTestRunner waitForDownloadDidCreateDestination]):
        (-[DownloadProgressTestRunner waitForDownloadFinished]):
        (-[DownloadProgressTestRunner waitForDownloadCanceled]):
        (-[DownloadProgressTestRunner waitForDownloadFailed]):
        (-[DownloadProgressTestRunner waitForUpdatedCompletedUnitCount]):
        (-[DownloadProgressTestRunner observeValueForKeyPath:ofObject:change:context:]):
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DownloadProgressTestRunner _downloadDidStart:]):
        (-[DownloadProgressTestRunner _download:didCreateDestination:]):
        (-[DownloadProgressTestRunner _downloadDidFinish:]):
        (-[DownloadProgressTestRunner _downloadDidCancel:]):
        (-[DownloadProgressTestRunner _download:didFailWithError:]):
        (-[DownloadProgressTestRunner _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (TEST):

2018-11-29  Alexey Proskuryakov  <ap@apple.com>

        Exception in bot watcher's dashboard if a hidden platform in no longer configured for display
        https://bugs.webkit.org/show_bug.cgi?id=185527

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (updateHiddenPlatforms):

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

        [LFC][BFC][Quirk] Body and html height stretching.
        https://bugs.webkit.org/show_bug.cgi?id=192154

        Reviewed by Antti Koivisto.

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

2018-11-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Unify device creation
        https://bugs.webkit.org/show_bug.cgi?id=192158
        <rdar://problem/46344757>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.setup_test_run): Use DEVICE_MANAGER to create devices based on the specified device class.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Add DEFAULT_DEVICE_CLASS.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Deleted.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort): Add DEFAULT_DEVICE_CLASS.
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort):
        (WatchDevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort._create_devices): Deleted.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_from_string): Test that DeviceTypes without hardware types can be constructed
        from strings.

2018-11-29  Jonathan Bedard  <jbedard@apple.com>

        EWS iOS-sim bots sometimes fails to shutdown simulator
        https://bugs.webkit.org/show_bug.cgi?id=191864

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice._shut_down): Increase time to wait for simulated device to
        shut down, ignore exit code indicating a device is already shut down.

2018-11-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Unify ios_version/watchos_version code
        https://bugs.webkit.org/show_bug.cgi?id=192153
        <rdar://problem/46343642>

        Reviewed by Lucas Forschler.

        Treating watchOS and iOS versions differently makes it harder to share code between the similar ports.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.device_version): Added.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Use device_version() instead of ios_version().
        (IOSPort.ios_version): Deleted.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.device_version): Renamed from ios_version().
        (IOSDevicePort.ios_version): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.device_version): Renamed from ios_version().
        (IOSSimulatorPort.default_child_processes.booted_ios_devices_filter): Use device_version() instead of ios_version().
        (IOSSimulatorPort._create_devices): Ditto.
        (IOSSimulatorPort.check_sys_deps): Ditto.
        (IOSSimulatorPort.ios_version): Deleted.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort.default_baseline_search_path): Use device_version() instead of watchos_version().
        (WatchPort.watchos_version): Deleted.
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.device_version): Renamed from watchos_version().
        (WatchDevicePort.watchos_version): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.device_version): Renamed from watchos_version().
        (WatchSimulatorPort.default_child_processes.filter_booted_watchos_devices): Use device_version() instead of watchos_version().
        (WatchSimulatorPort._create_devices): Ditto.
        (WatchSimulatorPort.check_sys_deps): Ditto.
        (WatchSimulatorPort.watchos_version): Deleted.

2018-11-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Dropping text selections from web content into editable elements crashes the web process
        https://bugs.webkit.org/show_bug.cgi?id=192113
        <rdar://problem/46323701>

        Reviewed by Ryosuke Niwa.

        Add a test to verify that, when dropping an item with both "com.apple.webarchive" and "public.utf8-plain-text"
        representations, the higher fidelity web archive data is used when handling the drop.

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:

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

        [ews-app] Fetch bugs from Bugzilla and submit to Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191947

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py: Added.

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API test after r238585
        https://bugs.webkit.org/show_bug.cgi?id=192022

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        On iOS, a safe browsing warning over a WKWebView with frame of {0, 0, 0, 0} has a size of {0, 0}, which is fine.
        The test was added to catch a bug on Mac platforms, so testing it only on Mac will catch any regression.

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

        [ews-app] Configure python logging
        https://bugs.webkit.org/show_bug.cgi?id=192005

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py: Configured logging.

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192031
        <rdar://problem/46286816>

        Reviewed by Alex Christensen.

        The Generate Derived Sources and Generate Unified Sources build phases
        in Xcode need to have their inputs and outputs specified. This
        specification will come in the form of .xcfilelist files that will be
        attached to these build phases. There is one .xcfilelist file that
        lists the input file and one that lists the output files. As part of
        this work, the various generate-{derived,unified}-sources scripts that
        are executed in these Generate build phases are modified to help in
        the creation of these .xcfilelist files. In particular, they can now
        be invoked with command-line parameters. These parameters are then
        used to alter the normal execution of these scripts, causing them to
        produce the .xcfilelist files as opposed to actually generating the
        files that are listed in those files.

        * DumpRenderTree/Scripts/generate-derived-sources.sh:
        * WebKitTestRunner/Scripts/generate-derived-sources.sh:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Revert print_all_generated_files work in r238008; tighten up target specifications
        https://bugs.webkit.org/show_bug.cgi?id=192025
        <rdar://problem/46284301>

        Reviewed by Alex Christensen.

        In r238008, I added a facility for DerivedSources.make makefiles to
        print out the list of files that they generate. This output was used
        in the generation of .xcfilelist files used to specify the output of
        the associated Generate Derived Sources build phases in Xcode. This
        approach worked, but it meant that people would need to follow a
        specific convention to keep this mechanism working.

        Instead of continuing this approach, I'm going to implement a new
        facility based on the output of `make` when passed the -d flag (which
        prints dependency information). This new mechanism is completely
        automatic and doesn't need maintainers to follow a convention. To that
        end, remove most of the work performed in r238008 that supports the
        print_all_generated_files target.

        At the same time, it's important for the sets of targets and their
        dependencies to be complete and correct. Therefore, also include
        changes to bring those up-to-date. As part of that, you'll see
        prevalent use of a particular technique. Here's an example:

            BYTECODE_FILES = \
                Bytecodes.h \
                BytecodeIndices.h \
                BytecodeStructs.h \
                InitBytecodes.asm \
            #
            BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))

            all : $(BYTECODE_FILES)

            $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
                ...

        These lines indicate a set of generated files (those specified in
        BYTECODE_FILES). These files are generated by the BytecodeList.rb
        tool. But, as opposed to the normal rule where a single foo.output is
        generated by foo.input plus some additional dependencies, this rule
        produces multiple output files from a tool whose connection to the
        output files is not immediately clear. A special approach is needed
        where a single rule produces multiple output files. The normal way to
        implement this is to use an .INTERMEDIATE target. However, we used
        this approach in the past and ran into a problem with it, addressing
        it with an alternate approach in r210507. The above example shows this
        approach. The .'s in the list of target files are replaced with %'s,
        and the result is used as the left side of the dependency rule.

        * DumpRenderTree/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.make:

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

        [ews-app] Add support to get list of Bugzilla patches needing review
        https://bugs.webkit.org/show_bug.cgi?id=191942

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla.get_list_of_patches_needing_reviews): Get list of patches needing review.
        (BugzillaBeautifulSoup.fetch_attachment_ids_from_review_queue): Copied from Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py
        (BugzillaBeautifulSoup._load_query): Ditto.
        (BugzillaBeautifulSoup._parse_attachment_ids_request_query): Ditto.

2018-11-28  Daniel Bates  <dabates@apple.com>

        [iOS] Page not defocused when Find-in-page becomes first responder
        https://bugs.webkit.org/show_bug.cgi?id=192084
        <rdar://problem/46146777>

        Reviewed by Tim Horton.

        Add tests for both Mac and iOS to ensure that when finding a string on the page
        that we do not start an input session if a match is found in an <input> and the
        WKWebView is not the first responder.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm: Added.
        (-[WKWebViewFindStringInputDelegate _webView:didStartInputSession:]):
        (-[WKWebViewFindStringFindDelegate findString]):
        (-[WKWebViewFindStringFindDelegate _webView:didCountMatches:forString:]):
        (-[WKWebViewFindStringFindDelegate _webView:didFindMatches:forString:withMatchIndex:]):
        (-[WKWebViewFindStringFindDelegate _webView:didFailToFindString:]):
        (returnNo):
        (returnYes):
        (viewIsFirstResponder):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView): Make the view the first responder before the
        window key. This matches the ordering used in PlatformWebView::focus(). No behavior change.

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

        [ews-app] Add BeautifulSoup
        https://bugs.webkit.org/show_bug.cgi?id=191994

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/thirdparty: Added.
        * BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py: Added.
        * BuildSlaveSupport/ews-app/ews/thirdparty/__init__.py: Added.

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

        [ews-app] Add support to download Patch from Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=191943

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py: Added.
        (Bugzilla.retrieve_attachment): Retreives the attachment from Bugzilla and saves to disk.
        (Bugzilla._fetch_attachment_json):
        (Bugzilla.file_path_for_patch):
        * BuildSlaveSupport/ews-app/ews/common/util.py: Added.
        (fetch_data_from_url): Method to fetch data from given url.
        * BuildSlaveSupport/ews-app/ews/config.py:

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

        [ews-app] Add methods to update Patch fields
        https://bugs.webkit.org/show_bug.cgi?id=191931

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.set_sent_to_buildbot):
        (Patch.set_bug_id):
        (Patch.set_obsolete):

2018-11-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Allow WebKit clients to specify a minimum effective width for layout.
        https://bugs.webkit.org/show_bug.cgi?id=191499
        <rdar://problem/45362678>

        Reviewed by Wenson Hsieh.

        Allow UIScriptController to set WKWebView's minimum effective width with a new `setMinimumEffectiveWidth` method.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setViewScale):
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

2018-11-28  Lucas Forschler  <lforschler@apple.com>

        Fix webkitbot hi command.
        https://bugs.webkit.org/show_bug.cgi?id=192080

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2018-11-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
        https://bugs.webkit.org/show_bug.cgi?id=192078

        Reviewed by Antti Koivisto.

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

2018-11-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for quirk container's collapsing top margin in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=192070

        Reviewed by Antti Koivisto.

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

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [WebRTC][GStreamer] Make sure to have the default microphone on the top of the list
        https://bugs.webkit.org/show_bug.cgi?id=192026

        Reviewed by Philippe Normand.

        Otherwise we might end up picking a useless one in some applications
        (not sure what those application do though).

        GStreamer patch proposed as https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/merge_requests/34/diffs

        * flatpak/org.webkit.CommonModules.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0014-pulse-Mark-default-devices-as-default.patch: Added.

2018-11-28  Tomas Popela  <tpopela@redhat.com>

        [GTK] Silence compilation warnings in glib unittests
        https://bugs.webkit.org/show_bug.cgi?id=192009

        Reviewed by Michael Catanzaro.

        Mark the destructor as virtual.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::~Test):

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
        https://bugs.webkit.org/show_bug.cgi?id=192055
        <rdar://problem/46288783>

        Reviewed by Saam Barati.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Make synchronous IPC introduced in r237267 asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=190757

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-27  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add watchOS ports
        https://bugs.webkit.org/show_bug.cgi?id=191974
        <rdar://problem/46251051>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/factory.py:
        (PortFactory): Add WatchDevice and WatchSimulator ports.
        * Scripts/webkitpy/port/watch.py: Added.
        (WatchPort): Base class for watchOS ports.
        * Scripts/webkitpy/port/watch_device.py: Added.
        (WatchDevicePort): Class for running layout tests on a watchOS device.
        * Scripts/webkitpy/port/watch_simulator.py: Added.
        (WatchSimulatorPort): Class for running layout tests on a watchOS simulator.
        * Scripts/webkitpy/port/watch_simulator_unittest.py: Added.
        (WatchSimulatorTest):
        * Scripts/webkitpy/port/watch_testcase.py: Added.
        (WatchTest):

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning text needs to be visible on High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=192022

        Reviewed by Tim Horton.

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

2018-11-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the watchOS engineering build

        Disable a newly added API test, since DDScannerResult is unavailable on watchOS.

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:

2018-11-27  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) crash under WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame()
        https://bugs.webkit.org/show_bug.cgi?id=191983
        <rdar://problem/46246863>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to communicate with Buildbot (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191935
        <rdar://problem/46262314>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.send_patch_to_buildbot):

2018-11-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] No way for clients to tell whether the content view is in the responder chain when the web view is
        https://bugs.webkit.org/show_bug.cgi?id=169212
        <rdar://problem/30899656>

        Reviewed by Tim Horton.

        Add an API test to exercise the behavior of `-_contentViewIsFirstResponder` when an embedded text input becomes
        and resigns first responder.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFirstResponderTests.mm: Added.
        (-[FirstResponderTestingView initWithFrame:]):
        (-[FirstResponderTestingView inputField]):
        (TestWebKitAPI::TEST):

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

        [CMake] Remove ENABLE_ACCESSIBILITY CMake variable
        https://bugs.webkit.org/show_bug.cgi?id=191831

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/CMakeLists.txt:

2018-11-26  Tim Horton  <timothy_horton@apple.com>

        Insert <attachment> elements under editable images to make their backing data accessible
        https://bugs.webkit.org/show_bug.cgi?id=191844
        <rdar://problem/30900149>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::attachmentInfo):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::attachmentInfo):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::attachmentInfo):
        Add a UIScriptController mechanism to retrieve information about
        a given attachment.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to communicate with Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191935

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/__init__.py: Added.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py: Added.

2018-11-26  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Race condition in ServerProcess tests
        https://bugs.webkit.org/show_bug.cgi?id=191989
        <rdar://problem/45536844>

        Reviewed by Lucas Forschler.

        Serializing these tests to prevent the race conditions.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.serial_test_basic):
        (TestServerProcess.serial_test_read_after_process_exits):
        (TestServerProcess.serial_test_process_crashing):
        (TestServerProcess.serial_test_process_crashing_no_data):
        (TestServerProcess.test_basic): Deleted.
        (TestServerProcess.test_read_after_process_exits): Deleted.
        (TestServerProcess.test_process_crashing): Deleted.
        (TestServerProcess.test_process_crashing_no_data): Deleted.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add field in Patch object to indicate if it has been sent to Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191929

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch): Added sent_to_buildbot field.
        (Patch.is_patch_sent_to_buildbot): Checks if the patch has been sent to Buildbot.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add a config file
        https://bugs.webkit.org/show_bug.cgi?id=191933

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py: Added.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add methods to save patch to database
        https://bugs.webkit.org/show_bug.cgi?id=191928

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch): Method to save the patch to database.
        (Patch.save_patches): Method to save multiple patches to database.
        (Patch.is_valid_patch_id): Checks if the patch id is valid.
        (Patch.is_existing_patch_id): Checks if the patch id already exists in database.

2018-11-26  Alex Christensen  <achristensen@webkit.org>

        Rename WKWebView._safeBrowsingWarningForTesting to _safeBrowsingWarning to use it for more than testing
        https://bugs.webkit.org/show_bug.cgi?id=191981

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):

2018-11-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r237738): Command Down Arrow doesn't scroll to the end of a page anymore
        https://bugs.webkit.org/show_bug.cgi?id=191967
        <rdar://problem/45976390>

        Reviewed by Tim Horton.

        Add more test infrastructure to dispatch key up events.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (createHIDKeyEvent): Renamed from createHIDKeyDownEvent() and modified to take a boolean as
        to whether to create an event for a key down or key up.
        (createHIDKeyDownEvent): Deleted; renamed to createHIDKeyEvent().
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::createUIPhysicalKeyboardEvent): Added. Convenience function to create a UIPhysicalKeyboardEvent.
        (WTR::UIScriptController::keyDown): Modified to dispatch a key up event in addition to dispatching
        a key down event.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set Foreign Keys in EWS Django app models
        https://bugs.webkit.org/show_bug.cgi?id=191790

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/builds.py: Set Foreign Key.
        * BuildSlaveSupport/ews-app/ews/models/steps.py: Ditto.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Do not store patch content in database
        https://bugs.webkit.org/show_bug.cgi?id=191788

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py: Removed content field.

2018-11-26  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Retry app installation on watchOS simulators (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191769
        <rdar://problem/46139850>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice): Increase retry attempts.

2018-11-26  Daniel Bates  <dabates@apple.com>

        Move testRunner.toggleCapsLock() to uiController
        https://bugs.webkit.org/show_bug.cgi?id=191972

        Reviewed by Tim Horton.

        Move testRunner.toggleCapsLock() to uiController as uiController is the preferred JavaScript
        object for UI test functions. Having this functionality be on uiController makes it an
        asynchronous function naturally and complements use of onkeydown, onkeyup listeners to know
        when the Caps Lock key event is dispatched. It also facilitates its use directly as part of
        scripts with other uiController functions invocations that are passed in a single invocation
        of testRunner.runUIScript().

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::toggleCapsLock):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::toggleCapsLock):
        Added stub functions that invoke the callback. We do not support toggling caps lock in Legacy
        WebKit at the moment. Legacy WebKit reads the caps lock key state directly from the OS. Modern
        WebKit caches the caps lock state in the WebProcess as a natural side effect of the fact that
        the UIProcess is the only process capable of querying the caps lock key state from the OS and
        hence the UIProcess must send over this state to the WebProcess.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: Add IDL for new function.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::toggleCapsLock): Added empty implementation for ports non-Cocoa ports.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::toggleCapsLock): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::toggleCapsLock): Deleted; moved to UIScriptController::toggleCapsLock().
        Removed logic to handle testRunner.toggleCapsLock().

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::toggleCapsLock): Add stub function that invokes the callback
        and a FIXME comment that explains that we will implement this function in <https://bugs.webkit.org/show_bug.cgi?id=191815>.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::toggleCapsLock): Moved the implementation from TestController::toggleCapsLock().

2018-11-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Reduce the use of WKSI library calls: CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=191777
        <rdar://problem/46140542>

        Reviewed by Zalan Bujtas.

        Update the Windows build of WebKit to refer to the SPI headers, rather than WebKitSystemInterface.
        Move a small amount of glue code from WKSI to WebCore, and remove any includes or link
        directives for WebKitSystemInterface.lib.

        * TestWebKitAPI/PlatformWin.cmake:

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use float box's margin box to adjust the line constraints.
        https://bugs.webkit.org/show_bug.cgi?id=191961

        Reviewed by Antti Koivisto.

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

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        Unreviewed test fix after r238467.

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

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

        Unreviewed, fix the internal iOS 12 build after r238471

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

2018-11-25  Tim Horton  <timothy_horton@apple.com>

        Make it possible to insert editable images with a gesture
        https://bugs.webkit.org/show_bug.cgi?id=191937

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        If the canvas already has a drawing, draw a new stroke on top of it
        instead of removing the existing stroke.

2018-11-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add WKWebView SPI to trigger and remove data detection
        https://bugs.webkit.org/show_bug.cgi?id=191918
        <rdar://problem/36185051>

        Reviewed by Tim Horton.

        Add an API test to exercise the new WebKit SPI.

        * TestWebKitAPI/DataDetectorsCoreSPI.h: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        (-[WKWebView synchronouslyDetectDataWithTypes:]):
        (-[WKWebView synchronouslyRemoveDataDetectedLinks]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        (-[TestWKWebView tagsInBody]): Deleted.
        (-[TestWKWebView expectElementTagsInOrder:]): Deleted.
        (-[TestWKWebView expectElementCount:tagName:]): Deleted.
        (-[TestWKWebView expectElementTag:toComeBefore:]): Deleted.

        Rename this from `-expectElementCount:tagName:` to `-expectElementCount:querySelector:`.

        * TestWebKitAPI/Tests/WebKitCocoa/data-detectors.html: Added.

        Add a new test page containing some content that can be data detected.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView tagsInBody]):
        (-[WKWebView expectElementTagsInOrder:]):
        (-[WKWebView expectElementCount:querySelector:]):
        (-[WKWebView expectElementTag:toComeBefore:]):

        Move some testing helper functions from WKAttachmentTests to a testing category on WKWebView. This allows us to
        use `-expectElementCount:querySelector:` in tests outside of WKAttachmentTests.

        (-[WKWebView objectByEvaluatingJavaScript:]):
        (-[WKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
        (-[WKWebView stringByEvaluatingJavaScript:]):

        Move some common helper functions from TestWKWebView to a testing category on WKWebView.

        (-[TestWKWebView objectByEvaluatingJavaScript:]): Deleted.
        (-[TestWKWebView objectByEvaluatingJavaScriptWithUserGesture:]): Deleted.
        (-[TestWKWebView stringByEvaluatingJavaScript:]): Deleted.

2018-11-23  Sam Weinig  <sam@webkit.org>

        Add raw pointer overloads to ListHashSet via SmartPtr specialized functions
        https://bugs.webkit.org/show_bug.cgi?id=191936

        Reviewed by Zalan Bujtas.

        Adds tests for raw pointer overloads in ListHashSet.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:

2018-11-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable drag and drop support for iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=191818
        <rdar://problem/43907454>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for variable height runs.
        https://bugs.webkit.org/show_bug.cgi?id=191925

        Reviewed by Antti Koivisto.

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

2018-11-23  Alberto Garcia  <berto@igalia.com>

        [GTK] [WPE] Tools/Platform{GTK,WPE}.cmake files missing from the tarballs
        https://bugs.webkit.org/show_bug.cgi?id=191923

        Add Tools/PlatformGTK.cmake and Tools/PlatformWPE.cmake to their
        respective tarballs.

        Reviewed by Carlos Garcia Campos.

        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:

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

        Regression(r238353) Load sometimes hangs when navigating back after a cross-site navigation
        https://bugs.webkit.org/show_bug.cgi?id=191914

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Offset formatting context root runs with horizontal margins.
        https://bugs.webkit.org/show_bug.cgi?id=191900

        Reviewed by Antti Koivisto.

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

2018-11-22  Philippe Normand  <pnormand@igalia.com>

        [GTK] Remove unmaintained bots
        https://bugs.webkit.org/show_bug.cgi?id=191467

        Reviewed by Alex Christensen.

        The Linux 32-bits and ARM build-slaves are no longer maintained
        and have been failing for months, so get rid of them.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2018-11-22  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Do not disable signals when running "usual" commands
        https://bugs.webkit.org/show_bug.cgi?id=190679

        Reviewed by Philippe Normand.

        Otherwise <ctr>c doesn't work while compiling. It is not the best fix
        as there are cases we want to let only children receive signals, but
        it is not clear how to determine when (when running gdb, we still
        disable those).

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

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

        [Cocoa] [WebKit2] Add support for replacing find-in-page text matches
        https://bugs.webkit.org/show_bug.cgi?id=191786
        <rdar://problem/45813871>

        Reviewed by Ryosuke Niwa.

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

        Fix a bug in MiniBrowser that prevents AppKit from displaying the "All" button in the find bar after checking
        the "Replace" option.

        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:

        Add an API test to exercise find-and-replace API using WKWebView.

        (replaceMatches):
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::findOptionsFromArray):
        (WTR::TestRunner::findString):
        (WTR::TestRunner::findStringMatchesInPage):
        (WTR::TestRunner::replaceFindMatchesAtIndices):

        Add TestRunner hooks to simulate find-in-page and replace.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Horizontal margins should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191894

        Reviewed by Antti Koivisto.

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

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Border should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191891

        Reviewed by Antti Koivisto.

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

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take nonBreakableStart/End into use.
        https://bugs.webkit.org/show_bug.cgi?id=191873

        Reviewed by Antti Koivisto.

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

2018-11-20  Jeff Miller  <jeffm@apple.com>

        Return nullptr immediately if the key doesn't exist in the HashMap.
        https://bugs.webkit.org/show_bug.cgi?id=191841

        Reviewed by Chris Dumez.
        
        Add a test that would crash prior to the fix for this bug.

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

2018-11-19  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable JIT in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=191822
        <rdar://problem/28119360>

        Reviewed by Geoffrey Garen.

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

2018-11-19  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for CertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=191647

        Reviewed by Alex Christensen.

        Added test for new WKCertificateInfo API.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp: Added.
        (TestWebKitAPI::Curl::makeCertificateInfo):
        (TestWebKitAPI::Curl::isSamePEM):
        (TestWebKitAPI::Curl::TEST):

2018-11-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal iOS debug build after r238380

        UICalloutBar should only be declared when the public (non-internal) SDK is used to build WebKit; otherwise, we
        end up with duplicate declarations of UICalloutBar.

        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-19  David Quesada  <david_quesada@apple.com>

        EXC_BAD_ACCESS when invoking a DownloadProxy's destination decision handler after the download has been canceled
        https://bugs.webkit.org/show_bug.cgi?id=191762
        rdar://problem/46151509

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
            Enable the Download API test on iOS, since the platform supports downloads. All the
            tests pass already, except for one which was written using AppKit-specific code:
        TEST(_WKDownload, RedirectedDownload):
            Use a more platform-agnostic approach to starting the download in this API test.
            Instead of manually triggering an NSMenu item to download a file from a link, the
            test will simulate a user-initiated click on the link, and the navigation delegate
            will direct the web view to start a download based on the link's navigation action.
            Additionally, remove the manual creation of a new NSWindow. TestWKWebView makes its
            own UI/NSWindow.
        TEST(_WKDownload, DownloadCanceledWhileDecidingDestination):
            Add an API test _WKDownload.DownloadCanceledWhileDecidingDestination to simulate the
            conditions that would trigger this crash - handling a download's -decideDestination…
            delegate call by canceling the download, waiting for the UI process to be notified
            that the download has been canceled, and calling the decision handler. This should
            not crash.
        (-[CancelDownloadWhileDecidingDestinationDelegate _downloadDidFinish:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _download:didFailWithError:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _downloadDidCancel:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
            Add a user-initated version of -objectByEvaluatingJavaScript:. This is needed in
            order to maintain the behavior of the RedirectedDownload test, which verifies the
            state of the _WKDownload.wasUserInitiated property.

2018-11-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS Debug] Assertion failure in NSComparisonResult UIContentSizeCategoryCompareToCategory()
        https://bugs.webkit.org/show_bug.cgi?id=190401
        <rdar://problem/45195285>

        Reviewed by Dean Jackson.

        Work around sporadic UIKit assertions when running API tests that may present a UICalloutBar. Currently, UIKit
        asks for the `UIApp`’s `-preferredContentSizeCategory` when showing or laying out the callout bar. However,
        TestWebKitAPI lacks a UIApp altogether, and forcing one to be initialized via `UIApplicationInstantiateSingleton`
        causes numerous other UIKit and WebKit assertions to be hit.

        In lieu of TestWebKitAPI becoming a real UI application (see https://webkit.org/b/175204), simply don't allow
        the callout bar to be initialized in TestWKWebView-based API tests. This encompasses all API tests which
        have some chance of causing the callout bar to be shown by making a ranged text selections during the test.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (suppressUICalloutBar):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238016)[GTK][TestWebKitAPI][Ninja] TestJSC can't compile "Bytecodes.h: No such file or directory"
        https://bugs.webkit.org/show_bug.cgi?id=191692

        Reviewed by Michael Catanzaro.

        r238016 added a new #include, and requires JSC's derived headers
        to be copied into the forwarding header directory.

        WEBKIT_MAKE_FORWARDING_HEADERS is using POST_BUILD event to copy
        derived headers to the forwarding header directory. This is done
        after linking JSC library.

        GTK port has TestJSC which has a dependency to JSC static library.
        And, this dependency is a link time dependency which means
        compiling source files of TestJSC starts before the POST_BUILD
        event of JSC. Thus, required header can't be found.

        Add an intermediate target between TestJSC and JavaScriptCore to
        ensure derived headers are copied into the forwarding header
        directory.

        * TestWebKitAPI/PlatformGTK.cmake: Added a new custom target pre-TestJSC.
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.

2018-11-19  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Solve some issues in the enumerateDevices code
        https://bugs.webkit.org/show_bug.cgi?id=191832

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback): Make all the Strings with HTML code static.
        (testWebsiteDataDeviceIdHashSalt): Change the webView settings in
        the test.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView): Remove the initialization of the
        webView settings, we now do it in the specific test.

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

        [PSON] Received an invalid message "WebPageProxy.DidPerformClientRedirect" from the web process
        https://bugs.webkit.org/show_bug.cgi?id=191828

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/client-side-redirect.html: Added.

2018-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove all usages of UIItemProvider, UIItemProviderReading, and related classes
        https://bugs.webkit.org/show_bug.cgi?id=191819

        Reviewed by Dan Bernstein.

        Replace UIItemProvider (and related classes) with NSItemProvider.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyPNG):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]):

        Replace usages of this deprecated method with `-registerDataRepresentationForTypeIdentifier:visibility:loadHandler:`.

        (checkEstimatedSize):
        (checkSuggestedNameAndEstimatedSize):
        (TestWebKitAPI::TEST):
        (-[UIItemProvider registerDataRepresentationForTypeIdentifier:withData:]): Deleted.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[MockDragDropSession canLoadObjectsOfClass:]):
        (-[MockDragDropSession canLoadObjectsOfClasses:]):
        (-[MockDropSession initWithProviders:location:window:allowMove:]):
        (-[MockDropSession canCreateItemsOfClass:]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        (-[DragAndDropSimulator _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-17  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_messageReceivers.contains(...) under ViewGestureController removeMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=191734
        <rdar://problem/46151497>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineFormattingState::addDetachingRule should accumulate rules.
        https://bugs.webkit.org/show_bug.cgi?id=191801

        Reviewed by Antti Koivisto.

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

2018-11-17  Jer Noble  <jer.noble@apple.com>

        Regression(r233865): Causes synchronous IPC in the middle of layout
        https://bugs.webkit.org/show_bug.cgi?id=188307
        <rdar://problem/42807306>

        Reviewed by Eric Carlson.

        Follow-up test fix for r238322:

        In ExitFullscreenOnEnterPiP.ElementFullScreen, explicitly make the video
        element in element fullscreen the "main content" by playing the video during
        a user gesture; only "main content" videos will cause fullscreen mode to exit
        when that element is taken into PiP.

        In FullscreenZoomInitialFrame.WebKit, the WebView is not visible, so the Page
        is considered hidden, and fullscreen is not allowed when the WebView is hidden.
        Make the WebView visible by ordering the test window on-screen.

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.html:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::runTest):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Tweak _showSafeBrowsingWarningWithTitle SPI
        https://bugs.webkit.org/show_bug.cgi?id=191799

        Reviewed by Wenson Hsieh.

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

2018-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r238294): TestWebKitAPI.WKNavigation.ProcessCrashDuringCallback failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=191783

        Reviewed by Chris Dumez.

        Allow either WKErrorWebContentProcessTerminated or WKErrorWebViewInvalidated since the test
        is closing WebView, thereby invalidating the view, which is racing with the process termination.

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

2018-11-16  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.DisableForInspector API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=191798

        Reviewed by Joseph Pecoraro.

        We support process swapping when Web Inspector is shown now so update the
        API test accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-16  Ryan Haddad  <ryanhaddad@apple.com>

        Update buildbot dashboard after Windows 7/10 updates
        https://bugs.webkit.org/show_bug.cgi?id=191219

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform td.logo::before):
        (table.queue-grid tr.platform.windows-10 td.logo::before):
        (table.queue-grid tr.platform.wincairo-windows-10 td.logo::before):
        (table.queue-grid tr.platform.windows-7 td.logo::before):
        (table.queue-grid tr.platform.wincairo-windows-10 img.logo):

2018-11-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) WebKit.GeolocationTransitionToHighAccuracy API test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=191789

        Reviewed by Alex Christensen.

        Relate the 2 test pages so they use the same process since WKContextSetMaximumNumberOfProcesses()
        SPI no longer works with PSON / Process prewarming.

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

2018-11-16  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Retry app installation on watchOS simulators
        https://bugs.webkit.org/show_bug.cgi?id=191769
        <rdar://problem/46139850>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Retry app installations.

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        Add DidFirstMeaningfulPaint milestone.
        https://bugs.webkit.org/show_bug.cgi?id=191754

        Reviewed by Simon Fraser.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone.cpp: Added.
        (TestWebKitAPI::didReachMilestone):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone_Bundle.cpp: Copied from Source/WebKit/UIProcess/API/C/WKPageRenderingProgressEvents.h.
        (TestWebKitAPI::FirstMeaningfulPaintMilestoneTest::FirstMeaningfulPaintMilestoneTest):
        (TestWebKitAPI::FirstMeaningfulPaintMilestoneTest::didCreatePage):

2018-11-16  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][WebKitTestRunner] Test contents window is displayed while testing.
        https://bugs.webkit.org/show_bug.cgi?id=191593

        Reviewed by Alex Christensen.

        Hide TestRunner window and taskbar button.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::windowSnapshotImage):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Add API to disable safe browsing checks
        https://bugs.webkit.org/show_bug.cgi?id=191610

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (resourceURL):
        (TEST):
        (safeBrowsingView):
        (simpleURL): Deleted.

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for out-of-flow positioned boxes
        https://bugs.webkit.org/show_bug.cgi?id=191726

        Reviewed by Antti Koivisto.

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

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

        WKPreferencesSetFontSmoothingLevel doesn't actually do anything
        https://bugs.webkit.org/show_bug.cgi?id=191708

        Reviewed by Simon Fraser.

        Delete the symbol because no one calls it and it doesn't do anything

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-11-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238244.

        Caused High Sierra test runs to fail early with 50 crashes and
        casued 25 API failures.

        Reverted changeset:

        "[css-logical] Implement flow-relative margin, padding and
        border shorthands"
        https://bugs.webkit.org/show_bug.cgi?id=188697
        https://trac.webkit.org/changeset/238244

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

        Increase EWS lock timeout to 3 hours
        https://bugs.webkit.org/show_bug.cgi?id=191705

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py: Increased EWS lock timeout to 3 hours.

2018-11-15  Chris Dumez  <cdumez@apple.com>

        IndexedDB.IndexedDBTempFileSize API test times out with process prewarming enabled
        https://bugs.webkit.org/show_bug.cgi?id=191671
        <rdar://problem/46086062>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-11-15  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        Allow tests to enable the CSSLogicalEnabled flag in WK1.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Allow CSS property definitions to have a 'runtime-flag' parameter which
        disables the property when the specified runtime flag is disabled.

2018-11-15  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r238212): WebKit.BackgroundColor* API test failures.
        https://bugs.webkit.org/show_bug.cgi?id=191697
        rdar://problem/46098570

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/mac/BackgroundColor.mm:
        (TestWebKitAPI::TEST): Updated for new default background color.

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

        webkitpy: Check for specific process instead of using data migrator (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191551
        <rdar://problem/45993156>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Use software_variant instead of software_version for watchOS.

2018-11-15  Daniel Bates  <dabates@apple.com>

        [iOS] Shift + Tab does not focus previous field
        https://bugs.webkit.org/show_bug.cgi?id=191596
        <rdar://problem/45892053>

        Reviewed by Wenson Hsieh.

        Add infrastructure to support testing a key down event with modifiers by creating
        and dispatching a UIEvent. This infrastructure replaces the previous mechanism in
        Tools/WebKitTestRunner/ios/HIDEventGenerator.mm to generate a IOHIDEvent for a
        keydown as it did not support creating an event with modifier key state that would
        be recognized by UIKit.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        Add function uiController.keyDown() that takes a character that represents a keyboard key
        and an array of modifier keys. The behavior of this function is analogous to eventSender.keyDown().
        Remove functions uiController.keyDownUsingHardwareKeyboard() and uiController.keyUpUsingHardwareKeyboard()
        as the former is replaced by uiController.keyDown() and the latter was never used.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::keyDown): Added.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (createHIDKeyDownEvent): Added.
        (-[HIDEventGenerator keyDown:completionBlock:]): Deleted.
        (-[HIDEventGenerator keyUp:completionBlock:]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength): Added.
        (WTR::parseModifier): Added.
        (WTR::parseModifierArray): Added.
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.

2018-11-15  Keith Rollin  <krollin@apple.com>

        Delete old .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191669
        <rdar://problem/46081994>

        Reviewed by Chris Dumez.

        .xcfilelist files were created and added to the Xcode project files in
        https://trac.webkit.org/changeset/238008/webkit. However, they caused
        build issues and they were removed from the Xcode projects in
        https://trac.webkit.org/changeset/238055/webkit. This check-in removes
        the files from the repository altogether. They'll ultimately be
        replaced with new files with names that indicate whether the
        associated files are inputs to the Run Script phase or are files
        created by the Run Script phase.

        * DumpRenderTree/DerivedSources.xcfilelist: Removed.
        * WebKitTestRunner/DerivedSources.xcfilelist: Removed.

2018-11-14  Zalan Butjas  <zalan@apple.com>

        [LFC][IFC] Add support for in-flow positioned inline boxes.
        https://bugs.webkit.org/show_bug.cgi?id=191672

        Reviewed by Antti Koivisto.

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

2018-11-14  Keith Rollin  <krollin@apple.com>

        Move scripts for Derived and Unified Sources to external files
        https://bugs.webkit.org/show_bug.cgi?id=191670
        <rdar://problem/46082278>

        Reviewed by Keith Miller.

        Move the scripts in the Generate Derived Sources and Generate Unified
        Sources Run Script phases from the Xcode projects to external shell
        script files. Then invoke those scripts from the Run Script phases.
        This refactoring is being performed to support later work that will
        invoke these scripts in other contexts.

        The scripts were maintained as-is when making the move. I did a little
        reformatting and added 'set -e' to the top of each file, but that's
        it.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/generate-derived-sources.sh: Added.
        * WebKitTestRunner/Scripts/generate-derived-sources.sh: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.DecidePolicyForNavigationActionForHyperlinkThatRedirects API fails when PSON is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191640

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (runDecidePolicyForNavigationActionForHyperlinkThatRedirects):
        (TEST):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238115): [iOS] TestWebKitAPI.ProcessSwap.NavigateToInvalidURL is failing
        https://bugs.webkit.org/show_bug.cgi?id=191660

        Reviewed by Ryosuke Niwa.

        The test tries to navigate to an invalid URL and makes sure that we do not process swap
        for such load. The test was inherently racing because it was doing:
        <body onload="setTimeout(() => alert('DONE'), 0); location.href = 'http://A=a%B=b'">

        Its load event handler tries to navigate to 'http://A=a%B=b' and sets a 0 timer to
        log an alert, which causes the API test to keep going and check that we did not swap
        process. The issue is that a 0 timer may not be sufficient to trigger the load, as
        the policy decision is asynchronous and relies on the UIProcess responding to it.

        To address the issue, the test now waits for the next policy decision, spins the
        run loop and then makes sure we did not swap process. It no longer relies on a message
        from the page.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsiteDataStoreCustomPaths API test is failing when enabling process prewarming
        https://bugs.webkit.org/show_bug.cgi?id=191638

        Reviewed by Alex Christensen.

        Add API test coverage.

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

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

        Add SPI to show a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=191604

        Reviewed by Andy Estes.

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

2018-11-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A few drag and drop tests are crashing after r238146
        https://bugs.webkit.org/show_bug.cgi?id=191617

        Reviewed by Dean Jackson.

        Augment these crashing tests to verify that selection commands are suppressed during drop over editable elements
        via more robust means. These tests currently hit an assertion when revealing the callout bar too early, because
        TestWebKitAPI is not a UI application (see <https://webkit.org/b/190401>).

        Instead of relying on this other bug, directly ask the text input whether it is suppressing selection commands
        during a drop, and remember the answer via DragAndDropSimulator.

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

        Add to the existing tests that started failing after r238146.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView textInputContentView]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WebKit2] Hook up some more editing actions (-pasteAndMatchStyle:, -makeTextWritingDirectionNatural:)
        https://bugs.webkit.org/show_bug.cgi?id=191605
        <rdar://problem/45813991>

        Reviewed by Dean Jackson.

        Adds two new API tests to exercise -_pasteAndMatchStyle: and -makeTextWritingDirectionNatural:.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView _synchronouslyExecuteEditCommand:argument:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:

        Pull `-_synchronouslyExecuteEditCommand:argument:` out of WKAttachmentTests and into shared code, in a new
        category on WKWebView declared in TestWKWebView. Also, fix an unrelated typo in a nearby category.

        (-[WKWebView _synchronouslyExecuteEditCommand:argument:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.ApplicationManifestBasic API test is failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191602

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        webkitpy: Refactor port code for devices
        https://bugs.webkit.org/show_bug.cgi?id=191568
        <rdar://problem/46005821>

        Reviewed by Alex Christensen.

        watchOS and iOS device ports share many characteristics in testing, mostly due
        to the fact that both are devices.

        * Scripts/webkitpy/port/device_port.py: Added.
        (DevicePort): Add base class that all simulated/physical device ports share.
        (DevicePort.__init__):
        (DevicePort.driver_cmd_line_for_logging): Moved from iOS port.
        (DevicePort._generate_all_test_configurations): Ditto.
        (DevicePort.child_processes): Ditto.
        (DevicePort.driver_name): Ditto.
        (DevicePort.target_host): Generalize worker access to attached devices and
        simulated devices based on the device manager.
        (DevicePort.devices): Return a list of all devices associated with this port.
        (DevicePort._create_devices):
        (DevicePort._build_driver_flags): Moved from iOSSimulatorPort/iOSDevicePort.
        (DevicePort._install): Moved from iOS port.
        (DevicePort.setup_test_run): Ditto.
        (DevicePort.clean_up_test_run): Ditto.
        (DevicePort.did_spawn_worker): Ditto.
        (DevicePort.setup_environ_for_server): Ditto.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSPort.driver_cmd_line_for_logging): Moved to DevicePort.
        (IOSPort.driver_name): Ditto.
        (IOSPort._generate_all_test_configurations): Ditto.
        (IOSPort.child_processes): Ditto.
        (IOSPort._testing_device): Ditto.
        (IOSPort.target_host): Ditto.
        (IOSPort._create_devices): Ditto.
        (IOSPort.setup_test_run): Ditto.
        (IOSPort.clean_up_test_run): Ditto.
        (IOSPort.did_spawn_worker): Ditto.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): IOSDevicePort uses a device manager from apple_additions.
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir): Use DevicePort.devices().
        (IOSDevicePort._get_crash_log): Ditto.
        (IOSDevicePort.ios_version): Ditto.
        (IOSDevicePort._create_devices): Ditto.
        (IOSDevicePort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSSimulatorPort._build_driver_flags): Moved to DevicePort.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_get_crash_log):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): IOSSimulatorPort uses the SimulatedDeviceManager.
        (IOSSimulatorPort._create_devices): Clean up logging statement.
        (IOSSimulatorPort.setup_environ_for_server): Some of environment set-up is shared
        across all devices.
        (IOSSimulatorPort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSSimulatorPort._build_driver_flags): Moved to DevicePort.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_32bit):
        (IOSSimulatorTest.test_64bit):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WKHTTPCookieStoreWithoutProcessPool API test is failing with process prewarming is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191624

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (runWKHTTPCookieStoreWithoutProcessPool):
        (TEST):

2018-11-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support CTAP HID authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188623
        <rdar://problem/43353777>

        Reviewed by Brent Fulgham and Chris Dumez.

        This patch adds support for the mock testing and entitlements to allow minibrowser to talk
        to hid devices.

        * MiniBrowser/MiniBrowser.entitlements:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-11-13  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit.GeolocationTransitionToLowAccuracy API crashes when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191616

        Reviewed by Chris Dumez.

        The crash was caused by WKView in autorelease pool invoking stopUpdatingCallback after
        GeolocationTransitionToLowAccuracyStateTracker in the stack had been destroyed,
        resulting in the use-after-free.

        Made the tests more robust by clearing geolocation provider before exiting each test
        since we can't really prevent WKView from entering an autorelease pool.

        Also made WebKit.GeolocationTransitionToLowAccuracy wait for the success callback
        instead of simply the end of the navigation so that the test would continue to work
        even if a web content process was created for the second web view (lowAccuracyWebView)

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::setupGeolocationProvider): Moved "*" to match the WebKit coding style guideline.
        (TestWebKitAPI::clearGeolocationProvider): Added.
        (TestWebKitAPI::runJavaScriptAlert): Added.
        (TestWebKitAPI::didFinishNavigation): Deleted.
        * TestWebKitAPI/Tests/WebKit/geolocationWatchPosition.html:

2018-11-13  Chris Dumez  <cdumez@apple.com>

        WKProcessPool.InitialWarmedProcessUsed API is failing with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=191618

        Reviewed by Ryosuke Niwa.

        Update API test to explicitly disable automatic process prewarning since it is testing
        manual prewarming.

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

2018-11-13  Chris Dumez  <cdumez@apple.com>

        Several Service Worker API tests are failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191619

        Reviewed by Youenn Fablet.

        Update tests to use _webProcessCountIgnoringPrewarmed instead of _webProcessCount so that they are
        not impacted by process prewarming.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [iOS] Do not show selection UI for editable elements with opacity near zero
        https://bugs.webkit.org/show_bug.cgi?id=191442
        <rdar://problem/45958625>

        Reviewed by Simon Fraser.

        Add a couple of new testing helpers to UIScriptController.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::textSelectionRangeRects const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::textSelectionRangeRects const):

        Rename `selectionRangeViewRects` to `textSelectionRangeRects`. This allows us to draw a distinction between
        `textSelectionRangeRects`/`textSelectionCaretRect`, which retrieve information about selection rects known
        to the text interaction assistant, and `selectionCaretViewRect`/`selectionRangeViewRects`, which retrieve the
        actual frames of the selection views used to draw overlaid selection UI. This difference is important in the
        new layout tests added in this patch, which only suppress caret rendering (i.e. selection views remain hidden).

        Also, drive-by fix a leaked `NSMutableArray`.

        (WTR::UIScriptController::selectionStartGrabberViewRect const):
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):

        Testing helpers to grab the frames of caret and selection views, in WKContentView's coordinate space. These
        rects are also clamped to WKContentView bounds.

2018-11-13  Daniel Bates  <dabates@apple.com>

        Consolidate WebKit UIKitSPI.h and UIKitTestSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=173341
        <rdar://problem/32752890>

        Reviewed by Simon Fraser.

        There is little value to making a distinction between forward declarations
        of UIKit SPI needed in the WebKit layer and just for testing. Moreover,
        the contents of these two headers can conflict with each other following
        r218275 as DumpRenderTree includes both headers. Instead we should remove
        UIKitTestSPI.h and have WebKitTestRunner include the WebKit variant, UIKitSPI.h.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * TestRunnerShared/spi/UIKitTestSPI.h: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

2018-11-13  Takashi Komori  <Takashi.Komori@sony.com>

        Remove WebKitTestRunnerLib's build warnings.
        https://bugs.webkit.org/show_bug.cgi?id=191580

        Reviewed by Fujii Hironori.

        Include cmakeconfig.h in precompiled header.

        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2018-11-12  Darshan Kadu  <darsh7807@gmail.com>

        Implement Cache API support for WPE/GTK
        https://bugs.webkit.org/show_bug.cgi?id=178316

        Reviewed by Michael Catanzaro.

        Called WKWebsiteDataStoreSetCacheStoragePerOriginQuota function to set the cache limit to 400 * 1200
        on all the platforms in TestController.cpp. Also, removed the setCacheStoragePerOriginQuota call from TestControllerCocoa.mm

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

2018-11-12  Christopher Reid  <chris.reid@sony.com>

        [Curl] Reject entire cookie if the domain fails a tailmatch.
        https://bugs.webkit.org/show_bug.cgi?id=191406

        Reviewed by Youenn Fablet.

        Added unittests for Curl cookie implementation.

        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        (TestWebKitAPI::Curl::CurlCookies::RejectTailmatchFailureDomain):

2018-11-12  Alex Christensen  <achristensen@webkit.org>

        [iOS] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=191441

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (checkTitleAndClick):
        (TEST):

2018-11-12  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API Test for Curl cookie backend.
        https://bugs.webkit.org/show_bug.cgi?id=191493

        Reviewed by Youenn Fablet.

        Add unit test to TestWebCore.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp: Added.

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        Add a test option to enable editable images.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::findEditableImageCanvas):
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        Add the ability to draw on a PKCanvasView that is a subview of the WKWebView,
        and also to retrieve the number of strokes currently on the PKCanvasView.
        Currently this just takes the first canvas; we might need to make it
        take an identifier or something in the future if we need tests with multiple
        canvases. The indirect testing mechanism is required because PKCanvasView
        can currently not actually paint its strokes in the Simulator.

2018-11-12  Ryan Haddad  <ryanhaddad@apple.com>

        [MediaStream] Screen capture should be an experimental feature on OSX only
        https://bugs.webkit.org/show_bug.cgi?id=191552

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm: Only run these tests on macOS.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-green.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-red.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mojave.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mojave@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite@2x.png:

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit Tools Xcode projects for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=191495

        Reviewed by Alexey Proskuryakov.

        * ContentExtensionTester/ContentExtensionTester.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * EditingHistory/EditingHistory.xcodeproj/project.pbxproj:
        * FontWithFeatures/FontWithFeatures.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * lldb/lldbWebKitTester/lldbWebKitTester.xcodeproj/project.pbxproj:
        These are less important because they're not localized, but since
        I made the style checker complain, it now complains any time anyone
        touches any of these projects... so upgrade them.

2018-11-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Check for specific process instead of using data migrator
        https://bugs.webkit.org/show_bug.cgi?id=191551
        <rdar://problem/45993156>

        Rubber-stamped by Aakash Jain.

        It's possible for the data migrator process to be stuck, but for a simulator to be
        usable. Use device-specific processes to detect when a device is usable.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._wait_until_device_is_usable):
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.initialize_devices): Explicitly wait until a device is usable
        since this implies that a device is booted.
        (SimulatedDeviceManager.swap): Ditto.
        (SimulatedDevice.is_usable): Check that a device is booted and that a device-specific
        process indicating the device is usable can be found.
        (SimulatedDeviceManager.wait_until_data_migration_is_done): Deleted.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py: Update simctl_json so that
        it triggers the logic in is_usable()

2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>

        Resurrect WebKitTestRunner for Windows port
        https://bugs.webkit.org/show_bug.cgi?id=189257

        Reviewed by Fujii Hironori.

        Implement WebKitTestRunner for WinCairo.

        * PlatformWin.cmake:
        * Scripts/build-webkittestrunner:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::rangeToStr):
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp: Added.
        (WTR::AccessibilityController::resetToConsistentState):
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::platformName):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp: Added.
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::isChecked const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild const):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::clearSelectedChildren const):
        (WTR::AccessibilityUIElement::accessibilityValue const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isVisible const):
        (WTR::AccessibilityUIElement::isOffScreen const):
        (WTR::AccessibilityUIElement::isCollapsed const):
        (WTR::AccessibilityUIElement::isIgnored const):
        (WTR::AccessibilityUIElement::isSingleLine const):
        (WTR::AccessibilityUIElement::isMultiLine const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::supportedActions const):
        (WTR::AccessibilityUIElement::pathDescription const):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
        (WTR::AccessibilityUIElement::classList const):
        (WTR::AccessibilityUIElement::characterAtOffset):
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        * WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::activateFonts):
        (WTR::installFakeHelvetica):
        (WTR::uninstallFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp: Added.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::inspectorTestStubURL):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::installFakeHelvetica):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/PlatformWin.cmake: Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::createTestURL):
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/win/EventSenderProxyWin.cpp: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::~EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::keyDown):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        (WTR::PlatformWebView::didInitializeClients):
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::addToWindow):
        (WTR::PlatformWebView::removeFromWindow):
        (WTR::PlatformWebView::setWindowIsKey):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        (WTR::generateCairoSurfaceFromBitmap):
        (WTR::PlatformWebView::windowSnapshotImage):
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        (WTR::PlatformWebView::setNavigationGesturesEnabled):
        (WTR::PlatformWebView::forceWindowFramesChanged):
        (WTR::PlatformWebView::drawsBackground const):
        (WTR::PlatformWebView::setDrawsBackground):
        * WebKitTestRunner/win/TestControllerWin.cpp: Added.
        (WTR::exceptionFilter):
        (WTR::runRunLoopUntil):
        (WTR::TestController::notifyDone):
        (WTR::TestController::setHidden):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformPreferences):
        (WTR::TestController::platformDestroy):
        (WTR::toWK):
        (WTR::TestController::platformInitializeContext):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::platformDidCommitLoadForFrame):
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):
        (WTR::TestController::runModal):
        (WTR::TestController::platformContext):
        (WTR::TestController::platformLibraryPathForTesting):
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
        * WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp: Added.
        * WebKitTestRunner/win/main.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (dllLauncherEntryPoint):

2018-11-12  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Introduce AbortableTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=190902

        Reviewed by Xabier Rodriguez-Calvar.

        Tests for AbortableTaskQueue are included.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::FancyResponse::FancyResponse):
        (TestWebKitAPI::FancyResponse::operator=):
        (TestWebKitAPI::DeterministicScheduler::DeterministicScheduler):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::ThreadContext):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::waitMyTurn):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::yieldToThread):

2018-11-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        run-bindings-tests is timing out in some WinCairo bots
        https://bugs.webkit.org/show_bug.cgi?id=191348

        Reviewed by Alex Christensen.

        BuildBot kills run-bindings-tests if it outputs nothing for 20
        minutes. run-bindings-tests runs very slowly in WinCairo Docker,
        and it takes more than 30 minutes to finish. And, Windows Python
        buffers the progress output.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.detect_changes): Call sys.stdout.flush() after the
        test case result is output.

2018-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement a new edit command to change the enclosing list type
        https://bugs.webkit.org/show_bug.cgi?id=191487
        <rdar://problem/45955922>

        Reviewed by Ryosuke Niwa.

        Add a new API test to verify that `-[WKWebView _changeListType:]` is hooked up to the corresponding editing
        command in WebCore. See the new layout test for a test that exercises more nuanced corner cases.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (-[TestWKWebView setPosition:offset:]):
        (-[TestWKWebView setBase:baseOffset:extent:extentOffset:]):
        (TestWebKitAPI::webViewForEditActionTestingWithPageNamed):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/editable-nested-lists.html: Added.

2018-11-11  Dan Bernstein  <mitz@apple.com>

        ProcessPoolConfiguration::copy() doesn’t copy m_customWebContentServiceBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=191514

        Reviewed by Geoffrey Garen.

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

2018-11-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        Update file name.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2018-11-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238065.

        Breaks internal builds.

        Reverted changeset:

        "Make it possible to edit images inline"
        https://bugs.webkit.org/show_bug.cgi?id=191352
        https://trac.webkit.org/changeset/238065

2018-11-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test /webkit/WebKitSettings/webkit-settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191221

        Unreviewed, fix a typo from the previous patch. After disabling the setting, we should test
        that it is disabled, but we're testing that it is enabled, because I failed to update this
        line.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2018-11-10  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        Add a test option to enable editable images.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::findEditableImageCanvas):
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        Add the ability to draw on a PKCanvasView that is a subview of the WKWebView,
        and also to retrieve the number of strokes currently on the PKCanvasView.
        Currently this just takes the first canvas; we might need to make it
        take an identifier or something in the future if we need tests with multiple
        canvases. The indirect testing mechanism is required because PKCanvasView
        can currently not actually paint its strokes in the Simulator.

2018-11-09  Chris Dumez  <cdumez@apple.com>

        Suspended page persists even after back/forward list item is gone
        https://bugs.webkit.org/show_bug.cgi?id=191488
        <rdar://problem/45953006>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Implement SPI on WKWebView to increase and decrease list levels
        https://bugs.webkit.org/show_bug.cgi?id=191471
        <rdar://problem/45952472>

        Reviewed by Tim Horton.

        Add an API test to ensure that list levels can be incremented and decremented via WKWebView SPI.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):

2018-11-09  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl][WebKit] Implement Proxy configuration API.
        https://bugs.webkit.org/show_bug.cgi?id=189053

        Reviewed by Youenn Fablet.

        Added Proxy Settings dialog to call newly added API.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/Common.cpp:
        (askProxySettings):
        (askCredential):
        (authDialogProc): Deleted.
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/DialogHelper.h: Added.
        (Dialog::run):
        (Dialog::doalogProc):
        (Dialog::handle):
        (Dialog::setup):
        (Dialog::update):
        (Dialog::validate):
        (Dialog::updateOkButton):
        (Dialog::command):
        (Dialog::ok):
        (Dialog::cancel):
        (Dialog::close):
        (Dialog::hDlg):
        (Dialog::item):
        (Dialog::setEnabled):
        (Dialog::setText):
        (Dialog::getText):
        (Dialog::getTextLength):
        (Dialog::RadioGroup::RadioGroup):
        (Dialog::RadioGroup::set):
        (Dialog::RadioGroup::get):
        (Dialog::radioGroup):
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc):
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createWKURL):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::updateProxySettings):
        (WebKitBrowserWindow::loadURL):
        (WebKitBrowserWindow::loadHTMLString):
        (WebKitBrowserWindow::openProxySettings):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::openProxySettings):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Introduce WKWebView SPI to insert nested ordered and unordered lists
        https://bugs.webkit.org/show_bug.cgi?id=191410
        <rdar://problem/45898610>

        Reviewed by Dean Jackson.

        Move WKWebViewEditActions from iOS to WebKitCocoa, and enable the relevant WKWebViewEditActions tests on macOS.
        Additionally, add new API tests to verify that `-_pasteAsQuotation:` and `-_insertNested(Un)OrderedList:` are
        hooked up to their respective editing commands.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm: Renamed from Tools/TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm.
        (-[TestWKWebView querySelectorExists:]):
        (-[TestWKWebView insertString:]):

        Add a helper method to insert a piece of text. This abstracts platform differences between iOS and macOS, by
        invoking the WKWebView directly on macOS and calling on the content view on iOS.

        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):

2018-11-09  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Refactoring and drive-by fixes
        https://bugs.webkit.org/show_bug.cgi?id=191421

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (inFlatpakSandbox): Flatpak now has a /.flatpak-info file when in
        the sandbox, so rely on this.
        * flatpak/flatpakutils.py:
        (expand_manifest): Pass explicit keywords to load_manifest() and
        remove unused local variable.
        (WebkitFlatpak.clean_args): Move hard-coded sdk/runtime infos to the manifest file.
        (WebkitFlatpak.run_in_sandbox): Add support for extra environment variables.
        (WebkitFlatpak.setup_dev_env): Stop build at final app. Refactor
        build_type handling a bit.
        * flatpak/org.webkit.CommonModules.yaml: Added.
        * flatpak/org.webkit.WPE.yaml: wpebackend upstream was renamed to libwpe.
        * flatpak/org.webkit.WebKit.yaml: Move common dependencies
        declaration to CommonModules, so it can be reused later when we
        add support for building extra libraries depending on WPE.

2018-11-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

onal supported image formats
        https://bugs.webkit.org/show_bug.cgi?id=190454

        Reviewed by Simon Fraser.

        Test opening a TGA image in WebView which is not allowed by default. The
        TGA format will be allowed through WKWebViewConfiguration.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/100x100-red.tga: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/400x400-green.png: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalSupportedImageTypes.mm: Added.
        (runTest):
        (TEST):

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a proper build fix for r237983

        Don't include header PublicKeyCredential.h in CtapResponseTest.cpp.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/CtapRequestTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/CtapResponseTest.cpp.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):

2018-11-08  Keith Rollin  <krollin@apple.com>

        Create .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191324
        <rdar://problem/45852819>

        Reviewed by Alex Christensen.

        As part of preparing for enabling XCBuild, create and use .xcfilelist
        files. These files are using during Run Script build phases in an
        Xcode project. If a Run Script build phase produces new files that are
        used later as inputs to subsequent build phases, XCBuild needs to know
        about these files. These files can be either specified in an "output
        files" section of the Run Script phase editor, or in .xcfilelist files
        that are associated with the Run Script build phase.

        This patch takes the second approach. It consists of three sets of changes:

        - Modify the DerivedSources.make files to have a
          'print_all_generated_files" target that produces a list of the files
          they create.

        - Create a shell script that produces .xcfilelist files from the
          output of the previous step, as well as for the files created in the
          Generate Unified Sources build steps.

        - Add the new .xcfilelist files to the associated projects.

        Note that, with these changes, the Xcode workspace and projects can no
        longer be fully loaded into Xcode 9. Xcode will attempt to load the
        projects that have .xcfilelist files associated with them, but will
        fail and display a placeholder for those projects instead. It's
        expected that all developers are using Xcode 10 by now and that not
        being able to load into Xcode 9 is not a practical issue. Keep in mind
        that this is strictly an IDE issue, and that the projects can still be
        built with `xcodebuild`.

        Also note that the shell script that creates the .xcfilelist files can
        also be used to verify that the set of files that's currently checked
        in is up-to-date. This checking can be used as part of a check-in hook
        or part of check-webkit-style to sooner catch cases where the
        .xcfilelist files need to be regenerated.

        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/DerivedSources.xcfilelist: Added.
        * Scripts/generate-xcfilelists: Added.
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.xcfilelist: Added.

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a quick build fix for r237983

        Temporarily make CtapRequestTest.cpp/CtapResponseTest.cpp to mac only to avoid iOS build failures.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
        * TestWebKitAPI/Tests/WebCore/mac/CtapRequestTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/mac/CtapResponseTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):

2018-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        Fix steps_unittest.py failures related to recent Win10/Win7 changes
        https://bugs.webkit.org/show_bug.cgi?id=191290

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update expected results.

2018-11-08  Dean Jackson  <dino@apple.com>

        Add a String literal that returns a String
        https://bugs.webkit.org/show_bug.cgi?id=191425
        <rdar://problem/45914556>

        Reviewed by Sam Weinig.

        Test _str.

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

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

        webkitpy: Generalize trailing SDK specifier (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Rubber-stamped by Aakash Jain.

        Re-landing this change, configuration issues have been resolved.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Use normalized SDK.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Use normalized SDK.
        (IOSSimulatorPort._build_driver_flags): Use platform SDK in build driver flags.

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP device request/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=190784
        <rdar://problem/45460333>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: Added.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h: Added.

2018-11-07  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add support to BigInt into ValueAdd
        https://bugs.webkit.org/show_bug.cgi?id=186177

        Reviewed by Keith Miller.

        * Scripts/run-jsc-benchmarks:

2018-11-07  Sihui Liu  <sihui_liu@apple.com>

        RELEASE_ASSERT(!m_hardClosedForUserDelete) fails in WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer
        https://bugs.webkit.org/show_bug.cgi?id=191326
        <rdar://problem/45769269>

        Reviewed by Geoffrey Garen.

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

2018-11-07  Daniel Bates  <dabates@apple.com>

        Override +[UIKeyboard isInHardwareKeyboardMode] in WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=190141

        Reviewed by Darin Adler.

        Override +[UIKeyboard isInHardwareKeyboardMode] to always return NO so as to make test
        runs deterministic regardless of whether a hardware keyboard is attached.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (overrideIsInHardwareKeyboardMode): Added.
        (prepareConsistentTestingEnvironment):
        * TestRunnerShared/spi/UIKitTestSPI.h: Forward declare SPI.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overrideIsInHardwareKeyboardMode): Added.
        (WTR::TestController::platformInitialize):

2018-11-07  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r237913.

        Breaks running tests on Mac without iOS SDK installed

        Reverted changeset:

        "webkitpy: Generalize trailing SDK specifier (Part 2)"
        https://bugs.webkit.org/show_bug.cgi?id=191275
        https://trac.webkit.org/changeset/237913

2018-11-07  Zamiul Haque  <zhaque@apple.com>

        Force a gregorian calendar to show for credit card expiration date inputs
        (autocomplete='cc-exp'*) regardless of default system settings.
        https://bugs.webkit.org/show_bug.cgi?id=191096
        rdar://problem/42640256

        Reviewed by Tim Horton.

        Implemented simulateForeignDefaultCalendar and calendarType to be used
        for changing the default calendar returned by the system (ie. [NSCalendar
        currentCalendar]) and getting the calendar type identifier of a presented date
        picker.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingDataListSuggestions const):
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::setDefaultCalendarType):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::setDefaultCalendarType):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::calendarType const): Deleted.
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::swizzledCalendar):
        (WTR::TestController::getOverriddenCalendarIdentifier const):
        (WTR::TestController::setDefaultCalendarType):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::calendarType const): Deleted.

2018-11-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Boot a single worker for custom devices
        https://bugs.webkit.org/show_bug.cgi?id=191312
        <rdar://problem/45848717>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Custom devices only run a hand-full of tests. Booting multiple
        simulators is expensive and unneeded for these tests.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort. child_processes): No reason to memoize this call, and it prevents
        overriding the number of child processes when booting custom devices.

2018-11-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Generalize trailing SDK specifier (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Use normalized SDK.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Use normalized SDK.
        (IOSSimulatorPort._build_driver_flags): Use platform SDK in build driver flags.

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Properly disable WEBGPU on all non-Metal platforms for now.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [ews-app] Add URL configuration for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191132

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews-app/urls.py: Added entry for ews.urls.
        * BuildSlaveSupport/ews-app/ews/urls.py: Added.

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Make mDNS ICE Candidate an experimental flag again
        https://bugs.webkit.org/show_bug.cgi?id=191262

        Reviewed by Dean Jackson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled):
        (WTR::TestRunner::setMDNSICECandidatesEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        [ews-app] Add views for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191131

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/index.py: Added.
        * BuildSlaveSupport/ews-app/ews/views/patch.py:
        * BuildSlaveSupport/ews-app/ews/views/results.py: Added.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added.

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

        [ews-app] Add models for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191123

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/__init__.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermappings.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/builds.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        * BuildSlaveSupport/ews-app/ews/models/steps.py: Added.

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

        [ews-app] Fix Invalid HTTP_HOST header
        https://bugs.webkit.org/show_bug.cgi?id=191325

        Reviewed by Lucas Forschler.

        Changing ALLOWED_HOSTS to * as the landing page should be publicly accessible.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

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

        [ews-app] Rename EWS_app to ews-app - part 2
        https://bugs.webkit.org/show_bug.cgi?id=191317

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/EWS_app: Removed.
        * BuildSlaveSupport/ews-app/ews-app: Moved from BuildSlaveSupport/ews-app/EWS_app.
        * BuildSlaveSupport/ews-app/ews-app/settings.py:
        * BuildSlaveSupport/ews-app/ews-app/urls.py:
        * BuildSlaveSupport/ews-app/ews-app/wsgi.py:
        * BuildSlaveSupport/ews-app/manage.py:

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

        [ews-app] Rename EWS_app to ews-app - part 1
        https://bugs.webkit.org/show_bug.cgi?id=191317

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/EWS_app: Removed.
        * BuildSlaveSupport/ews-app: Moved from BuildSlaveSupport/EWS_app.

2018-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        Previously, it was impossible for WebKitTestRunner to draw spelling dots. This patch adds support for a header
        at the top of test files, of the form <!-- webkit-test-runner [ spellCheckingDots=true ] --> which will cause
        dots to be drawn.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2018-11-06  Don Olmstead  <don.olmstead@sony.com>

        Feature flags not present for Visual Studio when using build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=191288

        Reviewed by Fujii Hironori.

        Passes feature flags to Visual studio builds within build-webkit.
        Removes cmakeBasedPortArguments as it is no longer in use.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortArguments): Deleted.

2018-11-06  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r230523): Caps lock indicator not shown in password field
        https://bugs.webkit.org/show_bug.cgi?id=190056

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::toggleCapsLock):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::toggleCapsLock):

2018-11-06  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: WAL file keeps growing
        https://bugs.webkit.org/show_bug.cgi?id=191294
        <rdar://problem/41333493>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm: Added.
        (-[IndexedDBFileSizeMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2018-11-06  Alex Christensen  <achristensen@webkit.org>

        Fix tests after r237863
        https://bugs.webkit.org/show_bug.cgi?id=191315

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        With the timing change of r237863, the WKWebView progressed further than before when loading main.html so it completed before main2.html.
        This test was meant to test that main2.html does eventually load, and it doesn't matter if main.html loads before it.  I updated the test
        to verify that main2.html eventually loads, making this test less timing dependent.

2018-11-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237834.

        Tests for this change crash on iOS Simulator

        Reverted changeset:

        "Spelling dots are drawn in the wrong place"
        https://bugs.webkit.org/show_bug.cgi?id=190764
        https://trac.webkit.org/changeset/237834

2018-11-05  Alex Christensen  <achristensen@webkit.org>

        [Mac] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188871

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webView:didCommitNavigation:]):
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:]):
        (-[TestLookupContext lookUpURL:completionHandler:]):
        (simpleURL):
        (safeBrowsingView):
        (TEST):
        (-[SafeBrowsingNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:knownToBeUnsafe:]): Deleted.
        (-[TestServiceLookupResult isKnownToBeUnsafe]): Deleted.
        * TestWebKitAPI/Utilities.h:

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

        webkitpy: Generalize trailing SDK specifier (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.available_sdks): List all installed SDKs with version numbers stripped out.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo):
        (TestPlatformInfo.test_available_sdks):

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        Previously, it was impossible for WebKitTestRunner to draw spelling dots. This patch adds support for a header
        at the top of test files, of the form <!-- webkit-test-runner [ spellCheckingDots=true ] --> which will cause
        dots to be drawn.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

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

        Use same limit for page cache and suspended pages
        https://bugs.webkit.org/show_bug.cgi?id=191266

        Reviewed by Geoffrey Garen.

        Update API tests accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-05  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [style] Exclude style check for auto generated files.
        https://bugs.webkit.org/show_bug.cgi?id=191118

        Reviewed by Eric Carlson.

        Some files checked in to the repository are generated by other tools. In this patch,
        "MiniBrowserLibResource.h" is the file generated and managed by resource editor of
        VisualStudio.

        There's no need to check these files because it's not practical to fix the style errors
        or it's hard to maintain those fixes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (is_generated_file):
        (CppChecker.check):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Build libx264 as it is the h264 encoder we support in WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=190680

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WebKit.yaml:

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

        [lldb-webkit] Fix formatting nits in Document and Frame summary strings
        https://bugs.webkit.org/show_bug.cgi?id=191094

        Reviewed by Andy Estes.

        Format boolean as 1/0 when printing Frame summary to be consistent with the formatting of
        booleans in other summary strings, substitute "inMainFrame" for "isMainFrame" in the printed
        Document summary and add closing brace '}' to both Frame and Document summary strings to make
        them look pretty.

        * lldb/lldb_webkit.py:
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):

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

        [iOS] Allow WKWebView clients to customize bar button item groups in the accessory view when editing
        https://bugs.webkit.org/show_bug.cgi?id=191240
        <rdar://problem/44872806>

        Reviewed by Tim Horton.

        Add new API tests to verify that setting leading and trailing bar button groups on WKWebView sets the first
        responder's (i.e. WKContentView's) leading and trailing bar button groups, and that this can also be achieved by
        overriding `-[WKWebView inputAssistantItem]`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[InputAssistantItemTestingWebView fakeLeadingBarButtonItemAction]):
        (-[InputAssistantItemTestingWebView fakeTrailingBarButtonItemAction]):
        (+[InputAssistantItemTestingWebView barButtonIcon]):
        (+[InputAssistantItemTestingWebView leadingItemsForWebView:]):
        (+[InputAssistantItemTestingWebView trailingItemsForWebView:]):
        (-[InputAssistantItemTestingWebView inputAssistantItem]):
        (TestWebKitAPI::TEST):

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

        [iOS] Changing view scale sometimes does not zoom the page to the new initial scale when the page is zoomed in when ignoring meta viewport
        https://bugs.webkit.org/show_bug.cgi?id=191226
        <rdar://problem/45781765>

        Reviewed by Tim Horton.

        Add a missing check for `shouldIgnoreMetaViewport` when comparing TestOptions, to ensure that "ignore meta
        viewport" state doesn't unexpectedly persist after running a layout test that ignores meta viewport.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237784 and r237788.
        https://bugs.webkit.org/show_bug.cgi?id=191270

        Caused mediastream layout test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237784

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237788

2018-11-05  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=191268
        Remove unused bots.

        rubber-stamped by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test runner fails to respect default build type
        https://bugs.webkit.org/show_bug.cgi?id=190247

        Reviewed by Carlos Garcia Campos.

        Problem is it's looking for a release build, even though I've run set-webkit-configuration
        --debug. It should look for a debug build unless I explicitly pass --release.

        * glib/api_test_runner.py:
        (TestRunner.__init__):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add webrtcencoder bin to cleanup and refactor the way we set encoders
        https://bugs.webkit.org/show_bug.cgi?id=190674

        Reviewed by Philippe Normand.

        webrtcencoder is a simple GstBin with a set of well known GStreamer encoders which
        it can use to implement encoding for different formats exposing a trimmed down unified API.

        It also adds proper handling of H264 profiles.

        The added files follow GStreamer coding style as we aim at upstreaming the element
        in the future.

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py:

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test /webkit/WebKitSettings/webkit-settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191221

        Reviewed by Carlos Garcia Campos.

        This test ensures that MSE is disabled by default, but we now enable it by default, so
        reverse the semantics of the test.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r237031): [GTK] Test /webkit/WebKitWebView/settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191225

        Reviewed by Alejandro G. Castro.

        Fix a memory leak causing this test to fail.

        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):

2018-11-04  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Support WPE in the run-web-platform-tests script
        https://bugs.webkit.org/show_bug.cgi?id=191183

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/w3c/wpt_runner.py:
        (parse_args): Support `--wpe` as an argument that specifies WPE as the
        target port. Additionally, the `--display-server` flag now accepts
        `headless` as a valid value, enabling the WPE WebDriver to run in
        headless mode.

2018-11-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use C++14, not C++17
        https://bugs.webkit.org/show_bug.cgi?id=191101

        Reviewed by Alex Christensen.

        std::basic_string::data() returns a read-only const buffer in
        C++14.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString): Use std::vector instead of std::wstring.
        (createUTF8String): Use std::vector instead of std::string.

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

        [Cocoa] Fold common UIScriptController functionality on macOS and iOS into UIScriptControllerCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=191231

        Reviewed by Simon Fraser.

        Moves some UIScriptController method implementations specific to iOS and macOS into UIScriptControllerCocoa, so
        it can be shared between iOS-family and macOS platforms. See below for more details.

        No change in behavior.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::overridePreference):

        Add a method stub for DumpRenderTree.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):

        Unify these method implementations.

        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):

        Move the macOS implementation to UIScriptControllerCocoa. On iOS, this method currently only adds the web view
        to the window, and does not attempt to invoke the given completion block; additionally, invoking the completion
        block after a presentation update (as done on macOS) causes pageoverlay/overlay-remove-reinsert-view.html to
        begin failing consistently. This patch does not attempt to change behavior, but adds a FIXME describing this.

        (WTR::UIScriptController::overridePreference):
        (WTR::UIScriptController::findString):
        (WTR::UIScriptController::contentsOfUserInterfaceItem const):

        Move these from UIScriptControllerMac to UIScriptControllerCocoa, so that it is now implemented on iOS as well.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask): Deleted.
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.
        (WTR::UIScriptController::contentsOfUserInterfaceItem const): Deleted.
        (WTR::UIScriptController::findString): Deleted.
        (WTR::UIScriptController::removeViewFromWindow): Deleted.
        (WTR::UIScriptController::addViewToWindow): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAsyncTask): Deleted.
        (WTR::UIScriptController::contentsOfUserInterfaceItem const): Deleted.
        (WTR::UIScriptController::overridePreference): Deleted.
        (WTR::UIScriptController::findString): Deleted.
        (WTR::UIScriptController::removeViewFromWindow): Deleted.
        (WTR::UIScriptController::addViewToWindow): Deleted.
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.

2018-11-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (-[GetDisplayMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (TestWebKitAPI::GetDisplayMediaTest::promptForCapture):
        (TestWebKitAPI::TEST_F):

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for percentage height in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=191232

        Reviewed by Antti Koivisto.

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

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BCF] Add support for block level non-replaced inflow height percentage
        https://bugs.webkit.org/show_bug.cgi?id=191229

        Reviewed by Antti Koivisto.

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

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Resolve percentage height values.
        https://bugs.webkit.org/show_bug.cgi?id=191224

        Reviewed by Antti Koivisto.

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

2018-11-03  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

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

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r237761.

        Makes most API tests timeout and WK2 tests crash

        Reverted changeset:

        "Mac production builds should sign the network process xpc
        service with entitlements"
        https://bugs.webkit.org/show_bug.cgi?id=191209
        https://trac.webkit.org/changeset/237761

2018-11-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed API test gardening

        * TestWebKitAPI/glib/TestExpectations.json:

2018-11-02  Justin Michaud  <justin_michaud@apple.com>

        Add new global object and preliminary Worklets support for CSS painting api
        https://bugs.webkit.org/show_bug.cgi?id=190979

        Reviewed by Chris Dumez.

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

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

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

2018-11-02  Lucas Forschler  <lforschler@apple.com>

        Add Windows 10 archive bots
        https://bugs.webkit.org/show_bug.cgi?id=190964
        
        This Change updates the Apple Windows Buildbot configuration.
        - Add Windows 10 specific builders and testers for release and debug.
        - Refactor Windows -> Windows 7.
        - Remove Windows 7 Debug.

        Reviewed by Aakash Jain.

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

2018-11-02  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Enable GST_DEBUG_NO_COLOR environment variable pass-through

        Rubber-stamped by Michael Catanzaro.

        This variable is useful to get rid of shell color escapes in tests stderr files.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):

2018-11-02  Aakash Jain  <aakash_jain@apple.com>

        Add Basic Django web app for OpenSource EWS
        https://bugs.webkit.org/show_bug.cgi?id=191091

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/EWS_app/manage.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/__init__.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/settings.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/urls.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/wsgi.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/admin.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/apps.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/migrations/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/tests.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/models/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/models/patch.py: Added.
        * BuildSlaveSupport/EWS_app/ews/views/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/views/patch.py: Added.

2018-11-02  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit should dispatch DOM events when a modifier key is pressed
        https://bugs.webkit.org/show_bug.cgi?id=190487

        Reviewed by Tim Horton.

        Update the code for renamed enumerations. For WebKitTestRunner, removed comment that does not
        match my observations when using the simulator to simulate iOS 12 and add support for testing
        right-hand side modifiers.

        * DumpRenderTree/mac/EventSendingController.mm:
        (modifierFlags):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        (-[EventSendingController setTouchModifier:value:]):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

2018-11-02  Chris Dumez  <cdumez@apple.com>

        [PSON] Reuse SuspendedPages' process when possible, for performance
        https://bugs.webkit.org/show_bug.cgi?id=191166

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for intrinsic width calculation
        https://bugs.webkit.org/show_bug.cgi?id=191144

        Reviewed by Antti Koivisto.

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

2018-11-01  Philippe Normand  <pnormand@igalia.com>

        [Apache] Self-signed SSL certificate RSA key is considered too weak
        https://bugs.webkit.org/show_bug.cgi?id=191156

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/system/pemfile.py:

2018-11-02  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r237678.

        * wpe/jhbuild.modules: The patch element apparently has to be a child
        of the branch in order for Jhbuild to properly detect and apply the
        patch file.

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

        build-jsc --wincairo should update WinCairo libraries
        https://bugs.webkit.org/show_bug.cgi?id=191170

        Reviewed by Fujii Hironori.

        * Scripts/build-jsc:

2018-11-01  John Wilander  <wilander@apple.com>

        In WebCore::ResourceLoadObserver, use document.sessionID().isEphemeral() when possible and check for page existence when not
        https://bugs.webkit.org/show_bug.cgi?id=191119
        <rdar://problem/44176965>

        Reviewed by Chris Dumez.

        This is an API test for a WebKitLegacy WebView that is first closed and then
        JavaScript is handed a keyboard event.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/ClosingWebView.mm: Added.
        (-[ClosingWebViewThenSendingItAKeyDownEventLoadDelegate webView:didFinishLoadForFrame:]):
        (-[KeyboardEventListener handleEvent:]):
        (TestWebKitAPI::TEST):

2018-11-01  Sihui Liu  <sihui_liu@apple.com>

        Add a storage limit for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=190598
        <rdar://problem/44654715>

        Reviewed by Chris Dumez.

        Add API for testing.

        * DumpRenderTree/TestRunner.cpp:
        (setIDBPerOriginQuotaCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setIDBPerOriginQuota):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setIDBPerOriginQuota):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-11-01  Chris Dumez  <cdumez@apple.com>

        [PSON] WebPageProxy::receivedNavigationPolicyDecision() should not schedule the new load asynchronously when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=191076

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate init]):
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-11-01  Adrian Perez de Castro  <aperez@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147
        <rdar://problem/45726710>

        Unreviewed build fix.

        This adds the missing compilation guards in the WPE MiniBrowser.

        * MiniBrowser/wpe/main.cpp:
        (main): Condition GST includes and calls.

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for inline-block elements.
        https://bugs.webkit.org/show_bug.cgi?id=191143

        Reviewed by Antti Koivisto.

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

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Add missing libsoup patch to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=191149

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Added.

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/main.c:
        (main): Condition GST includes and calls

2018-10-31  Justin Michaud  <justin_michaud@apple.com>

        Add Justin Michaud to the list of WebKit Committers
        https://bugs.webkit.org/show_bug.cgi?id=191142

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

2018-10-31  Guillaume Emont  <guijemont@igalia.com>

        Don't run JIT tests on 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=191074

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:

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

        [Cocoa] Attachment dropped from one web view to another is missing its file wrapper
        https://bugs.webkit.org/show_bug.cgi?id=190530
        <rdar://problem/45232149>

        Reviewed by Tim Horton.

        Add a test to verify that copying different types of attachments and pasting in a new web view inserts
        attachments in the second web view that are backed by _WKAttachment objects, whose NSFileWrappers hold data that
        is equivalent to the original file wrappers used to insert attachments in the first web view.

        Existing API tests verify that when copying and pasting within a single web view, the pasted attachment element
        is still backed by the same NSFileWrapper instance.

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

2018-10-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove obsolete code for Visual Studio Express in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=190949

        Reviewed by Alex Christensen.

        Visual Studio 2017 Community is the alternative.

        * Scripts/webkitdirs.pm: Remove $willUseVCExpressWhenBuilding variable.
        (setupCygwinEnv): Remove obsolete code for Visual Studio Express.
        (buildVisualStudioProject): Ditto.
        (dieIfWindowsPlatformSDKNotInstalled): Deleted.
        (usingVisualStudioExpress): Deleted.

2018-10-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Direct2D] Support building DumpRenderTree for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=191093
        <rdar://problem/45685706>

        Unreviewed build fix.

        error C2065: 'renderTarget': undeclared identifier

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Restored the previous implementation.

2018-10-30  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=191072

        Reviewed by Brent Fulgham.

        Add platform scripts for building the PlayStation port.
        perl Tools/Scripts/build-webkit --playstation

        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineConfigurationProductDir):
        (isPlayStation): Added.
        (getMSBuildPlatformArgument): Added.
        (buildVisualStudioProject):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        * TestWebKitAPI/PlatformPlayStation.cmake: Added.

2018-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Support building DumpRenderTree for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=191093
        <rdar://problem/45685706>

        Reviewed by Alex Christensen.

        * DumpRenderTree/PixelDumpSupport.cpp: Update for Direct2D use.
        * DumpRenderTree/PlatformWin.cmake: Add support for Direct2D build.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.cpp: Added.
        (pixelDumpSystemFactory): Added.
        (printPNG): Create stub.
        (computeMD5HashStringForBitmapContext): Ditto.
        (dumpBitmap): Ditto.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.h: Added.
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):
        (BitmapContext::platformContext const):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Update to support Direct2D.
        * MiniBrowser/win/MiniBrowserReplace.h: Drive-by fix: The old WebKit
        logo is no longer available at this location. Switch to the new logo.

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

        webkitpy: Support alternate simctl list outputs
        https://bugs.webkit.org/show_bug.cgi?id=191090
        <rdar://problem/45684255>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_runtimes): Support alternative availability format.
        (SimulatedDeviceManager._create_device_with_runtime): Ditto.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_available_devices): Add iOS 12 with alternative availability format.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-10-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Fixes to the PublicSuffix implementation
        https://bugs.webkit.org/show_bug.cgi?id=191031

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        (TestWebKitAPI::TEST_F): Remove a test for a domain
        that is not registrable and shouldn't be tested there.

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * Scripts/check-inspector-strings:
        * Scripts/update-webkit-localizable-strings:
        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:
        English->en

2018-10-29  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Last aliased enumerator in OptionSet is printed; should print first enumerator
        https://bugs.webkit.org/show_bug.cgi?id=191036

        Reviewed by Andy Estes.

        Prefer the first enumerator (in parse order) when pretty-printing an OptionSet that is parameterized
        by an enum that contains two or more enumerators with the same value. For example, suppose
        you have the following enum:

        enum Flag {
            A = 1 << 0,
            AAlias = A,
        };

        Then pretty-printing OptionSet<Flag>(Flag::A) should print A instead of AAlias. A side effect of
        this change is that OptionSet<Flag>(Flag::AAlias) will also print A as its only member as we cannot
        differentiate between A and Alias. This should be acceptable in practice as aliased enumerators
        tend to be used in bounds checks as opposed to code that adds to a set.

        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders):
        * lldb/lldb_webkit.py:
        (WTFOptionSetProvider.update):
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple):
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_aliased_flag):

2018-10-29  Daniel Bates  <dabates@apple.com>

        [llbd-webkit] Add summaries for Document, Frame, and SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=191033

        Reviewed by Andy Estes.

        For Documents we display its origin, URL, whether it's in the main frame, and its page cache state.
        We display the same details in the summary for a Frame because its Document tends to be the most
        interesting aspect of it. For SecurityOrigin we display its origin, domain (affects cookie access),
        and whether the origin has universal access.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        Register new summary providers.

        (WebCoreSecurityOrigin_SummaryProvider):
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):
        Add new summary providers.

        (StdOptionalWrapper):
        (StdOptionalWrapper.__init__):
        (StdOptionalWrapper.has_value):
        (StdOptionalWrapper.value):
        Convenience data type that provides access to the fields of a std::optional<>.
        
        (WebCoreSecurityOriginProvider):
        (WebCoreSecurityOriginProvider.__init__):
        (WebCoreSecurityOriginProvider.is_unique):
        (WebCoreSecurityOriginProvider.scheme):
        (WebCoreSecurityOriginProvider.host):
        (WebCoreSecurityOriginProvider.port):
        (WebCoreSecurityOriginProvider.domain):
        (WebCoreSecurityOriginProvider.has_universal_access):
        (WebCoreSecurityOriginProvider.to_string):
        (WebCoreFrameProvider):
        (WebCoreFrameProvider.__init__):
        (WebCoreFrameProvider.is_main_frame):
        (WebCoreFrameProvider.document):
        (WebCoreDocumentProvider):
        (WebCoreDocumentProvider.__init__):
        (WebCoreDocumentProvider.url):
        (WebCoreDocumentProvider.origin):
        (WebCoreDocumentProvider.page_cache_state):
        (WebCoreDocumentProvider.frame):

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

        [PSON] When Safari restores session state after launching, going back and forward does not swap processes
        https://bugs.webkit.org/show_bug.cgi?id=190975
        <rdar://problem/45059256>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Compute estimated margin top for inline formatting root's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=191018

        Reviewed by Antti Koivisto.

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

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for inflow non replaced content height when the box is an inline formatting root.
        https://bugs.webkit.org/show_bug.cgi?id=191011

        Reviewed by Antti Koivisto.

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

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        Missing from r237549

        Reviewed by Antti Koivisto.

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

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for simple intruding floats.
        https://bugs.webkit.org/show_bug.cgi?id=190998

        Reviewed by Antti Koivisto.

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

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline layout produces separate runs when float is present.
        https://bugs.webkit.org/show_bug.cgi?id=190980

        Reviewed by Antti Koivisto.

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

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Do not force ENABLE_JIT=true when $forceCLoop is false.

        * Scripts/build-jsc:

2018-10-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Try to fix the xserver-xorg build in the Ubuntu LTS bot

        Unreviewed build fix

        The build fails because of some array-bound check related
        to strcmp() macro optimizations. Disabling selective Werrors
        when building xserver-xorg might get past this.

        * gtk/jhbuild.modules: Add --disable-selective-werror to xserver-xorg
        configuration.

2018-10-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Update API test expectations after r237383
        https://bugs.webkit.org/show_bug.cgi?id=186913

        Unreviewed gardening.

        * TestWebKitAPI/glib/TestExpectations.json: Remove
        passing TestSSL tests.

2018-10-28  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Add the WebKitVersion.h header
        https://bugs.webkit.org/show_bug.cgi?id=191015

        Reviewed by Michael Catanzaro.

        * MiniBrowser/wpe/main.cpp:
        (automationStartedCallback): Remove the FIXME and finally enable the
        webkit_application_info_set_version() call.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: Remove
        this FIXME as well and remove the custom WEBKIT_*_VERSION macros.

2018-10-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove obsolete code for vcxproj builds in build-api-tests and build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=190948

        Reviewed by Brent Fulgham.

        vcxproj files have been removed in Bug 154388.

        * Scripts/build-api-tests: Removed obsolete code to build vcproj.
        * Scripts/build-jsc:
        (buildMyProject): Ditto. Removed a condition of buiding bmalloc
        which is not used because Windows ports are using CMake.

2018-10-28  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Renamed IsRandom to
        IsEvenlyDistributed to reflect the fact that we're only testing the
        distribution. Added a test case that covers more table densities and
        the remove() operation.

2018-10-27  Charlie Turner  <cturner@igalia.com>

        [GTK] Add bubblewrap feature option
        https://bugs.webkit.org/show_bug.cgi?id=190981

        Reviewed by Xabier Rodriguez-Calvar.

        Without this, it was not possible to disable the bubblewrap sandbox
        from the webkit build scripts.

        * Scripts/webkitperl/FeatureList.pm:

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237479 and r237484.
        https://bugs.webkit.org/show_bug.cgi?id=190978

        broke JSC on iOS (Requested by tadeuzagallo on #webkit).

        Reverted changesets:

        "New bytecode format for JSC"
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237479

        "Gardening: Build fix after r237479."
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237484

2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Do not force ENABLE_JIT=true when $forceCLoop is false.

        * Scripts/build-jsc:

2018-10-26  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Updated the Random_IsRandom to
        more thoroughly test for randomness.

2018-10-26  Antti Koivisto  <antti@apple.com>

        hashSet.remove(hashSet.random()) doesn't build
        https://bugs.webkit.org/show_bug.cgi?id=190953

        Reviewed by Chris Dumez.

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

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Layout floats as part of the inline content
        https://bugs.webkit.org/show_bug.cgi?id=190942

        Reviewed by Antti Koivisto.

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

2018-10-26  Alicia Boya García  <aboya@igalia.com>

        [MSE][WTF][Media] Invalid MediaTime should be falsy
        https://bugs.webkit.org/show_bug.cgi?id=190893

        Reviewed by Jer Noble.

        This patch adds additional API tests for the conversions from
        MediaTime to boolean.

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

2018-10-25  Chris Dumez  <cdumez@apple.com>

        [PSON] Navigating cross-site with locked history but unlocked back/forward list fails to create a new BackForwardListItem
        https://bugs.webkit.org/show_bug.cgi?id=190915
        <rdar://problem/45059069>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a watchlist message rule to warn about feature checking new inspector protocol changes
        https://bugs.webkit.org/show_bug.cgi?id=190896

        Reviewed by Matt Baker.

        * Scripts/webkitpy/common/config/watchlist:

2018-10-25  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        Unit testing is fun and easy!

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::ZeroHash::hash):
        (TestWebKitAPI::TEST):

2018-10-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237331): DismissingActionSheetShouldNotDismissPresentingViewController times out
        https://bugs.webkit.org/show_bug.cgi?id=190897

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::TEST):
        Disable the test for now.

2018-10-24  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete macOS version guards
        https://bugs.webkit.org/show_bug.cgi?id=190887

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (__simulated_forceClickAssociatedEventsMask):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:]):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-24  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE] Fix CMake rules in for TestWebKitAPIBase library building in developer mode
        https://bugs.webkit.org/show_bug.cgi?id=190328

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWPE.cmake:

2018-10-24  Chris Dumez  <cdumez@apple.com>

        [PSON] When navigating back and forth, 'about:blank' shows up in the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=190846
        <rdar://problem/45058938>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-24  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] TestSSL failing because of missing libsoup patch
        https://bugs.webkit.org/show_bug.cgi?id=190869

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add the patch below to fix the API test TestSSL
        * gtk/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Added.

2018-10-23  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Rename old GPU* implementation files to GPULegacy* for WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190817

        Reviewed by Dean Jackson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyBuffer.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyCommandQueue.mm: Copied from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyDevice.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyFunction.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyLibrary.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyTest.h: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h.

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

        [PSON] Add support for cross-site client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=190806
        <rdar://problem/45047344>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate _webView:willPerformClientRedirectToURL:delay:]):
        (-[PSONNavigationDelegate _webView:didPerformClientRedirectFromURL:toURL:]):

2018-10-23  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Pass full certificate chain in CertificateInfo coder
        https://bugs.webkit.org/show_bug.cgi?id=190789

        Reviewed by Michael Catanzaro.

        When the network process serializes certificate data to other
        processes through the argument coders, the certificate chain, if
        present, is lost. In practice this means that applications using
        the public API to process certificate info have no details on the
        certificate chain, other than the very basics included in the
        certificate. Serialize the entire chain if available in the
        certificate.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL): Test that the self-signed certificate has no bogus
        issuer certificate.

2018-10-22  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237331): InteractionDeadlockAfterCrash API test fails
        https://bugs.webkit.org/show_bug.cgi?id=190801
        <rdar://problem/43674361>

        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        (TEST):
        Use a parented WKWebView for this test, otherwise none of the assertions
        about gesture recognizers work anymore.

2018-10-22  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r234081): TestWebKitAPI.VideoControlsManager.VideoControlsManagerAudioElementFollowingUserInteraction is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=187972

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST): Disable the flaky test.

2018-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] fast/forms/datalist/datalist-show-hide.html fails
        https://bugs.webkit.org/show_bug.cgi?id=190777

        Reviewed by Tim Horton.

        Implement isShowingDataListSuggestions on iOS. See below for more details.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingDataListSuggestions const):

        Add a stub implementation for DumpRenderTree.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isShowingDataListSuggestions const):

        Move this stub implementation to !PLATFORM(COCOA).

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::forEachViewInHierarchy):

        Add a helper function to apply a given function to a UIView and each of its subviews, recursively.

        (WTR::UIScriptController::isShowingDataListSuggestions const):

        For iOS, return whether the UIRemoteKeyboardWindow contains a subview of type WKDataListSuggestionsPickerView.

2018-10-19  Dan Bernstein  <mitz@apple.com>

        [macOS] MiniBrowser has an unused injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=190770

        Reviewed by Tim Horton.

        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Removed the MiniBrowserBundle target,
          the Copy Bundle build phase in the MiniBrowser target, and references to removed files.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.h: Removed.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.m: Removed.
        * MiniBrowser/mac/Bundle: Removed.

2018-10-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] Can't pick datalist suggestions in a stock WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190621
        <rdar://problem/45310649>

        Reviewed by Tim Horton.

        Add a UIScriptController hook to resign first responder on WKWebView. See LayoutTests/ChangeLog for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::resignFirstResponder):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::makeWebViewFirstResponder):

        Implement this method stub on iOS, to ensure that TestController::resetStateToConsistentValues restores first
        responder on the WKWebView when running iOS layout tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        After resigning first responder to dismiss any on-screen keyboard, ensure that we restore first responder.

2018-10-19  Dean Jackson  <dino@apple.com>

        ASSERTION FAILED: !frame().animation().hasAnimations() in WebCore::FrameView::didDestroyRenderTree()
        https://bugs.webkit.org/show_bug.cgi?id=186946
        <rdar://problem/41724248>

        Reviewed by Antoine Quint.

        If the incoming test has different enableWebAnimationsCSSIntegration options,
        then we need to create a new WebView.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::webViewIsCompatibleWithOptions const):

2018-10-19  Charlie Turner  <cturner@igalia.com>

        [EME] Fix crash during tracing in  gst_qtdemux_request_protection_context
        https://bugs.webkit.org/show_bug.cgi?id=190738

        Reviewed by Xabier Rodriguez-Calvar.

        Add a GStreamer patch to avoid crashing when the run-time logging
        level is TRACE. There was a missing null check which caused many
        tests to crash.

        * gstreamer/patches/gst-plugins-good-0013-Avoid-warning-when-reporting-about-decryptors.patch: Added.

2018-10-18  Alicia Boya García  <aboya@igalia.com>

        [Media] Use nanoseconds as MaximumTimeScale
        https://bugs.webkit.org/show_bug.cgi?id=190631

        Rebased MediaTime tests covering timescales over the maximum.

        Reviewed by Jer Noble.

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

2018-10-18  Dean Johnson  <dean_johnson@apple.com>

        clean-webkit pulls in many unnecessary dependencies in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=190732

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/host.py:
        (Host.__init__): Split out 'bugs', 'bugzilla', and 'web' to only be created when used.
        (Host):
        (Host.bugs):
        (Host.bugzilla):
        (Host.web):

2018-10-18  Chris Dumez  <cdumez@apple.com>

        [PSON] SuspendedPages do not report meaningful domains in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=190721
        <rdar://problem/45059699>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.h:
        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback):
        (TestRunner::staticFunctions):
        (TestRunner::callUIScriptCallback):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        * DumpRenderTree/ios/DumpRenderTreeAppMain.mm:
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        * DumpRenderTree/ios/TextInputControllerIOS.m:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (destroyWebViewAndOffscreenWindow):
        (resetWebPreferencesToConsistentValues):
        (setDefaultsToConsistentValuesForTesting):
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        (addTestPluginsToPluginSearchPath):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (DumpRenderTreeMain):
        (dumpFrameAsPDF):
        (dumpBackForwardListForAllWindows):
        (updateDisplay):
        (dump):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        (displayWebView):
        (displayAndTrackRepaintsWebView):
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]):
        (-[DumpRenderTreeWindow webView]):
        (-[DumpRenderTreeWindow webViewStartedAcceleratedCompositing:]):
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController dealloc]):
        (-[EventSendingController currentEventTime]):
        (-[EventSendingController clearKillRing]):
        (modifierFlags):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController scalePageBy:atX:andY:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/LayoutTestHelper.m:
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider timerFired]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMainFrameIsFirstResponder):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::setUseDashboardCompatibilityMode):
        (TestRunner::isCommandEnabled):
        (TestRunner::inspectorTestStubURL):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (TestRunner::abortModal):
        (TestRunner::setTextDirection):
        (TestRunner::addChromeInputField):
        (TestRunner::removeChromeInputField):
        (TestRunner::focusWebView):
        (TestRunner::setBackingScaleFactor):
        (TestRunner::imageCountInGeneralPasteboard const):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate modalWindowWillClose:]):
        (-[UIDelegate webViewRunModal:]):
        (-[UIDelegate webView:supportsFullScreenForElement:withKeyboard:]):
        (-[UIDelegate dealloc]):
        * Scripts/check-for-inappropriate-objc-class-names:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * TestRunnerShared/spi/UIKitTestSPI.h:
        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        * TestWebKitAPI/Tests/WebCore/MarkedText.cpp:
        (WebCore::operator<<):
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp:
        * TestWebKitAPI/Tests/WebKit/NoHistoryItemScrollToFragment.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLs.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRangeHandle.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRangeHandlePlugIn.mm:
        (-[BundleRangeHandlePlugIn webProcessPlugInBrowserContextController:didFinishDocumentLoadForFrame:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Coding.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        (createWebViewWithCustomPasteboardDataEnabled):
        * TestWebKitAPI/Tests/WebKitCocoa/Copying.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoAfterNextPresentationUpdateAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FixedLayoutSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Geolocation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        (defaultWebsiteCacheDirectory):
        (defaultApplicationCacheDirectory):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NSFileManagerExtras.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlaying.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RenderedImageWithOptions.mm:
        (runTestWithWidth):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderedImageWithOptionsPlugIn.mm:
        (-[RenderedImageWithOptionsPlugIn renderImageWithWidth:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShrinkToFit.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VisibleContentRect.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyRichTextWithMultipleAttachments):
        (platformCopyRichTextWithImage):
        (platformCopyPNG):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewTargetForAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewStablePresentationUpdateCallback.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/AccessingPastedImage.mm:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/RenderingProgressTests.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        * TestWebKitAPI/Tests/ios/SynchronousTimeoutTests.mm:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegate.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFinishNavigation]):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/TestWKWebViewController.h:
        * TestWebKitAPI/ios/TestWKWebViewController.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName):
        (WTR::TestController::networkProcessName):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::imageCountInGeneralPasteboard const):
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:

2018-10-18  Chris Dumez  <cdumez@apple.com>

        [PSON] Cap number of SuspendedPageProxy objects and allow a WebPageProxy to have more than one
        https://bugs.webkit.org/show_bug.cgi?id=190688
        <rdar://problem/45354095>

        Reviewed by Antti Koivisto.

        Extended API test coverage to confirm that:
        - We do not accumulate more than 3 suspended processes.
        - We can navigate back 3 times and use the page cache for each of these loads.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable the datalist element by default on iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=190594
        <rdar://problem/45281159>

        Reviewed by Ryosuke Niwa and Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Certain tags should identify their context to iOS API
        https://bugs.webkit.org/show_bug.cgi?id=190622
        <rdar://problem/45308194>

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::stringAttributeValue):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):

2018-10-16  Sihui Liu  <sihui_liu@apple.com>

        Add a switch for Web SQL
        https://bugs.webkit.org/show_bug.cgi?id=190271

        Reviewed by Ryosuke Niwa.

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

2018-10-16  Alex Christensen  <achristensen@webkit.org>

        Remove InjectedBundleBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=190640

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::dumpBackForwardListsForAllPages):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::prepare):
        (WTR::InjectedBundlePage::dumpHistory):
        (WTR::hasPrefix): Deleted.
        (WTR::compareByTargetName): Deleted.
        (WTR::dumpBackForwardListItem): Deleted.
        (WTR::InjectedBundlePage::dumpBackForwardList): Deleted.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearBackForwardList):

2018-10-16  Dominik Infuehr  <dinfuehr@igalia.com>

        Unreviewed, added myself to contributors.json.

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

2018-10-16  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag and bindings for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190237

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK Ubuntu LTS Jhbuild prospective build fix

        * gstreamer/jhbuild.modules:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        [GTK][JHBuild] Disable libmount support in glib

        Rubber-stamped by Alejandro G. Castro.

        This feature doesn't seem required for our setup.

        * gtk/jhbuild.modules:

2018-10-15  Justin Fan  <justin_fan@apple.com>

        Add WebGPU 2018 feature flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=190509

        Reviewed by Dean Jackson.

        Re-add ENABLE_WEBGPU, an experimental feature flag, and a RuntimeEnabledFeature
        for the 2018 WebGPU prototype.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Update bot configuration for Sierra archive queues
        https://bugs.webkit.org/show_bug.cgi?id=190605

        Reviewed by Aakash Jain.

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

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        * Scripts/webkitperl/FeatureList.pm: Added ENABLE_DARK_MODE_CSS as dark-mode-css.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added ENABLE_DARK_MODE_CSS.

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [JHBuild] Add xdg-dbus-proxy module
        https://bugs.webkit.org/show_bug.cgi?id=190589

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules:

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Add new sandboxing dependencies to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=190588

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Experiment: target=_blank on anchors should imply rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=190481

        Reviewed by Alex Christensen.

        Add API test coverage to make sure we can now swap process when target=_blank
        is specified on an anchor but rel=noopener is not.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Can't select text after dismissing the keyboard when changing focus
        https://bugs.webkit.org/show_bug.cgi?id=190563
        <rdar://problem/44613559>

        Reviewed by Tim Horton.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingKeyboard const):

        Add a new UIScriptController method that returns whether the keyboard is shown. See `ui-helper.js` for more
        details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isShowingKeyboard const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:

        Also rename the `isShowingKeyboard` Objective-C property to the more canonical `showingKeyboard`, with
        `isShowingKeyboard` as the getter method.

        (-[TestRunnerWKWebView _invokeShowKeyboardCallbackIfNecessary]):
        (-[TestRunnerWKWebView _invokeHideKeyboardCallbackIfNecessary]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingKeyboard const):

2018-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix JSC tests after WebGPUShadingLanguageRI directory was removed in r237115.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Remove wsl-tests.yaml.

2018-10-15  Christopher Reid  <chris.reid@sony.com>

        [Curl][WinCairo] Add Public Suffix support to WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=183060

        Reviewed by Alex Christensen.

        Share mac's PublicSuffix tests with all ports.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        * TestWebKitAPI/Tests/mac/PublicSuffix.mm: Removed.

2018-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Migrated WebGPUShadingLanguageRI to the W3C
        https://bugs.webkit.org/show_bug.cgi?id=190555

        Unreviewed.

        Migrated to https://github.com/gpuweb/WHLSL/tree/master/Source

        * WebGPUShadingLanguageRI/AddressSpace.js: Removed.
        * WebGPUShadingLanguageRI/All.js: Removed.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js: Removed.
        * WebGPUShadingLanguageRI/AnonymousVariable.js: Removed.
        * WebGPUShadingLanguageRI/ArrayRefType.js: Removed.
        * WebGPUShadingLanguageRI/ArrayType.js: Removed.
        * WebGPUShadingLanguageRI/Assignment.js: Removed.
        * WebGPUShadingLanguageRI/AutoWrapper.js: Removed.
        * WebGPUShadingLanguageRI/Block.js: Removed.
        * WebGPUShadingLanguageRI/BoolLiteral.js: Removed.
        * WebGPUShadingLanguageRI/Break.js: Removed.
        * WebGPUShadingLanguageRI/BuiltInSemantic.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinMatrixGetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinMatrixSetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinVectorGetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinVectorSetter.js: Removed.
        * WebGPUShadingLanguageRI/CallExpression.js: Removed.
        * WebGPUShadingLanguageRI/CallFunction.js: Removed.
        * WebGPUShadingLanguageRI/Casts.js: Removed.
        * WebGPUShadingLanguageRI/Check.js: Removed.
        * WebGPUShadingLanguageRI/CheckLiteralTypes.js: Removed.
        * WebGPUShadingLanguageRI/CheckLoops.js: Removed.
        * WebGPUShadingLanguageRI/CheckNativeFuncStages.js: Removed.
        * WebGPUShadingLanguageRI/CheckRecursion.js: Removed.
        * WebGPUShadingLanguageRI/CheckRecursiveTypes.js: Removed.
        * WebGPUShadingLanguageRI/CheckReturns.js: Removed.
        * WebGPUShadingLanguageRI/CheckTypesWithArguments.js: Removed.
        * WebGPUShadingLanguageRI/CheckUnreachableCode.js: Removed.
        * WebGPUShadingLanguageRI/CheckWrapped.js: Removed.
        * WebGPUShadingLanguageRI/Checker.js: Removed.
        * WebGPUShadingLanguageRI/CloneProgram.js: Removed.
        * WebGPUShadingLanguageRI/CommaExpression.js: Removed.
        * WebGPUShadingLanguageRI/ConstexprFolder.js: Removed.
        * WebGPUShadingLanguageRI/Continue.js: Removed.
        * WebGPUShadingLanguageRI/ConvertPtrToArrayRefExpression.js: Removed.
        * WebGPUShadingLanguageRI/CreateLiteral.js: Removed.
        * WebGPUShadingLanguageRI/CreateLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/DereferenceExpression.js: Removed.
        * WebGPUShadingLanguageRI/DoWhileLoop.js: Removed.
        * WebGPUShadingLanguageRI/DotExpression.js: Removed.
        * WebGPUShadingLanguageRI/EArrayRef.js: Removed.
        * WebGPUShadingLanguageRI/EBuffer.js: Removed.
        * WebGPUShadingLanguageRI/EBufferBuilder.js: Removed.
        * WebGPUShadingLanguageRI/EPtr.js: Removed.
        * WebGPUShadingLanguageRI/EnumLiteral.js: Removed.
        * WebGPUShadingLanguageRI/EnumMember.js: Removed.
        * WebGPUShadingLanguageRI/EnumType.js: Removed.
        * WebGPUShadingLanguageRI/EvaluationCommon.js: Removed.
        * WebGPUShadingLanguageRI/Evaluator.js: Removed.
        * WebGPUShadingLanguageRI/Expression.js: Removed.
        * WebGPUShadingLanguageRI/ExpressionFinder.js: Removed.
        * WebGPUShadingLanguageRI/ExternalOrigin.js: Removed.
        * WebGPUShadingLanguageRI/Field.js: Removed.
        * WebGPUShadingLanguageRI/FindHighZombies.js: Removed.
        * WebGPUShadingLanguageRI/FlattenedStructOffsetGatherer.js: Removed.
        * WebGPUShadingLanguageRI/FloatLiteral.js: Removed.
        * WebGPUShadingLanguageRI/FloatLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/FoldConstexprs.js: Removed.
        * WebGPUShadingLanguageRI/ForLoop.js: Removed.
        * WebGPUShadingLanguageRI/Func.js: Removed.
        * WebGPUShadingLanguageRI/FuncAttribute.js: Removed.
        * WebGPUShadingLanguageRI/FuncDef.js: Removed.
        * WebGPUShadingLanguageRI/FuncNumThreadsAttribute.js: Removed.
        * WebGPUShadingLanguageRI/FuncParameter.js: Removed.
        * WebGPUShadingLanguageRI/FunctionLikeBlock.js: Removed.
        * WebGPUShadingLanguageRI/HighZombieFinder.js: Removed.
        * WebGPUShadingLanguageRI/IdentityExpression.js: Removed.
        * WebGPUShadingLanguageRI/IfStatement.js: Removed.
        * WebGPUShadingLanguageRI/IndexExpression.js: Removed.
        * WebGPUShadingLanguageRI/InferTypesForCall.js: Removed.
        * WebGPUShadingLanguageRI/Inline.js: Removed.
        * WebGPUShadingLanguageRI/Inliner.js: Removed.
        * WebGPUShadingLanguageRI/IntLiteral.js: Removed.
        * WebGPUShadingLanguageRI/IntLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/Intrinsics.js: Removed.
        * WebGPUShadingLanguageRI/LayoutBuffers.js: Removed.
        * WebGPUShadingLanguageRI/Lexer.js: Removed.
        * WebGPUShadingLanguageRI/LexerToken.js: Removed.
        * WebGPUShadingLanguageRI/LiteralTypeChecker.js: Removed.
        * WebGPUShadingLanguageRI/LogicalExpression.js: Removed.
        * WebGPUShadingLanguageRI/LogicalNot.js: Removed.
        * WebGPUShadingLanguageRI/LoopChecker.js: Removed.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js: Removed.
        * WebGPUShadingLanguageRI/MakePtrExpression.js: Removed.
        * WebGPUShadingLanguageRI/MatrixType.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLCompileResult.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLConstexprEmitter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionForwardDeclaration.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLInsertTrapParameter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLNameMangler.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLNativeFunctionCall.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributes.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributesMap.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeUnifier.js: Removed.
        * WebGPUShadingLanguageRI/Metal/TypeOf.js: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/.gitignore: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/AppIcon.appiconset/Contents.json: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/Contents.json: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Base.lproj/Main.storyboard: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Info.plist: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/WHLSL.entitlements: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/_SharedMetal.txt: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/main.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/Info.plist: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/WHLSL_ToyTests.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Removed.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.js: Removed.
        * WebGPUShadingLanguageRI/NameContext.js: Removed.
        * WebGPUShadingLanguageRI/NameFinder.js: Removed.
        * WebGPUShadingLanguageRI/NameResolver.js: Removed.
        * WebGPUShadingLanguageRI/NativeFunc.js: Removed.
        * WebGPUShadingLanguageRI/NativeType.js: Removed.
        * WebGPUShadingLanguageRI/Node.js: Removed.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver.js: Removed.
        * WebGPUShadingLanguageRI/NullLiteral.js: Removed.
        * WebGPUShadingLanguageRI/NullType.js: Removed.
        * WebGPUShadingLanguageRI/OperatorAnderIndexer.js: Removed.
        * WebGPUShadingLanguageRI/OperatorArrayRefLength.js: Removed.
        * WebGPUShadingLanguageRI/OriginKind.js: Removed.
        * WebGPUShadingLanguageRI/OverloadResolutionFailure.js: Removed.
        * WebGPUShadingLanguageRI/Parse.js: Removed.
        * WebGPUShadingLanguageRI/Prepare.js: Removed.
        * WebGPUShadingLanguageRI/Program.js: Removed.
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js: Removed.
        * WebGPUShadingLanguageRI/PropertyAccessExpression.js: Removed.
        * WebGPUShadingLanguageRI/PropertyResolver.js: Removed.
        * WebGPUShadingLanguageRI/PtrType.js: Removed.
        * WebGPUShadingLanguageRI/ReadModifyWriteExpression.js: Removed.
        * WebGPUShadingLanguageRI/RecursionChecker.js: Removed.
        * WebGPUShadingLanguageRI/RecursiveTypeChecker.js: Removed.
        * WebGPUShadingLanguageRI/ReferenceType.js: Removed.
        * WebGPUShadingLanguageRI/ResolveNames.js: Removed.
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js: Removed.
        * WebGPUShadingLanguageRI/ResolveProperties.js: Removed.
        * WebGPUShadingLanguageRI/ResolveTypeDefs.js: Removed.
        * WebGPUShadingLanguageRI/ResourceSemantic.js: Removed.
        * WebGPUShadingLanguageRI/Return.js: Removed.
        * WebGPUShadingLanguageRI/ReturnChecker.js: Removed.
        * WebGPUShadingLanguageRI/ReturnException.js: Removed.
        * WebGPUShadingLanguageRI/Rewriter.js: Removed.
        * WebGPUShadingLanguageRI/SPIR-V.js: Removed.
        * WebGPUShadingLanguageRI/SPIRV.html: Removed.
        * WebGPUShadingLanguageRI/SPIRVCodegen.js: Removed.
        * WebGPUShadingLanguageRI/SPIRVTypeAnalyzer.js: Removed.
        * WebGPUShadingLanguageRI/SPIRVVariableAnalyzer.js: Removed.
        * WebGPUShadingLanguageRI/Sampler.js: Removed.
        * WebGPUShadingLanguageRI/Semantic.js: Removed.
        * WebGPUShadingLanguageRI/SpecializationConstantSemantic.js: Removed.
        * WebGPUShadingLanguageRI/StageInOutSemantic.js: Removed.
        * WebGPUShadingLanguageRI/StandardLibrary.js: Removed.
        * WebGPUShadingLanguageRI/StatementCloner.js: Removed.
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js: Removed.
        * WebGPUShadingLanguageRI/StructType.js: Removed.
        * WebGPUShadingLanguageRI/SwitchCase.js: Removed.
        * WebGPUShadingLanguageRI/SwitchStatement.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeArrayOperatorLength.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeCopyConstructorOperator.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeDefaultConstructorOperator.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Removed.
        * WebGPUShadingLanguageRI/TernaryExpression.js: Removed.
        * WebGPUShadingLanguageRI/Test.html: Removed.
        * WebGPUShadingLanguageRI/Test.js: Removed.
        * WebGPUShadingLanguageRI/Texture.js: Removed.
        * WebGPUShadingLanguageRI/TextureOperations.js: Removed.
        * WebGPUShadingLanguageRI/TrapStatement.js: Removed.
        * WebGPUShadingLanguageRI/Type.js: Removed.
        * WebGPUShadingLanguageRI/TypeDef.js: Removed.
        * WebGPUShadingLanguageRI/TypeDefResolver.js: Removed.
        * WebGPUShadingLanguageRI/TypeOverloadResolutionFailure.js: Removed.
        * WebGPUShadingLanguageRI/TypeRef.js: Removed.
        * WebGPUShadingLanguageRI/TypedValue.js: Removed.
        * WebGPUShadingLanguageRI/UintLiteral.js: Removed.
        * WebGPUShadingLanguageRI/UintLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/UnificationContext.js: Removed.
        * WebGPUShadingLanguageRI/UnreachableCodeChecker.js: Removed.
        * WebGPUShadingLanguageRI/Value.js: Removed.
        * WebGPUShadingLanguageRI/VariableDecl.js: Removed.
        * WebGPUShadingLanguageRI/VariableRef.js: Removed.
        * WebGPUShadingLanguageRI/VectorType.js: Removed.
        * WebGPUShadingLanguageRI/VisitingSet.js: Removed.
        * WebGPUShadingLanguageRI/Visitor.js: Removed.
        * WebGPUShadingLanguageRI/WLexicalError.js: Removed.
        * WebGPUShadingLanguageRI/WSyntaxError.js: Removed.
        * WebGPUShadingLanguageRI/WTrapError.js: Removed.
        * WebGPUShadingLanguageRI/WTypeError.js: Removed.
        * WebGPUShadingLanguageRI/WhileLoop.js: Removed.
        * WebGPUShadingLanguageRI/WrapChecker.js: Removed.
        * WebGPUShadingLanguageRI/index.html: Removed.
        * WebGPUShadingLanguageRI/spirv.core.grammar.json: Removed.
        * WebGPUShadingLanguageRI/wsl-tests.yaml: Removed.

2018-10-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Disable MSE build support on Debian and Ubuntu LTS bots
        https://bugs.webkit.org/show_bug.cgi?id=190581

        Reviewed by Michael Catanzaro.

        These bots don't use JHBuild and their host GStreamer version is
        too old for the GStreamer MSE backend. Version 1.14 is needed at least.

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

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Use pragma once in WTF
        https://bugs.webkit.org/show_bug.cgi?id=190527

        Reviewed by Chris Dumez.

        Put WorkQueue in namespace DRT so it does not conflict with WTF::WorkQueue.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::queueLoadHTMLString):
        (TestRunner::queueLoadAlternateHTMLString):
        (TestRunner::queueBackNavigation):
        (TestRunner::queueForwardNavigation):
        (TestRunner::queueLoadingScript):
        (TestRunner::queueNonLoadingScript):
        (TestRunner::queueReload):
        * DumpRenderTree/WorkQueue.cpp:
        (WorkQueue::singleton): Deleted.
        (WorkQueue::WorkQueue): Deleted.
        (WorkQueue::queue): Deleted.
        (WorkQueue::dequeue): Deleted.
        (WorkQueue::count): Deleted.
        (WorkQueue::clear): Deleted.
        (WorkQueue::processWork): Deleted.
        * DumpRenderTree/WorkQueue.h:
        (WorkQueue::setFrozen): Deleted.
        * DumpRenderTree/WorkQueueItem.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        (TestRunner::queueLoad):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::processWork):
        (FrameLoadDelegate::locationChangeDone):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        (TestRunner::queueLoad):

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Option::useAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=190567

        Reviewed by Saam Barati.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-15  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Silence a unused-parameter warning

        Unreviewed.
        * MiniBrowser/wpe/main.cpp:
        (decidePermissionRequest):

2018-10-12  Guillaume Emont  <guijemont@igalia.com>

        [Tools][webkitpy] fix handling of JSCTESTS_OPTIONS
        https://bugs.webkit.org/show_bug.cgi?id=190537

        Reviewed by Alexey Proskuryakov.

        In DeprecatedPort.run_javascriptcore_tests_command() JSCTESTS_OPTIONS
        needs to be split before adding it to the command since it is treated
        as a list of args.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):

2018-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view
        https://bugs.webkit.org/show_bug.cgi?id=190504
        <rdar://problem/45117760>

        Reviewed by Tim Horton.

        Teach UIScriptController to set WKWebView's view scale via a new `setViewScale` method, supported in WebKit2 on
        macOS and iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setViewScale):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setViewScale):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setViewScale):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm: Added.

        Add a new file for UIScriptController methods on Cocoa platforms.

        (WTR::UIScriptController::setViewScale):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

        Ensure that _viewScale is reset to 1 after running a layout test.

2018-10-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Rename iOS-11-Simulator-Tests-EWS to iOS-11-Simulator-WK2-Tests-EWS
        https://bugs.webkit.org/show_bug.cgi?id=190536

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/config.json: Renamed iOS-11-Simulator-Tests-EWS to iOS-11-Simulator-WK2-Tests-EWS.

2018-10-11  Youenn Fablet  <youenn@apple.com>

        IOS 12 - Service worker cache not shared when added to homescreen
        https://bugs.webkit.org/show_bug.cgi?id=190269
        <rdar://problem/45009961>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Add test to ensure that CacheStorage use the default website data store parameters.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        Clicking on bookmarklet crashes at NavigationState::willRecordNavigationSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=190476
        <rdar://problem/32757191>

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Tests/WebKitCocoa/SnapshotStore.mm:
        (TEST):
        Add a test that we don't crash.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237037): Cannot use webkit-patch upload, always fails with unknown 'cc_radar'

        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        Fix the name of the variable that the --cc-radar option writes into.

2018-10-10  Dean Jackson  <dino@apple.com>

        Add --cc-radar option to webkit-patch bug creation
        https://bugs.webkit.org/show_bug.cgi?id=190451
        <rdar://problem/45176671>

        Reviewed by Antoine Quint.

        Add a new command line option to automatically
        CC radar to new or updated bugs.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs):
        * Scripts/webkitpy/tool/commands/upload.py:
        (CreateBug.__init__):
        (CreateBug.execute):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_prepare_with_cc):
        (test_prepare_with_radar):
        (test_prepare_with_cc_and_radar):
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.options):
        (CreateBug.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2018-10-11  Claudio Saavedra  <csaavedra@igalia.com>

        [GStreamer] Do not build gstgtk plugins
        https://bugs.webkit.org/show_bug.cgi?id=190463

        Reviewed by Xabier Rodriguez-Calvar.

        These plugins pull a GTK+ dependency that, at least in WPE,
        is unnecessary. The GTK+ port doesn't need it either, as far
        as I can tell.

        * gstreamer/jhbuild.modules: Disable gstgtk plugins

2018-10-11  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add mediaDevices.enumerateDevices support
        https://bugs.webkit.org/show_bug.cgi?id=185761

        Reviewed by Youenn Fablet.

        Added new API test for the mediaDevices.enumerateDevices:
        usermedia-enumeratedevices-permission-check. And a new API test
        for the WebsiteDataStore: testWebsiteDataDeviceIdHashSalt.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback): Added a new section to the about:data
        webpage to include the information about the hash salt.
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewUserMediaEnumerateDevicesPermissionCheck): Added the
        new test checking the enumerateDevices API when permission is
        denied and when permission is allowed for the origin.
        (beforeAll): Defined the new test.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback): Register a new URI for the enumerateDevices.
        (testWebsiteDataConfiguration): Remove the hash salts from the
        directories.
        (testWebsiteDataDeviceIdHashSalt): New test cheking the
        enumerateDevices API.
        (beforeAll): Added the new test testWebsiteDataDeviceIdHashSalt to
        the init structure.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView): Make sure the media-stream is
        activated in the webView.

2018-10-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add WinCairo to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=188345

        Reviewed by Lucas Forschler.

        * TestResultServer/static-dashboards/builders.jsonp: Regenerated by generate_builders_json.py.
        * TestResultServer/static-dashboards/flakiness_dashboard.js: Added a new platform 'WINCAIRO'.

2018-10-10  Dean Jackson  <dino@apple.com>

        [WHSL -> MSL] Annotate semantics correctly in generated MSL
        https://bugs.webkit.org/show_bug.cgi?id=190452
        <rdar://problem/45178272>

        Reviewed by Myles Maxfield.

        Correctly label the appropriate semantics as [[position]]
        and [[color(N)]].

        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Identify position
        and color attributes. Also use the semantic's index rather than
        a counter.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Use a <pre> for
        output, and only include the actual shader code.

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

        build-webkit --inspector-frontend shouldn't have a nonzero exit code
        https://bugs.webkit.org/show_bug.cgi?id=190430

        Reviewed by Brian Burg.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        --inspector-frontend should only be popped off of argv by determineIsInspectorFrontend;
        it shouldn't be re-inserted as a CLI option by argumentsForConfiguration.

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        Share more WKShareSheet code between macOS and iOS, and fix a few bugs
        https://bugs.webkit.org/show_bug.cgi?id=190420

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        Change the testing mechanism for the share sheet such that we up-front
        set that it should immediately return with a particular state, instead
        of programmatically dismissing the sheet.

        Otherwise, running the tests on macOS doesn't work, because we pop
        a context menu, which spins the runloop and prevents dismissal from
        going through.

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=190429

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:
        (TestWebKitAPI::TEST_F):

2018-10-10  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): Assertion hit under WebPageProxy::didNavigateWithNavigationData()
        https://bugs.webkit.org/show_bug.cgi?id=190418
        <rdar://problem/45059769>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-10  Guillaume Emont  <guijemont@igalia.com>

        [JSCOnly Add an armv7 JSCOnly EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=190191

        Reviewed by Michael Catanzaro.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):
        Add the possibility to pass arguments to run-javascriptcore-tests with
        the JSCTESTS_OPTIONS environment variable
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):


2018-10-09  Guillaume Emont  <guijemont@igalia.com>

        Allow run-javascriptcore-tests to distribute tests between devices
        https://bugs.webkit.org/show_bug.cgi?id=190190

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2018-10-09  Dean Jackson  <dino@apple.com>

        Update WHLSL to Metal tester with semantics
        https://bugs.webkit.org/show_bug.cgi?id=190416
        <rdar://problem/45145139>

        Reviewed by Myles Maxfield.

        A few small changes to the WHLSL to Metal tools:
        - Make it compile by adding some missing JS files :)
        - Add semantics to the default shader
        - Add FIXMEs to the other shaders
        - Create an in-browser test for the WHLSLToMetal codepath
        - Fix typos in the semantics checker

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype._checkSemantics.checkSemanticTypes):
        (Checker.prototype._checkSemantics.checkSemanticForShaderType):
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj:
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Added.

2018-10-09  Jer Noble  <jer.noble@apple.com>

        Crash when closing WKWebView during enter fullscreen animation
        https://bugs.webkit.org/show_bug.cgi?id=190412

        Reviewed by Brian Burg.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewDuringEnterFullscreen.mm: Added.
        (-[CloseWebViewDuringEnterFullscreenUIDelegate _webViewWillEnterFullscreen:]):
        (-[CloseWebViewDuringEnterFullscreenUIDelegate _webViewWillExitFullscreen:]):
        (TestWebKitAPI::TEST):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        Anchor target should be ignored on activation when the download attribute is set
        https://bugs.webkit.org/show_bug.cgi?id=190408

        Reviewed by Geoffrey Garen.

        Update WebKitTestRunner to block popups by default and add support for testRunner.setCanOpenWindows()
        for tests that need popups. This aligns WebKitTestRunner with DumpRenderTree and allows testing
        popup blocking.

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

2018-10-09  Jer Noble  <jer.noble@apple.com>

        WebDriver: thrown ObjC exception under -[WKFullScreenWindowController windowDidFailToEnterFullScreen:] when session is terminated
        https://bugs.webkit.org/show_bug.cgi?id=190098
        <rdar://problem/42822671>

        Reviewed by Brian Burg.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewAfterEnterFullscreen.mm: Added.
        (-[CloseWebViewAfterEnterFullscreenUIDelegate _webViewDidEnterFullscreen:]):
        (-[CloseWebViewAfterEnterFullscreenUIDelegate _webViewDidExitFullscreen:]):
        (TestWebKitAPI::TEST):

2018-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP HID message and packet structure from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=189289
        <rdar://problem/44120310>

        Reviewed by Brent Fulgham.

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

2018-10-09  Chris Dumez  <cdumez@apple.com>

        PSON: Doing a cross-site navigation via the URL bar does not swap process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190378
        <rdar://problem/45059466>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-09  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

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

2018-10-09  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update to GStreamer 1.14.4
        https://bugs.webkit.org/show_bug.cgi?id=190395

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Remove patches merged in 1.14.4 and bump version of GStreamer modules.
        * gstreamer/patches/gst-plugins-good-0007-matroskademux-Allow-Matroska-headers-to-be-read-more.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0009-matroskademux-Parse-successive-Tracks-elements.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch: Removed.

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] API test DragAndDropTests.DropColor is failing on macOS 10.12
        https://bugs.webkit.org/show_bug.cgi?id=190386

        Reviewed by Ryosuke Niwa.

        Unlike macOS 10.13 and 10.14, -[NSColor redColor] is not equivalent to a fully red color in sRGB on macOS 10.12.
        Fix the test by dragging and dropping an NSColor that is equivalent to rgb(255, 0, 0) on all relevant versions
        of macOS.

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

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WK2] Add support for text alignment and text lists in font attributes
        https://bugs.webkit.org/show_bug.cgi?id=190342
        <rdar://problem/44767118>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:

        Add a new API test to check that the font attributes dictionary contains the correct NSParagraphStyles when
        moving the selection around text inside nested list elements.

        (TestWebKitAPI::checkParagraphStyles):

        Add a new helper to check an NSParagraphStyle against expected results.

        (TestWebKitAPI::webViewForTestingFontAttributes):

        Allow each test to pass in the name of the test page to load.

        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/nested-lists.html: Added.

        Add a new test page that contains text enclosed in multiple levels of unordered and ordered lists.

        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html:

        Remove `text-align: left` from one of these elements, to test for NSTextAlignmentNatural.

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebMetalEnabled):
        (WTR::TestRunner::setWebGPUEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-10-08  Commit Queue  <commit-queue@webkit.org>

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

        Causing API test failures in new test (Requested by jernoble
        on #webkit).

        Reverted changeset:

        "ISOTrackEncryptionBox returns incorrect defaultKeyID"
        https://bugs.webkit.org/show_bug.cgi?id=190368
        https://trac.webkit.org/changeset/236941

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-08  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

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

2018-10-08  Alex Christensen  <achristensen@webkit.org>

        Remove WKBundleFileHandleRef
        https://bugs.webkit.org/show_bug.cgi?id=190360

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle_Bundle.cpp: Removed.

2018-10-08  Dan Bernstein  <mitz@apple.com>

        Tools part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * DumpRenderTree/mac/DumpRenderTreeMac.h: Addressed the strict prototype warning.

        * DumpRenderTree/mac/EditingDelegate.mm: Suppressed the deprecated implementations warning
          around deprecated methods or categories on deprecated classes.
        * DumpRenderTree/mac/FrameLoadDelegate.mm: Ditto.
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/mac/TestRunnerMac.mm: Ditto.
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):

        * MiniBrowser/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * MiniBrowser/mac/AppDelegate.h: Addressed the strict prototypes warning.
        * MiniBrowser/mac/WK2BrowserWindowController.m: Removed an unused #import to avoid having to
          address the fact that many of the WebKit C SPI headers trigger the strict prototypes warning.

        * MobileMiniBrowser/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_SUSPICIOUS_MOVE (by fixing a typo),
          CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, and CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj: Let Xcode update
          LastUpgradeCheck and remove the .xcconfig files from the Copy Bundle Resources build phase.

        * TestWebKitAPI/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.
          Made the WebKit headers be treated as system headers to avoid dealing with the fact that
          many C SPI headers trigger the strict prototypes warning.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[BlobDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]):
        (-[RedirectedDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (-[AudioSessionCategoryUIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        (-[RenderInContextWebViewDelegate webViewDidFinishLoad:]):
        (-[RenderInContextWebViewDelegate webView:didFailLoadWithError:]):
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        (-[SetTimeoutFunctionWebViewDelegate webViewDidFinishLoad:]):
        (-[SetTimeoutFunctionWebViewDelegate webView:didFailLoadWithError:]):
        (-[SetTimeoutFunctionWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        (-[DragInfo namesOfPromisedFilesDroppedAtDestination:]):
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropTestWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        (-[SyntheticBackingScaleFactorWindow IGNORE_WARNINGS_END]):
        (-[SyntheticBackingScaleFactorWindow userSpaceScaleFactor]): Deleted.
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo namesOfPromisedFilesDroppedAtDestination:]):

        In all of the above, suppressed the deprecated implementations warning where needed.

        * WebKitTestRunner/Configurations/Base.xcconfig: Enabled ENABLE_STRICT_OBJC_MSGSEND,
          CLANG_WARN_BOOL_CONVERSION, CLANG_WARN_COMMA, CLANG_WARN_CONSTANT_CONVERSION,
          CLANG_WARN_EMPTY_BODY, CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_UNREACHABLE_CODE, CLANG_WARN__DUPLICATE_METHOD_MATCH,
          GCC_WARN_UNDECLARED_SELECTOR, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF,
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          and GCC_NO_COMMON_BLOCKS.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]): Suppressed
          the deprecated implementations warning.

        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::replaceTextAtRange): Addressed an int-conversion warning.

2018-10-07  Yacine Bandou  <yacine.bandou@softathome.com>

        [GStreamer][EME][webm] Add the WebM encrypted content support in matroskademux
        https://bugs.webkit.org/show_bug.cgi?id=189238

        Reviewed by Xabier Rodriguez-Calvar.

        Modifications on GStreamer, tracked in GStreamer bugzilla:
        https://bugzilla.gnome.org/show_bug.cgi?id=797231
        https://bugzilla.gnome.org/show_bug.cgi?id=765275

        * gstreamer/jhbuild.modules: Add new patches.
        * gstreamer/patches/gstreamer-0001-protection-Add-a-new-definition-for-unspecified-syst.patch: Added.
        * gstreamer/patches/gstreamer-0002-protection-Fix-the-string-to-define-unspecified-syst.patch: Added.
        * gstreamer/patches/gst-plugins-good-0011-matroska-Add-the-WebM-encrypted-content-support-in-m.patch: Added.
        * gstreamer/patches/gst-plugins-good-0012-matroskdemux-do-not-use-MapInfo.data-after-unmapping.patch: Added.

2018-10-06  Dan Bernstein  <mitz@apple.com>

        [Xcode] Never build yasm with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=190327

        Reviewed by Youenn Fablet.

        * asan/asan.xcconfig: Allow targets to opt out of building with ASAN by setting
          the WK_ASAN_DISALLOWED build setting to YES (or, actually, anything other than NO or unset).

2018-10-05  Chris Dumez  <cdumez@apple.com>

        Regression(r236862): Crash under DOMWindowExtension::willDetachGlobalObjectFromFrame()
        https://bugs.webkit.org/show_bug.cgi?id=190320
        <rdar://problem/45044814>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2018-10-03  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

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

2018-10-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236866.

        Breaks internal builds.

        Reverted changeset:

        "Add support for reporting "display composited video frames"
        through the VideoPlaybackQuality object."
        https://bugs.webkit.org/show_bug.cgi?id=190266
        https://trac.webkit.org/changeset/236866

2018-10-05  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE][JSC] Use Unified Sources for Platform-specific sources
        https://bugs.webkit.org/show_bug.cgi?id=190300

        Reviewed by Yusuke Suzuki.

        Currently the GTK port already used Unified Sources with the same source files.
        As WPE has conditional code using gmodule, we need to add GLIB_GMODULE_LIBRARIES
        to the list of libraries to link with.

        * TestWebKitAPI/PlatformWPE.cmake:

2018-10-05  Zach Li  <zachli@apple.com>

        Expose whether WKWebProcessPlugInNodeHandle is a select element to clients
        https://bugs.webkit.org/show_bug.cgi?id=190302
        <rdar://problem/45031469>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InjectedBundleNodeHandleIsSelectElement.mm: Added.
        (-[InjectedBundleNodeHandleIsSelectElement verifySelectElementForHTMLElementTag:document:jsContext:expectedResult:failedElementTags:]):
        (-[InjectedBundleNodeHandleIsSelectElement webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[InjectedBundleNodeHandleIsSelectElementDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK2] Expose some more editing SPI on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190232
        <rdar://problem/44963368>

        Reviewed by Tim Horton.

        Adds new API tests to exercise the new SPIs.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm: Added.
        (-[TestWKWebView querySelectorExists:]):
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (-[TestWKWebView collapseToStart]): Deleted.
        (-[TestWKWebView collapseToEnd]): Deleted.
        (-[TestWKWebView stylePropertyAtSelectionStart:]): Deleted.
        (-[TestWKWebView stylePropertyAtSelectionEnd:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView stylePropertyAtSelectionStart:]):
        (-[TestWKWebView stylePropertyAtSelectionEnd:]):
        (-[TestWKWebView collapseToStart]):
        (-[TestWKWebView collapseToEnd]):

        Pull some common testing helpers out of NSFontManager and into TestWKWebView.

2018-10-04  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

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

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190119
        <rdar://problem/44767062>

        Reviewed by Tim Horton.

        Add a new API test that loads a document containing various rich text styles. This test moves the selection
        around the document and checks the last set of font attributes received via the new UI delegate hook.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm: Added.
        (-[FontAttributesListener _webView:didChangeFontAttributes:]):
        (-[FontAttributesListener lastFontAttributes]):
        (-[TestWKWebView selectElementWithIdentifier:]):
        (-[TestWKWebView fontAttributesAfterNextPresentationUpdate]):
        (ColorExpectation::ColorExpectation):
        (ShadowExpectation::ShadowExpectation):
        (checkColor):
        (checkShadow):
        (checkFont):
        (webViewForTestingFontAttributes):
        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html: Added.

2018-10-04  Alan Coon  <alancoon@apple.com>

        Unreviewed, add self as contributor.

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

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Fix some font attribute conversion bugs in preparation for "Font > Styles…" support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=190289
        <rdar://problem/45020806>

        Reviewed by Ryosuke Niwa.

        Add new API tests to exercise two corner cases when using NSFontOptions ("Font > Styles…") to change font
        attributes at the current selection.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/TestFontOptions.h: Copied from Source/WebCore/editing/cocoa/FontAttributesCocoa.mm.
        * TestWebKitAPI/mac/TestFontOptions.mm: Added.

        Introduce TestFontOptions, which wraps the shared NSFontOptions and swizzles `-sharedFontOptions` to return a
        global instance of itself. TestFontOptions supports several testing helpers to add or remove font shadows,
        foreground colors, and background colors.

        (sharedFontOptionsForTesting):
        (+[TestFontOptions sharedInstance]):
        (-[TestFontOptions initWithFontOptions:]):
        (-[TestFontOptions selectedAttributes]):
        (-[TestFontOptions fontOptions]):
        (-[TestFontOptions shadowWidth]):
        (-[TestFontOptions setShadowWidth:]):
        (-[TestFontOptions shadowHeight]):
        (-[TestFontOptions setShadowHeight:]):
        (-[TestFontOptions setShadowBlurRadius:]):
        (-[TestFontOptions setHasShadow:]):
        (-[TestFontOptions foregroundColor]):
        (-[TestFontOptions setForegroundColor:]):
        (-[TestFontOptions backgroundColor]):
        (-[TestFontOptions setBackgroundColor:]):
        (-[TestFontOptions _dispatchFontAttributeChanges]):
        (-[TestFontOptions convertAttributes:]):
        (-[TestFontOptions setSelectedAttributes:isMultiple:]):
        (-[TestFontOptions forwardInvocation:]):

2018-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Move time out control from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=189642
        <rdar://problem/44476765>

        Reviewed by Chris Dumez.

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

2018-10-04  YUHAN WU  <yuhan_wu@apple.com>

        Runtime flag and IDL for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=190018

        Reviewed by Youenn Fablet and Chris Dumez.

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

2018-10-04  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [LayoutTests][Win] Stop wpt server correctly.
        https://bugs.webkit.org/show_bug.cgi?id=190248

        Reviewed by Fujii Hironori.

        Use signal.CTRL_C_EVENT instead of signal.SIGINT for Windows.
        Also refactoring the detection of Windows and cygwin environment check.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.__init__): Check environment once.
        (Executive._should_close_fds):
        (Executive.kill_process):
        (Executive.check_running_pid):
        (Executive.running_pids):
        (Executive.interrupt): Use signal.CTRL_C_EVENT for Windows.
        (Executive.kill_all):
        (Executive._child_process_encoding):
        (Executive._should_encode_child_process_arguments):
        (Executive.popen):
        (Executive.run_in_parallel):

2018-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Convert tests to use navigation client
        https://bugs.webkit.org/show_bug.cgi?id=190153

        Reviewed by Alex Christensen.

        Convert these tests from PagePolicyClient and PageLoaderClient to PageNavigationClient.

        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (TestWebKitAPI::setPagePolicyClient):
        * TestWebKitAPI/Tests/WebKit/ProvisionalURLAfterWillSendRequestCallback.cpp:
        (TestWebKitAPI::didCommitNavigationCallback):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didCommitLoadForFrame): Deleted.

2018-10-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Let clients specify an NSFileWrapper subclassed to be used for _WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=190270

        Reviewed by Wenson Hsieh.

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

2018-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        Enable selectionAcrossShadowBoundariesEnabled by default in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=190238

        Reviewed by Antti Koivisto.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Format > Bold and Format > Italic don't toggle between bold and italic style
        https://bugs.webkit.org/show_bug.cgi?id=179787
        <rdar://problem/35593389>

        Reviewed by Tim Horton.

        Add a test to verify that NSFontManager's selected font is updated when applying italic and bold styles using
        menu items.

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

2018-10-02  Chris Dumez  <cdumez@apple.com>

        REGRESSION: TestWebKitAPI.WKWebView.ProvisionalURLNotChange API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=190176
        <rdar://problem/44925871>

        Reviewed by Alex Christensen.

        Use a URL that is truly recognized as invalid by WebCore's URL parser.

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

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Remove ParsedURLString
        https://bugs.webkit.org/show_bug.cgi?id=190154

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasLinuxPlatformQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk):
        (TestWebKitAPI::TEST):

2018-10-02  Daniel Bates  <dabates@apple.com>

        Fix iOS TestWebKitAPI failures following <https://trac.webkit.org/changeset/236619>
        (https://bugs.webkit.org/show_bug.cgi?id=190017)

        For now swizzle +[UIKeyboard isInHardwareKeyboardMode] to return NO in the following tests:
            WKWebViewAutofillTests.AutofillRequiresInputSession
            DragAndDropTests.ExternalSourceJPEGOnly
            DragAndDropTests.ExternalSourceUTF8PlainTextOnly

        so that the presence of a hardware keyboad does not effect their results. In <https://bugs.webkit.org/show_bug.cgi?id=190211>
        we will look to swizzle this method for all test by default.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-10-02  Dawei Fenton  <realdawei@apple.com>

        Unreviewed, rolling out r236751.

        broke the iOS Build

        Reverted changeset:

        "Fix iOS TestWebKitAPI failures following
        <https://trac.webkit.org/changeset/236619>"
        https://bugs.webkit.org/show_bug.cgi?id=190017
        https://trac.webkit.org/changeset/236751

2018-10-02  Daniel Bates  <dabates@apple.com>

        Fix iOS TestWebKitAPI failures following <https://trac.webkit.org/changeset/236619>
        (https://bugs.webkit.org/show_bug.cgi?id=190017)

        For now swizzle +[UIKeyboard isInHardwareKeyboardMode] to return NO in the following tests:
            WKWebViewAutofillTests.AutofillRequiresInputSession
            DragAndDropTests.ExternalSourceJPEGOnly
            DragAndDropTests.ExternalSourceUTF8PlainTextOnly

        so that the presence of a hardware keyboad does not effect their results. In <https://bugs.webkit.org/show_bug.cgi?id=190211>
        we will look to swizzle this method for all test by default.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-10-01  Dean Jackson  <dino@apple.com>

        Remove CSS Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=190175
        <rdar://problem/44925626>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Use our own check of flatpak repos
        https://bugs.webkit.org/show_bug.cgi?id=190194

        Allowing us to not mess up with user installation
        and "--assumeyes" everywhere.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (FlatpakPackage.__init__):
        (FlatpakPackage.install):
        (FlatpakPackage.update):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Implement a way for the UI process to request typing attributes at the current selection
        https://bugs.webkit.org/show_bug.cgi?id=189983
        <rdar://problem/44648705>

        Reviewed by Ryosuke Niwa.

        Adds new FontManagerTests that exercise -typingAttributesWithCompletionHandler:. See below for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:

        Add a new test that exercises font attribute modification via inspector bar. Also, add a new test that checks
        typing attributes when using subscript/superscript/unscript. Lastly, augment an existing NSFontPanel test to
        additionally check that shadowed text and strike-through are reflected in typing attributes.

        (-[FontManagerTestWKWebView inspectorBarItemIdentifiers]):
        (-[TestWKWebView typingAttributes]):

        Add a synchronous wrapper around `-typingAttributesWithCompletionHandler:` by spinning the runloop.

        (-[TestWKWebView collapseToStart]):
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/mac/TestInspectorBar.h: Copied from Tools/TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h.
        * TestWebKitAPI/mac/TestInspectorBar.mm: Added.

        Introduce subclasses of `__InspectorBarItemController` and `NSInspectorBar` for testing inspector bar interaction.

        (-[TestInspectorBarItemController initWithInspectorBar:]):
        (-[TestInspectorBarItemController inspectorBar]):
        (-[TestInspectorBarItemController updateSelectedAttributes]):
        (-[TestInspectorBar initWithWebView:]):
        (+[TestInspectorBar standardItemControllerClass]):
        (+[TestInspectorBar standardTextItemIdentifiers]):
        (-[TestInspectorBar _setStyleControlSelected:atIndex:]):
        (-[TestInspectorBar chooseFontSize:]):
        (-[TestInspectorBar chooseFontFamily:]):
        (-[TestInspectorBar _chooseColor:inColorWell:]):
        (-[TestInspectorBar chooseForegroundColor:]):
        (-[TestInspectorBar chooseBackgroundColor:]):
        (-[TestInspectorBar formatBold:]):
        (-[TestInspectorBar formatItalic:]):
        (-[TestInspectorBar formatUnderline:]):

        Add helper methods to TestInspectorBar to simulate interacting with various controls (e.g. color wells and font
        styling controls).

        (-[TestInspectorBar itemController]):
        (-[TestInspectorBar setItemController:]):

2018-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Implement icecream and ccache support
        https://bugs.webkit.org/show_bug.cgi?id=190146

        Reviewed by Alejandro G. Castro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.save_config):
        (WebkitFlatpak):
        (WebkitFlatpak.setup_ccache):
        (WebkitFlatpak.setup_icecc):
        (WebkitFlatpak.setup_dev_env):
        * flatpak/org.webkit.WebKit.yaml:

2018-10-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix missing return value in TestController::keyExistsInKeychain

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

2018-10-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Enable WPT tests environment.
        https://bugs.webkit.org/show_bug.cgi?id=190128

        Reviewed by Youenn Fablet.

        Escaping backslash of the path not to confuse the JSON parser.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._prepare_config):

2018-10-01  Ross Kirsling  <ross.kirsling@sony.com>

        [Win][DRT] Actually set "experimental:WebAnimationsCSSIntegrationEnabled" when requested
        https://bugs.webkit.org/show_bug.cgi?id=190150

        Reviewed by Fujii Hironori.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        DRT has been recognizing this field, but not propagating its value to WebPreferences.

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

        Unreviewed, rolling out r236551.

        Fails URL validating too aggressively

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236551

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

        [iOS] Add SPI to customize the input accessory view when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=190152
        <rdar://problem/42754975>

        Reviewed by Dan Bernstein.

        Add an API test to verify that setting a custom input accessory view and custom input view on the form input
        session when focusing an element overrides the first responder's (i.e. WKContentView's) `-inputView` and
        `-inputAccessoryView`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (webViewWithAutofocusedInput):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setWillStartInputSessionHandler:]):
        (-[TestInputDelegate willStartInputSessionHandler]):
        (-[TestInputDelegate _webView:willStartInputSession:]):

2018-10-01  Sihui Liu  <sihui_liu@apple.com>

        Remove StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=189975

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::terminateStorageProcess): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::databaseProcessName): Deleted.
        (WTR::TestController::databaseProcessDidCrash): Deleted.
        (WTR::TestController::terminateStorageProcess): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-10-01  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import a JS CBOR coder
        https://bugs.webkit.org/show_bug.cgi?id=189877
        <rdar://problem/44701124>

        Reviewed by Chris Dumez.

        Add logic to only process privateKeyBase64, userCertificateBase64 and intermediateCACertificateBase64
        only if acceptAttestation is true.

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

2018-10-01  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        The test relies on EventSender to send events to the page synchronously to the page and then uses console.log
        to log those events. It also uses console.log() before sending those events to indicate what the test is about
        to do. Note that console.log() normally causes the WebKitTestRunner to send an asynchronous IPC to the UIProcess
        so that it can log the message.
        The issue is that EventSender uses IPC::SendOption::UseFullySynchronousModeForTesting when sending the
        sync IPC to the UIProcess. This option causes follow-up *asynchronous* IPC sent from the synchronous IPC reply
        handler to be transformed into synchronous IPC.
        As a result, some of the console.log IPC ended up being asynchronous and some other ended up being synchronous.
        Because synchronous and asynchronous IPC is not necessarily processed in-order by the UIProcess, the logged
        messages may end up being out of order, leading to flakiness.

        To address the issue, we now make sure that InjectedBundle::outputText() uses a new IPC::SendOption indicated
        that the IPC should always be sent asynchronously, even if the connection is in fully synchronous mode. As a
        result, all text outputing IPC to the UIProcess will be asynchronous, and thus in order.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::outputText):

2018-10-01  Daniel Bates  <dabates@apple.com>

        [iOS] Special keys are misidentified in DOM keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=189974

        Reviewed by Wenson Hsieh.

        Add support for testing keys Forward Delete and Num Lock / Clear.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

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

        URL should not use TextEncoding internally
        https://bugs.webkit.org/show_bug.cgi?id=190111

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::testUserPass):
        (TestWebKitAPI::TEST_F):

2018-10-01  Daniel Bates  <dabates@apple.com>

        LLDB tests may use wrong configuration of lldbWebKitTester
        https://bugs.webkit.org/show_bug.cgi?id=189011

        Reviewed by Dean Jackson.

        Fixes an issue where the LLDB unit tests may use the wrong configuration of lldbWebKitTester.
        Additionally, add back the unit tests originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).

        Currently the unit tests pick the LLDBWebKitTester binary based on the configuration set by
        script set-webkit-configuration. This may not be the same configuration specified to test-webkitpy.
        So, the unit tests may use the wrong binary. Instead we have test-webkitpy store the path
        to the correct lldbWebKitTester binary that the unit tests should use in an environment variable,
        called LLDB_WEBKIT_TESTER_EXECUTABLE. (We use an environment variable because the test driver,
        test-webkitpy, and the unit tests cannot talk to each other directly due the limitations of
        the Python unittest module, the Python multiprocessing module, and the general principle of unit
        tests - to test code in isolation). The unit tests make use of the value of this environment
        variable to launch lldbWebKitTester binary.

        * Scripts/build-lldbwebkittester: We only support building lldbWebKitTester on Mac for now. Error
        out if this script is invoked for a non-Mac platform.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Build lldbWebKitTester and store the path to it in the environment variable
        LLDB_WEBKIT_TESTER_EXECUTABLE.
        (_build_lldb_webkit_tester): Deleted.
        * lldb/dump_class_layout_unittest.py:
        (TestDumpClassLayout.shouldSkip): Use SystemHost() here and remove the _host global variable as
        this is the only call site that needs the Host object now.
        (TestDumpClassLayout.setUpClass): Take the path to the lldbWebKitTester binary from the value of
        the environment variable LLDB_WEBKIT_TESTER_EXECUTABLE.
        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders): Add back unit test support infrastructure originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).
        * lldb/lldb_webkit_unittest.py:
        (LLDBDebugSession.setup): Take the path to the lldbWebKitTester binary from the value of the environment
        variable LLDB_WEBKIT_TESTER_EXECUTABLE.
        (TestSummaryProviders):
        (TestSummaryProviders.shouldSkip): Skip the tests on non-Mac platforms.
        (TestSummaryProviders.serial_test_WTFHashSet_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_empty):
        (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_simple):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_empty):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple):
        Add back the unit tests originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).

2018-10-01  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] Update install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=190127

        Reviewed by Michael Catanzaro.

        * wpe/install-dependencies:
        libxrandr-dev is needed for gstreamer-vaapi in jhbuild
        It is used by gstvaapidisplay_x11.c.
        Add it only for Apt, already ok for Pacman and DNF.

        Install libevent-dev for WebRTC (like GTK)

        Install libasound2-dev for WebRTC.
        Add it only for Apt, already ok for Pacam and DNF.

        Install libgbm-dev for HeadlessViewBackend, which uses gbm.h

2018-10-01  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add libunwind in the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=190123

        Allowing us to get proper traces in GStreamer trace grabing
        debug functions.

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WebKit.yaml:

2018-09-29  Commit Queue  <commit-queue@webkit.org>

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

        Caused various eventSender tests, including fast/css/pseudo-
        active-style-sharing*, to fail (Requested by smfr on #webkit).

        Reverted changeset:

        "Regression(r236512): http/tests/navigation/keyboard-events-
        during-provisional-navigation.html is flaky"
        https://bugs.webkit.org/show_bug.cgi?id=190052
        https://trac.webkit.org/changeset/236631

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Fix build after r236635
        https://bugs.webkit.org/show_bug.cgi?id=189210

        Unreviewed.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.atomicsNull):
        (tests.numThreads):
        (tests.textureDimensionsNull):

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Allow uniform buffers to be used in the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=189210

        Reviewed by Filip Pizlo.

        Every lvalue is associated with an address space, and the propagation of these address spaces
        matches the propagation of lvalues. Luckily, there was already the infrastructure to do most
        of this, so this patch just goes the last few yards. It also updates the standard library to
        allow for writing into all writable address spaces for out-params.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitAssignment):
        (Checker.prototype._finishVisitingPropertyAccess):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        (Intrinsics.checkFalse):
        (Intrinsics):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.threadArrayRefLoad):
        (tests.threadArrayRefLoadIntLiteral):
        (tests.deviceArrayRefLoad):
        (tests.threadArrayRefStore):
        (tests.deviceArrayRefStore):
        (tests.deviceArrayRefStoreIntLiteral):
        (tests.threadPointerLoad):
        (tests.threadPointerStore):
        (tests.devicePointerLoad):
        (tests.devicePointerStore):
        (tests.arrayLoad):
        (tests.constantAddressSpace):
        (tests.standardLibraryDevicePointers):
        (tests.threadArrayLoad): Deleted.
        (tests.threadArrayLoadIntLiteral): Deleted.
        (tests.deviceArrayLoad): Deleted.
        (tests.threadArrayStore): Deleted.
        (tests.deviceArrayStore): Deleted.
        (tests.deviceArrayStoreIntLiteral): Deleted.

2018-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        No DOM API to instantiate an attachment for an img element
        https://bugs.webkit.org/show_bug.cgi?id=189934
        <rdar://problem/44743222>

        Reviewed by Ryosuke Niwa.

        Adds 3 new API tests in WKAttachmentTests:

        `AddAttachmentToConnectedImageElement` verifies that an image element that's already in the document can gain an
        attachment element via `HTMLAttachmentElement.getAttachmentIdentifier`.

        `ChangeFileWrapperForPastedImage` verifies that an image that has been pasted produces a _WKAttachment in the UI
        process, and changing the file wrapper of that _WKAttachment changes the pasted image.

        `ConnectImageWithAttachmentToDocument` verifies that script can create an image element, ensure that it has an
        attachment, and set a file wrapper for the generated _WKAttachment. Connecting the image to the document should
        then result in an image element with the contents of the _WKAttachment's file wrapper.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView imageElementSize]):
        (-[TestWKWebView waitForImageElementSizeToBecome:]):
        (TestWebKitAPI::TEST):
        (-[TestWKWebView waitForAttachmentElementSizeToBecome:]): Deleted.

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        The test relies on EventSender to send events to the page synchronously to the page and then uses console.log
        to log those events. It also uses console.log() before sending those events to indicate what the test is about
        to do. Note that console.log() normally causes the WebKitTestRunner to send an asynchronous IPC to the UIProcess
        so that it can log the message.
        The issue is that EventSender uses IPC::SendOption::UseFullySynchronousModeForTesting when sending the
        sync IPC to the UIProcess. This option causes follow-up *asynchronous* IPC sent from the synchronous IPC reply
        handler to be transformed into synchronous IPC.
        As a result, some of the console.log IPC ended up being asynchronous and some other ended up being synchronous.
        Because synchronous and asynchronous IPC is not necessarily processed in-order by the UIProcess, the logged
        messages may end up being out of order, leading to flakiness.

        To address the issue, we now make sure that InjectedBundle::outputText() uses a new IPC::SendOption indicating
        that the IPC should always be sent asynchronously, even if the connection is in fully synchronous mode. As a
        result, all text outputing IPC to the UIProcess will be asynchronous, and thus in order.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::outputText):

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Pointers should have automatically-generated equality checks
        https://bugs.webkit.org/show_bug.cgi?id=189986

        Reviewed by Filip Pizlo.

        C allows for pointer equality, and we need it so people can do null checks.
        This is generated the same way all our other NativeFuncs are generated - by Checker
        creating NativeFuncs inside CallExpression.resolve().

        This patch also does some general cleanup.

        * WebGPUShadingLanguageRI/All.js: Everything the late checker does is no longer necessary.
        The last thing it was doing was making sure that only primitive types are in resources, but
        it's totally reasonable to put structs and arrays in resources, so I removed this pass. We
        still have to add a check to make sure resources can't live within resources, but I expect
        that will be done in the same place that semantics are checked.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:
        (allocateAtEntryPoints.updateFunction.UpdateFunctions.prototype._addVariableDeclaration):
        Name the global struct for debugging purposes.
        * WebGPUShadingLanguageRI/CallExpression.js: 
        (CallExpression.prototype._resolveByInstantiation): Cleanup
        (CallExpression.prototype._resolveWithOperatorAnderIndexer): Ditto
        (CallExpression.prototype._resolveWithOperatorLength): Ditto
        (CallExpression.prototype._resolveWithReferenceComparator): Add support to automatically
        generate pointer equality NativeFuncs.
        * WebGPUShadingLanguageRI/EPtr.js: Implement pointer equality in the interpreter.
        * WebGPUShadingLanguageRI/LateChecker.js: Removed.
        * WebGPUShadingLanguageRI/LayoutBuffers.js: Renamed from Tools/WebGPUShadingLanguageRI/LateCheckAndLayoutBuffers.js.
        (layoutBuffers):
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj:
        * WebGPUShadingLanguageRI/NativeFunc.js:
        * WebGPUShadingLanguageRI/OperatorArrayRefLength.js:
        (OperatorArrayRefLength.prototype.instantiateImplementation):
        (OperatorArrayRefLength):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.ternaryExpression):
        (tests.break): Speed up testing time
        (tests.doWhile): Ditto
        (tests.forLoop): Ditto
        (tests.atomics): Ditto
        (tests.atomicsNull): Ditto
        (tests.pointerEquality): Test pointer equality
        (tests.standardLibraryDevicePointers):
        (tests.devicePtrPtr): Deleted.
        (tests.threadgroupPtrPtr): Deleted.
        (tests.constantPtrPtr): Deleted.
        * WebGPUShadingLanguageRI/index.html:

2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish WebAuthN auto-test environment
        https://bugs.webkit.org/show_bug.cgi?id=189283
        <rdar://problem/44117828>

        Reviewed by Chris Dumez.

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

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Drop support for cross-origin-window-policy header
        https://bugs.webkit.org/show_bug.cgi?id=190081

        Reviewed by Ryosuke Niwa.

        190081_DropCrossOriginWindowPolicy

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

2018-09-28  Koby Boyango  <koby.b@mce.systems>

        [WTF] Add ExternalStringImpl, a StringImpl for user controlled buffers
        https://bugs.webkit.org/show_bug.cgi?id=189991

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for Mojave queues
        https://bugs.webkit.org/show_bug.cgi?id=190068

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Mojave
        https://bugs.webkit.org/show_bug.cgi?id=189935

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove trigger, update bot assignment.

2018-09-24  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Mojave
        https://bugs.webkit.org/show_bug.cgi?id=189935

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Increase the timeout for iOS Simulator data migration
        https://bugs.webkit.org/show_bug.cgi?id=190059

        Reviewed by Aakash Jain.

        3 minutes isn't always enough time for the data migrator to complete
        when booting up multiple iOS Simulators. Change the timeout to 10 minutes.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager): Create a constant for the default timeout.
        (SimulatedDeviceManager.initialize_devices): Use new constant.
        (SimulatedDeviceManager.swap): Ditto.
        (SimulatedDeviceManager.wait_until_data_migration_is_done): Ditto.

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLParser should use TextEncoding through an abstract class
        https://bugs.webkit.org/show_bug.cgi?id=190027

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        iOS Simulator bots should pass '--dedicated-simulators' to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=190042

        Reviewed by Aakash Jain.

        To make iOS Simulator bots resilient to issues that can arise from reusing
        existing simulators, ensure that dedicated simulators are created for each test run.

        * Scripts/webkitpy/common/config/ports.py:
        (IOSSimulatorWK2Port.run_webkit_tests_command):

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::originalDataAsString):
        (TestWebKitAPI::TEST):

2018-09-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win][WebKit] Implement authentication dialog on MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=189846

        Reviewed by Fujii Hironori.

        It was implemented for WebKitLegacy, but not for WebKit.
        Also added text field to display Realm information.

        * MiniBrowser/win/Common.cpp:
        (authDialogProc):
        (askCredential):
        (displayAuthDialog): Deleted.
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString):
        (createUTF8String):
        (createWKString):
        (createWKURL):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):
        (toNullTerminatedUTF8): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:

2018-09-27  Youenn Fablet  <youenn@apple.com>

        Enable getUserMedia in mini browser
        https://bugs.webkit.org/show_bug.cgi?id=190012

        Reviewed by Eric Carlson.

        Enable MediaDevices and mock capture devices.
        Grant mock devices access to any getUserMedia call.
        Covered by manual testing.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[WK2BrowserWindowController _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):

2018-09-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Dean Jackson.

        * DumpRenderTree/TestOptions.h:

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r236524.

        Broke API tests

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236524

2018-09-26  James Savage  <james.savage@apple.com>

        Allow override of viewport configuration.
        https://bugs.webkit.org/show_bug.cgi?id=188772.
        <rdar://problem/43538892>.

        Reviewed by Simon Fraser.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader): Parse new test option key from comments.
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest): Handle new test option by
        modifying the web view's preferences accordingly.

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLs with mismatched surrogate pairs in the host should fail to parse
        https://bugs.webkit.org/show_bug.cgi?id=190005

        Reviewed by Chris Dumez.

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

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979
        <rdar://problem/44119696>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Selection should work across shadow boundary when initiated by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=151380
        <rdar://problem/24363872>

        Reviewed by Wenson Hsieh.

        Added the support for internal:selectionAcrossShadowBoundariesEnabled test option.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        MiniBrowser doesn't respect default enabled-ness of experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189989

        Reviewed by Simon Fraser.

        When the preference isn't found in user defaults, use the default value of each feature's enabledness.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):

2018-09-26  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Bump to apr 1.6.5

        Version 1.6.3 is no longer available on Apache's website.

        Rubber-stamped by Michael Catanzaro.

        * flatpak/org.webkit.WebKit.yaml:

2018-09-25  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279
        <rdar://problem/44116792>

        Reviewed by Chris Dumez.

        Besides the functionality to set the WebAuthenticationMockConfiguration. Three operations are
        added to manipulate Keychain: addTestKeyToKeychain, cleanUpKeychain and keyExistedInKeychain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/LocalAuthenticator.mm: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::addTestKeyToKeychain):
        (WTR::TestRunner::cleanUpKeychain):
        (WTR::TestRunner::isKeyExisted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::isKeyExisted):
        (WTR::TestController::setWebAuthenticationMockConfiguration):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistedInKeychain):

2018-09-25  Sihui Liu  <sihui_liu@apple.com>

        Move Service Worker Management from Storage Process to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189422

        Reviewed by Youenn Fablet.

        Change a check in ServiceWorkers.HasServiceWorkerRegistrationBit as storage process is not
        launched during service worker operations now.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-09-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Update constraints supported by getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=189930
        <rdar://problem/44740305>

        Unreviewed, fix test broken by r236465.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):

2018-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHSL] Implement semantics
        https://bugs.webkit.org/show_bug.cgi?id=189134

        Reviewed by Filip Pizlo.

        This patch adds parsing support and adds the checks required to support HLSL-style semantics.

        There are 3 places where semantics are allowed:

        1. In a field in a struct. E.g.

        struct R {
            float4 position : SV_Position;
        }
        vertex R foo() {
            ...
        }

        2. In a parameter of a function. If the function is not an entry point, the semantic is ignored.

        compute void foo(device float[] data : buffer(u0)) {
            ...
        }

        3. On a function. This is so you don't have to create structs for the return types of simple vertex shaders.

        vertex float4 foo() : SV_Position {
            ...
        }

        The semantics are partitioned into 4 types:

        1. Built-in variables. For example, : SV_Position.
        2. Resources. For example, : register(u0).
        3. Stage-in / stage-out variables. For example, : attribute(0).
        4. Specialization constants. For example, : specialized.

        The semantics are validated according to a collection of rules:

        - The same entry point can't list the same semantic twice
        - Each built-in type has an appropriate type that is listed in the spec. 
        - Each built-in is appropriate as either an input or an output of a particular shader stage
        - Resource semantics have to have the appropriate type (e.g. can't use register(s0) on a buffer)
        - Resources can't be output from entry points
        - The resource semantic mode must match the address space of the resource
        - Stage-in and stage-out variables have to be POD
        - Specialization constants can't be output from entry points, and have to be numbers

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/BuiltInSemantic.js: Added.
        (BuiltInSemantic):
        (BuiltInSemantic.prototype.get name):
        (BuiltInSemantic.prototype.get extraArguments):
        (BuiltInSemantic.prototype.isAcceptableType):
        (BuiltInSemantic.prototype.isAcceptableForShaderType):
        (BuiltInSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype._resolveWithOperatorAnderIndexer):
        (CallExpression.prototype._resolveWithOperatorLength):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker):
        (Checker.prototype.visitProgram):
        (Checker.prototype._checkSemantics.Item):
        (Checker.prototype._checkSemantics.Item.prototype.get type):
        (Checker.prototype._checkSemantics.Item.prototype.get semantic):
        (Checker.prototype._checkSemantics.Gatherer):
        (Checker.prototype._checkSemantics.Gatherer.prototype.reset):
        (Checker.prototype._checkSemantics.Gatherer.prototype.set currentSemantic):
        (Checker.prototype._checkSemantics.Gatherer.prototype.get currentSemantic):
        (Checker.prototype._checkSemantics.Gatherer.prototype.get result):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitEnumType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitVectorType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitMatrixType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitNativeType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitStructType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitTypeRef):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitPtrType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitArrayRefType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitArrayType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitFuncParameter):
        (Checker.prototype._checkSemantics.checkDuplicateSemantics):
        (Checker.prototype._checkSemantics.checkSemanticTypes):
        (Checker.prototype._checkSemantics.checkSemanticForShaderType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitEnumType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitArrayType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitVectorType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitMatrixType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitNativeType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitPtrType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitArrayRefType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitStructType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitTypeRef):
        (Checker.prototype._checkSemantics.PODChecker):
        (Checker.prototype._checkSemantics.checkPODData):
        (Checker.prototype._checkSemantics):
        (Checker.prototype._checkShaderType):
        (Checker.prototype._checkOperatorOverload):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype.visitEnumType):
        (Checker.prototype.visitArrayType):
        (Checker.prototype.visitMakePtrExpression):
        (Checker.prototype.visitMakeArrayRefExpression):
        (Checker.prototype._finishVisitingPropertyAccess):
        (Checker.prototype.visitIndexExpression):
        (Checker.prototype.visitReturn):
        (Checker.prototype.visitSwitchStatement):
        (Checker.prototype.visitTernaryExpression):
        (Checker.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/Field.js:
        (Field):
        (Field.prototype.get semantic):
        (Field.prototype.toString):
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get semantic):
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncParameter.js:
        (FuncParameter):
        (FuncParameter.prototype.get semantic):
        (FuncParameter.prototype.toString):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype.visitReferenceType):
        (LateChecker):
        (LateChecker.prototype._checkShaderType): Deleted.
        (LateChecker.prototype.visitFuncDef): Deleted.
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseParameter):
        (parseFuncDecl):
        (parseFuncDef):
        (parseStageInOutSemantic):
        (parseResourceSemantic):
        (parseSpecializationConstantSemantic):
        (parseBuiltInSemantic):
        (parseField):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js:
        (programWithUnnecessaryThingsRemoved):
        * WebGPUShadingLanguageRI/ResourceSemantic.js: Added.
        (ResourceSemantic):
        (ResourceSemantic.prototype.get resourceMode):
        (ResourceSemantic.prototype.get index):
        (ResourceSemantic.prototype.get space):
        (ResourceSemantic.prototype.isAcceptableType):
        (ResourceSemantic.prototype.isAcceptableForShaderType):
        (ResourceSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFuncParameter):
        (Rewriter.prototype.visitField):
        (Rewriter.prototype.visitBuiltInSemantic):
        (Rewriter.prototype.visitResourceSemantic):
        (Rewriter.prototype.visitStageInOutSemantic):
        (Rewriter.prototype.visitSpecializationConstantSemantic):
        (Rewriter):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/Semantic.js: Added.
        (Semantic):
        (Semantic.prototype.get origin):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitBuiltInSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitResourceSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitStageInOutSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitSpecializationConstantSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer):
        (Semantic.prototype.equalToOtherSemantic):
        * WebGPUShadingLanguageRI/SpecializationConstantSemantic.js: Copied from Tools/WebGPUShadingLanguageRI/Field.js.
        (SpecializationConstantSemantic):
        (SpecializationConstantSemantic.prototype.isAcceptableType):
        (SpecializationConstantSemantic.prototype.isAcceptableForShaderType):
        (SpecializationConstantSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/StageInOutSemantic.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (StageInOutSemantic):
        (StageInOutSemantic.prototype.get index):
        (StageInOutSemantic.prototype.isAcceptableType):
        (StageInOutSemantic.prototype.isAcceptableForShaderType):
        (StageInOutSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeFunc):
        * WebGPUShadingLanguageRI/SynthesizeArrayOperatorLength.js:
        (synthesizeArrayOperatorLength):
        * WebGPUShadingLanguageRI/SynthesizeCopyConstructorOperator.js:
        (synthesizeCopyConstructorOperator):
        * WebGPUShadingLanguageRI/SynthesizeDefaultConstructorOperator.js:
        (synthesizeDefaultConstructorOperator):
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js:
        (synthesizeEnumFunctions):
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        (setupAnder):
        (synthesizeStructAccessorsForStructType):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderTypes):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncParameter):
        (Visitor.prototype.visitField):
        (Visitor.prototype.visitBuiltInSemantic):
        (Visitor.prototype.visitResourceSemantic):
        (Visitor.prototype.visitStageInOutSemantic):
        (Visitor.prototype.visitSpecializationConstantSemantic):
        (Visitor):
        * WebGPUShadingLanguageRI/index.html:

2018-09-25  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Test suite for Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=187738

        Reviewed by Myles C. Maxfield.

        This patch adds an Xcode project that contains a Cocoa app that can be
        used for running WHLSL shaders on the GPU. It also contains an Xcode
        test suite that runs all of the tests in Test.js on the GPU.

        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/.gitignore: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/AppIcon.appiconset/Contents.json: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/Contents.json: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Base.lproj/Main.storyboard: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Info.plist: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/WHLSL.entitlements: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/_SharedMetal.txt: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/main.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/Info.plist: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/WHLSL_ToyTests.m: Added.
        * WebGPUShadingLanguageRI/Test.js:
        (tests.lotsOfLocalVariables):

2018-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix after r236455
        https://bugs.webkit.org/show_bug.cgi?id=189121

        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderStages):

2018-09-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Not all functions should be able to run in all shader stages
        https://bugs.webkit.org/show_bug.cgi?id=189121

        Reviewed by Filip Pizlo.

        ddx() and ddy() can only run in fragment shaders, and the barrier functions can only run in compute shaders.
        ddx_coarse() & friends are currently implemented as just calling ddx(), so we only need to modify those functions
        if/when we make them native.

        The texture sampling functions that use implicit derivatives can run in any shader stage - they just use a LOD of
        0. Therefore, those functions are unchanged.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        (NativeFunc.prototype.get stage):
        (NativeFunc.prototype.toDeclString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseFuncDecl):
        (parseNativeFunc):
        (parseNative):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeFunc):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderStages):
        * WebGPUShadingLanguageRI/WSyntaxError.js:
        (WSyntaxError.prototype.toString):
        (WSyntaxError):
        * WebGPUShadingLanguageRI/index.html:

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Implement trap statements in Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=189615

        Reviewed by Myles C. Maxfield.

        Each function called by an entry point now receives an additional
        boolean pointer parameter, which is set to false if the function traps.
        After each function call (to a non-native function) this trap parameter
        is checked. The behavior of the interpreter has also been updated so
        that a function entry point catches the trap and instead returns zero,
        matching the behavior of compiled code.

        * WebGPUShadingLanguageRI/Evaluator.js: Adds a new flag to allow the
        test suite to check for traps and also returns zero from entry points
        whose invocation trapped.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Pass program to function
        declarations.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Update dependencies.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Add program
        property.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Ditto.
        * WebGPUShadingLanguageRI/Metal/MSLInsertTrapParameter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Conforms to the
        new trapping behavior.
        * WebGPUShadingLanguageRI/Test.js: Update tests that trap.

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] It shouldn’t be possible to use ternary expressions as l-values
        https://bugs.webkit.org/show_bug.cgi?id=189290

        Reviewed by Myles C. Maxfield.

        It is no longer possible for a ternary expression to be treated as an
        l-value. This patch adds several test cases to verify that this is the
        case.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitTernaryExpression): No longer check isLValue.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver:
        (NormalUsePropertyResolver.visitTernaryExpression): Deleted.
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitTernaryExpression): No longer copy isLValue.
        * WebGPUShadingLanguageRI/TernaryExpression.js:
        (TernaryExpression):
        (TernaryExpression.prototype.get elseExpression):
        (TernaryExpression.prototype.get isLValue): Deleted.
        (TernaryExpression.prototype.set isLValue): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (tests.ternaryExpression): Add checks for failure if a failure is used
        as an l-value.
        (ternaryExpressionIsLValue.node.TernaryExpressionVisitor.prototype.visitTernaryExpression): Deleted.
        (ternaryExpressionIsLValue.node.TernaryExpressionVisitor): Deleted.
        (tests.ternaryExpressionIsLValue): Deleted.

2018-09-24  Jer Noble  <jer.noble@apple.com>

        SharedBuffer should have an equality test
        https://bugs.webkit.org/show_bug.cgi?id=189919

        Reviewed by Alex Christensen.

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

2018-09-24  Alex Christensen  <achristensen@webkit.org>

        Prepare to replace WKBundleFileHandleCreateWithPath with a version that takes a WKBundlePageRef
        https://bugs.webkit.org/show_bug.cgi?id=189929

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle_Bundle.cpp:

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Casting user-created types to themselves should always work
        https://bugs.webkit.org/show_bug.cgi?id=189113

        Reviewed by Myles C. Maxfield.

        Casting user-defined types to themselves worked already, but we didn't
        test it anywhere.

        * WebGPUShadingLanguageRI/Test.js:
        (tests.selfCasts):

2018-09-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for Jhbuild-using ports.

        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch:
        Adjust the patch so it applies cleanly on the 1.14.3 version of the
        gst-plugins-good package.

2018-09-24  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for iOS 12 queues
        https://bugs.webkit.org/show_bug.cgi?id=189688

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Unreviewed build fix.

        A GStreamer patch was not applying cleanly on 1.14.3.

        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use no-more-pads event for noticing initialization segments
        https://bugs.webkit.org/show_bug.cgi?id=189868

        Reviewed by Xabier Rodriguez-Calvar.

        Added patch from https://bugzilla.gnome.org/show_bug.cgi?id=797187

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch: Added.

2018-09-24  Alicia Boya García  <aboya@igalia.com>
        [MSE][GStreamer] Add patch to jhbuild: matroskademux: Allow Matroska headers to be read more than once
        https://bugs.webkit.org/show_bug.cgi?id=185731

        Reviewed by Xabier Rodriguez-Calvar.

        Upstream bug in GStreamer: https://bugzilla.gnome.org/show_bug.cgi?id=793333

        This fixes YTTV 35. AppendMultipleInitOpusAudio (and any other use
        case where two WebM initialization segments are appended on a row).

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0007-matroskademux-Allow-Matroska-headers-to-be-read-more.patch: Added.
        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch: Added.
        * gstreamer/patches/gst-plugins-good-0009-matroskademux-Parse-successive-Tracks-elements.patch: Added.

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHSL] Need grammar to specify kernel group size
        https://bugs.webkit.org/show_bug.cgi?id=189108

        Reviewed by Dean Jackson.

        In HLSL, compute functions are annotated with their workgroup size.
        For example,

        [numthreads(3, 4, 5)] compute void foo(...) { ... }

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get attributeBlock):
        * WebGPUShadingLanguageRI/FuncAttribute.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (FuncAttribute):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncNumThreadsAttribute.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (FuncNumThreadsAttribute):
        (FuncNumThreadsAttribute.prototype.get x):
        (FuncNumThreadsAttribute.prototype.get y):
        (FuncNumThreadsAttribute.prototype.get z):
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseAttributeBlock):
        (parseFuncDecl):
        (parseFuncDef):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitFuncDef):
        (StatementCloner.prototype.visitFuncNumThreadsAttribute):
        (StatementCloner):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.numThreads):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncNumThreadsAttribute):
        (Visitor):
        * WebGPUShadingLanguageRI/index.html:

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Native functions which accept pointers need to do null checks
        https://bugs.webkit.org/show_bug.cgi?id=189883

        Reviewed by Dean Jackson.

        Simply guard all the places where we write through an author-provided pointer.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.textureDimensionsNull):

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement atomic operations and barriers
        https://bugs.webkit.org/show_bug.cgi?id=189025

        Reviewed by Dean Jackson.

        In the interpreter, atomic operations don't need to be atomic.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.atomics):

2018-09-22  Thibault Saunier  <tsaunier@igalia.com>

        [WPE] Be very permissive in the MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=189800

        This is just a test tool and we should make
        it just work, security and privacy is not really
        a primary focus here.

        Reviewed by Žan Doberšek.

        * MiniBrowser/wpe/main.cpp:
        (decidePermissionRequest):
        (main):

2018-09-21  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Local variables should be statically allocated
        https://bugs.webkit.org/show_bug.cgi?id=188402

        Reviewed by Myles C. Maxfield.

        An additional preparation stage is now performed so that all local
        variables and function parameters are allocated in a single struct at
        entry points. A pointer to this struct is then passed for function
        calls.

        * WebGPUShadingLanguageRI/All.js: Update dependencies.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js: Added new stage.
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype.set argumentList): Add setter because
        allocateAtEntryPoints needs to change this.
        * WebGPUShadingLanguageRI/EBufferBuilder.js: Remove a redundant
        constructor that wasn't used anywhere.
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.set parameters): Add setter.
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef.prototype.set body): Ditto.
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare): Add call to allocateAtEntryPoints. This call cannot
        happen any earlier because it depends on having types for call
        arguments.
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitReturn): Resolve issue where the return
        statement's function wasn't copied. A null check is required as the
        Rewriter might be used before this property is set.
        * WebGPUShadingLanguageRI/SPIRV.html: Update dependencies.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Abstracted logic
        into a separate function so that allocateAtEntryPoints can create the
        accessors for the struct type it introduces.
        * WebGPUShadingLanguageRI/Test.html: Update dependencies.
        * WebGPUShadingLanguageRI/Test.js: Add new tests to verify the static
        allocation transform works safely.
        * WebGPUShadingLanguageRI/index.html: Update dependencies.

2018-09-21  Jonathan Bedard  <jbedard@apple.com>

        Bring up queues for iOS 12 (Build fix)
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Unreviewed build fix.

        We should not build ImageDiff as x86 by default since 32 bit projects are
        deprecated in Xcode. ImageDiff should only be built once.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

2018-09-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Built RPM of WPE webkit fails to install with "nothing provides libWPEToolingBackends.so()"
        https://bugs.webkit.org/show_bug.cgi?id=189797

        Reviewed by Žan Doberšek.

        * wpe/backends/CMakeLists.txt: Make libWPEToolingBackends a static library to avoid
        the need for installing it. This works fine because the library only contains utility
        code intended to be reused from other various components (MiniBrowser, WebKitTestRunner).

2018-09-20  Daniel Bates  <dabates@apple.com>

        Move IOKitSPI.h from TestRunnerShared to PAL
        https://bugs.webkit.org/show_bug.cgi?id=189804

        Reviewed by Wenson Hsieh.

        Towards fixing <https://bugs.webkit.org/show_bug.cgi?id=189604> move the IOKit SPI forward
        declarations to PAL so that they can be shared by WebKit, DumpRenderTree and WebKitTestRunner.

        No functionality changed. So, no new tests.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm:
        * TestRunnerShared/spi/UIKitTestSPI.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:

2018-09-20  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=187735

        Reviewed by Myles C. Maxfield.

        Adds support for generating Metal Shading Language from WHLSL. Clients
        should include the file MetalCodegenAll.js and then call whlslToMsl
        with their program source code to compile to Metal.

        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType.prototype.get arrayRefType): Adds the arrayRefType method to
        all types to find the type of that expression when it is used in a
        MakeArrayRefExpression.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js:
        (MakeArrayRefExpression):
        (MakeArrayRefExpression.prototype.get type): Uses the new arrayRefType
        getter on all types to find the type of the expression.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLCompileResult.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLConstexprEmitter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionForwardDeclaration.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLNameMangler.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLNativeFunctionCall.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributes.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributesMap.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeUnifier.js: Added.
        * WebGPUShadingLanguageRI/Metal/TypeOf.js: Added.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.js: Added.
        * WebGPUShadingLanguageRI/PropertyResolver.js:
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        * WebGPUShadingLanguageRI/Test.js: Added awkward tests for the compiler
        to generate code for.
        (tests.incrementAndDecrement):
        (tests.returnIntLiteralUint):
        (tests.returnIntLiteralFloat):
        (tests.nestedSubscriptWithArraysInStructs):
        (tests.nestedSubscript):
        (tests.lotsOfLocalVariables):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get arrayRefType): See above.

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12@2x.png: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/iOS12@2x.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Move EWS bubbles to the iOS 12 section of the dashboard.

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/iOS12@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-12 img.logo):
        (table.queue-grid tr.platform.ios-12 img.logo):
        (table.queue-grid tr.platform.ios-simulator-11 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-11 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2018-09-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] TestRunner::queueLoad() fails to generate correct url for some urls.
        https://bugs.webkit.org/show_bug.cgi?id=189679

        Reviewed by Fujii Hironori.

        Replace the implementation with correct API call.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::queueLoad): Call UrlCombineW.

2018-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] fails to build on ARM arches complaining about undefined reference to `epoxy_eglMakeCurrent'
        https://bugs.webkit.org/show_bug.cgi?id=189556

        Reviewed by Konstantin Tokarev.

        This is only a speculative build fix as I didn't attempt to reproduce. Explicitly link to
        libepoxy.

        * wpe/backends/CMakeLists.txt:

2018-09-20  Daniel Bates  <dabates@apple.com>

        [iOS] Support testing more hardware special keys
        https://bugs.webkit.org/show_bug.cgi?id=189793

        Reviewed by Simon Fraser.

        * TestRunnerShared/spi/IOKitSPI.h: Add more SPI constants.
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey): Extracted out logic from hidUsageCodeForCharacter() to return the
        key code for the F1, F2, ..., F12 keys and extended the code to compute the key code for the
        F13, F14, ..., F24 keys.
        (hidUsageCodeForCharacter): Modified to call keyCodeForDOMFunctionKey().

2018-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove accidentally-committed debugging changes from flatpakutils script

        Aaaaaah maybe this is why changes are supposed to be reviewed.

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

2018-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, manually rollout our switch to master runtime

        Phil wants html5-codecs, which aren't available yet here. Let's switch back to 3.28 in the
        meantime, where we were already building GStreamer ourselves anyway. But use an updated
        SDK revision.

        * flatpak/files/httpd-autogen.sh: Added.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        * flatpak/org.webkit.GTK.yaml:
        * flatpak/org.webkit.WebKit.yaml:
        * flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch: Added.
        * flatpak/patches/libgcrypt-0001-Use-pkg-config-to-detect-gpg-error.patch: Added.

2018-09-20  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK] webkit-flatpak intercepts --help for other commands
        https://bugs.webkit.org/show_bug.cgi?id=189058

        The approach of run_in_sandbox_if_available is that we basically have the
        same set of arguments to setup the sandbox (ie. port name, build type, etc...)
        and we can pass those args first to setup the flatpak launcher object
        and then to the underlying script. That doesn't work well with the `--help` argument
        as once processed it 1. prints the help (which make no sense to the user of the calling script)
        2. exits the app - The solution is to just make sure that `--help` is not used when using
        flatpakutils from any script that is not `webkit-flatpak` itself.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (run_in_sandbox_if_available):

2018-09-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add W3C imported tests to the MSEEME watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2018-09-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fix the Streams API watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2018-09-19  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessProxy::suspendedPageWasDestroyed(WebKit::SuspendedPageProxy&)
        https://bugs.webkit.org/show_bug.cgi?id=189721
        <rdar://problem/44359788>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-19  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Improve test suite type safety
        https://bugs.webkit.org/show_bug.cgi?id=189502

        Reviewed by Myles C. Maxfield.

        Each of the 'makeT' functions now call the relevant cast function on the
        value before hand. The checkNumber function has also been removed and
        its uses have been replaced with functions that also check the type.
        Some of the arithmetic checks have been updated to reflect that the
        casts happen outside of WHLSL evaluation. Other tests have also been
        updated to reflect that some values cannot be precisely expressed in
        32-bit floating point.

        * WebGPUShadingLanguageRI/Casts.js:
        (castToBool): Added.
        (castAndCheckValue): Added.
        (isBitwiseEquivalent): Moved from Intrinsics.js.
        * WebGPUShadingLanguageRI/Intrinsics.js: Ditto.
        * WebGPUShadingLanguageRI/SPIRV.html: Update depdencies.
        * WebGPUShadingLanguageRI/Test.html: Ditto.
        * WebGPUShadingLanguageRI/Test.js: Update makeT functions to do a cast
        and check the result. Some tests were also updated to reflect the change
        in the behavior of these functions.
        * WebGPUShadingLanguageRI/index.html: Update dependencies.

2018-09-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add optional cap on partitioned cache max age
        https://bugs.webkit.org/show_bug.cgi?id=189711
        <rdar://problem/39246837>

        Reviewed by Antti Koivisto and Chris Dumez.

        This change adds infrastructure for layout tests of capped cache max age.

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

2018-09-19  Dawei Fenton  <realdawei@apple.com>

       Unreviewed. Update my email and alias in list of contributors.

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

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, try #3 to fix a typo

        I feel like Charlie Brown, how hard this has been for me....

        * Scripts/run-minibrowser:
        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailable):
        (runInFlatpakIfAvailible): Deleted.

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, fix that typo in more places

        It got copied into webkitdirs.pm!

        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailible):
        (runInFlatpakIfAvalaible): Deleted.

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, fix a pervasive typo in the webkit-flatpak script

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.run):

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, update to latest GNOME SDK

        * flatpak/org.webkit.WebKit.yaml:

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r235500.

        Time to switch back to master runtime

        Reverted changeset:

        "Unreviewed, rolling out r235114."
        https://bugs.webkit.org/show_bug.cgi?id=188731
        https://trac.webkit.org/changeset/235500

2018-09-19  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Add Pablo Saavedra to the list of contributors.

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

2018-09-19  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Add support for AV1 decoding
        https://bugs.webkit.org/show_bug.cgi?id=189647

        Reviewed by Žan Doberšek.

        Add patches required for AV1 decoding support. They're all
        upstream already and will be shipped in GStreamer 1.16. The aom
        GStreamer plugin depends on the aom library for which there's no
        official release yet.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-aomenc-Add-support-for-10-12bit-decoding.patch: Added.
        * gstreamer/patches/gst-plugins-bad-0002-aomenc-Handle-8-bit_depth-images-with-AOM_IMG_FMT_HI.patch: Added.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Detect-and-expose-CEA-608-708-Closed-Caption.patch: Added. This one is unrelated but an implicit dependency of the next one.
        * gstreamer/patches/gst-plugins-good-0004-qtdemux-Add-initial-support-for-AV1-demuxing.patch: Added.
        * gstreamer/patches/gst-plugins-good-0005-qtdemux-Extract-AV1-codec_data-and-put-it-in-the-cap.patch: Added.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-Recognize-more-AV1-atoms.patch: Added.

2018-09-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Clobbering and building occurs multiple times for iOS Simulator ports
        https://bugs.webkit.org/show_bug.cgi?id=189702
        <rdar://problem/44541704>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Move build check and clobbering to run, since set up is
        run multiple times for iOS simulator.
        (Manager.run):

2018-09-18  Chris Dumez  <cdumez@apple.com>

        "DidFirstVisuallyNonEmptyLayout" callback does not get called when restoring a page from PageCache
        https://bugs.webkit.org/show_bug.cgi?id=189681
        <rdar://problem/44526171>

        Reviewed by Alex Christensen and Zalan Bujtas.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):

2018-09-18  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Implement mouse event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=189697

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wkEventModifiersToWPE):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):

2018-09-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use Semaphore and BinarySemaphore instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=185339

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp:
        (TestWebKitAPI::ToUpperConverter::stopProducing):
        (TestWebKitAPI::ToUpperConverter::stopConsuming):

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Many modern media control tests leak documents in testing
        https://bugs.webkit.org/show_bug.cgi?id=189437

        Reviewed by Darin Adler.
        
        In order to accurately detect leaks in media controls tests which use lots of
        SVGImages, we have to:
        - Fire a zero-delay timer after the postTask, in order for ImagesLoader's m_derefElementTimer
          to clear references to elements.
        - Have releaseCriticalMemory() call CachedResourceLoader's garbageCollectDocumentResources()
          to drop the last handle to the CachedResource for an SVGImage.
        - Call WKBundleReleaseMemory() after the GC and timer, since we need garbageCollectDocumentResources()
          to run again after that timer has fired.
        
        This should fix most of the spurious leak reports involving SVGImage documents.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reportLiveDocuments):
        (WTR::InjectedBundle::didReceiveMessageToPage):

2018-09-17  Chris Dumez  <cdumez@apple.com>

        PSON: window.open() with 'noopener' should only process-swap cross-site, not cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=189602
        <rdar://problem/44430549>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-17  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update to GStreamer 1.14.3
        https://bugs.webkit.org/show_bug.cgi?id=189450

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Bump GStreamer modules from 1.14.1 to 1.14.3.

2018-09-17  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Doesn't check sha256 sums
        https://bugs.webkit.org/show_bug.cgi?id=189646

        Reviewed by Michael Catanzaro.

        * gstreamer/jhbuild.modules: Properly set the sha256: prefix on hashes.

2018-09-17  Sihui Liu  <sihui_liu@apple.com>

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415
        <rdar://problem/44396973>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2018-09-08  Darin Adler  <darin@apple.com>

        Streamline JSRetainPtr, fix leaks of JSString and JSGlobalContext
        https://bugs.webkit.org/show_bug.cgi?id=189455

        Reviewed by Keith Miller.

        There is a lot of copied and pasted code for WebKit vs. Legacy WebKit
        testing and even for macOS vs. iOS vs. Windows platform-specific code.
        For now, this patch just makes corresponding changes to the copied code.
        Later we might get better results by merging more code instead of having
        all these separate copies.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::makeWindowObject): Use the adopt function
        instead of the special Adopt constructor of JSRetainPtr.

        * DumpRenderTree/AccessibilityTextMarker.cpp: Removed unneeded include.

        * DumpRenderTree/AccessibilityUIElement.cpp: Ditto.
        (allAttributesCallback): Don't adopt at this level; changed the
        underlying function to return a JSRetainPtr so the adopt is right next
        to the call to the create or copy function.
        (attributesOfLinkedUIElementsCallback): Ditto.
        (attributesOfDocumentLinksCallback): Ditto.
        (attributesOfChildrenCallback): Ditto.
        (parameterizedAttributeNamesCallback): Ditto.
        (attributesOfColumnHeadersCallback): Ditto.
        (attributesOfRowHeadersCallback): Ditto.
        (attributesOfColumnsCallback): Ditto.
        (attributesOfRowsCallback): Ditto.
        (attributesOfVisibleCellsCallback): Ditto.
        (attributesOfHeaderCallback): Ditto.
        (rowIndexRangeCallback): Ditto.
        (columnIndexRangeCallback): Ditto.
        (rangeForLineCallback): Ditto.
        (boundsForRangeCallback): Ditto.
        (rangeForPositionCallback): Ditto.
        (stringForRangeCallback): Ditto.
        (attributedStringForRangeCallback): Ditto.
        (uiElementCountForSearchPredicateCallback): Use the free adopt
        function instead of the adopt member function.
        (uiElementForSearchPredicateCallback): Ditto.
        (selectTextWithCriteriaCallback): Don't adopt at this level.
        (attributedStringForElementCallback): Ditto.
        (setValueCallback): Use free adopt.
        (stringAttributeValueCallback): Don't adopt at this level.
        (uiElementArrayAttributeValueCallback): Ditto.
        (uiElementAttributeValueCallback): Ditto.
        (stringForTextMarkerRangeCallback): Ditto.
        (attributedStringForTextMarkerRangeCallback): Ditto.
        (attributedStringForTextMarkerRangeWithOptionsCallback): Ditto.
        (getARIADropEffectsCallback): Ditto.
        (getClassListCallback): Ditto.
        (getRoleCallback): Ditto.
        (getSubroleCallback): Ditto.
        (getRoleDescriptionCallback): Ditto.
        (getComputedRoleStringCallback): Ditto.
        (getTitleCallback): Ditto.
        (getDescriptionCallback): Ditto.
        (getStringValueCallback): Ditto.
        (getLanguageCallback): Ditto.
        (getHelpTextCallback): Ditto.
        (getOrientationCallback): Ditto.
        (getPathDescriptionCallback): Ditto.
        (getSelectedTextRangeCallback): Ditto.
        (speakAsCallback): Ditto.
        (getValueDescriptionCallback): Ditto.
        (getAccessibilityValueCallback): Ditto.
        (getDocumentEncodingCallback): Ditto.
        (getDocumentURICallback): Ditto.
        (getURLCallback): Ditto.
        (characterAtOffsetCallback): Ditto.
        (wordAtOffsetCallback): Ditto.
        (lineAtOffsetCallback): Ditto.
        (sentenceAtOffsetCallback): Ditto.
        (stringForSelectionCallback): Ditto.
        (getIdentifierCallback): Ditto.
        (getTraitsCallback): Ditto.
        (supportedActionsCallback): Ditto.
        (mathPostscriptsDescriptionCallback): Ditto.
        (mathPrescriptsDescriptionCallback): Ditto.
        (AccessibilityUIElement::rangeForLine): Updated to return JSRetainPtr.
        (AccessibilityUIElement::rangeForPosition): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.

        * DumpRenderTree/AccessibilityUIElement.h: Use JSRetainPtr instead of
        raw pointers for the results of the functions that create strings.
        The old way was difficult to get right; the functions didn't even follow
        the create/copy naming rule.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_platformTypeConstructor): Use the adopt function instead of the
        JSRetainPtr adopt constructor. Also nullptr instead of 0.

        * DumpRenderTree/GCController.cpp:
        (GCController::makeWindowObject): Use adopt function instead of constructor.

        * DumpRenderTree/TestRunner.cpp:
        (pathToLocalResourceCallback): Use adopt function instead of constructor.
        (addDisallowedURLCallback): Ditto.
        (addURLToRedirectCallback): Ditto.
        (clearApplicationCacheForOriginCallback): Ditto.
        (applicationCacheDiskUsageForOriginCallback): Ditto.
        (decodeHostNameCallback): Don't adopt at this level.
        (encodeHostNameCallback): Ditto.
        (execCommandCallback): Use adopt instead of JSRetainPtr::adopt.
        (findStringCallback): Use adopt function instead of constructor.
        (isCommandEnabledCallback): Ditto.
        (overridePreferenceCallback): Ditto.
        (queueLoadCallback): Ditto.
        (queueLoadHTMLStringCallback): Ditto.
        (queueLoadingScriptCallback): Ditto.
        (queueNonLoadingScriptCallback): Ditto.
        (setAuthenticationPasswordCallback): Ditto.
        (setAuthenticationUsernameCallback): Ditto.
        (setDomainRelaxationForbiddenForURLSchemeCallback): Ditto.
        (setMockGeolocationPositionUnavailableErrorCallback): Ditto.
        (setPOSIXLocaleCallback): Ditto.
        (setPersistentUserStyleSheetLocationCallback): Ditto.
        (setUserStyleSheetLocationCallback): Ditto.
        (setValueForUserCallback): Ditto.
        (setWillSendRequestClearHeaderCallback): Ditto.
        (setPageVisibilityCallback): Ditto.
        (evaluateInWebInspectorCallback): Ditto.
        (evaluateScriptInIsolatedWorldCallback): Ditto.
        (evaluateScriptInIsolatedWorldAndReturnValueCallback): Ditto.
        (addOriginAccessWhitelistEntryCallback): Ditto.
        (removeOriginAccessWhitelistEntryCallback): Ditto.
        (setScrollbarPolicyCallback): Ditto.
        (addUserScriptCallback): Ditto.
        (addUserStyleSheetCallback): Ditto.
        (apiTestNewWindowDataLoadBaseURLCallback): Ditto.
        (authenticateSessionCallback): Ditto.
        (getTitleTextDirectionCallback): Ditto.
        (getInspectorTestStubURLCallback): Ditto.
        (simulateLegacyWebNotificationClickCallback): Ditto.
        (setTextDirectionCallback): Ditto.
        (grantWebNotificationPermissionCallback): Ditto.
        (denyWebNotificationPermissionCallback): Ditto.
        (accummulateLogsForChannel): Ditto.
        (runUIScriptCallback): Ditto.
        (TestRunner::makeWindowObject): Ditto.
        (TestRunner::uiScriptDidComplete): Ditto.
        (TestRunner::setOpenPanelFiles): Ditto.

        * DumpRenderTree/TestRunner.h: Use JSRetainPtr instead of
        raw pointers for the results of the functions that create strings.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::platformName const): Use the adopt
        function instead of the adopt constructor.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (concatenateAttributeAndValue): Changed to return a JSRetainPtr.
        (AccessibilityUIElement::identifier): Ditto.
        (AccessibilityUIElement::traits): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::stringForSelection): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForElement): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::classList const): Ditto.

        * DumpRenderTree/mac/AccessibilityCommonMac.h: Changed the
        createJSStringRef method to return a JSRetainPtr.
        * DumpRenderTree/mac/AccessibilityCommonMac.mm:
        (-[NSString createJSStringRef]): Ditto.
        (searchPredicateParameterizedAttributeForSearchCriteria): Use the
        adopt function instead of the adopt constructor.
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::platformName const): Ditto.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        (makeValueRefForValue): Updated for the above, no adopt needed here now.
        (makeObjectRefForDictionary): Ditto.
        (-[AccessibilityNotificationHandler _notificationReceived:]): Ditto.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (concatenateAttributeAndValue): Changed to return a JSRetainPtr.
        (descriptionOfElements): Ditto.
        (selectTextParameterizedAttributeForCriteria): Ditto.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::classList const): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::rangeForLine): Ditto.
        (AccessibilityUIElement::rangeForPosition): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (createJSStringRef): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.
        (AccessibilityUIElement::supportedActions): Ditto.
        (AccessibilityUIElement::mathPostscriptsDescription const): Ditto.
        (AccessibilityUIElement::mathPrescriptsDescription const): Ditto.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectForFrame:inIsolatedWorld:]):
        Use the adopt function instead of the adopt constructor.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (originsArrayToJS): Ditto.
        (TestRunner::copyDecodedHostName): Return a JSRetainPtr.
        (TestRunner::copyEncodedHostName): Ditto.
        (TestRunner::pathToLocalResource): Ditto.
        (TestRunner::queueLoad): Use adopt function instead of constructor.
        (TestRunner::findString): Ditto.
        (TestRunner::inspectorTestStubURL): Return a JSRetainPtr.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::winNotificationReceived): Use adopt function
        instead of adopt constructor.
        (AccessibilityController::platformName const): Ditto.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (AccessibilityUIElement::allAttributes): Changed to return a JSRetainPtr.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::classList const): Ditto.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::copyDecodedHostName): Changed to return a JSRetainPtr.
        (TestRunner::copyEncodedHostName): Ditto.
        (TestRunner::pathToLocalResource): Ditto.
        (TestRunner::queueLoad): Ditto.
        (TestRunner::findString): Ditto.
        (TestRunner::inspectorTestStubURL): Ditto.

        * TestRunnerShared/Bindings/JSWrapper.h:
        (WTR::setProperty): Use adopt function instead of constructor.
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext): Ditto.
        (UIScriptContext::runUIScript): Ditto.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::toDeviceOrientation): Ditto.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (nsTextCheckingType): Changed this function to not take an rvalue
        reference to a JSRetainPtr since it doesn't take ownership.
        (-[LayoutTestSpellChecker setResultsFromJSObject:inContext:]): Updated
        for the above change.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::javaScriptCallback): Use adopt function instead of
        adopt member function.

        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp: Removed unneeded include.
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm: Ditto.
        * TestWebKitAPI/Tests/mac/DOMNodeFromJSObject.mm: Use adopt function instead of
        adopt constructor.
        * TestWebKitAPI/Tests/mac/JSWrapperForNodeInWebFrame.mm: Ditto.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        Removed unneeded includes.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: Ditto.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_platformTypeConstructor): Use the adopt function instead of the
        JSRetainPtr adopt constructor. Also nullptr instead of 0.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::arrayLength): Use adopt function instead of constructor.
        (WTR::parseModifierArray): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue): Ditto.
        (WTR::dumpPath): Ditto.
        (WTR::toJS): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::findString): Ditto.
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Ditto.
        (WTR::TestRunner::callDidReceiveAllStorageAccessEntriesCallback): Ditto.
        (WTR::TestRunner::setOpenPanelFiles): Ditto.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::platformName): Ditto.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        This fixes storage leaks in many functions below, which were using
        the create function and putting the value right into a JSRetainPtr
        without adoption.
        (WTR::createEmptyJSString): Added. This helper function reduces the
        repetitive code to create empty strings.
        (WTR::concatenateAttributeAndValue): Return a JSRetainPtr.
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (WTR::AccessibilityUIElement::attributesOfChildren): Ditto.
        (WTR::AccessibilityUIElement::allAttributes): Ditto.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (WTR::AccessibilityUIElement::role): Ditto.
        (WTR::AccessibilityUIElement::subrole): Ditto.
        (WTR::AccessibilityUIElement::roleDescription): Ditto.
        (WTR::AccessibilityUIElement::computedRoleString): Ditto.
        (WTR::AccessibilityUIElement::title): Ditto.
        (WTR::AccessibilityUIElement::orientation const): Ditto.
        (WTR::AccessibilityUIElement::language): Ditto.
        (WTR::AccessibilityUIElement::valueDescription): Ditto.
        (WTR::AccessibilityUIElement::ariaDropEffects const): Ditto.
        (WTR::AccessibilityUIElement::boundsForRange): Ditto.
        (WTR::AccessibilityUIElement::stringForRange): Removed unneeded null check.
        (WTR::AccessibilityUIElement::attributedStringForRange): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumns): Ditto.
        (WTR::AccessibilityUIElement::attributesOfRows): Ditto.
        (WTR::AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (WTR::AccessibilityUIElement::attributesOfHeader): Ditto.
        (WTR::AccessibilityUIElement::selectedTextRange): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Ditto.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::AccessibilityUIElement::stringForSelection): Removed unneeded
        null check.
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:
        Use JSRetainPtr for the return value of createJSStringRef.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (-[NSString createJSStringRef]): Ditto.
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria): Use the
        adopt function instead of the adopt constructor.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::platformName): Ditto

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        (makeValueRefForValue): Updated for above by removing adopt.
        (makeObjectRefForDictionary): Ditto.
        (-[AccessibilityNotificationHandler _notificationReceived:]): Ditto.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (WTR::concatenateAttributeAndValue): Return a JSRetainPtr.
        (WTR::descriptionOfElements): Ditto.
        (WTR::selectTextParameterizedAttributeForCriteria): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Use createEmptyJSString,
        fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::createJSStringRef): Return a JSRetainPtr.

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK): Take a const& to eliminate a little bit of reference count churn.
        (WTR::toJS): Use the adopt function instead of the constructor.

2018-09-14  Dean Jackson  <dino@grorg.org>

        Add Justin Michaud.

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

2018-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        bots should pass --clobber-old-results to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=189623

        Reviewed by Aakash Jain.

        In order to ensure that bots to not produce confusing results due to transient execptions,
        or run out of space if they continually hit an exception, old layout test results should be clobbered.

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

2018-09-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235954.

        Breaks the watchOS build.

        Reverted changeset:

        "Move IndexedDB to Network Process"
        https://bugs.webkit.org/show_bug.cgi?id=189415
        https://trac.webkit.org/changeset/235954

2018-09-13  Daniel Bates  <dabates@apple.com>

        Add Copy WebKit Permalink plugin for Sublime Text
        https://bugs.webkit.org/show_bug.cgi?id=189589

        Rubber-stamped by Joseph Pecoraro.

        Port the Copy WebKit Permalink Automator service to a Sublime Text plugin. Once installed you can
        use the plugin to copy to the Clipboard a trac.webkit.org hyperlink to the selected line in the
        active document with or without blame annotations.

        Once installed, you can Control-click (on Mac) or right-click (on Windows and Linux) on a line and
        choose Copy WebKit Permalink or Copy WebKit Permalink to Blame from the context menu to copy to the
        Clipboard a permanent hyperlink to the selected line without or with blame annotations, respectively.
        On Mac you can also invoke the same functionality using the keyboard shortcuts Command + Shift + Control + C
        and Command + Shift + Control + Option + C, respectively.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-menu: Added.
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py: Added.
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Default (OSX).sublime-keymap: Added.
        * CopyPermalink/Sublime Text/INSTALL: Added.
        * CopyPermalink/Xcode/Copy WebKit Permalink.workflow/Contents/Info.plist: Renamed from Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/Info.plist.
        * CopyPermalink/Xcode/Copy WebKit Permalink.workflow/Contents/document.wflow: Renamed from Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow.
        * CopyPermalink/Xcode/INSTALL: Renamed from Tools/CopyPermalink/README.

2018-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebDriver tests after r235225.

        Use wpt serve command to run the http server.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer.__init__):
        (WebDriverW3CWebServer.start):
        (WebDriverW3CWebServer.stop):

2018-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Allow to run script dialogs asynchronously in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189544

        Reviewed by Michael Catanzaro.

        Add test cases for the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][ImageDiff] Fix compilation error and warning of PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189496
        <rdar://problem/44370981>

        Unreviewed warning fix.

        r235929 has introduced a new compilation warning:
        > Tools/ImageDiff/cairo/PlatformImageCairo.cpp:34:70: warning: unused parameter ‘imageSize’ [-Wunused-parameter]

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin): Removed the variable name.

2018-09-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Complete support for Paste as Quotation
        https://bugs.webkit.org/show_bug.cgi?id=189504

        Reviewed by Wenson Hsieh.

        * MiniBrowser/mac/MainMenu.xib: Added a Paste as Quotation command in the Edit menu.

2018-09-12  Sihui Liu  <sihui_liu@apple.com>

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2018-09-12  Chris Dumez  <cdumez@apple.com>

        PSON: No process swap on back navigation after URL bar navigation
        https://bugs.webkit.org/show_bug.cgi?id=189557
        <rdar://problem/44353108>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Header parsing for experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189486
        <rdar://problem/44320618>

        Reviewed by Tim Horton.

        Keep track of experimental and internal debug features in TestOptions, and
        allow webkit-test-runner headers to toggle them by name.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][DumpRenderTree] 0 and nullptr can't be implicitly converted to AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=189492

        Reviewed by Alex Christensen.

        0 and nullptr can't be implicitly converted to
        AccessibilityUIElement because only Windows port typedefs
        PlatformUIElement as COMPtr<IAccessible> not a pointer.

        Replaced "return 0" and "return nullptr" with "return { nullptr }".

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::horizontalScrollbar const):
        (AccessibilityUIElement::verticalScrollbar const):
        (AccessibilityUIElement::uiElementAttributeValue const):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::accessibleElementById):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::selectedChildAtIndex const):

2018-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        FontManagerTests.ChangeFontColorWithColorPanel fails on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=189382

        Reviewed by Ryosuke Niwa.

        Fix the test by specifying colors in RGB colorspace.

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

2018-09-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][ImageDiff] Fix compilation error and warning of PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189496

        Reviewed by Alex Christensen.

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin): Removed unnecessary ReadContext struct.
        (ImageDiff::PlatformImage::writeAsPNGToStdout): Use '%lu' format type specifier for unsigned long.

2018-09-07  Dean Jackson  <dino@apple.com>

        Add and expose Internal features from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189442
        <rdar://problem/44243404>

        Reviewed by Simon Fraser.

        Update MiniBrowser to expose an Internal feature menu.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleExperimentalFeature:]):
        (-[SettingsController toggleInternalDebugFeature:]):

2018-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Support changing foreground colors via color panel
        https://bugs.webkit.org/show_bug.cgi?id=189382
        <rdar://problem/44227311>

        Reviewed by Ryosuke Niwa.

        Add an API test that uses NSColorPanel to change the color of selected text, and also apply typing styles when
        the selection is collapsed. The test also exercises switching between opaque colors (alpha = 1) and transparent
        colors, as well as making different parts of a word different colors.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (-[TestWKWebView collapseToEnd]):
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

== Rolled over to ChangeLog-2018-09-11 ==
