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