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

        Upstream content mode support into open source from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=198484
        <rdar://problem/51355671>

        Reviewed by Andy Estes.

        Change the "useModernCompatibilityMode" layout test option to instead be "contentMode", with values of either
        "mobile" or "desktop".

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/ios/PreferredCompatibilityMode.mm: Removed.
        * TestWebKitAPI/ios/PreferredContentMode.mm: Added.
        (-[ContentModeNavigationDelegate setDecidePolicyForNavigationActionWithPreferences:]):
        (-[ContentModeNavigationDelegate decidePolicyForNavigationActionWithPreferences]):
        (-[ContentModeNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (+[WKWebpagePreferences preferencesWithContentMode:]):
        (-[WKWebView navigatorUserAgent]):
        (-[WKWebView navigatorPlatform]):
        (-[WKWebView loadTestPageNamed:withPolicyDecisionHandler:]):
        (-[WKWebView loadHTMLString:withPolicyDecisionHandler:]):
        (-[WKWebView loadTestPageNamed:andExpectEffectiveContentMode:withPolicyDecisionHandler:]):
        (-[NSString shouldContainStrings:]):
        (IPhoneUserInterfaceSwizzler::IPhoneUserInterfaceSwizzler):
        (IPhoneUserInterfaceSwizzler::phoneUserInterfaceIdiom):
        (TestWebKitAPI::setUpWebViewForPreferredContentModeTestingWithoutNavigationDelegate):
        (TestWebKitAPI::setUpWebViewForPreferredContentModeTesting):
        (TestWebKitAPI::makeContentModeDecisionHandler):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::configureContentMode):
        (WTR::TestController::enableModernCompatibilityMode): Deleted.

2019-06-01  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Add support for chorded button interactions
        https://bugs.webkit.org/show_bug.cgi?id=198462

        Reviewed by Dean Jackson.

        Until now, MouseEvent.buttons would always return 0 when used within DRT and WKTR as [NSEvent pressedMouseButtons], used
        by PlatformMouseEventBuilder to set the m_buttons value eventually used to set MouseEvent.buttons, not account for the
        NSEvent created through the eventSender JS object in tests. To fix this, we now track the pressed mouse buttons within
        DRT and WKTR as mouseDown() and mouseUp() are called, and swizzle [NSEvent pressedMouseButtons] to return that value.

        In the case of DRT, one test would fail when swizzling this method in the case where the target view for the event would
        be the DRTMockScroller, a subclass of NSScroller. So we only swizzle when the target view is *not* an NSScroller or a
        subclass.

        Finally, we change the NoMouseButton enum value from -1 to -2 to adjust to MouseEvent.button now being a "short".

        * DumpRenderTree/mac/EventSendingController.mm:
        (swizzledEventPressedMouseButtons):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm:
        * WebKitTestRunner/EventSenderProxy.h:
        (WTR::EventSenderProxy::mouseButtonsCurrentlyDown const):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::swizzledEventPressedMouseButtons):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

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

        Cookies set via [WKHTTPCookieStore setCookie:] on store right after constructing WKWebView get lost
        https://bugs.webkit.org/show_bug.cgi?id=198553
        <rdar://problem/51317144>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (-[CheckSessionCookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2019-06-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix miscellaneous build warnings
        https://bugs.webkit.org/show_bug.cgi?id=198544

        Reviewed by Don Olmstead.

        When converting to PRIVATE include directories, we accidentally dropped SYSTEM here. The
        naming convention used here is a bit confusing: the *_SYSTEM_INCLUDE_DIRECTORIES actually
        uses both SYSTEM and PRIVATE. We should probably clarify this.

        * TestWebKitAPI/PlatformGTK.cmake:

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

        getUserMedia requests should be processed sequentially in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=198430
        <rdar://problem/51311420>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

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

        REGRESSION (r244557): Leak of WKNSString in WTR::runOpenPanel() while running WebKit layout tests
        <https://webkit.org/b/198538>
        <rdar://problem/51407719>

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::runOpenPanel): Use adoptWK() to fix the leak.

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

        [ews-app] Add authentication while fetching bugs
        https://bugs.webkit.org/show_bug.cgi?id=198415
        <rdar://problem/51298710>

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla._fetch_attachment_json): Use api_key if configured in environment variable.
        (BugzillaBeautifulSoup.authenticate): Method to authenticate, logic copied from webkitpy/common/net/bugzilla/bugzilla.py
        (BugzillaBeautifulSoup._load_query):

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

        [ews-build] Do not display unnecessary steps in the Buildbot build page UI
        https://bugs.webkit.org/show_bug.cgi?id=198218
        <rdar://problem/51104544>

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

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

        WKWebsiteDataStore API fails to fetch web storage data for non-persistent data store
        https://bugs.webkit.org/show_bug.cgi?id=198317

        Reviewed by Alex Christensen.

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

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

        [WinCairo] Implement cpu and memory measuring functions.
        https://bugs.webkit.org/show_bug.cgi?id=198466

        Reviewed by Don Olmstead.

        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
        (WTR::TestRunner::inspectorTestStubURL):

2019-06-04  Zan Dobersek  <zdobersek@igalia.com>

        [misc] Remove JSCOnly ARMv7 Traditional bot
        https://bugs.webkit.org/show_bug.cgi?id=198524

        Reviewed by Carlos Garcia Campos.

        This is not a supported configuration anymore, so the buildbot slave can
        be removed from configuration.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2019-06-03  Andy Estes  <aestes@apple.com>

        [Apple Pay] Disable script injection when canMakePayment APIs are called and return true
        https://bugs.webkit.org/show_bug.cgi?id=198448
        <rdar://problem/51323694>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
        (-[TestApplePayAvailableScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[TestApplePayActiveSessionScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::runActiveSessionTest):
        (-[TestApplePayScriptMessageHandler initWithAPIsAvailableExpectation:canMakePaymentsExpectation:]): Deleted.
        (-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-active-session.html:
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-existing-object.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-in-iframe.html:
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html:
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-can-make-payment.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-can-make-payments-with-active-card.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-can-make-payments.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay.js: Added.
        (applePayRequestBase):
        (applePayPaymentRequest):
        (applePayMethod):
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (-[TestProtocol startLoading]):

2019-06-03  Sihui Liu  <sihui_liu@apple.com>

        [ Mac WK2 ] TestWebKitAPI.WKWebView.LocalStorageProcessCrashes is a flaky timeout when run locally.
        https://bugs.webkit.org/show_bug.cgi?id=198423
        <rdar://problem/51305247>

        Reviewed by Youenn Fablet.

        IDBDatabase receives error event on network process crash, so we don't need to check it periodically.

        * TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-crashes.html:

2019-06-03  Rob Buis  <rbuis@igalia.com>

        Implement imagesrcset and imagesizes attributes on link rel=preload
        https://bugs.webkit.org/show_bug.cgi?id=192950

        Reviewed by Youenn Fablet.

        Add a runtime flag for link preload responsive images.

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

2019-06-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use WEBKIT_EXECUTABLE in ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=198490

        Reviewed by Konstantin Tokarev.

        Use WEBKIT_EXECUTABLE in ImageDiff. Change CMake variables to use the proper
        convention. Add a shared CoreGraphics.cmake instead of just including PlatformMac
        for AppleWin builds.

        * ImageDiff/CMakeLists.txt:
        * ImageDiff/Cairo.cmake:
        * ImageDiff/CoreGraphics.cmake: Added.
        * ImageDiff/PlatformGTK.cmake:
        * ImageDiff/PlatformMac.cmake:
        * ImageDiff/PlatformWin.cmake:

2019-06-02  Andy Estes  <aestes@apple.com>

        Memory-cached main resources continue to load after the client decides a content policy of PolicyAction::Download
        https://bugs.webkit.org/show_bug.cgi?id=198469
        <rdar://problem/50512713>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didStartProvisionalNavigation:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFinishNavigation:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate _downloadDidStart:]):
        (-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (TEST):
        * TestWebKitAPI/cocoa/TestProtocol.h:
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (+[TestProtocol additionalResponseHeaders]):
        (+[TestProtocol setAdditionalResponseHeaders:]):
        (-[TestProtocol startLoading]):

2019-06-03  Timothy Hatcher  <timothy@apple.com>

        Tweak the text and underline color for data detected text.
        https://bugs.webkit.org/show_bug.cgi?id=198487
        rdar://problem/50667125

        Reviewed by Devin Rousso.

        * TestWebKitAPI/Tests/WebCore/Color.cpp:
        (TestWebKitAPI::TEST): Added Color.RGBToHSL tests.

2019-06-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::JavaScriptCore target
        https://bugs.webkit.org/show_bug.cgi?id=198403

        Reviewed by Konstantin Tokarev.

        Use the WebKit::JavaScriptCore target.

        * DumpRenderTree/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:

2019-06-03  Darin Adler  <darin@apple.com>

        Finish cleanup of String::number for floating point
        https://bugs.webkit.org/show_bug.cgi?id=198471

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::testStringNumber): Go back to calling String::number instead of
        String::numberToStringECMAScript.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpFrameScrollPosition): Use appendNumber instead of appendECMAScriptNumber
        since that is now the default.

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

        [WinCairo][MiniBrowser] WKViewSetIsInWindow should be called
        https://bugs.webkit.org/show_bug.cgi?id=198474

        Reviewed by Darin Adler.

        WinCairo WK2 MiniBrowser can't play back videos because
        Page::canStartMedia() always returns false. WKViewSetIsInWindow
        should be called.

        The original MiniBrowser did it in Bug 55364.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Call WKViewSetIsInWindow.

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

        TestWebKitAPI.WKWebView.LocalStorageProcessSuspends is flaky
        https://bugs.webkit.org/show_bug.cgi?id=198450

        Reviewed by Ryosuke Niwa.

        In local-storage-process-suspends-2.html, we periodically checked local storage item and sent a message when the
        item value was changed or times of check reached limit. We expected the message to be sent after network process
        resumed from suspension, because that's when the item value should get updated. However, the limit we set seemed
        to be not high enough, so that the message could be sent eariler than expected, when limit of check number was 
        reached.

        We can solve this in different ways. To make the test robust, we can send the message on a storage event, which
        notifies about changes in local storage.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-suspends-2.html:

2019-05-31  Ryosuke Niwa  <rniwa@webkit.org>

        DragAndDropTests.DragImageLocationForLinkInSubframe fails on some iPad
        https://bugs.webkit.org/show_bug.cgi?id=198447

        Reviewed by Wenson Hsieh.

        Give the elements an explicit 400px width to make the test always work.

        * TestWebKitAPI/Tests/WebKitCocoa/link-in-iframe-and-input.html:

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

        Make tests that use UIHelper more robust under certain configurations
        https://bugs.webkit.org/show_bug.cgi?id=198442
        <rdar://problem/51301737>

        Reviewed by Megan Gardner.

        For a certain device class, many tests that attempt to use UIHelper.isIOS are currently failing. We can fix this
        by making the `isIOS` check more robust; this patch also renames `isIOS` to `isIOSFamily`, which is more
        accurate (and consistent with the corresponding PLATFORM macro name).

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::isIOSFamily const):

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

        [iOS] Autocorrection menu font is Times New Roman when using font-family: UICTFontTextStyle*
        https://bugs.webkit.org/show_bug.cgi?id=198427
        <rdar://problem/50031825>

        Reviewed by Tim Horton.

        Add a new API test to verify that -fontForCaretSelection returns the system font when using UICTFontTextStyle
        in an editable web view.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm: Added.
        (-[TestWKWebView autocorrectionRectsForString:]):
        (checkCGRectIsEqualToCGRectWithLogging):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        REGRESSION: WebKit.InteractionDeadlockAfterCrash and SynchronousTimeoutTests.UnresponsivePageDoesNotCausePositionInformationToHangUI API tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=198432
        <rdar://problem/51266033>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        (TEST):
        (recursiveFindHighlightLongPressRecognizer): Deleted.
        * TestWebKitAPI/Tests/ios/SynchronousTimeoutTests.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::recursiveFindHighlightLongPressRecognizer): Deleted.

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

        URLParser::parseIPv6Host should properly parse 0's around compression
        https://bugs.webkit.org/show_bug.cgi?id=198424

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):

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

        URLParser::parseHostAndPort should not allow non-port characters after an ipv6 host
        https://bugs.webkit.org/show_bug.cgi?id=198428
        <rdar://problem/51209196>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):

2019-05-28  Dewei Zhu  <dewei_zhu@apple.com>

        run-benchmark should report an error if the argument to --build-directory is bogus
        https://bugs.webkit.org/show_bug.cgi?id=198316

        Reviewed by Ryosuke Niwa.

        'run-benchmark' should not fallback to system safari when browser or browser build path is
        specified but not valid.
        Add a run-time check to ensure at least one of the resource from build directory is opened by
        Safari when build directory is specified.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url): Raise an exception when browser or browser build path is
        specified but not valid.

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

        Optionally respect device management restrictions when loading from the network
        https://bugs.webkit.org/show_bug.cgi?id=198318
        <rdar://problem/44263806>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceManagementRestrictions.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        Clone a test that tests non-persistent data stores and ensure
        that it works if the data store is created via a configuration as well.

        Add a test that ensures that you can't create a data store configuration
        with an invalid set of options.

        Add a test that device management restrictions (when mocked) correctly
        fail the load with a new, appropriate error.

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

        Unreviewed, rolling out r245943.

        Caused API test WKWebView.LocalStorageProcessSuspends to fail
        on release bots.

        Reverted changeset:

        "WKWebsiteDataStore API fails to fetch web storage data for
        non-persistent data store"
        https://bugs.webkit.org/show_bug.cgi?id=198317
        https://trac.webkit.org/changeset/245943

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

        WebKitTestRunner sometimes freezes under -[NSWindow release]
        https://bugs.webkit.org/show_bug.cgi?id=198422

        Reviewed by Tim Horton.

        The window remains key until it's out of the allWindows vector, and AppKit is not
        happy about deallocating key windows. Fixed by updating allWindows in -close
        instead of -release.

        Added isMainFrame assertions in code that manipulates allWindows for a good measure.

        * WebKitTestRunner/mac/WebKitTestRunnerWindow.mm:
        (+[WebKitTestRunnerWindow _WTR_keyWindow]):
        (-[WebKitTestRunnerWindow initWithContentRect:styleMask:backing:defer:]):
        (-[WebKitTestRunnerWindow close]):
        (-[WebKitTestRunnerWindow dealloc]):

2019-05-31  Geoffrey Garen  <ggaren@apple.com>

        Some WeakPtr cleanup
        https://bugs.webkit.org/show_bug.cgi?id=198390

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Updated for rename.

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

        [CMake] Add WebKit::WTF target
        https://bugs.webkit.org/show_bug.cgi?id=198400

        Reviewed by Konstantin Tokarev.

        Use the WebKit::WTF target.

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

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

        REGRESSION (Safari 12): SafariForWebkitDevelopment won't load any pages on Mojave, nightly builds broken
        https://bugs.webkit.org/show_bug.cgi?id=194808
        <rdar://problem/48278497>

        Reviewed by Darin Adler.

        I verified that a daily build downloaded an run on Mojave does not work without this and works with this.

        * WebKitArchiveSupport/run-webkit-archive:
        (set_dyld_framework_path):
        Also set XPC variants of needed environment variables.

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

        [WPE] Build at-spi2-core without x11 support in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=198411

        Reviewed by Philippe Normand.

        * wpe/jhbuild.modules:

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

        WKWebsiteDataStore API fails to fetch web storage data for non-persistent data store
        https://bugs.webkit.org/show_bug.cgi?id=198317

        Reviewed by Alex Christensen.

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

2019-05-30  Andres Gonzalez  <andresg_22@apple.com>

        Inserting a newline in contenteditable causes two characters to be added instead of one
        https://bugs.webkit.org/show_bug.cgi?id=197894
        <rdar://problem/49700998>

        Reviewed by Wenson Hsieh and Chris Fleizach.

        iOS implementation of several AccessibilityUIElement methods to execute
        LayoutTests.
 
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::replaceTextInRange):

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

        IsoHeaps don't notice uncommitted VA becoming the first eligible.
        https://bugs.webkit.org/show_bug.cgi?id=198301

        Reviewed by Yusuke Suzuki.

        Move testbmalloc.cpp to TestWTF so it runs in automation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp: Renamed from Source/bmalloc/test/testbmalloc.cpp.
        (TEST):

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

        DragAndDropTests.DataTransferExposePlainTextWithFileURLAsFile API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=198389
        <rdar://problem/51266096>

        Reviewed by Tim Horton.

        This test started failing, since the fallback name for a dropped text file changed from "text.txt" to
        "Document.txt" on newer iOS SDK versions. We simply fix this test by checking that the name of the file ends
        with ".txt", and that the MIME type of the file is "text/plain".

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

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

        Stop StorageManager when network process is ready to suspend
        https://bugs.webkit.org/show_bug.cgi?id=198201
        <rdar://problem/49683172>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-suspends-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-suspends-2.html: Added.

2019-05-30  David Quesada  <david_quesada@apple.com>

        REGRESSION (r245756) [Mac] 2 TestWebKitAPI.DownloadProgress* and TestWebKitAPI._WKDownload.DownloadMonitorCancel are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=198298
        rdar://problem/51182393

        Reviewed by Alexey Proskuryakov.

        Re-enable _WKDownload.DownloadMonitorCancel, which should no longer time out with this fix.

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

2019-05-30  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r245881.

        Broke 13 Layout tests on WK2

        Reverted changeset:

        "WKWebsiteDataStore API fails to fetch web storage data for
        non-persistent data store"
        https://bugs.webkit.org/show_bug.cgi?id=198317
        https://trac.webkit.org/changeset/245881

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

        [ews-build] Update configuration to share bots across queues
        https://bugs.webkit.org/show_bug.cgi?id=198370

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Share bots across builder and API tester queues.
        Also use ews119 instead of ews120 for mac API tests, as ews120 seems to have some issues as
        noted in https://bugs.webkit.org/show_bug.cgi?id=197571#c1

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

        webkitpy: Switch run-webkit-tests to tailspin (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=198144
        <rdar://problem/32463212>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.look_for_new_samples): Use tailspin_file_path instead of spindump_file_path.

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

        Remove some logic to suppress the text selection assistant during drop
        https://bugs.webkit.org/show_bug.cgi?id=198354

        Reviewed by Tim Horton.

        Adjust some API tests that currently check whether or not the selection assistant was suppressed during drop.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):

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

        WKWebsiteDataStore API fails to fetch web storage data for non-persistent data store
        https://bugs.webkit.org/show_bug.cgi?id=198317

        Reviewed by Alex Christensen.

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

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

        Build fix for branch.
        <rdar://problem/50625279>

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:

2019-05-29  Justin Michaud  <justin_michaud@apple.com>

        Attempt to fix JSC test timeouts after adding collectContinuously to WASM tests.
        https://bugs.webkit.org/show_bug.cgi?id=198322

        Rubber-stamped by Michael Saboff. Disable running the new collectContinuously tests on debug builds. 
        This matches what we do for other jsc tests. 

        * Scripts/run-jsc-stress-tests:

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

        Remove ENABLE definitions from WebKit config files
        https://bugs.webkit.org/show_bug.cgi?id=197858

        Reviewed by Simon Fraser.

        Sync FeatureDefines.xcconfig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-05-29  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] WebPage::positionInformation() may set InteractionInformationAtPosition.isImage to true but leave image unset
        https://bugs.webkit.org/show_bug.cgi?id=198202

        Reviewed by Tim Horton.

        The new test ensures InteractionInformationAtPosition::isImage will not
        be to true for a broken image.

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

2019-05-29  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style reports false-positive build/include_order warning in WTF C++ source files
        <https://webkit.org/b/198349>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_classify_include): Don't return early for <wtf/Header.h>
        includes.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_primary_header): Add tests for
        <wtf/Header.h> includes.

2019-05-29  Geoffrey Garen  <ggaren@apple.com>

        WeakPtr breaks vtables when upcasting to base classes
        https://bugs.webkit.org/show_bug.cgi?id=188799

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Adopt the new macro API instead
        of template specialization for observing weak references.

        (TestWebKitAPI::Int::Int):
        (TestWebKitAPI::Int::operator int const):
        (TestWebKitAPI::Int::operator== const): Use a class for integer tests
        because WeakPtr doesn't naturally support pointing to non-class objects
        now.

        (TestWebKitAPI::Base::foo):
        (TestWebKitAPI::Derived::foo): Inherit from CanMakeWeakPtr to enable
        deduction of the weak pointer type.

        (TestWebKitAPI::TEST): Updated to use Int.

        (TestWebKitAPI::Base::weakPtrFactory const): Deleted.
        (WTF::WeakReference<TestWebKitAPI::Base>::WeakReference): Deleted.
        (WTF::WeakReference<TestWebKitAPI::Base>::~WeakReference): Deleted.

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

        Unreviewed, rolling out r245857.

        Breaks internal builds.

        Reverted changeset:

        "WeakPtr breaks vtables when upcasting to base classes"
        https://bugs.webkit.org/show_bug.cgi?id=188799
        https://trac.webkit.org/changeset/245857

2019-05-28  Geoffrey Garen  <ggaren@apple.com>

        WeakPtr breaks vtables when upcasting to base classes
        https://bugs.webkit.org/show_bug.cgi?id=188799

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Adopt the new macro API instead
        of template specialization for observing weak references.

        (TestWebKitAPI::Int::Int):
        (TestWebKitAPI::Int::operator int const):
        (TestWebKitAPI::Int::operator== const): Use a class for integer tests
        because WeakPtr doesn't naturally support pointing to non-class objects
        now.

        (TestWebKitAPI::Base::foo):
        (TestWebKitAPI::Derived::foo): Inherit from CanMakeWeakPtr to enable
        deduction of the weak pointer type.

        (TestWebKitAPI::TEST): Updated to use Int.

        (TestWebKitAPI::Base::weakPtrFactory const): Deleted.
        (WTF::WeakReference<TestWebKitAPI::Base>::WeakReference): Deleted.
        (WTF::WeakReference<TestWebKitAPI::Base>::~WeakReference): Deleted.

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

        Disable Flaky API Test TestWebKitAPI._WKDownload.DownloadMonitorCancel
        https://bugs.webkit.org/show_bug.cgi?id=198328

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

2019-05-28  Justin Michaud  <justin_michaud@apple.com>

        Attempt to fix JSC test timeouts after adding collectContinuously to WASM tests.
        https://bugs.webkit.org/show_bug.cgi?id=198322

        Reviewed by Saam Barati.

        Increases the collection period from 1 to slightly higher to try to speed up the tests. Any higher and
        the test runner does not detect the bug that required the memset in Wasm::Instance::Instance().

        * Scripts/run-jsc-stress-tests:

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

        [iOS] Respect NSItemProvider's registered types when dropping files that are loaded in-place
        https://bugs.webkit.org/show_bug.cgi?id=198315
        <rdar://problem/51183762>

        Reviewed by Tim Horton.

        Adds a new API test to verify that when dropping a file that is loaded in-place with a file extension that is
        not a .png (but was registered to the item provider as "public.png"), the resulting attachment is contained in
        an image element, and the resulting attachment info indicates that the dropped attachment is a png file.

        Additionally, rebaseline some existing tests.

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

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

        GCHeapInspector should accept weird filename
        https://bugs.webkit.org/show_bug.cgi?id=198314

        Reviewed by Simon Fraser.

        GCHeapInspector filenameForPath should have a fallback path if regexp does not match against the given path.

        * GCHeapInspector/script/interface.js:
        (filenameForPath):

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

        [MacOS] Filter GVA warning logged to stdout
        https://bugs.webkit.org/show_bug.cgi?id=198303
        <rdar://problem/50098041>

        Reviewed by Jer Noble.

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

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

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

        Reviewed by Devin Rousso.

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

        * Scripts/extract-localizable-js-strings:

2019-05-25  Dewei Zhu  <dewei_zhu@apple.com>

        Limit run-benchmark http server to specific interface.
        https://bugs.webkit.org/show_bug.cgi?id=198247

        Reviewed by Ryosuke Niwa.

        Add '--interface' option to 'twisted_http_server.py'.
        'SimpleHTTPServerDriver' should specify interface for http server.
        Update regex that determines http server port from 'lsof' output to support ipv6 address.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        Added '--interface' argument.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        Limited http server to a specific interfce.
        Added '-P' option to 'lsof' invocation to inhibits the conversion of port numbers to port name so script won't
        fail if it's listening on a 'well-known' port.
        Abstracted '_check_http_server_is_running' to allow potential child class to have its own implementation.
        (SimpleHTTPServerDriver.serve): Updated regex that determines http server port from 'lsof' output to support ipv6 address.
        (SimpleHTTPServerDriver.kill_server): Added null check for 'self._server_process'.

2019-05-28  David Xiong  <w_xiong@apple.com>

        webkitpy: Switch run-webkit-tests to tailspin
        https://bugs.webkit.org/show_bug.cgi?id=198144
        <rdar://problem/32463212>

        Reviewed by Jonathan Bedard.

        Changes run-webkit-tests to run tailspin on test time out
        rather than spindump, and edited tests to look for tailspin logs
        instead.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Replaced spindump with tailspin (+ symbolication)
        (DarwinPort):
        (DarwinPort.tailspin_file_path):
        (DarwinTest.spindump_file_path): Deleted.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_tailspin): Changed spindump test (below) to test for tailspin instead
        (DarwinTest.test_spindump): Deleted.
        (DarwinTest.test_spindump.logging_run_command): Deleted.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_tailspin): Changed spindump tests (inc. below) to test for tailspin instead
        (IOSDeviceTest.test_sample_process.logging_run_command):
        (IOSDeviceTest.test_sample_process_exception.throwing_run_command):
        (IOSDeviceTest.test_spindump): Deleted.
        (IOSDeviceTest.test_spindump.logging_run_command): Deleted.

2019-05-28  David Xiong  <w_xiong@apple.com>

        webkitpy: Using sudo on iOS device during timeout spindumps 
        https://bugs.webkit.org/show_bug.cgi?id=198142

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Check target host instead of source host for sudo command.

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

        [ews-build] Remove unused buildbot tabs
        https://bugs.webkit.org/show_bug.cgi?id=198108

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/templates/build.jade: Removed unused 'Changes' and 'Responsible Users' tabs.

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

        [GTK] Use WPEBackend-fdo for accelerating compositing in Wayland instead of the nested compositor
        https://bugs.webkit.org/show_bug.cgi?id=197944

        Reviewed by Michael Catanzaro.

        Add WPEBackend-fdo to jhbuild moduleset.

        * gtk/jhbuild.modules:

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

        [iOS] Dropping in an editable element should result in a ranged selection
        https://bugs.webkit.org/show_bug.cgi?id=198267
        <rdar://problem/51145977>

        Reviewed by Tim Horton.

        Adjust some existing API tests that currently check for selection rects after a drop. Instead of checking for
        visible selection rects, simply check for the start caret rect, as determined by WKContentView's
        -selectionRange.

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

        Replace finalSelectionRects with finalSelectionStartRect.

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

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

        [css-grid] Preserve repeat() notation when serializing declared values
        https://bugs.webkit.org/show_bug.cgi?id=197840

        Reviewed by Manuel Rego Casasnovas.

        Adapt CSSPropertyParserTest to CSSGridIntegerRepeatValue.

        * TestWebKitAPI/Tests/WebCore/CSSParser.cpp:
        (TestWebKitAPI::computeNumberOfTracks):

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

        [iOS] Dropped text, attachments, and images should animate into place
        https://bugs.webkit.org/show_bug.cgi?id=198243
        <rdar://problem/35205373>

        Reviewed by Tim Horton.

        Adjusts the iOS dragging simulator, and adds a new API test. See below for more detail.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::isCompletelyWhite):
        (TestWebKitAPI::TEST):

        Add a test that drags and drops an image into a contenteditable element, and then observes the resulting
        UITargetedDragPreviews upon drop.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator runFrom:to:additionalItemRequestLocations:]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):

        Teach the iOS version of DragAndDropSimulator to invoke -dropInteraction:concludeDrop: on the drop interaction
        delegate when the drop finishes. This additionally uses _doAfterReceivingEditDragSnapshotForTesting: to defer
        the end of the simulated drag and drop until after drag previews have been received during an edit drag.

        (-[DragAndDropSimulator dropPreviews]):
        (-[DragAndDropSimulator delayedDropPreviews]):

        Have the drag and drop simulator remember which previews were returned by the delegate on drop, as well as which
        previews were provided asynchronously.

        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

        Stage the new private drop interacton delegate method.

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

        MobileMiniBrowser: Add iPad support, and allow insecure loads
        https://bugs.webkit.org/show_bug.cgi?id=198249

        Reviewed by Tim Horton.

        Add iPad support to MobileMiniBrowser, and allow insecure loads.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser/Info.plist:

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

        [iOS] Respect -[NSItemProvider preferredPresentationSize] when dropping images
        https://bugs.webkit.org/show_bug.cgi?id=198242

        Reviewed by Beth Dakin.

        Add a new test that simulates dropping an image with a preferred presentation size into an editable element
        with attachment elements enabled.

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

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

        Make display-profiler-output work with newer HighLine
        https://bugs.webkit.org/show_bug.cgi?id=198205

        Reviewed by Saam Barati.

        Newer HighLine does not have SystemExtensions. Access @terminal member in default instance of HighLine.

        * Scripts/display-profiler-output:

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

        run-webkit-tests: Remove feature detection support
        https://bugs.webkit.org/show_bug.cgi?id=198105

        Reviewed by Jonathan Bedard.

        Feature detection support was added to DRT for Windows and old
        run-webkit-tests in Bug 35610. It was added for NRWT in Bug 41842.
        But, it doesn't work for DRT for Windows because of feature name
        mismatches. Since USE(ACCELERATED_COMPOSITING) flag has been
        removed in Bug 127833, it is not needed anymore.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * Scripts/webkitpy/port/base.py:
        (Port._tests_for_other_platforms):
        (Port._skipped_tests_for_unsupported_features):
        (Port._runtime_feature_list): Deleted.
        (Port.nm_command): Deleted.
        (Port._modules_to_search_for_symbols): Deleted.
        (Port._symbols_string): Deleted.
        (Port._missing_feature_to_skipped_tests): Deleted.
        (Port._has_test_in_directories): Deleted.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.make_command):
        (DarwinPort.nm_command): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.reset_preferences):
        (IOSSimulatorPort.nm_command): Deleted.
        * Scripts/webkitpy/port/port_testcase.py:
        (TestWebKitPort.__init__):
        (TestWebKitPort.all_test_configurations):
        (PortTestCase.test_path_to_test_expectations_file):
        (TestWebKitPort._symbols_string): Deleted.
        (PortTestCase.test_skipped_directories_for_features): Deleted.
        (PortTestCase.test_skipped_directories_for_features_no_matching_tests_in_test_list): Deleted.
        (PortTestCase.test_skipped_tests_for_unsupported_features_empty_test_list): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.reset_preferences):
        (WatchSimulatorPort.nm_command): Deleted.
        * Scripts/webkitpy/port/win.py:
        (WinPort.show_results_html_file):
        (WinPort._runtime_feature_list): Deleted.
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_operating_system):
        (WinPortTest.test_runtime_feature_list): Deleted.
        * WebKitTestRunner/Options.cpp:
        (WTR::OptionsHandler::OptionsHandler):
        (WTR::handleOptionPrintSupportedFeatures): Deleted.
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

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

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

        Inspector appears blank, again. (Requested by NVI on #webkit).

        Reverted changeset:

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

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

        [Win][CMake] Pass architecture to cmake via -A for both x64 and Win32
        https://bugs.webkit.org/show_bug.cgi?id=198098

        Reviewed by Don Olmstead.

        With current CMake and Visual Studio 2019, the default
        architecture will match the host, so we should make sure
        to explicitly mention the architecture we want for 32-bit
        builds as well for cases where we are on x64 and not in an
        x64_x32 cross-build vcvars environment.

        * Scripts/webkitdirs.pm:
        (getVisualStudioToolset): Get toolset name for cmake/msbuild
        (getMSBuildPlatformArgument): Update to use getVisualStudioToolset
        (getCMakeWindowsToolsetArgument): Get -A argument for cmake
        based on toolset
        (generateBuildSystemFromCMakeProject): Remove explicit -A x64
        in 64-bit mode in favor of new getCMakeWindowsToolsetArgument.

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

        Set default WebsiteDataStore storage quota based on StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=198133
        <rdar://problem/51031436>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        (doTest):

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

        generate-xcfilelists should not store temporary build files in /tmp
        https://bugs.webkit.org/show_bug.cgi?id=198136

        Reviewed by Jonathan Bedard.

        Provide the build infrastructure control of the location of
        generate-xcfilelists' temporary files by creating them in the build
        directory when possible.

        * Scripts/webkitpy/generate_xcfilelists_lib/application.py:
        (get_xcode_project_temp_dir):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (BaseGenerator._generate_derived):
        (BaseGenerator._generate_unified):
        (BaseGenerator):
        (BaseGenerator._get_temp_dir):

2019-05-23  Philippe Normand  <philn@igalia.com>

        [JHBuild][GStreamer] Enable libsrtp
        https://bugs.webkit.org/show_bug.cgi?id=198041

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Enable libsrtp. The system version
        can't be used from Stretch because it's too old.

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

        Move win-ews queue bubble to Win10 section of dashboard
        https://bugs.webkit.org/show_bug.cgi?id=198159

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Change platform to Windows10 to match the OS version of the bots.

2019-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Add API test to make sure the system font is drawn just like in native code
        https://bugs.webkit.org/show_bug.cgi?id=198010

        Reviewed by Daniel Bates.

        We can compare the width of using font-family:system-ui to a CTLine.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TextWidth.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/TextWidth.mm: Added.
        (TEST):

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

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

        Reviewed by Devin Rousso.

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

        * Scripts/extract-localizable-js-strings:

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

        [iOS] The shouldIgnoreMetaViewport test option incorrectly persists across layout tests
        https://bugs.webkit.org/show_bug.cgi?id=198135
        <rdar://problem/51001306>

        Reviewed by Alexey Proskuryakov.

        When shouldIgnoreMetaViewport=true is specified on a test, if the following test does not use a flexible
        viewport, we will continue ignoring the meta viewport, since we'll bail before we attempt to reset
        WKPreferences' _shouldIgnoreMetaViewport property to NO.

        We fix this by simply allowing shouldIgnoreMetaViewport to take precedence over useFlexibleViewport, such that
        -[WKPreferences _shouldIgnoreMetaViewport] will always be updated to its intended value between tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):

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

        API Test landed in r245540 [Mac WK2] TestWebKitAPI.WKWebView.LocalStorageProcessCrashes is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=198090
        <rdar://problem/51003644>

        Reviewed by Youenn Fablet.

        WebView was wrongly loaded multiple times.

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

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

        [WebAuthN] Support Attestation Conveyance Preference
        https://bugs.webkit.org/show_bug.cgi?id=192722
        <rdar://problem/49939647>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        Updates the test with AttestationConveyancePreference.

2019-05-22  Zalan Bujtas  <zalan@apple.com>

        [Paste] Add support for preferred presentation size when pasting an image
        https://bugs.webkit.org/show_bug.cgi?id=198132
        <rdar://problem/50886917>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::TEST):

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

        Use a different variable when testing for Xcode context in generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=198130
        <rdar://problem/51032752>

        Reviewed by Jonathan Bedard.

        The generate-xcfilelists script can run stand-alone or in the context
        of Xcode. There are a couple of places where it helps to know which
        context is current. To determine the context, genreate-xfilelists
        checks an environment variable that should be defined only when Xcode
        is running. The variable chosen was XCODE_INSTALL_PATH. It turns out
        that this variable is not always defined. Therefore, switch to
        checking XCODE_PRODUCT_BUILD_VERSION.

        * Scripts/webkitpy/generate_xcfilelists_lib/util.py:
        (subprocess_run):
        (is_running_under_xcode):

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

        Unreviewed. Fix WPE unit tests after r245565

        Backend creation is failing when the a11y bus is not running because atk produces warning messages. We should
        not make warnings fatal during backend creation.

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend):
        (Test::addLogFatalFlag):
        (Test::removeLogFatalFlag):

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

        [ews-build] Use custom templates for Buildbot (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=198076

        Unreviewed minor follow-up fix.

        * BuildSlaveSupport/ews-build/templates/build.jade:

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

        Fix branch build.
        <rdar://problem/50625279>

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        We need to explicitly include WebKit.h on the branch.

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

        [ews-build] Use custom templates for Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=198076

        Rubber-stamped by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/master.cfg:
        * BuildSlaveSupport/ews-build/templates: Added.
        * BuildSlaveSupport/ews-build/templates/build.jade: Copied from https://github.com/buildbot/buildbot/blob/v1.7.0/www/base/src/app/builders/builds/build.tpl.jade

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

        [PSON] Assertion hit when navigating back after a process swap forced by the client
        https://bugs.webkit.org/show_bug.cgi?id=198006

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Unreviewed. Fix the build with HAVE(ACCESSIBILITY) disabled

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::elementAtPoint):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):

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

        [WPE] Add initial accessibility support using ATK
        https://bugs.webkit.org/show_bug.cgi?id=197413

        Reviewed by Michael Catanzaro.

        Add accessibility support in MiniBrowser and backends used by MiniBrowser and tests.

        * MiniBrowser/wpe/CMakeLists.txt:
        * MiniBrowser/wpe/main.cpp:
        (main):
        * TestWebKitAPI/PlatformWPE.cmake:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::setNotificationFunctionCallback):
        (WTR::AccessibilityNotificationHandler::removeAccessibilityNotificationHandler):
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityControllerWPE.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp: Removed.
        * WebKitTestRunner/PlatformWPE.cmake:
        * wpe/backends/CMakeLists.txt:
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::addKeyEventListener):
        (WPEToolingBackends::removeKeyEventListener):
        (WPEToolingBackends::notifyAccessibilityKeyEventListeners):
        (WPEToolingBackends::ViewBackend::initialize):
        (WPEToolingBackends::ViewBackend::initializeAccessibility):
        (WPEToolingBackends::ViewBackend::updateAccessibilityState):
        (WPEToolingBackends::ViewBackend::setAccessibleChild):
        (WPEToolingBackends::ViewBackend::addActivityState):
        (WPEToolingBackends::ViewBackend::removeActivityState):
        (WPEToolingBackends::ViewBackend::dispatchInputKeyboardEvent):
        * wpe/backends/ViewBackend.h:
        * wpe/backends/WebKitAccessibleApplication.cpp: Added.
        (webkitAccessibleApplicationWindowInterfaceInit):
        (webkitAccessibleApplicationFinalize):
        (webkitAccessibleApplicationInitialize):
        (webkitAccessibleApplicationGetNChildren):
        (webkitAccessibleApplicationRefChild):
        (webkitAccessibleApplicationGetName):
        (webkit_accessible_application_class_init):
        (webkit_accessible_application_init):
        (webkitAccessibleApplicationNew):
        (webkitAccessibleApplicationSetChild):
        * wpe/backends/WebKitAccessibleApplication.h: Added.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
        * wpe/jhbuild.modules:

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

        run-webkit-tests not gathering crash logs on Cygwin Python and Windows Python
        https://bugs.webkit.org/show_bug.cgi?id=179828

        Reviewed by Jonathan Bedard.

        ServerProcess should store its Windows PID for Cygwin before
        process crashing because the Windows PID is required to get a
        correct CrashLog.

        CrashLog format has been changed. CrashLogs.GLOBAL_PID_REGEX
        should accept the new format.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.GLOBAL_PID_REGEX): Accept any words between 'Global' and 'PID:'.

        * Scripts/webkitpy/port/driver.py:
        (Driver.has_crashed):
        (Driver._check_for_driver_crash_or_unresponsiveness):
        (Driver._read_block):
        Store server_process.system_pid() to self._crashed_pid instead of server_process.pid().

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__):
        (ServerProcess.system_pid): Added.
        (ServerProcess._find_system_pid): Added.
        (ServerProcess._start): Set self._system_pid.
        * Scripts/webkitpy/port/win.py:
        (WinPort._get_crash_log): Removed broken old code converting Cygwin pid to Windows pid.

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

        Windows 10 test results missing on flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=198058

        Rubber-stamped by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

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

        Move Web Storage to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=197636
 
        Reviewed by Youenn Fablet.
 
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm: Remove the wait for database file update.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm: Add a test for network process crash recovery.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Fix a typo and add a test case to cover it.
        * TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-crashes.html: Added.

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

        generate-xcfilelists is stranding temporary files
        https://bugs.webkit.org/show_bug.cgi?id=198008
        <rdar://problem/50893659>

        Reviewed by Jonathan Bedard.

        generate-xcfilelists makes use of temporary files on disk. These files
        are opened with the OS's "temporary" bit set, causing them to get
        deleted when closed or the process exists. However, these temporary
        files actually end up persisting after the script exists. This is
        because `sed` is used to process the files, and is done so in a way
        that causes the "temporary" bit to get cleared.

        Address this issue by no longer using `sed` and instead performing the
        equivalent processing the file content in-memory.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (BaseGenerator._generate_derived):
        (BaseGenerator._generate_unified):
        (BaseGenerator._replace):
        (BaseGenerator._unexpand):
        (BaseGenerator._find_added_lines.get_lines):
        (BaseGenerator._find_added_lines):

2019-05-20  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [WPE][Qt] Use C++17 instead of C++14
        https://bugs.webkit.org/show_bug.cgi?id=197415

        Reviewed by Philippe Normand.

        There was a regression introduced with the commit https://bugs.webkit.org/show_bug.cgi?id=197131
        The WPE Qt port was not updated to C++17 and this leaded to a compilation error.

        * TestWebKitAPI/glib/CMakeLists.txt:

2019-05-20  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [Flatpak][Qt] Meson: Unknown type feature for gstreamer
        https://bugs.webkit.org/show_bug.cgi?id=197408

        Reviewed by Philippe Normand.

        This is a regression that has been introduced when
        GStreamer was updated to version 1.16.0
        https://bugs.webkit.org/show_bug.cgi?id=197157

        Now GStreamer requires meson >= 0.47.0
        Updating the Kde runtime to version 5.12 we fulfill
        this requirement.

        * flatpak/org.webkit.WPEQT.yaml:

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

        [GLIB] Crash when instantiating a js object registered with jsc_context_register_class on window object cleared
        https://bugs.webkit.org/show_bug.cgi?id=198037

        Reviewed by Michael Catanzaro.

        Add a test case to check the crash is fixed.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionWindowObjectCleared):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (windowObjectCleared):

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

        [GLIB] Repeating timer is not stopped when stop is called from the callback
        https://bugs.webkit.org/show_bug.cgi?id=197986

        Reviewed by Michael Catanzaro.

        Check the timer is no longer active after it has been stopped.

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

2019-05-19  Darin Adler  <darin@apple.com>

        Change String::number to use "shortest" instead of "fixed precision 6 digits"
        https://bugs.webkit.org/show_bug.cgi?id=178319

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::testStringNumberFixedPrecision): Use String::numberToStringFixedPrecision.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (attributesOfElement): Use appendFixedPrecisionNumber.

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

        [WebAuthN] Allow authenticators that support both CTAP and U2F to try U2F if CTAP fails in authenticatorGetAssertion
        https://bugs.webkit.org/show_bug.cgi?id=197974
        <rdar://problem/50879746>

        Reviewed by Brent Fulgham.

        Add a canDowngrade option for mock hid devices to simulate the situation.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2019-05-18  Tadeu Zagallo  <tzagallo@apple.com>

        Add extra information to dumpJITMemory
        https://bugs.webkit.org/show_bug.cgi?id=197998

        Reviewed by Saam Barati.

        Add description for the new dumpJITMemory trace point code.

        * Tracing/SystemTracePoints.plist:

2019-05-17  Justin Michaud  <justin_michaud@apple.com>

        [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.
        https://bugs.webkit.org/show_bug.cgi?id=197969

        Run wasm tests additionally with wasmBBQUsesAir=0.

        Reviewed by Keith Miller.

        * Scripts/run-jsc-stress-tests:

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

        [CMake] Use builtin FindICU
        https://bugs.webkit.org/show_bug.cgi?id=197934

        Reviewed by Michael Catanzaro.

        Remove uses of ICU_INCLUDE_DIRS and ICU_LIBRARIES.

        * TestWebKitAPI/PlatformMac.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/CMakeLists.txt:

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

        Enable legacy EME for iOS WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=197964
        <rdar://problem/50625666>

        Reviewed by Wenson Hsieh.

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

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

        [ews-build] Add clickable url in UI for uploaded S3 archive
        https://bugs.webkit.org/show_bug.cgi?id=197996

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

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

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

        Reviewed by Jonathan Bedard.

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

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

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

        Reviewed by Geoff Garen.

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

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

        Unreviewed build fix.

        Teach generate-xcfilelists about iphonesimulator.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):

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

        Re-enable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197933
        <rdar://problem/50831677>

        Reviewed by Jonathan Bedard.

        The following two tasks have been completed, and we can re-enable
        generate-xcfilelists:

        Bug 197619 <rdar://problem/50507392> Temporarily disable generate-xcfilelists (197619)
        Bug 197622 <rdar://problem/50508222> Rewrite generate-xcfilelists in Python (197622)

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

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

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

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

        Reverted changeset:

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

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

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

        New API test causing crashes on Mojave testers (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

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

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

        [ews-build] Add build step to Transfer archive to S3
        https://bugs.webkit.org/show_bug.cgi?id=197922

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (TransferToS3):
        (TransferToS3.finished): Invoke triggers after transfer is successful.
        (TransferToS3.getResultSummary): Create more readable failure string.
        (UploadBuiltProduct.finished): Deleted. Moved the trigger invocation after TransferToS3.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

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

        [GTK] Need WebKitContextMenuItemType to open emoji picker
        https://bugs.webkit.org/show_bug.cgi?id=176760

        Reviewed by Michael Catanzaro.

        Update context menu test to check insert emoji action is included in default context menu for editable content.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:

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

        [ews-build] Download archives from S3
        https://bugs.webkit.org/show_bug.cgi?id=197949

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (DownloadBuiltProduct): Updated to use S3 URL.
        (DownloadBuiltProduct.getResultSummary): Method to display custom failure string.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-05-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r15133): Fix leak of JSStringRef in minidom
        <https://webkit.org/b/197968>
        <rdar://problem/50872430>

        Reviewed by Joseph Pecoraro.

        * TestWebKitAPI/Tests/WebKitObjC/UserContentTest.mm:
        (expectScriptValueIsString): Drive-by fix to use adopt() instead
        of JSRetainPtr<JSStringRef> string(Adopt, JSValueToStringCopy(...)).

2019-05-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r84160): Leak of OpaqueJSString under WTR::JSTestRunner::pathToLocalResource (32 bytes) in com.apple.WebKit.WebContent running layout tests
        <https://webkit.org/b/197965>

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::pathToLocalResource): Don't call
        JSStringRetain() here because the JSRetainPtr<JSStringRef>
        return type will increment the retain count for us.

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

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

        Reviewed by Youenn Fablet.

        Make better abstractions for reading and writing from/to TCPServer.
        Add a unit test that causes a client certificate authentication challenge to happen.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::read):
        (TestWebKitAPI::TCPServer::write):
        (TestWebKitAPI::TCPServer::respondWithChallengeThenOK):
        (TestWebKitAPI::TCPServer::respondWithOK):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (credentialWithIdentity):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):
        (-[ClientCertificateDelegate webView:didFinishNavigation:]):
        (-[ClientCertificateDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[ClientCertificateDelegate challengeCount]):
        (TestWebKitAPI::TEST):
        (respondWithChallengeThenOK): Deleted.
        (credentialWithIdentityAndKeychainPath): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):
        (readRequest): Deleted.
        (writeResponse): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::respondWithChallengeThenOK): Deleted.

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

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

        Reviewed by Geoff Garen.

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

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

        Replace double-quotes with single quotes in steps.py
        https://bugs.webkit.org/show_bug.cgi?id=197921

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

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

        Rewrite generate-xcfilelists in Python
        https://bugs.webkit.org/show_bug.cgi?id=197622
        <rdar://problem/50508222>

        Reviewed by Jonathan Bedard, Alex Christensen.

        For a number of reasons, rewrite generate-xcfilelists in Python:

        - The previous bash script was large and unmaintainable.
        - We have more internal expertise with Python than with bash.
        - The bash script used temporary files in /tmp that got stranded and
          were owned by root, making them awkward to clear out.
          <rdar://problem/49490262>
        - We needed to complete support for engineers that built with Xcode
          rather than the command line.
        - There are some bugs leading to mildly corrupted .xcfilelist files.
          It's not apparent the source of the bugs, but one general reason
          might be due to approaches born of using bash. Rewriting in Python
          may clear these up.

        * Scripts/generate-xcfilelists:
        * Scripts/webkitpy/common/attribute_saver.py: Added.
        (AttributeSaver):
        (AttributeSaver.__init__):
        (AttributeSaver.__enter__):
        (AttributeSaver.__exit__):
        * Scripts/webkitpy/common/attribute_saver_unittest.py: Added.
        (AttributeSaverTest):
        (AttributeSaverTest.SimpleTestClass):
        (AttributeSaverTest.SimpleTestClass.__init__):
        (AttributeSaverTest.test_class):
        (AttributeSaverTest.test_normal_default):
        (AttributeSaverTest.test_normal_value):
        (AttributeSaverTest.test_normal_value_on_exception):
        (AttributeSaverTest.test_normal_value_on_normal_exit):
        (AttributeSaverTest.test_normal_value_with_finally_on_exception):
        (AttributeSaverTest.test_normal_value_with_finally_on_normal_exit):
        (AttributeSaverTest.test_normal_value_with_else_on_exception):
        (AttributeSaverTest.test_normal_value_with_else_on_normal_exit):
        * Scripts/webkitpy/generate_xcfilelists_lib/__init__.py: Added.
        * Scripts/webkitpy/generate_xcfilelists_lib/application.py: Added.
        (Application):
        (Application.__init__):
        (Application.run):
        (Application._initialize):
        (Application._initialize.collect_attributes):
        (Application._create_parser):
        (_validate_args):
        (_cmd_generate):
        (_cmd_check):
        (_cmd_subgenerate):
        (_cmd_help):
        (_do_generate):
        (_do_merge):
        (_report_results):
        (_report_merge_results):
        (_report_remediation_steps):
        (_report_remediation_steps.add_to_message):
        (_any_have_errors):
        (_any_have_actions):
        (_log_progress):
        (_log_results):
        (get_generate_xcfilelists_script_path):
        (_get_root_dir):
        (get_opensource_dir):
        (get_build_scripts_dir):
        (get_extract_dependencies_from_makefile_script):
        (get_xcode_built_products_dir):
        (_getenv):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py: Added.
        (BaseGenerator):
        (BaseGenerator.__init__):
        (BaseGenerator.__str__):
        (BaseGenerator.generate):
        (BaseGenerator._sublaunch_under_xcode):
        (BaseGenerator.subgenerate):
        (BaseGenerator.merge):
        (BaseGenerator.pickle_to_file):
        (BaseGenerator.has_action):
        (BaseGenerator.has_error):
        (BaseGenerator.is_valid):
        (BaseGenerator.report_error):
        (BaseGenerator._generate_derived):
        (BaseGenerator._merge_derived):
        (BaseGenerator._generate_unified):
        (BaseGenerator._merge_unified):
        (BaseGenerator._replace):
        (BaseGenerator._unexpand):
        (BaseGenerator._find_added_lines):
        (BaseGenerator._merge_added_lines):
        (BaseGenerator._get_file_lines):
        (BaseGenerator._getenv):
        (BaseGenerator._get_project_file_path):
        (BaseGenerator._get_project_dir):
        (BaseGenerator._get_project_file_name):
        (BaseGenerator._get_project_name):
        (BaseGenerator._get_sym_root):
        (BaseGenerator._get_obj_root):
        (BaseGenerator._get_shared_precomps_dir):
        (BaseGenerator._get_build_dirs):
        (BaseGenerator._get_build_dirs.define_xcode_build_dirs):
        (BaseGenerator._get_build_dirs.define_xcode_build_dirs.read_xcode_user_default):
        (BaseGenerator._get_build_dirs.define_command_line_build_dirs):
        (BaseGenerator._get_derived_sources_dir):
        (BaseGenerator._get_xcfilelist_dir):
        (BaseGenerator._get_input_derived_xcfilelist_project_path):
        (BaseGenerator._get_output_derived_xcfilelist_project_path):
        (BaseGenerator._get_input_unified_xcfilelist_project_path):
        (BaseGenerator._get_output_unified_xcfilelist_project_path):
        (BaseGenerator._get_generate_derived_sources_script):
        (BaseGenerator._get_generate_unified_sources_script):
        (JavaScriptCoreGenerator):
        (JavaScriptCoreGenerator._get_project_file_path):
        (JavaScriptCoreGenerator._get_generate_derived_sources_script):
        (JavaScriptCoreGenerator._get_generate_unified_sources_script):
        (WebCoreGenerator):
        (WebCoreGenerator._get_project_file_path):
        (WebCoreGenerator._get_generate_derived_sources_script):
        (WebCoreGenerator._get_generate_unified_sources_script):
        (WebKitGenerator):
        (WebKitGenerator._get_project_file_path):
        (WebKitGenerator._get_derived_sources_dir):
        (WebKitGenerator._get_generate_derived_sources_script):
        (WebKitGenerator._get_generate_unified_sources_script):
        (DumpRenderTreeGenerator):
        (DumpRenderTreeGenerator._get_project_file_path):
        (DumpRenderTreeGenerator._get_generate_derived_sources_script):
        (WebKitTestRunnerGenerator):
        (WebKitTestRunnerGenerator._get_project_file_path):
        (WebKitTestRunnerGenerator._get_generate_derived_sources_script):
        * Scripts/webkitpy/generate_xcfilelists_lib/util.py: Added.
        (debug_log):
        (LogEntryHelper):
        (LogEntryHelper.__init__):
        (LogEntryHelper.log_entry):
        (LogEntryHelper.log_result):
        (LogEntryHelper.log_exception):
        (LogEntryHelper._print):
        (LogEntryExit):
        (LogEntryExit._show_debug_logging):
        (LogEntryExitClass):
        (LogEntryExitClass._show_debug_logging):
        (LogEntryExitGlobal):
        (LogEntryExitGlobal._show_debug_logging):
        (subprocess_run):
        (is_running_under_xcode):
        (CheckValidItemAction):
        (CheckValidItemAction.__init__):
        (CheckValidItemAction.__call__):
        (CheckValidItemAction.validate_item):
        (CheckCommandAction):
        (CheckCommandAction.__call__):
        (InvalidCommandError):
        (InvalidArgumentError):
        (InvalidConfigurationError):
        (CalledProcessError):
        (CalledProcessError.__str__):
        * Scripts/webkitpy/xcode/__init__.py:
        (xcode_hash_for_path):
        (xcode_hash_for_path.convert_to_string):
        * Scripts/webkitpy/xcode/sdk.py: Added.
        (SDK):
        (SDK.__init__):
        (SDK.__repr__):
        (SDK.as_xcode_specification):
        (SDK.get_preferred_sdk_for_platform):
        (SDK._parse_sdk):
        * Scripts/webkitpy/xcode/sdk_unittest.py: Added.
        (SDKTest):

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

        [ews-build] Enabling uploading EWS archives to S3
        https://bugs.webkit.org/show_bug.cgi?id=197914

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/Shared: Added.
        * BuildSlaveSupport/Shared/transfer-archive-to-s3: Moved from Tools/BuildSlaveSupport/build.webkit.org-config/transfer-archive-to-s3.
        (archiveExists): Replace tab with space.
        (main): Added main method.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (TransferToS3): Updated path to the script.
        * BuildSlaveSupport/build.webkit.org-config/transfer-archive-to-s3: Moved to Shared folder.

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

        inputmode="numeric" should show a number pad with digits 0-9, instead of the numeric keyplane
        https://bugs.webkit.org/show_bug.cgi?id=197916
        <rdar://problem/50815427>

        Reviewed by Timothy Hatcher.

        Re-enable this previously flaky test, and rebaseline the result to to expect UIKeyboardTypeNumberPad for
        inputmode="numeric".

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):

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

        Reuse existing WebPageProxy quota handler for NetworkProcessProxy quota requests
        https://bugs.webkit.org/show_bug.cgi?id=197463
        <rdar://problem/47403621>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm: Added.
        (-[QuotaDelegate init]):
        (-[QuotaDelegate _webView:decideDatabaseQuotaForSecurityOrigin:currentQuota:currentOriginUsage:currentDatabaseUsage:expectedUsage:decisionHandler:]):
        (-[QuotaDelegate quotaDelegateCalled]):
        (-[QuotaDelegate grantQuota]):
        (-[StorageSchemes webView:startURLSchemeTask:]):
        (-[StorageSchemes webView:stopURLSchemeTask:]):
        (-[QuotaMessageHandler userContentController:didReceiveScriptMessage:]):
        (doTest):

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

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

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

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

        Reviewed by Xabier Rodriguez-Calvar.

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

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

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

        Reviewed by Alex Christensen.

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

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

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

        Reviewed by Brent Fulgham.

        Add a unit test that verifies calling the block succeeds.

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

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

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

        Reviewed by Alex Christensen.

        Added new API tests.

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

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

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

        Reviewed by Alex Christensen.

        Allow to enable app nap through test header.

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

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Alex Christensen.

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

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

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

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

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

        Reviewed by Jonathan Bedard.

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

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

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

        Reviewed by Youenn Fablet.

        Make better abstractions for reading and writing from/to TCPServer.
        Add a unit test that causes a client certificate authentication challenge to happen.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::read):
        (TestWebKitAPI::TCPServer::write):
        (TestWebKitAPI::TCPServer::respondWithChallengeThenOK):
        (TestWebKitAPI::TCPServer::respondWithOK):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (credentialWithIdentity):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):
        (-[ClientCertificateDelegate webView:didFinishNavigation:]):
        (-[ClientCertificateDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[ClientCertificateDelegate challengeCount]):
        (TestWebKitAPI::TEST):
        (respondWithChallengeThenOK): Deleted.
        (credentialWithIdentityAndKeychainPath): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):
        (readRequest): Deleted.
        (writeResponse): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::respondWithChallengeThenOK): Deleted.

2019-05-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

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

        Reviewed by Simon Fraser.

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

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

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

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

        Reviewed by Filip Pizlo.

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

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

        Unreviewed, fix ProcessSwap.OpenerLinkAfterAPIControlledProcessSwappingOfOpener API test

        It became flaky after r245198.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

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

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

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

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

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

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

        Reviewed by Yusuke Suzuki.

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

        * Scripts/import-test262-tests: Removed.

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

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

        Reviewed by Žan Doberšek.

        Patch by Zan Dobersek.

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

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

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

        Reviewed by Don Olmstead.

        Add preprocessor guards to avoid -Wunused-function warnings.

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

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

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

        Reviewed by Carlos Garcia Campos.

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

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

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

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

        Reviewed by Youenn Fablet.

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

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

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

        Reviewed by Philippe Normand.

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

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

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

        Reviewed by Don Olmstead.

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

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

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

        Reviewed by Brent Fulgham.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Jonathan Bedard.

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

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

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

        Reviewed by Jonathan Bedard.

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

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

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

        Reviewed by Jonathan Bedard.

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

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

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

        Reviewed by Carlos Garcia Campos.

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

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

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

        Reviewed by Žan Doberšek.

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Ross Kirsling.

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

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

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

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

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

        Reviewed by Ross Kirsling.

        ICU headers were missing from TestWTF.

        * TestWebKitAPI/PlatformPlayStation.cmake:

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

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

        Reviewed by Tim Horton.

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

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

        Change my status to be a WebKit reviewer.

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

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

        Unreviewed, rolling out r244952.

        Caused inspector to appear blank.

        Reverted changeset:

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Unreviewed. Add myself as a committer.

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

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

        Unreviewed, rolling out r245038.

        Breaks internal builds.

        Reverted changeset:

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

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

        Unreviewed. Add myself as a committer.

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

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

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

        Reviewed by Jer Noble.

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

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

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

        Reviewed by Geoff Garen.

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Chris Dumez.

        Spin test until successful.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

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

        Reviewed by Philippe Normand.

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

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

        Reviewed by Žan Doberšek.

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

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

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

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

        Reviewed by Wenson Hsieh.

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Alex Christensen.

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

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Devin Rousso.

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

        * Scripts/extract-localizable-js-strings:

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

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

        Reviewed by Tim Horton.

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

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

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

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

        Reviewed by Darin Adler.

        Usage: block-spammers email1 email2 ...

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

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

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

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

        Reviewed by Aakash Jain.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Darin Adler.

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

        * lldb/lldb_webkit.py:
        (addSummaryAndSyntheticFormattersForRawBitmaskType):

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Tim Horton.

        Add API test coverage.

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

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

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

        Reviewed by Keith Miller.

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

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

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

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

        Reverted changeset:

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

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

        Unreviewed WPE build fix after r244898.

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

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Ryosuke Niwa.

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

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

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

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

        Reviewed by Don Olmstead.

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

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

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

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

        Reviewed by Brent Fulgham.

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Alex Christensen.

        Make TestJSC dependent on JavaScriptCorePrivateFrameworkHeaders.

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

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

        Build fix for internal branch.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

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

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

        Reviewed by Rob Buis.

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

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

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

        Reviewed by Konstantin Tokarev.

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

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

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

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

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

        Reviewed by Brent Fulgham.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py:

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Brady Eidson.

        Add API test coverage.

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

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

        Unreviewed, rolling out r244802.

        Caused an API test failure

        Reverted changeset:

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

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

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

        Reviewed by Brady Eidson.

        Add API test coverage.

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

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

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

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

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

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

        Reviewed by Lucas Forschler.

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

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

        Unreviewed. Add myself as a committer.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

        Reviewed by Dewei Zhu.

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

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

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

        Fix the watchOS engineering build.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Saam Barati.

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

        * Scripts/run-jsc-stress-tests:

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

        Update inactive reviewers' status to 'contributor'.

        Accidentally skipped one at first.

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

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

        Update inactive reviewers' status to 'contributor'.

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

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

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

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

        Reviewed by Youenn Fablet.

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

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

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

        Reviewed by Simon Fraser.

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

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

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

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

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

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

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

        Reviewed by Aakash Jain.

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

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Brady Eidson.

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

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

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

        Reviewed by Dean Jackson.

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

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

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

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

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

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

        Reviewed by Alex Christensen.

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Michael Catanzaro.

        Add dark-mode command line option to MiniBrowser.

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

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Youenn Fablet.

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Dean Jackson.

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

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

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

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

        Reviewed by Chris Dumez.

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

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

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

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

        Reviewed by Tim Horton.

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

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

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

        Reviewed by Sam Weinig.

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

        Convert RenderAsTextBehavior to an OptionSet<RenderAsTextFlag>.

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

        Some cleanup of the TestRunners, using member initializers.

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

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

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

        Reviewed by Geoff Garen.

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

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

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

        Reviewed by Chris Dumez.

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

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

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

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

        Reviewed by Alex Christensen.

        Extend API test coverage.

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

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

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

        Reviewed by Xabier Rodriguez-Calvar.

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

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

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

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

        Reviewed by Michael Catanzaro.

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

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

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

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

        Reviewed by Brent Fulgham.

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

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

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

        Reviewed by Daniel Bates.

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

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

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

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

        Reviewed by Chris Dumez.

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

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Youenn Fablet

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

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

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

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

        Reverted changeset:

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

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

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

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

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

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

        Reviewed by Chris Fleizach.

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

        Reviewed by Youenn Fablet.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Ross Kirsling.

        Script changes

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

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

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

        Reviewed by Alex Christensen.

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

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

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

        Reviewed by Alex Christensen.

        Add API test coverage.

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

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

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

        Reviewed by Michael Catanzaro.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Youenn Fablet.

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

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

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

        Reviewed by Chris Dumez.

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

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

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

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

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

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

        Reviewed by Darin Adler.

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

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

        Unreviewed, rolling out r244502.

        Caused crashes on the bots

        Reverted changeset:

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

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

        Unreviewed, rolling out r244437.

        Still breaks internal tests.

        Reverted changeset:

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

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

        Reviewed by Michael Catanzaro.

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

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Konstantin Tokarev.

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

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

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

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

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/templates/statusbubble.html:

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

        Unreviewed, fix iOS build with recent SDKs.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:

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

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

        Reviewed by Michael Saboff.

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Tim Horton.

        Add a block property for -didCommitNavigation to TestNavigationDelegate.

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

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

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

        Reviewed by Alex Christensen.

        Added WebCorePrivateFrameworkHeaders as a dependency of TestWebKitAPI for all
        ports.

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

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

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

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

        Reviewed by Eric Carlson.

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

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

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

        Reviewed by Ryosuke Niwa.

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

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

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

        Reviewed by Tim Horton.

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

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

        Unreviewed, rolling out r244299.

        Breaks internal tests.

        Reverted changeset:

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

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

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

        Reviewed by Saam Barati.

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

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

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

        Reviewed by Wenson Hsieh.

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

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

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

        Reviewed by Simon Fraser.

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

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

        Unreviewed, rolling out r244400.

        Caused testing to exit early with assertionon Debug WK2

        Reverted changeset:

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

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Andy Estes.

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

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

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

        Reviewed by Tim Horton.

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

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

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

        As suggested by Darin Adler.

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

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

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

        Reviewed by Alex Christensen.

        Add API test coverage.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

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

        (WTR::TestRunner::installCustomMenuAction):

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

        (WTR::TestRunner::performCustomMenuAction):

        Invoked when the custom menu action is triggered.

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

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

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

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

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

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

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

        Reviewed by Brady Eidson.

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

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

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

        Reviewed by Geoff Garen.

        Add API test coverage.

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

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Zalan Bujtas.

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

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

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

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Jer Noble.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Ryosuke Niwa.

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

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

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

        Reviewed by Darin Adler.

        Added tests.

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

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

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

        Reviewed by Chris Dumez and Youenn Fablet.

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

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Lucas Forschler.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Michael Catanzaro.

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

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

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

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

        Reviewed by Wenson Hsieh.

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

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

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

        Reviewed by Yusuke Suzuki.

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

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

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

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

        Reviewed by Jer Noble.

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

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

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

        Reviewed by Darin Adler.

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

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

        Additionally link against GraphicsServices in WebKitTestRunner.

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

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

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

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

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

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

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

        Reviewed by Joanmarie Diggs.

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

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

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

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

        Reviewed by Dewei Zhu.

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

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

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

        Reviewed by Saam Barati.

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

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

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

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

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

        Reviewed by Brady Eidson.

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

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

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * Tracing/SystemTracePoints.plist:

2019-04-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use a bundled vswhere.exe instead of downloading by update-vswhere.py
        https://bugs.webkit.org/show_bug.cgi?id=196760

        Reviewed by Don Olmstead.

        vswhere.exe has been bundled since Visual Studio 2017 version
        15.2. We shouldn't download vswhere.exe.

        * Scripts/build-jsc: Do not call update-vswhere.py.
        * Scripts/build-webkit: Ditto.
        * Scripts/update-vswhere.py: Removed.
        * Scripts/webkitdirs.pm:
        (requireModulesForVSWhere): Deleted.
        (pickCurrentVisualStudioInstallation): Deleted.
        (visualStudioInstallDirVSWhere): Return the latest installed VS
        installation path by using the bundled vswhere.exe.
        (setupCygwinEnv): Removed a unused variable $visualStudioPath.
        (visualStudioInstallDirFallback): Removed.

2019-04-10  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] PrintConfiguration should display Xcode version instead of SDKVersion
        https://bugs.webkit.org/show_bug.cgi?id=196780

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2019-04-10  Alex Christensen  <achristensen@webkit.org>

        Add SPI WKNavigationResponse._downloadAttribute
        https://bugs.webkit.org/show_bug.cgi?id=196755
        <rdar://49587365>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (-[NavigationResponseTestDelegate navigationResponse]):
        (-[NavigationResponseTestDelegate waitForNavigationResponseCallback]):
        (-[NavigationResponseTestDelegate waitForNavigationFinishedCallback]):
        (-[NavigationResponseTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[NavigationResponseTestDelegate webView:didFinishNavigation:]):
        (-[NavigationResponseTestDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (readRequest):
        (writeResponse):
        (TEST):

2019-04-10  Tim Horton  <timothy_horton@apple.com>

        Add modern API for overriding the page's specified viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=167734
        <rdar://problem/30331795>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/OverrideViewportArguments.mm: Added.

2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>

        Add support for incremental bytecode cache updates
        https://bugs.webkit.org/show_bug.cgi?id=195000

        Reviewed by Filip Pizlo.

        Exit when the initial run to generate bytecode fails.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:

2019-04-10  Alex Christensen  <achristensen@webkit.org>

        RemoteObjectRegistry message receiver should be removed when WebPage::close is called instead of waiting until dealloc
        https://bugs.webkit.org/show_bug.cgi?id=196744
        <rdar://49415309>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm:
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):

2019-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a way to opt into modern compatibility mode in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196770
        <rdar://problem/49777550>

        Reviewed by Antoine Quint.

        Add a new test option to enable modern compatibility mode in layout tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::enableModernCompatibilityMode):

2019-04-10  Andy Estes  <aestes@apple.com>

        Try to fix the 32-bit watchOS build.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView evaluateJavaScriptAndWaitForInputSessionToChange:]):

2019-04-10  Antoine Quint  <graouts@apple.com>

        Enable Pointer Events on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=196771
        <rdar://problem/49040909>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed. Fix WPE accessibility tests after r244059.

        We are failing to load the injected bundle due to undefined symbol
        AccessibilityUIElement::replaceTextInRange().

        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-10  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][MiniBrowser] Pull down menu "Disable JavaScript" doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=196727

        Reviewed by Fujii Hironori.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):

2019-04-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit tests for PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=196752

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-04-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build maintenance -- update .xcfilelists.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:

2019-04-09  Zalan Bujtas  <zalan@apple.com>

        [AutoSizing] Avoid making text paragraphs scroll horizontally when there is a wide table
        https://bugs.webkit.org/show_bug.cgi?id=196743
        <rdar://problem/43897551>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm: expected behavior change.
        (TEST):

2019-04-09  Youenn Fablet  <youenn@apple.com>

        Close service worker database on network process suspension
        https://bugs.webkit.org/show_bug.cgi?id=196623
        <rdar://problem/48930869>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-04-09  Daniel Bates  <dabates@apple.com>

        [iPad] Should open popover when the spacebar is pressed
        https://bugs.webkit.org/show_bug.cgi?id=196360
        <rdar://problem/49389129>

        Reviewed by Brent Fulgham.

        Add testing infrastructure to support waiting for a popover to be presented or dismissed.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::willPresentPopoverCallback const): Added.
        (WTR::UIScriptController::setDidDismissPopoverCallback): Added.
        (WTR::UIScriptController::didDismissPopoverCallback const): Added.
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]): Update some state.
        (-[TestRunnerWKWebView resetInteractionCallbacks]): Ditto.
        (-[TestRunnerWKWebView _willPresentPopover]): Added.
        (-[TestRunnerWKWebView _didDismissPopover]): Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.

2019-04-09  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (+[SimpleLookupContext sharedLookupContext]):
        (-[SimpleLookupContext lookUpURL:completionHandler:]):
        (TEST):
        (+[Simple3LookupContext sharedLookupContext]): Deleted.
        (-[Simple3LookupContext lookUpURL:completionHandler:]): Deleted.

2019-04-09  John Wilander  <wilander@apple.com>

        Pick up Ad Click Attribution conversions in NetworkResourceLoader::willSendRedirectedRequest()
        https://bugs.webkit.org/show_bug.cgi?id=196558
        <rdar://problem/47650245>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Added tests of WebCore::AdClickAttribution::parseConversionRequest().

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Apple builds should use ICU_INCLUDE_DIRS
        https://bugs.webkit.org/show_bug.cgi?id=196720

        Reviewed by Konstantin Tokarev.

        * TestWebKitAPI/PlatformMac.cmake:

2019-04-09  Jonathan Bedard  <jbedard@apple.com>

        iOS 12 Simulator Release WK2 frequently timing out while running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196694
        <rdar://problem/48388734>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image): If the ImageDiff process has data, kill it before running again.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.has_available_stdout): Check if stdout has data in it.
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        (ServerProcess._wait_for_data_and_update_buffers_using_win32_apis):
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.has_available_stdout):
        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.serial_test_basic):

2019-04-09  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Drive-by bug fix: allow tests to play audio without a user gesture by default.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-04-09  Pablo Saavedra  <psaavedra@igalia.com>

        [JSCOnly] Add an i386 JSCOnly EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=196690

        Reviewed by Michael Catanzaro.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2019-04-09  Chris Dumez  <cdumez@apple.com>

        Loads using loadHTMLString() cause flashing when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=196714
        <rdar://problem/49637354>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix ATK accessibility tests after r244059.

        We are failing to load the injected bundle due to undefined symbol
        AccessibilityUIElement::replaceTextInRange().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Unreviewed build fix for Windows port.

        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange): Added.

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:

2019-04-08  Jonathan Bedard  <jbedard@apple.com>

        Log stack-trace for run-webkit-tests when interrupted
        https://bugs.webkit.org/show_bug.cgi?id=176393
        <rdar://problem/34262310>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/interrupt_debugging.py: Added.
        (log_stack_trace): Given a Python frame object, log a stack trace to the provided file.
        (StackTraceFileContext): Context which allows stack-traces to be printed to stderr or to a file. 
        (log_stack_trace_on_term): Attach a listener to SIGTERM so that a stack-trace can be logged when a program is terminated.
        (log_stack_trace_on_ctrl_c): Attach a listener to SIGINT so that a stack-trace can be logged when a program is CTRL+Ced. 
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Set handlers to log stack trace on interruption.

2019-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Unreviewed build fix for Windows port.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::replaceTextInRange): Changed the return value type from void to bool.

2019-04-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Scripts using Buildbot API have CORS error
        https://bugs.webkit.org/show_bug.cgi?id=196709

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/master.cfg: Set allowed_origins appropriately.

2019-04-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Reviewed by Daniel Bates.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (replaceTextInRangeCallback):
        (AccessibilityUIElement::replaceTextInRange):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::replaceTextInRange):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::replaceTextInRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::replaceTextInRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not allow starting selection drags when selection views are not visible
        https://bugs.webkit.org/show_bug.cgi?id=196686
        <rdar://problem/49399192>

        Reviewed by Tim Horton.

        Adjust some existing API tests to make the web view become first responder before trying to begin dragging, and
        also add some new API tests to cover scenarios where the web view is not first responder.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:

        Add a switch to optionally make the web view first responder when starting the simulated drag.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator runFrom:to:additionalItemRequestLocations:]):

2019-04-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix Web GPU experimental feature on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196632

        Reviewed by Myles C. Maxfield.

        Properly make Web GPU available on iOS 11+.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not upload archive when Compile Fails
        https://bugs.webkit.org/show_bug.cgi?id=196674

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.__init__): Remove steps which require dynamic decision about whether to run or not.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Dynamically decide which steps to run based on compile status.
        (CompileWebKitToT.evaluateCommand): Explicitly override Compile.evaluateCommand so that it 
        doesn't inherit CompileWebKit.evaluateCommand which dynamically adds more steps.

2019-04-08  Guillaume Emont  <guijemont@igalia.com>

        Enable DFG on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=196689

        Reviewed by Žan Doberšek.

        Since the bytecode change, we enabled the baseline JIT on mips in
        r240432, but DFG is still missing. With this change, all tests are
        passing on a ci20 board.

        * Scripts/run-jsc-stress-tests: Enable DFG tests on MIPS.

2019-04-08  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Second run update-webkitwpe-flatpak fails
        https://bugs.webkit.org/show_bug.cgi?id=192702

        Reviewed by Carlos Garcia Campos.

        * flatpak/flatpakutils.py:
        (FlatpakObject.flatpak): Fix typo.
        (FlatpakPackage.install): When installing, also update to the configured remote commit.
        * flatpak/org.webkit.WebKit.yaml: Update GNOME 3.28 SDK/runtime hashes.

2019-04-05  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WPE] outlook.live.com displays old-fashioned UI
        https://bugs.webkit.org/show_bug.cgi?id=196642

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): New Mac platform quirk test.

2019-04-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243956.
        https://bugs.webkit.org/show_bug.cgi?id=196688

        Broke API Test SafeBrowsing.WKWebViewGoBackIFrame (Requested
        by aakashjain on #webkit).

        Reverted changeset:

        "Clicking "Go Back" from a safe browsing warning from an
        iframe should navigate the WKWebView back to the previous
        page"
        https://bugs.webkit.org/show_bug.cgi?id=196665
        https://trac.webkit.org/changeset/243956

2019-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Added tests for WeakHashSet::computesEmpty and WeakHashSet::computeSize
        https://bugs.webkit.org/show_bug.cgi?id=196669

        Reviewed by Geoffrey Garen.

        Added three new unit tests for WeakHashSet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (WTF_WeakPtr.WeakHashSetConstObjects):
        (WTF_WeakPtr.WeakHashSetComputesEmpty):
        (WTF_WeakPtr.WeakHashSetComputeSize):

2019-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Hide next and previous form control buttons when WKWebView is editable
        https://bugs.webkit.org/show_bug.cgi?id=196672
        <rdar://problem/35625321>

        Reviewed by Tim Horton.

        Add a new API test.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[TestWKWebView lastTrailingBarButtonGroup]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-04-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should pass minimumEffectiveDeviceWidth to web process on new page creation.
        https://bugs.webkit.org/show_bug.cgi?id=196077
        <rdar://problem/49108202>

        Reviewed by Chris Dumez.

        Add an API test to verify the minimumEffectDeviceWidth is passed to web content process
        on new web view.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-05  Saam Barati  <sbarati@apple.com>

        Make compare-results understand MotionMark
        https://bugs.webkit.org/show_bug.cgi?id=196666

        Reviewed by Yusuke Suzuki.

        * Scripts/compare-results:
        (PLT5Results):
        (detectMotionMark):
        (detectMotionMark1_1):
        (motionMarkResults):
        (motionMark1_1Results):
        (detectBenchmark):
        (biggerIsBetter):
        (main):

2019-04-05  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (+[SimpleLookupContext sharedLookupContext]):
        (-[SimpleLookupContext lookUpURL:completionHandler:]):
        (TEST):
        (+[Simple3LookupContext sharedLookupContext]): Deleted.
        (-[Simple3LookupContext lookUpURL:completionHandler:]): Deleted.

2019-04-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add configuration and architecture for windows builders
        https://bugs.webkit.org/show_bug.cgi?id=196660

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-04-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Don't run subsequent rounds if interrupted
        https://bugs.webkit.org/show_bug.cgi?id=196646

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Bail out if interrupted.

2019-04-05  Sihui Liu  <sihui_liu@apple.com>

        Test sessionStorage in PSON private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=196561

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243833.
        https://bugs.webkit.org/show_bug.cgi?id=196645

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

2019-04-04  Simon Fraser  <simon.fraser@apple.com>

        Simple iframe scrolling test fails to get a composited scrolling frame in WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=196635

        Reviewed by Antti Koivisto.
        
        InjectedBundle::beginTesting() calling WKBundleSetAsyncFrameScrollingEnabled() makes it impossible
        for a test to enable async frame scrolling via:
            <!-- webkit-test-runner [ internal:AsyncFrameScrollingEnabled=true ] -->
        so remove it and have TestController::resetPreferencesToConsistentValues() set the default value.
        
        Test: scrollingcoordinator/ios/programmatic-frame-scroll.html

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-04-04  Alexey Proskuryakov  <ap@apple.com>

        Use a correct LC_RPATH when building with ASan
        https://bugs.webkit.org/show_bug.cgi?id=196576

        Reviewed by David Kilzer.

        * asan/asan.xcconfig: As a temporary hack, just force LC_RPATH on all binaries,
        so that ../Frameworks is checked. This is simpler and more reliable than updating
        each SPC service xcconfig.

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        Disable Flaky API Test TestWebKitAPI.WebKit.FocusTextInputContext
        https://bugs.webkit.org/show_bug.cgi?id=196629

        Reviewed by Lucas Forschler.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] while waiting in queue status-bubble for testers queues should display build information from builder queue
        https://bugs.webkit.org/show_bug.cgi?id=196618

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added QUEUE_TRIGGERS.
        (StatusBubble._build_bubble): Get the build from builder if tester has not started the build yet.
        (StatusBubble._get_parent_queue): Get the name of the parent (builder) queue.
        (StatusBubble.get_latest_build_for_queue): If the queue doesn't have any build yet, return build information from
        its parent(builder).

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status-bubble steps are sometimes displayed in reverse order
        https://bugs.webkit.org/show_bug.cgi?id=196625

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._steps_messages): Explicitly specify order_by('uid').

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        Disable Flaky API Test TestWebKitAPI.KeyboardInputTests.KeyboardTypeForInput
        https://bugs.webkit.org/show_bug.cgi?id=196630

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2019-04-04  Youenn Fablet  <youenn@apple.com>

        Pass storage quota parameters from UIProcess to NetworkProcess as part of WebsiteDataStore parameters
        https://bugs.webkit.org/show_bug.cgi?id=196543

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should not display skipped buildbot steps
        https://bugs.webkit.org/show_bug.cgi?id=196584

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] configure localhost as BUILDBOT_SERVER_HOST in testing mode
        https://bugs.webkit.org/show_bug.cgi?id=196620

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py:

2019-04-04  Per Arne Vollan  <pvollan@apple.com>

        [Win] DumpRenderTreeWatchDog.py is not checked into source
        https://bugs.webkit.org/show_bug.cgi?id=196567
        <rdar://problem/49525901>

        Reviewed by Lucas Forschler.

        This script is used on Win EWS bots to terminate hanging DRT processes.

        * EWSTools/dumprendertreewatchdog.py: Added.

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r243858 which made tests time out.

        Disable new API tests on Windows instead.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):

2019-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ATK] Cleanup WebPageAccessibilityObjectAtk
        https://bugs.webkit.org/show_bug.cgi?id=196537

        Reviewed by Michael Catanzaro.

        Also consider files under atk directories as exceptions for GObject conventions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2019-04-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Unreviewed build fix for Windows port.

        error C3861: 'kill': identifier not found

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST): Replaced kill with WKPageTerminate.

2019-04-03  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Cancel build and similar operations should have authentication
        https://bugs.webkit.org/show_bug.cgi?id=196520

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/master.cfg: Configure authentication using admin's username and password from
        environment variables.

2019-04-03  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not trigger queues which are not in production yet
        https://bugs.webkit.org/show_bug.cgi?id=196581

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/config.json:

2019-04-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typo in the name of API test added in r243848.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):

2019-04-03  Chris Dumez  <cdumez@apple.com>

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::nullJavaScriptCallback):
        (TestWebKitAPI::didCrashCheckFrames):
        (TestWebKitAPI::TEST):

2019-04-03  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Upload test results (new results database)
        https://bugs.webkit.org/show_bug.cgi?id=196577
        <rdar://problem/34841155>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Upload results after each device shard, since the configuration will be
        different for each device.
        (Manager._results_to_upload_json_trie): Convert a TestRunResults object to a trie to be
        uploaded to a results database.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Add new 'Upload Options' and prepare 'Results JSON Options' for deprecation.

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
        builds.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformWin.cmake:

2019-04-03  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should not display certain infrastructure status messages
        https://bugs.webkit.org/show_bug.cgi?id=196550

        Reviewed by Lucas Forschler.

        Do not display the steps which are un-needed for end-user. This information is still avaiable
        if the user click on the bubble and look at the Buildbot build.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._steps_messages):
        (StatusBubble._should_display_step): Method to decide whether to display the step or not.

2019-04-03  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use https for sending data to ews-app
        https://bugs.webkit.org/show_bug.cgi?id=196492

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-03  Youenn Fablet  <youenn@apple.com>

        Add a test for DOMCache on multiple browsing in case of private browsing
        https://bugs.webkit.org/show_bug.cgi?id=196524

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForCacheStorage userContentController:didReceiveScriptMessage:]):

2019-04-03  Jonathan Bedard  <jbedard@apple.com>

        [ews] Clean out ~/Library/Logs/CoreSimulator/ on reboot
        https://bugs.webkit.org/show_bug.cgi?id=196540

        Reviewed by Aakash Jain.

        * EWSTools/start-queue-mac.sh: Remove CoreSimulator logs.

2019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add plumbing for a compatibility mode preference in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196005

        Reviewed by Tim Horton.

        Add new API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/ios/PreferredCompatibilityMode.mm: Added.

2019-04-03  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Update libsrtp dependency package for Debian
        https://bugs.webkit.org/show_bug.cgi?id=196528

        Reviewed by Frédéric Wang.

        * gtk/install-dependencies:
        * wpe/install-dependencies:

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478
        <rdar://problem/49535124>

        Unreviewed build fix for MSVC.

        > WebKitTestRunner\TestController.cpp(267): error C2397: conversion from 'double' to 'float' requires a narrowing conversion

        And, there is a style guideline. <https://webkit.org/code-style-guidelines/#floating-point-literals>

        * WebKitTestRunner/TestController.cpp:
        (WTR::printFrame): Use int and float literals.

2019-04-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Reassign bots to queues

        * BuildSlaveSupport/ews-build/config.json: Reassigned ews150 and ews152.

2019-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478

        Reviewed by Alex Christensen.

        Add minimal implementation for printFrame in WebKitTestRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::printFrame):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2019-04-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble hover over message should clearly indicate that build is in-progress
        https://bugs.webkit.org/show_bug.cgi?id=196491

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-04-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Configure buildbot try credentials in environment variables
        https://bugs.webkit.org/show_bug.cgi?id=196501

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py: Read credentials from environment variables.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py: Rename BUILDBOT_PB_USERNAME to BUILDBOT_TRY_USERNAME.
        * BuildSlaveSupport/ews-app/ews/config.py: Ditto.

2019-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r243726): Crash at unrecognized selector: -[WKWebpagePreferences webpagePreferences]
        https://bugs.webkit.org/show_bug.cgi?id=196496
        <rdar://problem/49521634>

        Reviewed by Chris Dumez.

        Add new API tests (see WebKit ChangeLog for more detail).

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesNavigationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (TEST):

2019-04-02  David Kilzer  <ddkilzer@apple.com>

        Rename CLANG_ADDRESS_SANITIZER Xcode variable to ENABLE_ADDRESS_SANITIZER
        <https://webkit.org/b/196499>

        Reviewed by Alexey Proskuryakov.

        * asan/asan.xcconfig: Change CLANG_ADDRESS_SANITIZER to
        ENABLE_ADDRESS_SANITIZER.

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
        https://bugs.webkit.org/show_bug.cgi?id=182757

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformGTK.cmake: Removed the workaround of using an intermediate target.
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.

2019-04-01  Jonathan Bedard  <jbedard@apple.com>

        run-api-tests: Upload test results
        https://bugs.webkit.org/show_bug.cgi?id=196323
        <rdar://problem/49356714>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager):
        (Manager.run): Upload results to a results database.
        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Add upload arguments.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.configuration_for_upload): Creates a configuration dictionary for uploading results.
        (Port.commits_for_upload): Create a list of commits from the WebKit repository tests are run from along
        with commits from any other associated repositories.
        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.build_version): Access build_versoin of underlying platform device.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.test_configuration_for_upload):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.configuration_for_upload): Devices are unique because their configuration is not
        the same as the machine uploading results.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.configuration_for_upload): Define SDK in upload configuration for Mac.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_configuration_for_upload):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_device_with_runtime):
        (SimulatedDevice.__init__): Create simulated device with a build_version.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_existing_simulator):

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        Remove extra newline characters (Follow-up fix to r243707)

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Use API_KEY to accept results data
        https://bugs.webkit.org/show_bug.cgi?id=196461

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/views/results.py:
        (Results.post): Validate EWS_API_KEY before accepting any data.
        * BuildSlaveSupport/ews-build/events.py:
        (Events.sendData): Send EWS_API_KEY if available along with event data.

2019-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to copy and paste a PDF from Notes into Mail compose body
        https://bugs.webkit.org/show_bug.cgi?id=196442
        <rdar://problem/48573098>

        Reviewed by Tim Horton.

        Add new API tests to exercise pasting CNContact and MKMapItem-backed item providers. Additionally, adjust an
        existing test that pastes a PDF file as an attachment to not require UIPreferredPresentationStyleAttachment
        to be specified on the item providers.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::mapItemForTesting):
        (TestWebKitAPI::contactItemForTesting):

2019-04-01  Tim Horton  <timothy_horton@apple.com>

        Make UIWKDocumentContext rects per-character instead of per-word
        https://bugs.webkit.org/show_bug.cgi?id=196459

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        Adjust test results due to switching to per-character rects.

2019-04-01  Chris Dumez  <cdumez@apple.com>

        UIProcess crash when a prewarmed process is terminated
        https://bugs.webkit.org/show_bug.cgi?id=196451
        <rdar://problem/49245471>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (TEST):

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Display OS and Xcode configuration in status-bubble's hover-over message
        https://bugs.webkit.org/show_bug.cgi?id=196449

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.get_os_details): Method to get OS and Xcode details.
        (StatusBubble._build_bubble): Moved the timestamp logic to common method.
        (StatusBubble.get_build_timestamp): Method to get the timestamp to display for the build.

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Remove force schedulers from OpenSource EWS Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=196444

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py: Remove ForceSchedulers.

2019-04-01  Alex Christensen  <achristensen@webkit.org>

        Add SPI to canonicalize NSURLs with WTF::URL
        https://bugs.webkit.org/show_bug.cgi?id=196415
        <rdar://problem/44980271>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/URLCanonicalization.mm: Added.
        (TestWebKitAPI::TEST):

2019-04-01  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] EventSenderProxy constructor is called before a PlatformWindow is usable
        https://bugs.webkit.org/show_bug.cgi?id=196441

        Reviewed by Carlos Garcia Campos.

        Don't cache the wpe_view_backend object that might not exist yet at the
        time of EventSenderProxy constructor invocation, but instead retrieve
        that object whenever it's required for event dispatching. This should
        avoid crashes in this constructor now that it's invoked before any
        PlatformWindow has been set up (as changed in r243496).

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::viewBackend):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::prepareAndDispatchTouchEvent):

2019-03-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKit] MiniBrowser should support high DPI display
        https://bugs.webkit.org/show_bug.cgi?id=196391

        Reviewed by Alex Christensen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Call resetZoom to set the page zoom factor.
        (WebKitBrowserWindow::resetZoom): Changed the default page zoom factor from 1 to the device scale factor.
        * MiniBrowser/win/stdafx.h: Define WEBCORE_EXPORT.

2019-03-31  Sam Weinig  <weinig@apple.com>

        Remove more i386 specific configurations
        https://bugs.webkit.org/show_bug.cgi?id=196430

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        ENABLE_WEB_AUTHN_macosx and ENABLE_WEB_RTC_macosx can now be enabled unconditionally on macOS.

2019-03-31  Andy Estes  <aestes@apple.com>

        [iOS] WebKit should consult the navigation response policy delegate before previewing a QuickLook document
        https://bugs.webkit.org/show_bug.cgi?id=196433
        <rdar://problem/49293305>

        Reviewed by Tim Horton.

        Enhanced API test coverage to include all navigation response policy decisions in both
        linked-before and linked-on-or-after modes. Also added new expectations for all tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ios/PreviewConverter.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (readFile):
        (-[QuickLookDelegate initWithExpectedFileURL:responsePolicy:]):
        (-[QuickLookDelegate initWithExpectedFileURL:previewMIMEType:responsePolicy:]):
        (-[QuickLookDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[QuickLookDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[QuickLookDelegate _webViewWebProcessDidCrash:]):
        (-[QuickLookDelegate _downloadDidStart:]):
        (-[QuickLookDelegate _download:didReceiveResponse:]):
        (-[QuickLookDelegate _download:didReceiveData:]):
        (-[QuickLookDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[QuickLookDelegate _downloadDidFinish:]):
        (-[QuickLookDelegate _download:didFailWithError:]):
        (-[QuickLookDelegate _downloadDidCancel:]):
        (-[QuickLookDelegate verifyDownload]):
        (runTest):
        (runTestDecideBeforeLoading):
        (runTestDecideAfterLoading):
        (TEST):
        (-[QuickLookAsyncDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookPasswordDelegate _webViewDidRequestPasswordForQuickLookDocument:]):
        (-[QuickLookFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[QuickLookNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): Deleted.
        (-[QuickLookNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): Deleted.
        (-[QuickLookNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[QuickLookDecidePolicyDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[QuickLookDecidePolicyDelegate webView:didFailProvisionalNavigation:withError:]): Deleted.
        (-[QuickLookDecidePolicyDelegate _webViewWebProcessDidCrash:]): Deleted.
        (-[QuickLookPasswordNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]): Deleted.

2019-03-30  Dominik Infuehr  <dinfuehr@igalia.com>

        [CMake] add testdfg as target with build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=196393

        Reviewed by Saam Barati.

        Added testdfg as one of the targets to build when
        using CMake.

        * Scripts/build-jsc:

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyBuffer.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyCommandQueue.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyDevice.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyFunction.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyLibrary.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyTest.h: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebMetalEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-03-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r243523): Six form-related watchOS layout tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=196405
        <rdar://problem/49428130>

        Reviewed by Wenson Hsieh.

        Add a shouldPresentPopovers=false WebKitTestRunner option to cause WKTR to swizzle
        the popover presentation methods to be no-ops. Use this in the new test added in
        r243523 so that we do not swizzle those methods for all tests. This is needed because
        those WatchOS tests rely on the popover getting presented and interactive.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformResetStateToConsistentValues):

2019-03-29  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Add Server Trust Evaluation Support.
        https://bugs.webkit.org/show_bug.cgi?id=191646

        Reviewed by Fujii Hironori.

        Implemented MiniBrowser UI for asking if user trusts the server.

        * MiniBrowser/win/Common.cpp:
        (askServerTrustEvaluation):
        (replaceString):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createPEMString):
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):
        (WebKitBrowserWindow::canTrustServerCertificate):
        * MiniBrowser/win/WebKitBrowserWindow.h:

2019-03-29  Cathie Chen  <cathiechen@igalia.com>

        Implement ResizeObserver.
        https://bugs.webkit.org/show_bug.cgi?id=157743

        Reviewed by Simon Fraser.

        Support resizeObserverEnabled webPreferences.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-28  John Wilander  <wilander@apple.com>

        Resource Load Statistics: IPC to the WebsiteDataStore in the UI process from NetworkProcess::deleteWebsiteDataForRegistrableDomains()
        https://bugs.webkit.org/show_bug.cgi?id=196281
        <rdar://problem/48938748>

        Reviewed by Alex Christensen.

        This patch adds the function isStatisticsHasLocalStorage() to the
        TestRunner. With it, the page can query the WebsiteDataStore in the
        UI process to make sure that it sees LocalStorage.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isStatisticsHasLocalStorage):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isStatisticsHasLocalStorage):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-03-28  Jiewen Tan  <jiewen_tan@apple.com>

        API::Data::createWithoutCopying should do a null check before calling CFRelease
        https://bugs.webkit.org/show_bug.cgi?id=196276
        <rdar://problem/48059859>

        Reviewed by Alex Christensen.

        Add an API test that will pass a nil to API::Data::createWithoutCopying via NavigationState::NavigationClient::webCryptoMasterKey.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/navigation-client-default-crypto.html:
        * TestWebKitAPI/Tests/WebKitCocoa/WebCryptoMasterKey.mm: Added.
        (-[WebCryptoMasterKeyNavigationDelegate _webCryptoMasterKeyForWebView:]):
        (-[WebCryptoMasterKeyNavigationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] webkit_web_resource_get_data_finish can return NULL without setting error
        https://bugs.webkit.org/show_bug.cgi?id=186276

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (webViewLoadChanged):
        (testWebResourceGetDataError):
        (testWebResourceGetDataEmpty):
        (beforeAll):
        (webViewloadChanged): Deleted.

2019-03-27  Andy Estes  <aestes@apple.com>

        REGRESSION (r242686): package-root creates roots with broken symlinks in WebKit.framework/XPCServices/
        https://bugs.webkit.org/show_bug.cgi?id=196317

        Reviewed by Dan Bernstein.

        package-root copies built products into a staging directory using ditto(1), which does not
        follow symbolic links as it traverses a directory. Now that the files in
        WebKit.framework/XPCServices/ are symbolic links to a location outside of the framework
        itself, these become broken links when ditto'd into the staging directory.

        To account for this, change package-root to copy using cp(1) in a mode that follows symlinks.

        * Scripts/package-root:

2019-03-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Update display text of Submit for ews analysis
        https://bugs.webkit.org/show_bug.cgi?id=196309

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:

2019-03-27  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests should check for leaks in WebKit processes
        <https://webkit.org/b/193772>
        <rdar://problem/46526680>

        Reviewed by Ryosuke Niwa.

        This works by doing the following:
        - Add a "#LIST CHILD PROCESSES" command to WebKitTestRunnner.
          The list of child processes are returned one per line:
          process.name: pid
        - Run the "#LIST CHILD PROCESSES" command just before the
          "#CHECK FOR WORLD LEAKS" command, and store the list of child
          processes on the ServerProcess object.
        - When the `--leaks` switch is handled, run check_for_leaks() on
          each child process after the main test harness.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (handleControlCommand):
        - Use strncmp() instead of strcmp().
        - Add support for handling "#LIST CHILD PROCESSES" command.

        * Scripts/webkitpy/port/base.py:
        (Port.check_for_leaks):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/driver.py:
        (Driver.do_post_tests_work):
        - Restructure the logic since "#CHECK FOR WORLD LEAKS" is no
          longer the only command this sends to WebKitTestRunner.
        - If the `--leaks` switch is present, send the
          "#LIST CHILD PROCESSES" to WebKitTestRunner and store the
          result using Port.set_webkit_processes().
        (Driver._parse_child_processes_output):
        - Add helper method to parse list of child process names and
          process IDs returned from WebKitTestRunner.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._parse_leaks_output):
        - Return early if there is no leaks_output.
        (LeakDetector.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__):
        (ServerProcess.child_processes):
        (ServerProcess.set_child_processes):
        - Add instance variable to Port to store list of child process
          names and process IDs returned from WebKitTestRunner.
        (ServerProcess._start):
        - Clear self._child_processes.
        (ServerProcess.stop):
        - If self._child_processes is set, call
          self._port.check_for_leaks() for each child process.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (TrivialMockPort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop):
        - If self._child_processes is set, call
          self._port.check_for_leaks() for each child process.

        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::dumpResponse):
        - Extract method from findAndDumpWorldLeaks() so that it may be
          reused by findAndDumpWebKitProcessIdentifiers().
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Add method to output process name and process ID of both the
          WebContent and Networking processes.
        (WTR::TestController::findAndDumpWorldLeaks):
        - Fix missing newline in output when there were no abandoned
          documents.
        - Call dumpResponse() for extracted code.
        (WTR::TestController::handleControlCommand):
        - Restructure the logic for "#CHECK FOR WORLD LEAKS".
        - Use strncmp() instead of strcmp().
        - Call findAndDumpWebKitProcessIdentifiers() when
          "#LIST CHILD PROCESSES" command is sent.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::dumpResponse):
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Declare methods.

2019-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add GLib API test cases after r243434.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testWebViewActiveURI):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (sendRequestCallback):

2019-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Geolocation request not complete when watch request was started in a different web process
        https://bugs.webkit.org/show_bug.cgi?id=195996

        Reviewed by Alex Christensen.

        Add a test case.

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):

2019-03-26  Keith Rollin  <krollin@apple.com>

        Update the way generate-xcfilelists returns strings from functions
        https://bugs.webkit.org/show_bug.cgi?id=195975
        <rdar://problem/49040807>

        Reviewed by Dean Jackson.

        There are places where generate-xcfilelists executes assignments with
        statements like:

            FOO=$(some_function)

        where "some_function" return a string by echoing it. E.g.

            some_function()
            {
                echo "Hello, World"
            }

        This is a common idiom, but it has a problem if "some_function" needs
        to call "exit" in an attempt to halt the entire script right then and
        there. Since "some_function" is called inside of $(), it's being
        executed in a sub-shell. Calling exit in that sub-shell simply exits
        that shell; it doesn't not exit the outer shell in which the main part
        of the script is still running. As such, the main script keeps
        executing when the intent was for the script to halt.

        The solution to this is to use a different idiom for returning
        strings. The one we now is to pass in the name of the variable to
        receive the string result:

            some_function()
            {
                variable_name=$1
                eval $variable_name ="Hello, World"
            }

        The call site now looks like

            some_function FOO

        Because there's no invocation of a sub-shell, some_function can now
        call "exit" if it wants to, and the entire script will exit at that
        point.

        * Scripts/generate-xcfilelists:

2019-03-26  Chris Dumez  <cdumez@apple.com>

        Add basic layout test coverage for File Picker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196265

        Reviewed by Wenson Hsieh.

        Add layout test infrastructure to test the file picker on iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFilePicker):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dismissFilePicker):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overridePresentViewController):
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFilePicker):

2019-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement async paste method on UIWKInteractionViewProtocol
        https://bugs.webkit.org/show_bug.cgi?id=196267
        <rdar://problem/49236346>

        Reviewed by Tim Horton.

        Add a new test to exercise the new SPI. Additionally, add staging forward declarations for
        -pasteWithCompletionHandler:, and remove some old existing staging declarations for other bits of UIKit SPI that
        are now a part of all iOS 12 internal SDKs.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:

        While we're here, also change a few iOS 11.3 checks to just be about PLATFORM(IOS) (since we don't build for iOS
        prior to 12, these version checks are effectively only about iOS vs. tvOS or watchOS).

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _sendQueuedAdditionalItemRequest]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use PostgreSQL for ews.webkit.org database
        https://bugs.webkit.org/show_bug.cgi?id=196270

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2019-03-26  Jonathan Bedard  <jbedard@apple.com>

        [ews] Reset simctl states on reboot
        https://bugs.webkit.org/show_bug.cgi?id=196260

        Rubber-stamped by Aakash Jain.

        * EWSTools/start-queue-mac.sh:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use PostgreSQL for ews-build database
        https://bugs.webkit.org/show_bug.cgi?id=196229

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Get master_hostname dynamically in master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=196255

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg: Get hostname dynamically. Also do not
        send events data in test mode.

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set db_constraint to False for Foreign Keys
        https://bugs.webkit.org/show_bug.cgi?id=196252

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] is_test_mode_enabled should default to True
        https://bugs.webkit.org/show_bug.cgi?id=196248

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg: Reverse the environment variable used to decide is_test_mode_enabled.

2019-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add webkitperl to ENABLED_QUEUES
        https://bugs.webkit.org/show_bug.cgi?id=196253

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-03-25  Alexey Proskuryakov  <ap@apple.com>

        Address NSWindow sometimes using WebKitTestRunnerEvent too early
        https://bugs.webkit.org/show_bug.cgi?id=196211
        rdar://problem/49110552

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::initialize):
        Make sure that EventSenderProxy always exists when running tests. We used to create
        it when resetting before the first test, which is a bit too late.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::TestController::finishCreatingPlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Moved some code that made NSWindow use NSEvent during web view creation. We may
        need to move more if some other case us found, but this is enough for now.

2019-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix typo in GLib geolocation API after r243285.

        gelocation -> geolocation.

        * TestWebKitAPI/Tests/WebKitGLib/TestGeolocationManager.cpp:
        (testGeolocationManagerWatchPosition):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added.
        (credentialWithIdentityAndKeychainPath):
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Expected shouldn't assume its contained types are copyable
        https://bugs.webkit.org/show_bug.cgi?id=195986

        Reviewed by JF Bastien.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::NonCopyable::operator== const):
        (TestWebKitAPI::NonCopyable::operator!= const):
        (TestWebKitAPI::TEST):

2019-03-25  Tim Horton  <timothy_horton@apple.com>

        Remove some now-unnecessary dynamic class lookup
        https://bugs.webkit.org/show_bug.cgi?id=196237

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (makeRequest):
        (TEST):

2019-03-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r243450.

        AppleWin and WinCairo port builds get broken.

        Reverted changeset:

        "Add test for fix of #196095"
        https://bugs.webkit.org/show_bug.cgi?id=196097
        https://trac.webkit.org/changeset/243450

2019-03-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243465.
        https://bugs.webkit.org/show_bug.cgi?id=196226

        the test doesn't build (Requested by thorton on #webkit).

        Reverted changeset:

        "Do not terminate the NetworkProcess if a third party
        application sends a NSCredential with a SecIdentityRef"
        https://bugs.webkit.org/show_bug.cgi?id=196213
        https://trac.webkit.org/changeset/243465

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added.
        (credentialWithIdentityAndKeychainPath):
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-25  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Gracefully handle missing patch_id in events
        https://bugs.webkit.org/show_bug.cgi?id=196216

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:

2019-03-25  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] use lz4 compression for improving buildbot performance
        https://bugs.webkit.org/show_bug.cgi?id=196155

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pull some API testing helper methods out of TestWKWebView
        https://bugs.webkit.org/show_bug.cgi?id=196212

        Reviewed by Tim Horton.

        Refactor some more API testing utility methods, so that they can be used in
        tests that do not use TestWKWebView.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView loadTestPageNamed:]):
        (-[WKWebView synchronouslyLoadHTMLString:baseURL:]):
        (-[WKWebView synchronouslyLoadHTMLString:]):
        (-[WKWebView synchronouslyLoadTestPageNamed:]):
        (-[TestWKWebView loadTestPageNamed:]): Deleted.
        (-[TestWKWebView synchronouslyLoadHTMLString:baseURL:]): Deleted.
        (-[TestWKWebView synchronouslyLoadHTMLString:]): Deleted.
        (-[TestWKWebView synchronouslyLoadTestPageNamed:]): Deleted.

2019-03-25  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Drive-by bug fix: allow tests to play audio without a user gesture by default.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pull IPadUserInterfaceSwizzler out into a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=196193

        Reviewed by Anders Carlsson.

        Pull the IPadUserInterfaceSwizzler helper class out into a separate file, so that it may
        be used in other API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler): Deleted.
        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom): Deleted.
        * TestWebKitAPI/ios/IPadUserInterfaceSwizzler.h: Added.
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler):
        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom):

2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove NavigatorContentUtils in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=196070

        Reviewed by Alex Christensen.

        NavigatorContentUtils was to support the custom scheme spec [1].
        However, in WebKit side, no port has supported the feature in
        WebKit layer after EFL port was removed. So there has been the
        only IDL implementation of the NavigatorContentUtils in WebCore.
        So we don't need to keep the implementation in WebCore anymore.

        [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-24  Andy Estes  <aestes@apple.com>

        [watchOS] Remove unused Proximity Networking code
        https://bugs.webkit.org/show_bug.cgi?id=196188

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):

2019-03-23  Keith Miller  <keith_miller@apple.com>

        Refactor clz/ctz and fix getLSBSet.
        https://bugs.webkit.org/show_bug.cgi?id=196162

        Reviewed by Saam Barati.

        Add tests for clz, ctz, getLSBSet, and getMSBSet.

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::TEST):

2019-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] check-webkit-style doesn't complain about identifiers with underscores in files under glib, gtk or wpe dirs
        https://bugs.webkit.org/show_bug.cgi?id=196143

        Reviewed by Michael Catanzaro.

        Fix the check for the exception of identifiers starting with webkit_ in files under glib, gtk or wpe
        directories.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2019-03-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Manifest expanding fails for qt WPE extension
        https://bugs.webkit.org/show_bug.cgi?id=196148

        Reviewed by Alex Christensen.

        * flatpak/flatpakutils.py:
        (expand_submodules_recurse): The last recurse manifest expand
        iteration might lead to a single module so take it into account
        and don't try to recurse further.

2019-03-22  Chris Dumez  <cdumez@apple.com>

        [ iOS Simulator] REGRESSION (r241821) Layout Test platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html is a flaky failure on bots
        https://bugs.webkit.org/show_bug.cgi?id=195348
        <rdar://problem/48622090>

        Reviewed by Alex Christensen.

        Make sure webView.configuration.preferences._shouldIgnoreMetaViewport gets reset
        to NO when test.options().shouldIgnoreMetaViewport is false.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):

2019-03-22  Chris Dumez  <cdumez@apple.com>

        Prewarmed processes should be usable with any website data store
        https://bugs.webkit.org/show_bug.cgi?id=196104

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (runInitialWarmedProcessUsedTest):
        (TEST):

2019-03-22  David Kilzer  <ddkilzer@apple.com>

        Back out local changes to Alex's Subversion working directory

        They were accidentally committed.

        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive.wait_newest):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.running_pids):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_running_pids):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.check_for_leaks):
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector.check_for_leaks):
        - This was the hack attached to Bug 193772.

        * WebKitTestRunner/mac/WebKitTestRunnerEvent.mm:
        (+[WebKitTestRunnerEvent mouseLocation]):
        - This works around a crash on an internal build.

2019-03-22  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r243354
        https://bugs.webkit.org/show_bug.cgi?id=196138
        <rdar://problem/49145951>

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-03-21  Tim Horton  <timothy_horton@apple.com>

        Adopt UIWKDocumentContext
        https://bugs.webkit.org/show_bug.cgi?id=196040
        <rdar://problem/48642440>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm: Added.
        (makeRequest):
        (-[TestWKWebView synchronouslyRequestDocumentContext:]):
        (-[TestWKWebView synchronouslyAdjustSelectionWithDelta:]):
        (applyStyle):
        (TEST):
        Add tests for UIWKDocumentContext.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        (TEST):
        (recursiveFindWKContentView): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (recursiveFindWKContentView):
        (-[TestWKWebView wkContentView]):
        * TestWebKitAPI/ios/UIKitSPI.h:
        Share the WKContentView finding code between tests.

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn on async overflow scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=196011
        rdar://problem/48453859

        Reviewed by Antti Koivisto.
        
        Explicitly turn off the async overflow scrolling internal feature for tests by default,
        since so many basic layout tests have different results when compositing is triggered for
        overflow.
        
        Individual tests will re-enable with <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Retry API test in case of failures
        https://bugs.webkit.org/show_bug.cgi?id=196004

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (UnApplyPatchIfRequired.doStepIf): Updated doStepIf to include patchFailedAPITests.
        (CompileWebKitToT.doStepIf): Ditto.
        (RunAPITests.evaluateCommand): Check if tests failed and retry them if required.
        (ReRunAPITests): Re-run API tests.
        (ReRunAPITests.evaluateCommand): Check if tests failed and retry on clean build if required.
        (RunAPITestsWithoutPatch): Run API tests without patch.
        (RunAPITestsWithoutPatch.doStepIf):
        (RunAPITestsWithoutPatch.hideStepIf):
        (RunAPITestsWithoutPatch.evaluateCommand):
        (AnalyzeAPITestsResults): Analyze API test results from previous runs.
        (AnalyzeAPITestsResults.start):
        (AnalyzeAPITestsResults.analyzeResults): Analyze API test results.
        (AnalyzeAPITestsResults.getBuildStepByName): Search for a build step by name.
        (AnalyzeAPITestsResults.getTestsResults): Get the test results from previous API tesst steps.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Monkey patched FakeBuild.

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update queues configurations
        https://bugs.webkit.org/show_bug.cgi?id=196074

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/config.json: Updated queues from iOS11 to iOS12,
        added new bots, reassigned bots for various builders, moved few builders to another scheduler.

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Generate status-bubble hover-over messages (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=195680
        <rdar://problem/48903534>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Do not append to details_message in the cases in which it wasn't defined earlier.

2019-03-21  Andy Estes  <aestes@apple.com>

        [iOS] Apple Pay should be available in documents with no user agent scripts
        https://bugs.webkit.org/show_bug.cgi?id=196061
        <rdar://problem/48649391>

        Reviewed by Brady Eidson.

        Added API tests and related infrastructure.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm: Added.
        (-[TestApplePayScriptMessageHandler initWithExpectation:]):
        (-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-active-session.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-in-iframe.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html: Added.
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (-[TestProtocol startLoading]):
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.h: Added.
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.mm: Added.
        (-[WebProcessPlugInWithInternals webProcessPlugIn:didCreateBrowserContextController:]):
        (-[WebProcessPlugInWithInternals webProcessPlugInBrowserContextController:didClearWindowObjectForFrame:inScriptWorld:]):

2019-03-21  Jonathan Bedard  <jbedard@apple.com>

        REGRESSSION (r243297): webkitpy tests broken
        https://bugs.webkit.org/show_bug.cgi?id=196108

        Reviewed by Aakash Jain.

        r243297 updated contributors.json, which broke a few unit tests.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:

2019-03-21  Chris Dumez  <cdumez@apple.com>

        WebKit should throw when trying to create a WKWebView with a related view that is using a different data store
        https://bugs.webkit.org/show_bug.cgi?id=196041
        <rdar://problem/49083230>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm:
        (TEST):

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform applications of WKContentRuleList actions
        https://bugs.webkit.org/show_bug.cgi?id=195965
        <rdar://problem/42664365>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::allActionsForResourceLoad):
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (Notification::description):
        (Notification::operator== const):
        (toVector):
        (-[ContentRuleListNotificationDelegate _webView:URL:contentRuleListIdentifiers:notifications:]):
        (-[ContentRuleListNotificationDelegate _webView:contentRuleListWithIdentifier:performedActionOnURL:blockedLoad:blockedCookies:madeHTTPS:notifications:]):
        (makeContentRuleList):
        (TEST):
        (makeWarnContentRuleList): Deleted.

2019-03-21  Timothy Hatcher  <timothy@apple.com>

        Style check error "WK_MAC_TBA is neither a version number nor WK_IOS_TBA" is confusing.
        https://bugs.webkit.org/show_bug.cgi?id=196088

        Reviewed by Brian Burg.

        Fix the error messages used when looking for macos(WK_IOS_TBA) or ios(WK_MAC_TBA).
        Support checks when only one platform is specified. Also deprecate macosx() and
        force the use of macos() instead.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_min_versions_of_wk_api_available):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_min_versions_of_wk_api_available):

2019-03-21  Alexey Proskuryakov  <ap@apple.com>

        Update status inactive committers' status to 'contributor'.

        * Scripts/webkitpy/common/config/contributors.json:

2019-03-21  Xan Lopez  <xan@igalia.com>

        [JSC][x86] Drop support for x87 floating point
        https://bugs.webkit.org/show_bug.cgi?id=194853

        Reviewed by Don Olmstead.

        Force SSE2 on x86/32bit builds.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
        https://bugs.webkit.org/show_bug.cgi?id=196073

        Reviewed by Michael Catanzaro.

        Add test cases to check functions and constructors with no arguments but receiving user data.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (checkUserData):
        (testJSCFunction):
        (fooCreateWithUserData):
        (testJSCClass):

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build with GLib < 2.58 after r243285.

        Add g_assert_cmpfloat_with_epsilon macro if not defined.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to provide geolocation information
        https://bugs.webkit.org/show_bug.cgi?id=195940

        Reviewed by Michael Catanzaro.

        Add a new test to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestGeolocationManager.cpp: Added.
        (testGeolocationManagerCurrentPosition):
        (testGeolocationManagerWatchPosition):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests): Stop using ENABLE(GEOLOCATION) conditionals for geolocation tests.
        (beforeAll): Ditto.
        * TestWebKitAPI/glib/CMakeLists.txt:

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLib] Returning G_TYPE_OBJECT from a method does not work
        https://bugs.webkit.org/show_bug.cgi?id=195574

        Reviewed by Michael Catanzaro.

        Add new test cases to check the behavior of constructors and functions returning GObject and boxed types.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (getGFile):
        (getParent):
        (createGString):
        (getGString):
        (getGStringCopyWillRaise):
        (getGStringCopy):
        (getGStringStr):
        (getGStringLen):
        (freeGString):
        (testJSCClass):

2019-03-20  Saam Barati  <sbarati@apple.com>

        DFG::AbstractValue::validateOSREntry is wrong when isHeapTop and the incoming value is Empty
        https://bugs.webkit.org/show_bug.cgi?id=195721

        Reviewed by Filip Pizlo.

        * Scripts/run-javascriptcore-tests:

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-20  Daniel Bates  <dabates@apple.com>

        REGRESSION (r243153): [iOS] TestWebKitAPI.FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState is failing
        https://bugs.webkit.org/show_bug.cgi?id=196031
        <rdar://problem/49078172>

        Reviewed by Tim Horton.

        The test incorrectly assumes that calling -[WKWebView resignFirstResponder] is identical to dismissing the
        <select> picker. This is no longer the case following r243135. Instead use testing SPI that invokes that
        same code path used when the Done button is pressed to dismiss the <select> picker.

        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        (TestWebKitAPI::TEST):

2019-03-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): ViewGestureController is not properly notified of process swaps on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196029
        <rdar://problem/48954651>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Improve failure summary string for ApplyPatch step
        https://bugs.webkit.org/show_bug.cgi?id=195995

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch.getResultSummary): Override getResultSummary.

2019-03-20  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for new meter ARIA role
        https://bugs.webkit.org/show_bug.cgi?id=195966

        Reviewed by Chris Fleizach.

        Update Core role for ATK_ROLE_LEVEL_BAR from AXProgressIndicator
        to AXLevelIndicator.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2019-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement FIDO AppID extension
        https://bugs.webkit.org/show_bug.cgi?id=143491
        <rdar://problem/48298273>

        Reviewed by Brent Fulgham.

        Add a test that covers the new flag of convertToU2fSignCommand.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp:
        (TestWebKitAPI::TEST):

2019-03-19  Keith Rollin  <krollin@apple.com>

        Add support for more platforms to generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=195977

        Reviewed by Alexey Proskuryakov.

        generate-xcfilelists incorrectly complains when involved with building
        WebKit for iphonesimulator:

            $ make debug SDKROOT=iphonesimulator.internal -C Internal/
            …
            ### (die get_canonical_platform_name main main) Unrecognized platform name: iphonesimulator

        Address this by teaching generate-xcfilelists about more platforms.

        * Scripts/generate-xcfilelists:

2019-03-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Clear non-cookie website data for sites that have been navigated to, with link decoration, by a prevalent resource
        https://bugs.webkit.org/show_bug.cgi?id=195923
        <rdar://problem/49001272>

        Reviewed by Alex Christensen.

        This patch does the following to the TestRunner:
        - Adds setStatisticsCrossSiteLoadWithLinkDecoration().
        - Makes setStatisticsTimeToLiveUserInteraction() wait for completion.
        - Makes statisticsProcessStatisticsAndDataRecords() wait for completion.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsCrossSiteLoadWithLinkDecoration):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsCrossSiteLoadWithLinkDecoration):
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-03-19  Christopher Reid  <chris.reid@sony.com>

        [CMake] Support more clang and gcc sanitizers
        https://bugs.webkit.org/show_bug.cgi?id=195956

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm: Updating ENABLE_ADDRESS_SANITIZER to ENABLE_SANITIZERS=address

2019-03-19  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Improve summary for PrintConfiguration step
        https://bugs.webkit.org/show_bug.cgi?id=195945

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration.getResultSummary): Override getResultSummary.

2019-03-19  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Improve summary for CheckOutSource step
        https://bugs.webkit.org/show_bug.cgi?id=195963

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource.getResultSummary):

2019-03-19  Daniel Bates  <dabates@apple.com>

        [iOS] Focus not preserved when switching between tabs
        https://bugs.webkit.org/show_bug.cgi?id=195820
        <rdar://problem/43614450>

        Reviewed by Brent Fulgham.

        Add tests to ensure that we restore focus when resigning and becoming first responder.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):

2019-03-19  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::TEST_F):

2019-03-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Backported mssdemux protection data crash fix
        https://bugs.webkit.org/show_bug.cgi?id=195918

        Reviewed by Philippe Normand.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0005-mssdemux-fix-protection-data-double-free.patch: Added.

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243132.

        Broke GTK build

        Reverted changeset:

        "Make WTFLogChannelState and WTFLogLevel enum classes"
        https://bugs.webkit.org/show_bug.cgi?id=195904
        https://trac.webkit.org/changeset/243132

2019-03-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r243073, fixing WPE MiniBrowser launching.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Adjust the shared library name that's changed
        with the API version bump in r243073.

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::TEST_F):

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Disable flaky test added in r2431100
        https://webkit.org/b/195785

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::TEST):
        Apparently bots don't hit 150kb/s as reliably as I do locally.  Can't say I'm too surprised.

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        WKWebView.GetContentsShouldReturnAttributedString is crashing on iOS Simulator.
        https://bugs.webkit.org/show_bug.cgi?id=195916

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST(WKWebView, GetContentsShouldReturnAttributedString): Fix iOS code path to pass.

2019-03-18  Alexey Proskuryakov  <ap@apple.com>

        Add a secondary e-mail address for Fujii Hironori to make tools happier.

        * Scripts/webkitpy/common/config/contributors.json:

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Implement DownloadMonitor to prevent long-running slow downloads from background apps
        https://bugs.webkit.org/show_bug.cgi?id=195785

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TCPServer.cpp: Added.
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::~TCPServer):
        (TestWebKitAPI::TCPServer::socketBindListen):
        (TestWebKitAPI::TCPServer::waitForAndReplyToRequests):
        * TestWebKitAPI/TCPServer.h: Added.
        (TestWebKitAPI::TCPServer::port const):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadMonitorTestDelegate _downloadDidStart:]):
        (-[DownloadMonitorTestDelegate _downloadDidCancel:]):
        (-[DownloadMonitorTestDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[DownloadMonitorTestDelegate _download:didReceiveData:]):
        (TestWebKitAPI::respondSlowly):
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):
        (TestWebKitAPI::downloadAtRate):
        (TestWebKitAPI::TEST):

2019-03-18  Saam Barati  <sbarati@apple.com>

        Add a plan file for JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=190734

        Reviewed by Mark Lam.

        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream2.plan: Added.

2019-03-18  Chris Dumez  <cdumez@apple.com>

        Delay WebProcess launch until a load is triggered in a Web view
        https://bugs.webkit.org/show_bug.cgi?id=195758
        <rdar://problem/48126013>

        Reviewed by Geoff Garen.

        Add API test coverage. Also update some existing API tests to not expect
        constructing a WKWebView to launch both a WebProcess and a NetworkProcess.

        * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetBackingScaleFactor.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (testDidResignInputElementStrongPasswordAppearanceAfterEvaluatingJavaScript):

2019-03-18  Xan Lopez  <xan@igalia.com>

        [CMake] Prevent potential warning when determining $architecture
        https://bugs.webkit.org/show_bug.cgi?id=195891

        Reviewed by Michael Catanzaro.

        It's possible for generateBuildSystemForCMakeProject to be called
        before determineArchitecture() is ever called. This will make the
        first eq check with $architecture to be bogus (and print a
        warning). Change that to an eq check with architecture(), which
        implicitly calls determineArchitecture() if needed, and change all
        the other similar cases in the method in the same way to prevent
        future bugs like this one.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Tarballs generated with “make dist” cannot build documentation
        https://bugs.webkit.org/show_bug.cgi?id=195885

        Reviewed by Carlos Garcia Campos.

        * wpe/manifest.txt.in: Add missing Tools/glib/common.py file to be included in release tarballs.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Cryptic error from Tools/gtkdoc/generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=195883

        Reviewed by Carlos Garcia Campos.

        * gtkdoc/gtkdoc.py:
        (GTKDoc._run_command): When commands fail to run, include the full command line for
        the program invocation and the output it has generated on the standard error stream.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump dependencies to wpe-1.0 and wpebackend-fdo-1.0
        https://bugs.webkit.org/show_bug.cgi?id=195786

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WPEModules.yaml: Use libwpe 1.1.90 and wpebackend-fdo 1.1.91.
        * wpe/jhbuild.modules: Ditto.

2019-03-16  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Don't run clean builds on EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=195851

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/ews-build/factories.py:

2019-03-16  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r243019): Failing API test: WebKit.WebsiteDataStoreCustomPathsWithoutPrewarming
        https://bugs.webkit.org/show_bug.cgi?id=195849

        Reviewed by Chris Dumez.

        We should expect IDB database files to be at path IndexedDB/v1/ after r243019.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):

2019-03-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Upload test results
        https://bugs.webkit.org/show_bug.cgi?id=195755
        <rdar://problem/48896182>

        Reviewed by Aakash Jain.

        Establish a new format for uploading results that is not tied to layout tests, apply
        that format to webkitpy tests.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.native_branch): Return what branch the current checkout is on.
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.native_branch): Ditto.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.build_version): Return a build version for Mac.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__):
        (MockPlatformInfo.build_version):
        * Scripts/webkitpy/results: Added.
        * Scripts/webkitpy/results/__init__.py: Added.
        * Scripts/webkitpy/results/options.py: Added.
        (upload_options): OptParse list for upload options.
        * Scripts/webkitpy/results/upload.py: Added.
        (Upload): Class which enforces the upload format expected by the results server.
        (Upload.Expectations):
        (Upload.create_configuration):
        (Upload.create_commit):
        (Upload.create_details):
        (Upload.create_run_stats):
        (Upload.create_test_result):
        (Upload.__init__):
        (Upload.Encoder): Encode Upload object as json.
        (Upload.upload): Upload results to the results server, returning 'True' if the upload is successful.
        * Scripts/webkitpy/results/upload_unittest.py: Added.
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args): Add upload arguments.
        (Tester._run_tests): Allow results to be uploaded.
        * Scripts/webkitpy/test/runner.py:
        (Runner.__init__): Record which tests were run, rather than just counting them.
        (Runner.handle):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_run):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Add requests auto-install.
        (AutoinstallImportHook._install_requests):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch): Update os name for testing.

2019-03-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Crash under -[TestRunnerWKWebView _didShowMenu] while running layout tests on iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=195810

        Reviewed by Tim Horton.

        Ensure that the process of resetting web view state between tests doesn't also invoke testing callbacks
        registered by the previous layout test. This fixes an occasional crash when hiding the callout menu after
        ending certain layout tests.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):

        Pull logic to reset all of TestRunnerWKWebView's callback handler blocks into a separate helper method; use this
        helper method when destroying the web view, and when resetting state between tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Hide the callout menu *after* clearing out interaction callbacks registered on the web view.

2019-03-15  Sihui Liu  <sihui_liu@apple.com>

        [ Mojave WK1 ] Layout Test storage/indexeddb/database-odd-names.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=190350
        <rdar://problem/45089503>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3-shm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3-wal:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName-2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName.mm: Added.
        (-[IndexedDBFileNameMessageHandler userContentController:didReceiveScriptMessage:]):
        (runTest):
        (createDirectories):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobThenDelete.mm:
        (TEST):

2019-03-15  Timothy Hatcher  <timothy@apple.com>

        Add support to WebPage for getting the contents as an attributed string.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST(WKWebView, GetContentsShouldReturnAttributedString): Added.

2019-03-15  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-15  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r242952.

        Causing API failures on iOS Simulator

        Reverted changeset:

        "[PSON] Make sure the WebProcessCache is leverage when
        relaunching a process after termination"
        https://bugs.webkit.org/show_bug.cgi?id=195747
        https://trac.webkit.org/changeset/242952

2019-03-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MinBrowser][WK2] Implement createNewPage of WKPageUIClient to open a new window
        https://bugs.webkit.org/show_bug.cgi?id=195740

        Reviewed by Ross Kirsling.

        window.open doesn't work for WebKitBrowserWindow because it is not
        implemented yet.

        1. Implemented createNewPage callback of WKPageUIClient.
        2. Changed MainWindow to take a BrowserWindow factory function
          instead of BrowserWindowType to be flexible to create
          BrowserWindow with extra settings.
        3. Renamed MainWindow::BrowserWindowType to BrowserWindowType
          because it is not relevant with MainWindow anymore.

        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        (CommandLineOptions::CommandLineOptions):
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::create):
        (MainWindow::init):
        (MainWindow::WndProc):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create): Moved WKPageConfigurationRef related code from WebKitBrowserWindow::WebKitBrowserWindow.
        (WebKitBrowserWindow::WebKitBrowserWindow): Added a WKPageConfigurationRef parameter.
        (WebKitBrowserWindow::updateProxySettings):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2019-03-14  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test scrolling tree layer manipulation more easily
        https://bugs.webkit.org/show_bug.cgi?id=195780

        Reviewed by Tim Horton.
        
        Add a boolean attribute 'scrollUpdatesDisabled' on UIScriptController that
        cuts off communication of scrolling tree scrolls back to the web process
        (in RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll()). This
        allows tests to trigger scrolls which run the scrolling tree layer positioning
        logic, but never get another commit from the web process that might mask
        scrolling tree bugs.
        
        WKWebView's testing protocol get @property _scrollingUpdatesDisabledForTesting,
        whose getters and setters are overridden by TestRunnerWKWebView. Plumbing
        via PageClient and WebPageProxy makes this flag reachable by RemoteScrollingCoordinatorProxy.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _scrollingUpdatesDisabledForTesting]):
        (-[TestRunnerWKWebView _setScrollingUpdatesDisabledForTesting:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):

2019-03-14  Youenn Fablet  <youenn@apple.com>

        Move IDB storage in private browsing mode to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=195602

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Make descriptionDone messages more readable
        https://bugs.webkit.org/show_bug.cgi?id=195760

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Generate status-bubble hover-over messages
        https://bugs.webkit.org/show_bug.cgi?id=195680

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        (StatusBubble._build_bubble): Generate bubble['details_message'] which would be displayed
        on hover-over.
        (StatusBubble._iso_time):
        (StatusBubble._steps_messages): Returns status messages from steps to be displayed in
        hover-over message.
        (StatusBubble._most_recent_step_message): Returns status message from most recent step.

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Gracefully handle the case when state_string is None
        https://bugs.webkit.org/show_bug.cgi?id=195753

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble display pending for currently running build step
        https://bugs.webkit.org/show_bug.cgi?id=195744

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:
        (Events.stepStarted): If state_string is pending, replace it with step name.

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Add WebsitePolicy for the client to specify the device orientation & motion access policy
        https://bugs.webkit.org/show_bug.cgi?id=195750

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationDelegate initWithDeviceOrientationAccessPolicy:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):

2019-03-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make -[_WKAttachment setFileWrapper:contentType:completion:] robust when given a nil completion handler
        https://bugs.webkit.org/show_bug.cgi?id=195725
        <rdar://problem/48545062>

        Reviewed by Tim Horton.

        Test that we don't crash when changing the file wrapper of an invalid attachment, if the given completion
        handler is nil.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2019-03-13  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
        (TestWebKitAPI::TEST):
        Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

2019-03-13  Chris Dumez  <cdumez@apple.com>

        Use a ServiceWorker process per registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=195649

        Reviewed by Youenn Fablet.

        Update API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-03-13  Chris Dumez  <cdumez@apple.com>

        REGRESSION(PSON, r240660): Navigation over process boundary is flashy when using Cmd-left/right arrow to navigate
        https://bugs.webkit.org/show_bug.cgi?id=195684
        <rdar://problem/48294714>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Remove unused patch view
        https://bugs.webkit.org/show_bug.cgi?id=195669

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/patch.py: Removed.

2019-03-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Use Buildbot result code variables
        https://bugs.webkit.org/show_bug.cgi?id=195668

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot): Added Buildbot result code variables.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Used Buildbot result code variables.

2019-03-13  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Expand submodule recursively
        https://bugs.webkit.org/show_bug.cgi?id=195672

        Building WPE with flatpak was impossible without that as it was raising an exception.
        Also update wpebackend-fdo to match what is built in jhbuild

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (expand_submodules_recurse):
        (expand_manifest):
        * flatpak/org.webkit.WPEModules.yaml:

2019-03-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] status bubble should be hidden for certain builds
        https://bugs.webkit.org/show_bug.cgi?id=194597

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._should_show_bubble_for_build): Hide bubble for builds which were skipped
        because the patch didn't have relevant changes.
        (StatusBubble._should_show_bubble_for_queue): Hide bubbles for queues which are not deployed
        in production yet.

2019-03-12  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Fix a slew of simple clang-cl warnings.
        https://bugs.webkit.org/show_bug.cgi?id=195652

        Reviewed by Don Olmstead.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): -Wunused-variable

2019-03-12  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPURenderPipelineDescriptor and add GPUColorStateDescriptor.format
        https://bugs.webkit.org/show_bug.cgi?id=195518
        <rdar://problem/46322356>

        Reviewed by Myles C. Maxfield.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:

2019-03-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r242825.
        https://bugs.webkit.org/show_bug.cgi?id=195648

        "Broke webkitpy tests with my change to
        lldb_dump_class_layout.py" (Requested by rmorisset on
        #webkit).

        Reverted changeset:

        "Alter Tools/Scripts/dump-class-layout to be able to dump all
        classes with suspicious padding"
        https://bugs.webkit.org/show_bug.cgi?id=195573
        https://trac.webkit.org/changeset/242825

2019-03-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Show status bubbles while the patch is waiting in queue
        https://bugs.webkit.org/show_bug.cgi?id=195618

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added ALL_QUEUES and ENABLED_QUEUES. Only certain queues are 
        enabled in initial deployment.
        (StatusBubble._build_bubble): Display bubble even when build hasn't started.
        (StatusBubble.get_latest_build_for_queue): Get latest build for a given queue.
        (StatusBubble.get_builds_for_queue): Get all builds for a given queue.
        (StatusBubble._should_show_bubble_for): Display bubble for only ENABLED_QUEUES for now.
        (StatusBubble._build_bubbles_for_patch):

2019-03-12  Robin Morisset  <rmorisset@apple.com>

        Alter Tools/Scripts/dump-class-layout to be able to dump all classes with suspicious padding
        https://bugs.webkit.org/show_bug.cgi?id=195573

        Reviewed by Simon Fraser.

        Also modified the script so that when multiple types match a given name it shows them all and not arbitrarily pick one.

        * Scripts/dump-class-layout:
        (main):
        * lldb/lldb_dump_class_layout.py:
        (ClassLayout.__init__):
        (ClassLayout._compute_padding_recursive):
        (LLDBDebuggerInstance.dump_layout_for_classname):
        (LLDBDebuggerInstance):
        (LLDBDebuggerInstance.dump_all_wasteful_layouts):
        (LLDBDebuggerInstance.layout_for_classname): Deleted.

2019-03-12  Chris Dumez  <cdumez@apple.com>

        Device Orientation access permission should be denied unless explicitly granted by the client
        https://bugs.webkit.org/show_bug.cgi?id=195625

        Reviewed by Youenn Fablet.

        add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm: Added.
        (-[DeviceOrientationMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[DeviceOrientationPermissionUIDelegate initWithHandler:]):
        (-[DeviceOrientationPermissionUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):
        (runDeviceOrientationTest):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):

2019-03-12  Jer Noble  <jer.noble@apple.com>

        Flaky API Test TestWebKitAPI.WebKitLegacy.ScrollingDoesNotPauseMedia
        https://bugs.webkit.org/show_bug.cgi?id=195137
        <rdar://problem/48810307>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        (TestWebKitAPI::TEST):

2019-03-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Change urls from uat to production
        https://bugs.webkit.org/show_bug.cgi?id=195566

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py:
        * BuildSlaveSupport/ews-build/events.py:
        * BuildSlaveSupport/ews-build/steps.py:

2019-03-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] change max_builds for local-worker to 1
        https://bugs.webkit.org/show_bug.cgi?id=195568

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:

2019-03-12  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * TestRunnerShared/spi/PencilKitTestSPI.h:
        * TestWebKitAPI/ios/PencilKitTestSPI.h:

2019-03-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Load events may occur in unexpected order when JS redirects page before subresource load finishes
        https://bugs.webkit.org/show_bug.cgi?id=194131

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (uriChanged):
        (testUnfinishedSubresourceLoad):
        (serverCallback):
        (beforeAll):

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        WTF::Expected should use std::addressof instead of operator&
        https://bugs.webkit.org/show_bug.cgi?id=195604

        Reviewed by Myles Maxfield.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::Unique::Unique):
        (TestWebKitAPI::Unique::operator&):
        (TestWebKitAPI::TEST):

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ApduTest.cpp:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        Remove unnecessary includes from headers.

2019-03-11  Simon Fraser  <simon.fraser@apple.com>

        Add testing API to hit-test and scroll overflow scrollers
        https://bugs.webkit.org/show_bug.cgi?id=195278

        Reviewed by Antti Koivisto.
        
        Add UIScriptController::immediateScrollElementAtContentPointToOffset() to enable
        testing of the view hit-testing code path, and immediate scrolling of overflow:scroll.
        
        Tests: scrollingcoordinator/ios/scroll-element-at-point.html

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::enclosingScrollViewIncludingSelf):
        (WTR::UIScriptController::immediateScrollElementAtContentPointToOffset):

2019-03-11  Tim Horton  <timothy_horton@apple.com>

        API test WebKit.RequestTextInputContext fails on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195585

        Reviewed by Wenson Hsieh and Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (applyStyle):
        (TEST):
        Add a viewport, so that the coordinates match up on iOS.
        Scroll by moving the UIScrollView's contentOffset.

2019-03-11  Chris Dumez  <cdumez@apple.com>

        Assert in WebPageProxy::suspendCurrentPageIfPossible()
        https://bugs.webkit.org/show_bug.cgi?id=195506
        <rdar://problem/48733477>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-11  Shawn Roberts  <sroberts@apple.com>

        Adding myself to contributors.json

        Unreviewed, addming myself to contributors.json .

        * Scripts/webkitpy/common/config/contributors.json:

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
        (TEST_F):

2019-03-11  Chris Dumez  <cdumez@apple.com>

        Regression(r242664) WebKit.WebsitePoliciesDeviceOrientationEventEnabled API test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=195561

        Reviewed by Youenn Fablet.

        Make sure the JS in the test requests for permission to receive device orientation events.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-03-11  Youenn Fablet  <youenn@apple.com>

        Allow storage quota increase by default in WTR
        https://bugs.webkit.org/show_bug.cgi?id=195541

        Reviewed by Geoffrey Garen.

        Allow storage quota increase by default in WTR.
        Move from testRunner.allowStorageQuotaIncrease to testRunner.setAllowStorageQuotaIncrease.
        Use this for tests that explicitly need cache increase.

        Instead of increasing quota by 2, make sure the next request is
        granted by adding all given parameters.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowStorageQuotaIncrease):
        (WTR::TestRunner::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):

2019-03-11  Xan Lopez  <xan@igalia.com>

        [CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=194147

        Reviewed by Michael Saboff.

        To make --32-bit work correctly on Linux/64bit we need to:

        - Set FORCE_32BIT on, which will be read by CMake to set WTF_CPU
        correctly. Ideally we'd just redefine CMAKE_SYSTEM_PROCESSOR, but
        unfortunately CMake only allows us to do this during
        crosscompilation, which is overkill here.
        - Set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_ARCHITECTURE so that the
        pkg-config detection module uses the x86 .pc files instead of the
        x86_64 ones.
        - Set the -m32 flags for the compiler.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-08  Dewei Zhu  <dewei_zhu@apple.com>

        Add MotionMark-1.1 plan file for run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=195481

        Rubber-stamped by Darin Adler.

        Run-benchmark script should support MontionMark-1.1.

        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark1.1.plan: Added.

2019-03-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support for submit-to-ews url
        https://bugs.webkit.org/show_bug.cgi?id=195477

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:
        * BuildSlaveSupport/ews-app/ews/templates/submittoews.html: Copied from QueueStatusServer/templates/submittoews.html.
        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/submittoews.py: Added.

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242688, r242643, r242624.

        Caused multiple layout test failures and crashes on iOS and macOS.

        Reverted changeset:

        "requestAnimationFrame should execute before the next frame"
        https://bugs.webkit.org/show_bug.cgi?id=177484
        https://trac.webkit.org/changeset/242624/webkit

        * Tracing/SystemTracePoints.plist:

2019-03-11  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible exclude localhost from classification
        https://bugs.webkit.org/show_bug.cgi?id=195474
        <rdar://problem/47520577>

        Reviewed by Brent Fulgham.

        This patch allows for localhost to be excluded from classification and
        treatment as a prevalent resource.

        The WebKit Tools change adds a new function called
        testRunner.setStatisticsIsRunningTest() which can be used to control this
        behavior.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsIsRunningTest):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsIsRunningTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-03-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Disable waterfall and console view for ews-build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=195560

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r242698.

        API test crashes on bots.

        Reverted changeset:

        "Add a WKContentRuleList variant that uses copied memory
        instead of mmap'd shared memory for class A containerized
        apps"
        https://bugs.webkit.org/show_bug.cgi?id=195511
        https://trac.webkit.org/changeset/242698

2019-03-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

2019-03-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Use port 17000 for worker communication
        https://bugs.webkit.org/show_bug.cgi?id=195558

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] unit-tests fail when passwords.json is missing
        https://bugs.webkit.org/show_bug.cgi?id=195557

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_configuration):
        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242702.

        Broke High Sierra builders.

        Reverted changeset:

        "Add utility function to allow easy reverse range-based
        iteration of a container"
        https://bugs.webkit.org/show_bug.cgi?id=195542
        https://trac.webkit.org/changeset/242702

2019-03-11  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
        (TestWebKitAPI::TEST):
        Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

2019-03-10  Alex Christensen  <achristensen@webkit.org>

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
        (TEST_F):

2019-03-10  Tim Horton  <timothy_horton@apple.com>

        Add SPI to retrieve the set of text inputs in a given rect, and later focus one
        https://bugs.webkit.org/show_bug.cgi?id=195499

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm: Added.
        (-[WKWebView synchronouslyRequestTextInputContextsInRect:]):
        (-[WKWebView synchronouslyFocusTextInputContext:]):
        (applyStyle):
        (applyIframe):
        (TEST):
        Add some tests for this SPI.

2019-03-10  Yusuke Suzuki <utatane.tea@gmail.com>

        [WTF] Align assumption in RunLoopWin to the other platform's RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=181151

        Reviewed by Don Olmstead.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        Enable TestWTF RunLoop tests in all platforms.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::DerivedOneShotTimer::DerivedOneShotTimer):
        (TestWebKitAPI::DerivedOneShotTimer::fired):
        (TestWebKitAPI::TEST):
        Only a few platforms support nested RunLoop.

        (TestWebKitAPI::DerivedRepeatingTimer::DerivedRepeatingTimer):
        (TestWebKitAPI::DerivedRepeatingTimer::fired):

2019-03-10  David Quesada  <david_quesada@apple.com>

        ASSERT(m_downloads.isEmpty()) fails in DownloadProxyMap::~DownloadProxyMap()
        https://bugs.webkit.org/show_bug.cgi?id=152480

        Reviewed by Chris Dumez.

        Add a unit test based on Daniel Bates's test case that starts a download, ensures
        there are no additional references to the process pool besides the one held by
        the download, waits for the download to finish (in the sense that the
        DownloadProxyMap is done tracking the DownloadProxy), and doesn't crash. For good
        measure, also check that the process pool has been deallocated at the end of the
        test. The test wouldn't be meaningful if the process pool were still alive.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[WaitUntilDownloadCanceledDelegate _downloadDidStart:]):
        (-[WaitUntilDownloadCanceledDelegate _downloadDidCancel:]):
            The download will be canceled because the delegate does not implement the
            method to decide the download's destination, so this is where we know the
            DownloadProxyMap is done with the DownloadProxy.
        (TEST):

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Add support for Device Orientation / Motion permission API
        https://bugs.webkit.org/show_bug.cgi?id=195329
        <rdar://problem/47645367>

        Reviewed by Geoffrey Garen.

        Add test infrastructure to help test the Device Orientation / Motion permission API.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::shouldAllowDeviceOrientationAndMotionAccess):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::handleDeviceOrientationAndMotionAccessRequest):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2019-03-08  Saam barati  <sbarati@apple.com>

        Add a compare-results script to compare benchmark results
        https://bugs.webkit.org/show_bug.cgi?id=195486
        <rdar://problem/48723397>

        Reviewed by Geoffrey Garen.

        This patch adds a script to compare benchmark results using Welch's two-tailed t test.
        Initially, this patch only reasons about PLT5/JetStream2/Speedometer2. It will be easy
        to extend it to learn about our other benchmarks.

        * Scripts/compare-results: Added.
        (readJSONFile):
        (detectJetStream2):
        (JetStream2Results):
        (detectSpeedometer2):
        (Speedometer2Results):
        (detectPLT5):
        (PLT5Results):
        (detectBenchmark):
        (biggerIsBetter):
        (ttest):
        (getOptions):
        (main):

2019-03-08  Stephanie Lewis  <slewis@apple.com>

        Ensure old tab state is cleared between iterations of run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=195393
        <rdar://problem/46885583>

        Reviewed by Dewei Zhu.

        a) ensure the default to restore state is not set
        b) terminate Safari correctly
        c) Set the system default to ignore Persistent State in Safari

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver): fix terminate processes to call terminate before killing.
        (OSXBrowserDriver.prepare_env): 
        (OSXBrowserDriver.restore_env):
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._terminate_processes):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: add bundle id
        (OSXChromeDriver):
        (OSXChromeCanaryDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: ditto
        (OSXFirefoxDriver):
        (OSXFirefoxNightlyDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: add preferences to not restore state, bundle id
        (OSXSafariDriver):
        (OSXSafariDriver.prepare_env):

2019-03-08  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Several InputMethodFilter tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=195408

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit/gtk/InputMethodFilter.cpp:
        Regressed in r241751.
        Hexadecimal values of keycodes are expressed now in upper letters.
        Composited characters should be cast to UTF8 strings.

        (TestWebKitAPI::TEST):

2019-03-07  Tomas Popela  <tpopela@redhat.com>

        [GTK] Make Tools/gtkdoc python3 compatible
        https://bugs.webkit.org/show_bug.cgi?id=195359

        Reviewed by Carlos Garcia Campos.

        * gtkdoc/generate-gtkdoc:
        ConfigParser was reworked in Python 3.2 so we have adapt the code to
        work with Python 2 and 3.
        (get_gtkdoc_module_paths):
        The iteritems() was removed in Python 3, so let's use items() that's
        available in Python 2 and 3.
        (get_generator_for_config):
        * gtkdoc/gtkdoc.py:
        (GTKDoc._run_command):
        The sys.stdout.write() is expecting str in Python 3 and not bytes
        (that are coming from stdout.encode()). Use sys.stdout.buffer.write()
        for passing the bytes there.

2019-03-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346
        <rdar://problem/48667048>

        Unreviewed build fix for clang-cl.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setApplicationId): Replaced calling String::charactersWithNullTermination with String::wideCharacters to get wchar_t.

2019-03-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * Tracing/SystemTracePoints.plist:

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add a setting to be able to turn content change observation on/off
        https://bugs.webkit.org/show_bug.cgi?id=195353
        <rdar://problem/48626394>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible to purge only script-accessible cookies
        https://bugs.webkit.org/show_bug.cgi?id=195383
        <rdar://problem/48570136>

        Reviewed by Brent Fulgham.

        This patch adds test infrastructure to purge only script-accessible cookies,
        including a new testRunner function called statisticsDeleteCookiesForHost().git a

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsDeleteCookiesForHost):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsDeleteCookiesForHost):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-03-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r242354.
        https://bugs.webkit.org/show_bug.cgi?id=195402

        breaks layout tests in all configurations (Requested by
        zdobersek on #webkit).

        Reverted changeset:

        "[WPE] Enable web process sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=195169
        https://trac.webkit.org/changeset/242354

2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST):
        Delete wchar tests -- these are MSVC-only and we won't be using String::operator+ going forward anyway.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):
        (main):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::moduleDirectory):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        Use wchar helpers as needed.

2019-03-06  Rob Buis  <rbuis@igalia.com>

        Consider supporting the `referrerpolicy` attribute.
        https://bugs.webkit.org/show_bug.cgi?id=179053

        Reviewed by Darin Adler.

        Add a runtime flag for referrerpolicy attribute.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2019-03-05  Daniel Bates  <dabates@apple.com>

        Update expected API test result following r242379
        (https://bugs.webkit.org/show_bug.cgi?id=195125)

        Update expected x-coordinate of selection rect now that the left padding of
        a textarea is sized in ems (so dependent on the font size) just like the left
        padding of a text field.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):

2019-03-05  David Quesada  <david_quesada@apple.com>

        [WK2] It should be possible to follow links with 'download' attributes
        https://bugs.webkit.org/show_bug.cgi?id=195145
        rdar://problem/48462642

        Reviewed by Alex Christensen.

        Add a unit test to verify that activating links with 'download' attributes now
        navigates to the linked resource, rather than starts downloading it. Add another
        to verify that it is still possible to explicitly download the link via the
        'Download' navigation action policy.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadAttributeTestDelegate init]):
        (-[DownloadAttributeTestDelegate waitForDidFinishNavigation]):
        (-[DownloadAttributeTestDelegate waitForDownloadDidStart]):
        (-[DownloadAttributeTestDelegate webView:didFinishNavigation:]):
        (-[DownloadAttributeTestDelegate webView:didStartProvisionalNavigation:]):
        (-[DownloadAttributeTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DownloadAttributeTestDelegate _downloadDidStart:]):
        (TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:

2019-03-05  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement Cookie Accept Policy.
        https://bugs.webkit.org/show_bug.cgi?id=191645

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        (TestWebKitAPI::Curl::TEST_F):

2019-03-05  Youenn Fablet  <youenn@apple.com>

        Rename requestCacheStorageSpace to requestStorageSpace
        https://bugs.webkit.org/show_bug.cgi?id=195282

        Reviewed by Chris Dumez.

        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):
        (-[TestWebsiteDataStoreDelegate requestCacheStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]): Deleted.

2019-03-05  Brady Eidson  <beidson@apple.com>

        Correctly handle sandbox extensions when the same WKWebView loads multiple file:// URLs.
        <rdar://problem/47820581> and https://bugs.webkit.org/show_bug.cgi?id=195291

        Reviewed by Tim Horton.

        Loading a file: URL into a WKWebView and then loading another file: url from a completely
        different directory into that same WKWebView should work.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm: Added.

2019-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Add WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=195152

        Reviewed by Antti Koivisto.

        Added tests for WeakHashSet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::Base::Base): Moved.
        (TestWebKitAPI::Derived::foo): Moved.
        (WTF::WeakReference<TestWebKitAPI::Base>): Added to track the number of live WeakReference.
        (WTF::WeakReference<TestWebKitAPI::Base>::WeakReference):
        (WTF::WeakReference<TestWebKitAPI::Base>::~WeakReference):
        (TestWebKitAPI::computeSizeOfWeakHashSet): Added.

2019-03-04  Chris Dumez  <cdumez@apple.com>

        Do not share WebProcesses between private and regular sessions
        https://bugs.webkit.org/show_bug.cgi?id=195189
        <rdar://problem/48421064>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-03-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

2019-03-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLib] Returning G_TYPE_OBJECT from a constructor does not work
        https://bugs.webkit.org/show_bug.cgi?id=195206

        Reviewed by Žan Doberšek.

        Add a new test case.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCClass):

2019-03-04  Charlie Turner  <cturner@igalia.com>

        [WPE] Inline wl_array_for_each to workaround C++ compatibility issue
        https://bugs.webkit.org/show_bug.cgi?id=194898

        Reviewed by Žan Doberšek.

        * wpe/backends/WindowViewBackend.cpp: wl_array_for_each relies on
        a GCC extension that permits arithmetic on void* pointer. Inline
        the macro until this issue is fixed upstream.

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Rid the world of WK_API_ENABLED
        https://bugs.webkit.org/show_bug.cgi?id=195263

        Reviewed by Dan Bernstein.

        List of changed files elided because it's useless.

2019-03-03  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed follow-up to r242292.

        By Darin's suggestion, adopt an approach that uses EXPECT_STREQ without scattering utf8().data() everywhere.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::testStrip): Renamed from strip.
        (TestWebKitAPI::TEST):

2019-03-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove accidentally-committed URLHelpers.cpp test

        This test isn't built by any port and was committed in r240962 by mistake. See bug #174816
        and bug #194272 for details.

        * TestWebKitAPI/Tests/WTF/URLHelpers.cpp: Removed.

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Remove some more unused 32-bit code
        https://bugs.webkit.org/show_bug.cgi?id=195255

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/SupportsCarbonEventModel.cpp: Removed.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):
        (handleEventCarbon): Deleted.

2019-03-02  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed follow-up to r242292. Keep EXPECT_STREQ in tests per Darin's request.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::TEST):

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.
'
        * Tools/TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: Add tests for pad().

2019-03-01  Alex Christensen  <achristensen@webkit.org>

        Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=195229
        <rdar://problem/48520362>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2019-03-01  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace scope for event region building
        https://bugs.webkit.org/show_bug.cgi?id=195226

        Reviewed by Jon Lee.

        This trace scope measures the time spend converting element rects into Region objects,
        which can be large on some pages.

        The value for "Display Refresh Dispatch to main thread" was wrong and I fixed it.

        * Tracing/SystemTracePoints.plist:

2019-03-01  Ross Kirsling  <ross.kirsling@sony.com>

        EnvironmentUtilities::stripValuesEndingWithString isn't thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=194612

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        Just test the new string-processing function and don't touch the actual environment.
        (Test cases are all as before, but based on operator== instead of strcmp.)

2019-03-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Update primary keys for handling multiple Buildbot instances
        https://bugs.webkit.org/show_bug.cgi?id=195120

        Reviewed by Stephanie Lewis.

        Use a new primary key uid for build and step tables. Previous primary keys build_id and step_id
        were not enough to handle multiple buildbot instances. This new primary key uid would be generated
        by a combination of buildbot_instance_id and current primary key. e.g.: buildbot_instance_id + build_id

        * BuildSlaveSupport/ews-app/ews/models/build.py: Added new primary key uid.
        * BuildSlaveSupport/ews-app/ews/models/step.py: Ditto.
        * BuildSlaveSupport/ews-app/ews/models/buildbotinstance.py: Generate uid and instance_id.
        * BuildSlaveSupport/ews-app/ews/views/results.py: Updated to receive hostname in events.
        * BuildSlaveSupport/ews-build/events.py: Send hostname along-with events.
        * BuildSlaveSupport/ews-build/master.cfg: Ditto.

2019-03-01  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Enable service worker
        https://bugs.webkit.org/show_bug.cgi?id=188318

        Reviewed by Youenn Fablet.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/win/TestWebKitAPIPrefix.h:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2019-03-01  Justin Fan  <justin_fan@apple.com>

        [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=195191

        Rubber-stamped by Dean Jackson.

        Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix lldb webkitpy tests
        https://bugs.webkit.org/show_bug.cgi?id=194375

        Since we changed the value of Is8Bit flag in StringImpl, we change lldb webkitpy tests accordingly.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.is_8bit):

2019-02-28  David Quesada  <david_quesada@apple.com>

        Expose APINavigationAction.shouldPerformDownload() on WKNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=195121
        rdar://problem/48450302

        Reviewed by Alex Christensen.

        Add API tests for -WKNavigationAction._shouldPerformDownload in various
        configurations where the 'download' attribute is absent, blank, or populated
        with a filename, and where the anchor element is same-origin or cross-origin
        (meaning the 'download' attribute shouldn't be honored).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NavigationAction.mm: Added.
        (-[NavigationActionTestDelegate init]):
        (-[NavigationActionTestDelegate navigationAction]):
        (-[NavigationActionTestDelegate waitForNavigationActionCallback]):
        (-[NavigationActionTestDelegate waitForDidFinishNavigation]):
        (-[NavigationActionTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[NavigationActionTestDelegate webView:didFinishNavigation:]):
        (TEST):

2019-02-28  Antoine Quint  <graouts@apple.com>

        Enable the Pointer Events runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=195156

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2019-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Several PasteImage API tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=195160

        Reviewed by Tim Horton.

        Some of these tests, such as PasteTIFFImage, don't wait for the inserted image element to finish loading before
        querying the image element's size; a few other tests, such as PastePNGFile, are racy since they may begin
        listening for a "load" event after image load is already complete.

        To address this, make these tests first register a "load" event handler, then run script to insert an image
        element into the document, and finally wait until the load event is observed before checking image size.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

2019-02-28  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.PageZoomLevelAfterSwap
        https://bugs.webkit.org/show_bug.cgi?id=195107

        Reviewed by Alex Christensen.

        Give some time for the zoom level to get restored.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-28  Sihui Liu  <sihui_liu@apple.com>

        Stop using legacy IDB path by default when creating WebProcessPool from websiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=194958

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBUserDelete.mm:
        (TEST):

2019-02-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Update method to save build to handle builder_display_name
        https://bugs.webkit.org/show_bug.cgi?id=195047

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/models/build.py: Updated to handle builder_name and builder_display_name.
        * BuildSlaveSupport/ews-app/ews/views/results.py: Ditto.

2019-02-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enable Web GPU only on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=195139

        Because Metal is only supported on 64 bit apps.

        Unreviewed build fix.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-27  Youenn Fablet  <youenn@apple.com>

        Flaky API Test: TestWebKitAPI.ServiceWorkers.ServiceWorkerAndCacheStorageSpecificDirectories
        https://bugs.webkit.org/show_bug.cgi?id=194959

        Reviewed by Chris Dumez.

        Spin loop until getting the condition to remove flakiness.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-02-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Buildbot should include builder_display_name in the build events
        https://bugs.webkit.org/show_bug.cgi?id=195045

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/events.py:
        (Events.buildStarted): Included builder_display_name in event data. Also renamed
        buildername to builder_name to be consistent in naming style.
        (Events.buildFinished): Ditto.

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SessionStorage
        https://bugs.webkit.org/show_bug.cgi?id=194480

        Reviewed by Brady Eidson.

        Update existing API test to make it more likely to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-27  Brady Eidson  <beidson@apple.com>

        Universal links from Google search results pages don't open the app.
        <rdar://problem/46887179> and https://bugs.webkit.org/show_bug.cgi?id=195126

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses
        https://bugs.webkit.org/show_bug.cgi?id=195102

        Reviewed by Geoffrey Garen.

        If the number of processes is not yet what we expect, wait a bit and check again to give
        processes some time to exit.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NavigateToDataURLThenBack
        https://bugs.webkit.org/show_bug.cgi?id=194545

        Reviewed by Brady Eidson.

        Make sure the test navigates forward and then back only once. Previously, navigating
        back would trigger a navigation again in a timer.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-13  Ryan Haddad  <ryanhaddad@apple.com>

        High Sierra Debug JSC test queue should use faster hardware
        https://bugs.webkit.org/show_bug.cgi?id=194603

        Rubber-stamped by Alexey Proskuryakov.

        Adjust queues to free up faster hardware for use on the High Sierra Debug JSC queue.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2019-02-27  John Wilander  <wilander@apple.com>

        Adopt WebCore::RegistrableDomain in WebCore::ResourceLoadStatistics and WebKit::NetworkProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=195071
        <rdar://problem/48417690>

        Reviewed by Alex Christensen and Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::createURL):
            Convenience function.
        (TestWebKitAPI::TEST):
            WebCore::AdClickAttribution now takes a URL when creating Source and
            Destination.
        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp:
        (TestWebKitAPI::TEST):
            WebCore::AdClickAttribution now takes a URL when creating Source and
            Destination.

2019-02-27  Antoine Quint  <graouts@apple.com>

        Support Pointer Events on macOS
        https://bugs.webkit.org/show_bug.cgi?id=195008
        <rdar://problem/47454419>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures): Enable the PointerEvents runtime feature in DumpRenderTree such that tests targeting WK1 may test the Pointer Events feature.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Remove remaining poisoning code.
        https://bugs.webkit.org/show_bug.cgi?id=194138

        Reviewed by Saam Barati.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedRefPtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp: Removed.

2019-02-26  Alex Christensen  <achristensen@webkit.org>

        Move ephemeral local storage from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=195074
        <rdar://problem/47937975>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm: Added.
        (TEST):

2019-02-26  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Load HTTP body of 401 response when AuthenticationChange is cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=191652

        Reviewed by Alex Christensen.

        Fix WinCairo MiniBrowser behavior of authentication dialog.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):

2019-02-26  Youenn Fablet  <youenn@apple.com>

        WebPageProxy should nullify m_userMediaPermissionRequestManager after resetting the media state
        https://bugs.webkit.org/show_bug.cgi?id=195028
        <rdar://problem/48243733>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-26  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add API for webview background color configuration
        https://bugs.webkit.org/show_bug.cgi?id=192305

        Reviewed by Michael Catanzaro.

        * MiniBrowser/wpe/main.cpp:
        (main): Add a new option to configure the webview background
        color. Example: --bg-color=transparent.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewBackgroundColor): Enable background color API tests for WPE.
        (beforeAll): Ditto.

2019-02-25  Yongjun Zhang  <yongjun_zhang@apple.com>

        scalableNativeWebpageParameters() is not preserved on new page navigation.
        https://bugs.webkit.org/show_bug.cgi?id=194892
        <rdar://problem/47538280>

        Reviewed by Wenson Hsieh.
        
        Allow UIScriptController to set WKWebView's _allowsViewportShrinkToFit property with a new `setAllowsViewportShrinkToFit` method.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::allowsViewportShrinkToFit):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):

2019-02-25  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add model for handling multiple Buildbot instances
        https://bugs.webkit.org/show_bug.cgi?id=194863

        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/ews-app/ews/models/buildbotinstance.py: Added.

2019-02-25  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Remove BuilderMapping table
        https://bugs.webkit.org/show_bug.cgi?id=194961

        Reviewed by Stephanie Lewis.

        Store builder name directly in build table, instead of having a separate
        table for it.

        * BuildSlaveSupport/ews-app/ews/models/__init__.py:
        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py: Removed.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-02-25  John Wilander  <wilander@apple.com>

        Introduce and adopt new class RegistrableDomain for eTLD+1
        https://bugs.webkit.org/show_bug.cgi?id=194791
        <rdar://problem/48179240>

        Reviewed by Alex Christensen, Fujii Hironori, and Brent Fulgham.

        This patch adds an API test and replaces two instances of
        "TopPrivatelyOwnedDomains" with "RegistrableDomains" in message names.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Changed two strings to make sure the registrable domains are still considered
            invalid and pass the test.
        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp: Added.
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):

2019-02-25  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump WPEBackend-fdo requirement to API version 1.0
        https://bugs.webkit.org/show_bug.cgi?id=195001

        Reviewed by Carlos Garcia Campos.

        API version 1.0 always includes the functionality previously guarded with
        WPE_BACKEND_CHECK_VERSION(): remove the guards and always use the new functions
        unconditionally.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend): Remove usage of WPE_BACKEND_CHECK_VERSION().
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow): Ditto.
        (WebViewTest::hideView): Ditto.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Ditto.
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::ViewBackend): Use libWPEBackend-fdo-1.0 as library name.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Remove usage of
        WPE_BACKEND_CHECK_VERSION().
        * wpe/jhbuild.modules: Build a version WPEBackend-fdo with the updated API version.

2019-02-25  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add support for flatpak > 1.1.2
        https://bugs.webkit.org/show_bug.cgi?id=194088

        Flatpak 1.2 is now out so we need to support that
        version now.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (check_flatpak):
        (FlatpakPackages.__init__):
        (FlatpakPackages.__detect_packages):
        (FlatpakPackages.__detect_packages.in):
        (FlatpakRepos.update):

2019-02-25  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Bump WPEBackend-fdo Jhbuild package to latest changes
        https://bugs.webkit.org/show_bug.cgi?id=194998

        Reviewed by Carlos Garcia Campos.

        * wpe/jhbuild.modules: Bump the WPEBackend-fdo package, converting it
        to a Git checkout and using the latest commit containing various fixes
        and improvements.

2019-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove user agent quirk for washingtonpost.com
        https://bugs.webkit.org/show_bug.cgi?id=194981

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST):

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2019-02-22  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WinCairo] Enable wk1/wk2 suffix for platform search path.
        https://bugs.webkit.org/show_bug.cgi?id=194846

        Reviewed by Don Olmstead.

        Added _search_paths() and _port_specific_expectations_files() for
        WinCairoPort.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.default_baseline_search_path):
        (WinCairoPort):
        (WinCairoPort._port_specific_expectations_files):
        (WinCairoPort._search_paths):

2019-02-22  Tim Horton  <timothy_horton@apple.com>

        ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=194963

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Do a `contains` check instead of `equals`, because in debug builds we
        put the GraphicsLayer pointer in a prefix.

2019-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Callout menu overlaps in-page controls when editing a comment in github.com's issue tracker
        https://bugs.webkit.org/show_bug.cgi?id=194873
        <rdar://problem/46701974>

        Reviewed by Tim Horton.

        Add a couple of UIScriptController methods to make callout menu testing on iOS easier (see below).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::menuRect const):
        (WTR::UIScriptController::isShowingMenu const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::menuRect const):

        Add a function to query the bounds of the callout menu in content coordinates.

        (WTR::UIScriptController::isShowingMenu const):

        Add a function to query whether the callout menu is shown (i.e., has finished its appearance animation).

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::rectForMenuAction const):
        (WTR::UIScriptController::menuRect const):
        (WTR::UIScriptController::isShowingMenu const):
        (WTR::findViewInHierarchyOfType): Deleted.

2019-02-22  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Unable to preview password-protected documents on iCloud.com
        https://bugs.webkit.org/show_bug.cgi?id=194954
        <rdar://problem/48127957>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]):
        (-[PSONNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[PSONNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):

2019-02-22  Chris Dumez  <cdumez@apple.com>

        REGRESSION(PSON) Scroll position is sometimes not restored on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194924
        <rdar://problem/48216125>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, disable API test added in r241928 on iOS.

        The cache is not enabled on devices with less than 3GB of RAM.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Simon Fraser  <simon.fraser@apple.com>

        Hardcode Visual Viewports on everywhere except iOS WK1
        https://bugs.webkit.org/show_bug.cgi?id=194928

        Reviewed by Zalan Bujtas.

        Remove the WK1 and WK2 preferences and MiniBrowser menu item for "visual viewports",
        change the default value of the Setting to 'true', and hardcode WebView on iOS to
        set it to false. The setting has shipped for several years and there's no need to turn
        it off now.

        Similarly, disable the "Visual Viewport API" on iOS WK1, since it makes no sense if
        Visual Viewports are not enabled.
        
        Remove the "visualViewportEnabled" flag and unused code paths from scrolling tree code
        that only runs in WK2

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController init]):
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController visualViewportEnabled]): Deleted.
        (-[SettingsController toggleVisualViewportEnabled:]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2019-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Discard cached processes when clearing website data store
        https://bugs.webkit.org/show_bug.cgi?id=194894

        Reviewed by Chris Dumez.

        Added a test case.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses): Added.

2019-02-21  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" on a safe browsing warning before a WKWebView has loaded any page should request to close the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=194914
        <rdar://problem/47586889>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webViewDidClose:]):
        (TEST):
        (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]): Deleted.

2019-02-21  David Kilzer  <ddkilzer@apple.com>

        Leak of CFErrorRef objects (1.92 Kbytes) in com.apple.WebKit.WebContent.Development running WebKit layout tests on iOS Simulator
        <https://webkit.org/b/194761>

        Reviewed by Myles Maxfield.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::activateSystemCoreWebFonts): Log `error` to console if
        CTFontManagerRegisterFontsForURL() fails (macOS only).  Update
        to use ARC-compliant cast.
        (WTR::activateFonts): Change `0` to `nullptr`.  Update to use
        ARC-compliant cast.
        (WTR::installFakeHelvetica): Log `error` to console if
        CTFontManagerRegisterFontsForURL() fails, but only on supported
        platforms (macOS Mojave/iOS 12 and newer, not iOS Simulator).
        Call CFRelease() on `error` to fix the leak.  Update to use
        ARC-compliant cast.
        (WTR::uninstallFakeHelvetica): Update to use ARC-compliant
        cast.

2019-02-21  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SuspendedPageLimit
        https://bugs.webkit.org/show_bug.cgi?id=194481

        Reviewed by Alex Christensen.

        Give the processes a chance to shutdown and wait until we reached the expected number
        of processes.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix the macOS build

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix ProcessSwap.PageOverlayLayerPersistence on macOS

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        I am a backwards.

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix ProcessSwap.PageOverlayLayerPersistence on macOS

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        We can't find the UI-side layer on macOS because we don't use UI-side compositing.
        We could force on UI-side compositing, but I feel like the test might be more
        valuable exercising the normal path on each platform (though the original
        bug was also UI-side specific). Though we can't validate that the overlay
        layer was installed successfully, there are layout tests that do that.

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Crash under RemoteLayerTreePropertyApplier::applyProperties when reattaching to old process
        https://bugs.webkit.org/show_bug.cgi?id=194845
        <rdar://problem/47944579>

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Add support for placing formatting roots in-between floats.
        https://bugs.webkit.org/show_bug.cgi?id=194902

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Do not hardcode WPEBackend-fdo library name for linking tests
        https://bugs.webkit.org/show_bug.cgi?id=194901

        Unreviewed build fix.

        * TestWebKitAPI/PlatformWPE.cmake: Set TestWebKitAPIBase to be linked
        against the detected ${WPEBACKEND_FDO_LIBRARIES} instead of hardcoding
        WPEBackend-fdo-0.1 as library name.

2019-02-21  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Darin Adler.

        Add tests involving leading and trailing whitespace, non-token
        characters and quoted strings.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::TEST):

2019-02-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Only build DumpRenderTree when WebKit Legacy is enabled
        https://bugs.webkit.org/show_bug.cgi?id=194884

        Reviewed by Michael Catanzaro.

        * PlatformWin.cmake:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Add API test for <rdar://problem/47471222>
        https://bugs.webkit.org/show_bug.cgi?id=194847

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) "Reload without content extensions" does not work when the main resource is blocked
        https://bugs.webkit.org/show_bug.cgi?id=194872
        <rdar://problem/47924500>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        Add a git utility method that allows the caller to determine if a specific commitish is within a specified range of commits.
        https://bugs.webkit.org/show_bug.cgi?id=191332

        Reviewed by Dean Jackson.

        * Scripts/git-is-in-range: Added.

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebKit::WebPageProxy::decidePolicyForNavigationActionSync
        https://bugs.webkit.org/show_bug.cgi?id=194857
        <rdar://problem/47759323>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        [WKTR] Avoid starting new NetworkProcesses unnecessarily when running the layout tests
        https://bugs.webkit.org/show_bug.cgi?id=194829
        <rdar://problem/47889906>

        Reviewed by Alexey Proskuryakov.

        Every time the TestOptions were changing we were creating both a new Web view and
        a new WKContext, which would start a new Network process. In most cases, we only
        need to contruct a new Web view and we do can keep reusing the same WKContext.
        This patch implements this optimization and thus avoids spinning a lot of new
        Network processes while running the layout tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::ContextOptions::hasSameInitializationOptions const):
        (WTR::TestOptions::ContextOptions::shouldEnableProcessSwapOnNavigation const):
        (WTR::TestOptions::hasSameInitializationOptions const):
        (WTR::TestOptions::shouldEnableProcessSwapOnNavigation const): Deleted.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformAddTestOptions const):

2019-02-20  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Enable support for CONTENT_EXTENSIONS
        https://bugs.webkit.org/show_bug.cgi?id=167941

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (filterSavedCallback): Added.
        (main): Support loading a JSON rule set file for content filtering.
        * MiniBrowser/wpe/main.cpp:
        (filterSavedCallback): Added.
        (main): Support loading a JSON rule set file for content filtering.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentFilterStore.cpp: Added.
        (WTF::refGPtr): Added locally for WebKitUserContentFilter, as it would not be used anywhere else.
        (WTF::derefGPtr): Ditto.
        (testEmptyStore):
        (testSaveInvalidFilter):
        (testSaveLoadFilter):
        (testSavedFilterIdentifierMatch):
        (testRemoveFilter):
        (testSaveMultipleFilters):
        (testSaveFilterFromFile):
        (testFilterPersistence):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (removeOldInjectedContentAndResetLists): Also reset content filters.
        (isCSSBlockedForURLAtPath): Added. Tests whether the test filter, which blocks a
        CSS style sheet, has blocked the load of the CSS by looking at the resulting style of
        the element affected by the style sheet.
        (getUserContentFilter): Added. Stores the test filter in a WebKitUserContentFilterStore
        and returns it to be used by tests.
        (testUserContentManagerContentFilter): Added. Tests whether adding and removing a filter
        from the WebKitUserContentManager results in the a CSS style sheet being blocked.
        (serverCallback): Add support for serving a CSS style sheet for testing.
        (beforeAll): Add call to testUserContentManagerContentFilter().
        * TestWebKitAPI/glib/CMakeLists.txt: Added TestWebKitUserContentFilterStore.

2019-02-19  Keith Rollin  <krollin@apple.com>

        Add timing information to build output
        https://bugs.webkit.org/show_bug.cgi?id=194839
        <rdar://problem/48219609>

        Reviewed by Alexey Proskuryakov.

        Configure xcodebuild with -ShowBuildOperationDuration, causing it to
        emit each project's build time to its output. E.g.,

            ** BUILD SUCCEEDED ** [0.132 sec]

        * Scripts/webkitdirs.pm:
        (XcodeOptions):

2019-02-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241784.

        Broke all OpenSource builds.

        Reverted changeset:

        "Web Inspector: Improve ES6 Class instances in Heap Snapshot
        instances view"
        https://bugs.webkit.org/show_bug.cgi?id=172848
        https://trac.webkit.org/changeset/241784

2019-02-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Remove redundant intersecting logic
        https://bugs.webkit.org/show_bug.cgi?id=194804

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-19  Dean Jackson  <dino@apple.com>

        Clean-up output from generate-xcfilelists so it can be filtered
        https://bugs.webkit.org/show_bug.cgi?id=194795

        Reviewed by Joseph Pecoraro (and Keith Rollin).

        Replace the "..." with "GXCF:" in generate-xcfilelists output, and
        make a slight tweak to filter-build-webkit so such lines are marked
        as plain.

        * Scripts/filter-build-webkit:
        * Scripts/generate-xcfilelists:

2019-02-19  Pablo Saavedra  <psaavedra@igalia.com>

        pytest is not correctly auto-installed
        https://bugs.webkit.org/show_bug.cgi?id=194707

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pytest):

2019-02-18  Chris Dumez  <cdumez@apple.com>

        REGRESSION (PSON): Can't access optumbank.com from myuhc.com
        https://bugs.webkit.org/show_bug.cgi?id=194797
        <rdar://problem/48055151>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support pasting item-provider-backed data on the pasteboard as attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=194670
        <rdar://problem/39066529>

        Reviewed by Tim Horton.

        Remove code and tests for subresource URL replacement, and also add a new test to verify that copied data can be
        pasted in an editable area as attachment elements.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:replacementURLForResource:mimeType:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r241728
       ​https://bugs.webkit.org/show_bug.cgi?id=194723

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        The test should check the default preference value, not make sure the preference is NO after setting it to YES :/

2019-02-18  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Fix a bug where the wrong usage code was used for F13 thru F24.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey):

2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>

        Bytecode cache should a have a boot-specific validation
        https://bugs.webkit.org/show_bug.cgi?id=194769
        <rdar://problem/48149509>

        Reviewed by Keith Miller.

        Add test for WTF::bootSessionUUIDString()

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/UUID.cpp: Added.
        (TEST):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Disable safe browsing in WKWebView and remove its WKPreferences API
        https://bugs.webkit.org/show_bug.cgi?id=194723
        <rdar://problem/48122993>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):
        Make tests use SPI instead of API.

2019-02-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use dumpJSConsoleLogInStdErr=true webkit-test-runner option for non-imported tests instead of using DumpJSConsoleLogInStdErr expectation in TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=194586

        Reviewed by Ross Kirsling.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Pass true to setDumpJSConsoleLogInStdErr if options.dumpJSConsoleLogInStdErr is true.
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input): Convert Cygwin absolute path of tests to Windows path.

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] RenderImage's default intrinsic size is 0.
        https://bugs.webkit.org/show_bug.cgi?id=194745

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block replaced intrinsic width.
        https://bugs.webkit.org/show_bug.cgi?id=194705

        Reviewed by Simon Fraser.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Apply min/max width constraints to preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=194739

        Reviewed by Simon Fraser.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree):
        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):
        (WTR::getOutputDir):
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/gtk/main.cpp:
        (main):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/wpe/main.cpp:
        (main):
        Utilize WTF::Environment where possible.

2019-02-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView callout bar is missing Change Writing Direction item
        https://bugs.webkit.org/show_bug.cgi?id=190015
        <rdar://problem/44810366>

        Reviewed by Tim Horton.

        Make an existing API test that exercises platform SPI to change the inline text writing direction run only on
        macOS, and add a new API test that uses similarly named SPI on iOS to change the base writing direction.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::TEST):

2019-02-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Navigating quickly back and forth can lead to getting 'about:blank' in the backforward list
        https://bugs.webkit.org/show_bug.cgi?id=194717
        <rdar://problem/47884404>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make navigator.mediaDevices SecureContext
        https://bugs.webkit.org/show_bug.cgi?id=194666

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (MediaCaptureDisabledTest::loadTestAndWaitForMessage):
        (TEST_F):

2019-02-15  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        Remove unnecessary soft linking macro usage.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL):
        (SOFT_LINK_STAGED_FRAMEWORK): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2019-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Out-of-flow box is never a float box
        https://bugs.webkit.org/show_bug.cgi?id=194704

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-10  Darin Adler  <darin@apple.com>

        Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases)
        https://bugs.webkit.org/show_bug.cgi?id=194487

        Reviewed by Daniel Bates.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (applicationId): Use makeString instead of String::format.
        (main): Ditto.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createURLForResource): Ditto.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Ditto.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributeSetToString): Use StringBuilder functions directly instead of g_strconcat.
        (WTR::attributesOfElement): Use StringBuilder functions directly instead of String::format.
        (WTR::createStringWithAttributes): Use appendLiteral.
        (WTR::AccessibilityUIElement::helpText const): Ditto.
        (WTR::AccessibilityUIElement::attributedStringForRange): Use StringBuilder functions
        directly instead of using String::format.
        (WTR::AccessibilityUIElement::url): Use makeString instead of String::format.
        (WTR::stringAtOffset): Use StringBuilder::appendNumber instead of String::format.

2019-02-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241564.

        Caused 50+ Timeouts on Mac WK2, mostly in the http/ directory

        Reverted changeset:

        "[Mac] WebInspectorUI.framework does not need to be soft-
        linked anymore"
        https://bugs.webkit.org/show_bug.cgi?id=194411
        https://trac.webkit.org/changeset/241564

2019-02-15  Saam barati  <sbarati@apple.com>

        [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
        https://bugs.webkit.org/show_bug.cgi?id=194036

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::drawSquareInEditableImage):

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::drawSquareInEditableImage):

2019-02-14  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        Remove unnecessary soft linking macro usage.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL):
        (SOFT_LINK_STAGED_FRAMEWORK): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2019-02-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] status bubble should fetch builder name info from BuilderMapping table
        https://bugs.webkit.org/show_bug.cgi?id=194599

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):

2019-02-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set Foreign Key in Django build model
        https://bugs.webkit.org/show_bug.cgi?id=194667

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build):

2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree):
        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication):
        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::strip):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):
        (WTR::getOutputDir):
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/gtk/main.cpp:
        (main):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/wpe/main.cpp:
        (main):
        Utilize WTF::Environment where possible.

2019-02-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Introduce a WebContent Process cache
        https://bugs.webkit.org/show_bug.cgi?id=194594
        <rdar://problem/46793397>

        Reviewed by Geoff Garen.

        Update API tests to turn on the WebContent Process cache.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r241480

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator initWithWebView:]):

2019-02-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA Reflection was disabled in error
        https://bugs.webkit.org/show_bug.cgi?id=194647
        <rdar://problem/48068336>

        Reviewed by Ryosuke Niwa.

        Remove test override now that this feature should be enabled by default.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-02-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241486.
        https://bugs.webkit.org/show_bug.cgi?id=194655

        causing API failures in builds (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "[Cocoa] Media elements will restart network buffering just
        before suspending"
        https://bugs.webkit.org/show_bug.cgi?id=193691
        https://trac.webkit.org/changeset/241486

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapse] Replaced boxes don't collapse through their margins
        https://bugs.webkit.org/show_bug.cgi?id=194622

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC] Shrink-to-fit-width should be constrained by min/max width
        https://bugs.webkit.org/show_bug.cgi?id=194653

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WKBundleFrameGetParentFrame when called inside didRemoveFrameFromHierarchy
        https://bugs.webkit.org/show_bug.cgi?id=194641

        Reviewed by Geoffrey Garen.

        Added a call to WKBundleFrameGetParentFrame to an existing test for didRemoveFrameFromHierarchy
        so that the test would fail without this fix.

        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::didRemoveFrameFromHierarchyCallback):

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Change log level for a log statement

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch):

2019-02-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm: Added.
        (TEST):

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Fetch builder id to name mapping
        https://bugs.webkit.org/show_bug.cgi?id=194355

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.get_builder_id_to_name_mapping):
        (Buildbot._get_display_name_from_builder_name):

2019-02-12  Jiewen Tan  <jiewen_tan@apple.com>

        Further restricting webarchive loads
        https://bugs.webkit.org/show_bug.cgi?id=194567
        <rdar://problem/47610130>

        Reviewed by Youenn Fablet.

        Besides adding API tests, this patch also enhances DragAndDropSimulator to allow
        navigations on drop.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/LoadWebArchive.mm: Added.
        (-[TestLoadWebArchiveNavigationDelegate webView:didFinishNavigation:]):
        (-[TestLoadWebArchiveNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestLoadWebArchiveNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/helloworld.webarchive: Added.
        * TestWebKitAPI/Tests/mac/load-web-archive-1.html: Added.
        * TestWebKitAPI/Tests/mac/load-web-archive-2.html: Added.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator _webView:dragDestinationActionMaskForDraggingInfo:]):

2019-02-13  John Wilander  <wilander@apple.com>

        Store Ad Click Attribution requests in the network process
        https://bugs.webkit.org/show_bug.cgi?id=194510
        <rdar://problem/47650118>

        Reviewed by Alex Christensen and Daniel Bates.

        This patch adds two TestRunner functions:
        - dumpAdClickAttribution()
        - clearAdClickAttribution()

        They call into the network process to dump and clear Ad Click
        Attribution state, respectively.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpAdClickAttribution):
        (WTR::TestRunner::clearAdClickAttribution):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::AdClickAttributionStringResultCallbackContext::AdClickAttributionStringResultCallbackContext):
        (WTR::adClickAttributionStringResultCallback):
        (WTR::TestController::dumpAdClickAttribution):
        (WTR::AdClickAttributionVoidCallbackContext::AdClickAttributionVoidCallbackContext):
        (WTR::adClickAttributionVoidCallback):
        (WTR::TestController::clearAdClickAttribution):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::dumpAdClickAttribution):
        * WebKitTestRunner/TestInvocation.h:

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Generate status-bubble
        https://bugs.webkit.org/show_bug.cgi?id=194572

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._should_show_bubble_for):
        (StatusBubble._build_bubbles_for_patch):

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add status bubble html template
        https://bugs.webkit.org/show_bug.cgi?id=194571

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/templates: Added.
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Copied from QueueStatusServer/templates/statusbubble.html.

2019-02-12  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared()
        https://bugs.webkit.org/show_bug.cgi?id=194568
        <rdar://problem/47944490>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):

2019-02-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove bug_dummy from parsed test expectations
        https://bugs.webkit.org/show_bug.cgi?id=194562
        <rdar://problem/47853999>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test): Remove DUMMY_BUG_MODIFIER from
        skipped tests.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:

2019-02-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to fetch patch
        https://bugs.webkit.org/show_bug.cgi?id=194518

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.get_patch):

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (60 new tests -> 860)

        Unreviewed test gardening (run-singly, --child-processes=1).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Tim Horton.

        Add support for interacting with the callout bar on iOS during layout tests. See below for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):
        (WTR::UIScriptController::rectForMenuAction const):

        Add new mechanisms to make it possible to interact with and query the state of the callout menu on iOS. This
        includes determining the rect (in content view coordinates) of the menu's controls, and callbacks to register
        for when the menu is shown or hidden.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowMenuCallback):
        (WTR::UIScriptController::didShowMenuCallback const):
        (WTR::UIScriptController::setDidHideMenuCallback):
        (WTR::UIScriptController::didHideMenuCallback const):
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):
        (WTR::UIScriptController::rectForMenuAction const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:

        Add a new test option to determine whether DOM paste is enabled. DOM paste is currently enabled everywhere by
        default, but these new programmatic paste tests require it to be disabled in order for confirmation UI to show.

        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::platformUndoManager const):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _didShowMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):

        Listen to when the callout bar is presented and dismissed, and invoke testing callbacks as needed.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::handleMenuWillHideNotification):
        (WTR::handleMenuDidHideNotification):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        (WTR::TestController::platformResetStateToConsistentValues):

        Additionally ensure that any callout menu presented by a previous layout test is dismissed before running the
        next test by hiding the callout bar if necessary, and then waiting for the "DidHide" notification.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::forEachViewInHierarchy):
        (WTR::findViewInHierarchyOfType):

        Move `forEachViewInHierarchy` so that we can use it throughout the file, and then add some additional helper
        functions that dig through a given view's hierarchy in search of a view of a given class.

        (WTR::UIScriptController::selectionStartGrabberViewRect const):
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):

        Tweak these to use `platformContentView` instead of grabbing the content view from WKWebView directly.

        (WTR::UIScriptController::rectForMenuAction const):

        Add a new UIScriptController method to get the rect of the action in the contextual menu (on iOS, this is the
        callout bar) whose label matches the given string.

        (WTR::UIScriptController::platformContentView const):

        Add a `platformContentView()` helper on UIScriptController so that we can stop grabbing the value for key
        "_currentContentView" from various places in this file. Additionally, rewrite `platformUndoManager()` in terms
        of this new helper, and move the code out from iOS/macOS-specific files into UIScriptControllerCocoa.

        (WTR::UIScriptController::platformUndoManager const): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformContentView const):
        (WTR::UIScriptController::platformUndoManager const): Deleted.

2019-02-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: No option to only show unexpected failures in results.html for iPad
        https://bugs.webkit.org/show_bug.cgi?id=194554
        <rdar://problem/47922442>

        Rubber-stamped by Aakash Jain.

        Just because a TestExpecations file does not exist for a specific platform does not mean that
        TestExpecations are not being used, given that platforms inherit test expectations.

        * Scripts/webkitpy/port/base.py:
        (Port.uses_test_expectations_file): Check all possible locations of a TestExpectations file.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_uses_test_expectations_file):

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Remove setDefersLoading infrastructure from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=194506

        Reviewed by Brady Eidson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDefersLoading): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        WebPage::close needs to remove all message receivers associated with that WebPage, not WebPage::~WebPage
        https://bugs.webkit.org/show_bug.cgi?id=194522
        <rdar://problem/47789393>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm: Added.
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for float boxes.
        https://bugs.webkit.org/show_bug.cgi?id=194528

        Reviewed by Antti Koivisto.

        Expand tests coverage (2 new tests -> 800).
        (This is the correct test ordering --runs-singly --child-processes=1)

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-12  Rob Buis  <rbuis@igalia.com>

        Implement serializing in MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=193909

        Reviewed by Darin Adler.

        Add various tests involving upper case, non-ASCII, control/null characters,
        various HTTP whitespace, single quotes and an unpaired surrogate.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::escapeNonASCIIPrintableCharacters):
        (TestWebKitAPI::serializeIfValid):
        (TestWebKitAPI::TEST):

2019-02-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Allow testing infrastructure to use fonts that are returned from CTFontDescriptorCreateForCSSFamily().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2019-02-11  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Add content extensions support in WKTR and unskip layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193622

        Reviewed by Michael Catanzaro.

        This adds support for loading content extension rule sets from the JSON files which
        accompany the corresponding layout test, using the C API. The Cocoa specific parts
        of WKTR for this could be removed, but that is left for a follow-up patch with
        cleanups.

        * Scripts/webkitperl/FeatureList.pm: Add an option to toggle CONTENT_EXTENSIONS.
        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath): Subtract one from the length when constructing the result std::string to
        avoid having the null-terminator copied into the result.
        (WTR::TestController::configureViewForTest): Call configureContentExtensionForTest() as
        part of the preparations to run a test.
        (WTR::ContentExtensionStoreCallbackContext::ContentExtensionStoreCallbackContext): Added.
        (WTR::contentExtensionStoreCallback): Added.
        (WTR::contentExtensionJSONPath): Used to calculate the path to the JSON rule set to be
        used for content extensions test.
        (WTR::TestController::configureContentExtensionForTest): Added, handles enabling content
        extensions and compiling the JSON rule set for tests involving content extensions.
        (WTR::TestController::resetContentExtensions): Removes the content extension built for
        testing and disables content extensions.
        (WTR::TestController::resetPreferencesToConsistentValues): Add a call to
        resetContentExtensions().
        (WTR::TestController::userContentController): Added implementation for ports other than Cocoa.
        * WebKitTestRunner/TestController.h: Add declarations for resetContentExtensions(),
        configureContentExtensionForTest(), and userContentController().

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Add support infrastructure for testing touch and stylus taps when holding modifier keys. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength):
        (WTR::parseModifierArray):
        (WTR::UIScriptController::singleTapAtPoint): Implemented in terms of singleTapAtPointWithModifiers().
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPoint): Implemented in terms of stylusTapAtPointWithModifiers().
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.

2019-02-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241272 and r241276.
        https://bugs.webkit.org/show_bug.cgi?id=194514

        Broke the Apple Internal build and the fix requires human
        intervention :( (Requested by dydz on #webkit).

        Reverted changesets:

        "[iOS] Mouse/Touch/Pointer events are missing modifier keys"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241272

        "Fix internal iOS build after r241272"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241276

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241269.

        Caused 5 layout tests crashes on Mac WK1

        Reverted changeset:

        "DumpRenderTree should report unknown options"
        https://bugs.webkit.org/show_bug.cgi?id=191303
        https://trac.webkit.org/changeset/241269

2019-02-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html does not work on iPad
        https://bugs.webkit.org/show_bug.cgi?id=194313

        Reviewed by Tim Horton.

        Add a helper to determine whether the web view is presenting modal UI.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isPresentingModally const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isPresentingModally const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isPresentingModally const):
        (WTR::UIScriptController::calendarType const):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::calendarType const):

2019-02-11  Joseph Pecoraro  <pecoraro@apple.com>

        GCHeapInspector: Show the retained sizes in more places
        https://bugs.webkit.org/show_bug.cgi?id=194464

        Reviewed by Simon Fraser.

        * GCHeapInspector/gc-heap-inspector.html:
        * GCHeapInspector/script/interface.js:
        (HeapInspectorUtils.humanReadableSize):
        (HeapInspectorUtils.spanForNode.let.nodeHTML.node.className.span):
        (HeapInspectorUtils.spanForNode.span.span):
        (HeapSnapshotInspector.prototype.buildAllObjectsByType):
        (HeapSnapshotInspector.prototype.buildRoots):

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Add support infrastructure for testing touch and stylus taps when holding modifier keys. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength):
        (WTR::parseModifierArray):
        (WTR::UIScriptController::singleTapAtPoint): Implemented in terms of singleTapAtPointWithModifiers().
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPoint): Implemented in terms of stylusTapAtPointWithModifiers().
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.

2019-02-11  Darshan Kadu  <dkadu@igalia.com>

        DumpRenderTree should report unknown options
        https://bugs.webkit.org/show_bug.cgi?id=191303

        Reviewed by Frédéric Wang.

        Added RELEASE_ASSERT_NOT_REACHED for DumpRenderTree/TestOptions.cpp
        to report unknown options.
        Added and assigned test options which are currently used in tests.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241229.

        Revision broke internal builds for watchOS.

        Reverted changeset:

        "[Cocoa] Ask platform for generic font family mappings"
        https://bugs.webkit.org/show_bug.cgi?id=187723
        https://trac.webkit.org/changeset/241229

2019-02-11  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][MiniBrowser] Basic authentication always fails.
        https://bugs.webkit.org/show_bug.cgi?id=194496

        Reviewed by Don Olmstead.

        * MiniBrowser/win/DialogHelper.h:
        (Dialog::getText):

2019-02-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] GstMappedBuffer testsuite build fails
        https://bugs.webkit.org/show_bug.cgi?id=194495

        Reviewed by Carlos Garcia Campos.

        Fix the build by explicitely adding the gstreamer1.0-audio include
        directories to the include path.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:

2019-02-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add enable-javascript-markup setting
        https://bugs.webkit.org/show_bug.cgi?id=193439

        Reviewed by Michael Catanzaro.

        Add test cases to check the new setting.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (testWebKitSettingsJavaScriptMarkup):
        (beforeAll):

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * WebKitTestRunner/TestController.cpp: Removed unnecessary include of HexNumber.h.

2019-02-09  Benjamin Poulain  <benjamin@webkit.org>

        Add more tests for clampTo<>()
        https://bugs.webkit.org/show_bug.cgi?id=194462

        Reviewed by Geoffrey Garen.

        Darin suggested to test the very last floating point number
        at the boundaries when truncating to integer.
        I added test for max/min and max-1/min-1.

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::TEST):

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST): Change tests to use EXPECT_STREQ so failure messages are easier
        to understand. Updated tests for changes to FormattedNumber::fixedPrecision.

2019-02-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for basic inline containers
        https://bugs.webkit.org/show_bug.cgi?id=194473

        Reviewed by Antti Koivisto.

        Expand tests coverage (11 new tests -> 798)

        * LayoutReloaded/misc/LFC-passing-tests.txt: not sure why run-singly keeps producing different ordering.

2019-02-09  Benjamin Poulain  <benjamin@webkit.org>

        Fix MiniBrowser's entitlements
        https://bugs.webkit.org/show_bug.cgi?id=192431

        Reviewed by Joseph Pecoraro.

        MiniBrowser's Extensions Manager was broken. The entitlement was missing for opening
        files, making it impossible to load any extension.

        * MiniBrowser/MiniBrowser.entitlements:

2019-02-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Allow testing infrastructure to use fonts that are returned from CTFontDescriptorCreateForCSSFamily().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2019-02-08  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Implement back/forward touchpad gesture
        https://bugs.webkit.org/show_bug.cgi?id=193919

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Add a test for 'enable-back-forward-navigation-gestures' property.

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen

        * MiniBrowser/MiniBrowser.entitlements:

2019-02-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Ensure that every builder in config.json has short name
        https://bugs.webkit.org/show_bug.cgi?id=194461

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: Updated unit-tests.

2019-02-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add short name to config.json
        https://bugs.webkit.org/show_bug.cgi?id=194456

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json: Added short name.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Set the short name as the builder description.

2019-02-08  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: CrashLogs.find_all_logs may return a string or a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=194418

        Reviewed by Lucas Forschler.

        Do not include errors trying when finding crashlogs at the end of
        a run-webkit-tests run since we don't process those errors.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._look_for_all_crash_logs_in_log_dir):
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir):
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort._look_for_all_crash_logs_in_log_dir):

2019-02-08  Beth Dakin  <bdakin@apple.com>

        Add afterScreenUpdates to WKSnapshotConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=194362
        -and corresponding-
        <rdar://problem/40655528> Please add an "after screen updates" property to 
        WKSnapshotConfiguration (to solve blank snapshots)

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):

2019-02-08  Benjamin Poulain  <benjamin@webkit.org>

        clampTo(): do not convert the input to double when dealing with integers
        https://bugs.webkit.org/show_bug.cgi?id=194263
        <rdar://problem/47692312>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::testClampFloatingPointToFloatingPoint):
        (TestWebKitAPI::testClampFloatingPointToInteger):
        (TestWebKitAPI::testClampSameSignIntegers):
        (TestWebKitAPI::testClampUnsignedToSigned):
        (TestWebKitAPI::testClampSignedToUnsigned):

2019-02-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Respect --dedicated-simulators flag
        https://bugs.webkit.org/show_bug.cgi?id=194416
        <rdar://problem/47894722>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.supported_device_types): If --dedicated-simulators is passed, all
        available devices can be safely ignored.

2019-02-07  Keith Rollin  <krollin@apple.com>

        Remove extra copy of 100x100-red.tga
        https://bugs.webkit.org/show_bug.cgi?id=194371
        <rdar://problem/47873465>

        Reviewed by Said Abou-Hallawa.

        In order to help it pass its tests, Bug 194190 added a second copy of
        the file 100x100-red.tga. However, it turns out that this additional
        file wasn't actually needed, and that that sole previous copy was
        sufficient. At the same time, this second copy -- which was copied to
        the same location in the build output as the first copy -- now caused
        XCBuild to complain because there were two production rules for the
        same output file. Address this by removing the newly-added extra copy.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/100x100-red.tga: Removed.

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKBundlePageSetDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=191394

        Reviewed by Dean Jackson.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDefersLoading):

2019-02-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Use the containing block's padding width when computing min/max width.
        https://bugs.webkit.org/show_bug.cgi?id=194391

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-06  Keith Rollin  <krollin@apple.com>

        Remove Info.plist from MobileMiniBrowser.framework's Copy Bundle Resources phase
        https://bugs.webkit.org/show_bug.cgi?id=193975
        <rdar://problem/47643306>

        Reviewed by Tim Horton.

        The MobileMiniBrowser.framework's Copy Bundle Resources phase copies
        the Info.plist file into the bundle. This step is not necessary as the
        implicit "bundle up all the build products into a framework" build
        phase does this already. Having the Copy Bundle Resources phase do
        this causes a conflict under XCBuild, which objects to two build
        phases producing the same file (Info.plist). Address this by removing
        Info.plist from the Copy Bundle Resources phase.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

2019-02-06  Keith Rollin  <krollin@apple.com>

        Really enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194357
        <rdar://problem/47861231>

        Reviewed by Chris Dumez.

        Bug 194124 was supposed to enable the automatic checking and
        regenerating of .xcfilelist files during the build. While related
        changes were included in that patch, the change to actually enable the
        operation somehow was omitted. This patch actually enables the
        operation. The check-xcfilelist.sh scripts now check
        WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
        from the checking.

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:

2019-02-06  David Kilzer  <ddkilzer@apple.com>

        WTR::InjectedBundlePage::willSendRequestForFrame() leaks a WKDataRef
        <https://webkit.org/b/194286>
        <rdar://problem/47815558>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Use
        WKRetainPtr<> to avoid leaking the WKDataRef.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix a typo

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:

2019-02-06  Olivier Blin  <olivier.blin@softathome.com>

        [GTK][WPE] force libpsl build to use ICU in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194288

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:
        Require ICU for libpsl build in jhbuild, like done in WPE.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r240785): [SOUP] Broke cookie persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=194209

        Reviewed by Carlos Garcia Campos.

        Enhance TestCookieManager to ensure this doesn't happen again.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerPersistentStorage):
        (beforeAll):

2019-02-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename TestOptions.ignoreSynchronousMessagingTimeoutsForTesting
        https://bugs.webkit.org/show_bug.cgi?id=194324

        Reviewed by Andy Estes.

        Rename ignoreSynchronousMessagingTimeoutsForTesting to just ignoreSynchronousMessagingTimeouts. The -ForTesting
        part of the name is already implicit, since this is in testing code in TestOptions.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Allow * as platform for builders and workers
        https://bugs.webkit.org/show_bug.cgi?id=188533

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (checkWorkersAndBuildersForConsistency):

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add few bots to config.json
        https://bugs.webkit.org/show_bug.cgi?id=194304

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        * Scripts/generate-xcfilelists:

2019-02-05  Olivier Blin  <olivier.blin@softathome.com>

        [GTK][WPE] force libpsl build to use ICU in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194288

        Reviewed by Philippe Normand.

        In jhbuild, libpsl depends on ICU, but its configure script may decide to use libidn instead of ICU.
        This can cause build failures if libidn is detected but libunistring is not available.

        Make sure that ICU is used for runtime and builtin PSL data.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Modified timestamp should be updated on updating data
        https://bugs.webkit.org/show_bug.cgi?id=194295

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-02-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r240742.

        Causes crashes on iOS simulator.

        Reverted changeset:

        "[iOS] Keyups for non-modifier keys identified as "Dead" when
        not focused in a content-editable element"
        https://bugs.webkit.org/show_bug.cgi?id=192824
        https://trac.webkit.org/changeset/240742

2019-02-05  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests emits message "...running None" when running tests
        https://bugs.webkit.org/show_bug.cgi?id=194133
        <rdar://problem/47724738>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__str__): Use both version mapping tables and use just the variant
        name if no version name is available.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_unmapped_version): Test case where the version does not have
        an associated named.

2019-02-05  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] require python3-setuptools for meson build in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194287

        Reviewed by Philippe Normand.

        python3-setuptools is needed to build meson in jhbuild.
        It is already required by the GTK port.

        * wpe/install-dependencies:

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to save BuilderMapping to database
        https://bugs.webkit.org/show_bug.cgi?id=194264

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping.__str__):
        (BuilderMapping):
        (BuilderMapping.save_mapping):
        (BuilderMapping.update_mapping):
        (BuilderMapping.get_existing_mapping):
        (BuilderMapping.is_valid_mapping):

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add timestamp fields for BuilderMappings
        https://bugs.webkit.org/show_bug.cgi?id=194266

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping):

2019-02-04  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add tests for webkit_uri_for_display().

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitURIUtilities.cpp: Added.
        (testURIForDisplayUnaffected):
        (testURIForDisplayAffected):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:

2019-02-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Precedence of booted devices should match precedence in DEFAULT_DEVICE_TYPES
        https://bugs.webkit.org/show_bug.cgi?id=194158
        <rdar://problem/47737268>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.supported_device_types): Sort supported device types by the DEFAULT_DEVICE_TYPES.

2019-02-04  Said Abou-Hallawa  <said@apple.com>

        [CG] Enable setAdditionalSupportedImageTypes for WK1
        https://bugs.webkit.org/show_bug.cgi?id=194190

        Reviewed by Tim Horton.

        Add a test similar to the one under WebKit Cocoa but make it create a
        WebView instead of a WKWebView.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/100x100-red.tga: Added.
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.html: Added.
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.mm: Added.
        (-[AdditionalSupportedImageTypesTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::runTest):
        (TestWebKitAPI::TEST):

2019-02-04  Zalan Bujtas  <zalan@apple.com>

        [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
        https://bugs.webkit.org/show_bug.cgi?id=194168

        Reviewed by Simon Fraser.

        Test if the firstVisuallyNoneEmpty milestone fires before the deferred script's post-message. 

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm: Added.
        (-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit/deferred-script-load.html: Added.
        * TestWebKitAPI/Tests/WebKit/deferred-script.js: Added.

2019-02-04  Dean Johnson  <dean_johnson@apple.com>

        REGRESSION (r237269): webkit-patch what-broke is broken 
        https://bugs.webkit.org/show_bug.cgi?id=193025

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/host.py:
        (Host.buildbot):
        (Host.bugzilla): Renamed to 'buildbot'.

2019-02-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] API test WKAttachmentTests.InsertAndRemoveDuplicateAttachment is failing after r240902
        https://bugs.webkit.org/show_bug.cgi?id=194207

        Reviewed by Tim Horton.

        Fix this API test by making it robust against smart paste on iOS. Currently, this test pastes an attachment
        element and assumes that the pasted attachment is adjacent to the original one. However, after enabling smart
        paste, we now insert an extra space in between. Instead of executing "DeleteBackward" twice to test removing the
        attachment elements, we delete backwards once to remove the pasted attachment, and move the selection to the
        start and delete forwards to remove the original attachment.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2019-02-04  Youenn Fablet  <youenn@apple.com>

        Capture state should be managed consistently when doing process swapping
        https://bugs.webkit.org/show_bug.cgi?id=194122
        <rdar://problem/47609293>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[GetUserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[GetUserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[GetUserMediaUIDelegate _webView:mediaCaptureStateDidChange:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isDoingMediaCapture const):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isDoingMediaCapture const):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::isDoingMediaCapture const):

2019-02-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WebKitTestRunners is failing to create the IndexedDB directory.
        https://bugs.webkit.org/show_bug.cgi?id=194142

        Reviewed by Ross Kirsling.

        There three 'separator' variables in TestController.cpp. Renamed
        it 'pathSeparator', and unified them.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::createTestURL):
        (WTR::TestController::platformAdjustContext):

2019-02-03  Simon Fraser  <simon.fraser@apple.com>

        Make setNeedsLayout on the root more explicitly about triggering its side-effects
        https://bugs.webkit.org/show_bug.cgi?id=194198

        Reviewed by Antti Koivisto.

        No need to set the banner heights on navigation now, since Page stores them.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:didFinishNavigation:]):

2019-02-03  John Wilander  <wilander@apple.com>

        Parse and handle Ad Click Attribution attributes in HTMLAnchorElement::handleClick()
        https://bugs.webkit.org/show_bug.cgi?id=194104
        <rdar://problem/47649991>

        Reviewed by Chris Dumez, Daniel Bates, and Darin Adler.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Changed numeric types from unsigned short to uint32_t.

2019-02-02  David Kilzer  <ddkilzer@apple.com>

        Leak of NSArray (4.25 Kbytes) in com.apple.WebKit.WebContent running WebKit layout tests on iOS Simulator
        <https://webkit.org/b/194178>
        <rdar://problem/47753473>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::uninstallFakeHelvetica): Pass nullptr into
        CTFontManagerUnregisterFontsForURLs() to ignore any errors.

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Initialize ICB's style with fixed width/height.
        https://bugs.webkit.org/show_bug.cgi?id=194188

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add missing case to out-of-flow non-replaced horizontal used margin value computation
        https://bugs.webkit.org/show_bug.cgi?id=194185

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::originUserVisibleName): Use makeString and reduce the use of std::string
        as an intermediate in code that ultimately constructs a WTF::String.
        (WTR::userMediaOriginHash): Use makeString.
        (WTR::TestController::didNavigateWithNavigationData): More of the same.
        (WTR::TestController::didPerformClientRedirect): Ditto.
        (WTR::TestController::didPerformServerRedirect): Ditto.
        (WTR::TestController::didUpdateHistoryTitle): Ditto.

2019-02-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit test to verify builder keys
        https://bugs.webkit.org/show_bug.cgi?id=194152

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_builder_keys): Added unit-test.

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (12 new tests -> 787)

        Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix statically positioned replaced out-of-flow horizontal geometry
        https://bugs.webkit.org/show_bug.cgi?id=194163

        Reviewed by Simon Fraser.

        775

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Consistent 1 sec hang when triggering modal alerts while handling synchronous touch events
        https://bugs.webkit.org/show_bug.cgi?id=194140
        <rdar://problem/47728098>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldDismissJavaScriptAlertsAsynchronously):

        Add a new TestRunner hook to make modal JavaScript alerts dismiss asynchronously. This is used by the new layout
        test to induce an IPC deadlock when presenting a modal alert during touch start.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::runJavaScriptAlert):

        Add a client callback function for running JavaScript alerts.

        (WTR::TestController::createOtherPage):
        (WTR::TestController::generateContextConfiguration const):

        Add a test option to disable IPC timeouts for a layout test. This forces the test to reliably time out without
        the fix in this patch.

        (WTR::TestController::createWebViewWithOptions):

        Plumb TestOptions to generateContextConfiguration.

        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::setShouldDismissJavaScriptAlertsAsynchronously):
        (WTR::TestController::handleJavaScriptAlert):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-02-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
        https://bugs.webkit.org/show_bug.cgi?id=193740
        <rdar://problem/47527267>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add display name field to BuilderMapping model
        https://bugs.webkit.org/show_bug.cgi?id=194153

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping):

2019-02-01  Youenn Fablet  <youenn@apple.com>

        API Test broken: TestWebKitAPI.WebKit2.GetUserMediaReprompt
        https://bugs.webkit.org/show_bug.cgi?id=194155

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:
        Revert use of async functions as it seems it cannot be evaluated from TestWebKitAPI.
        Keep calling enumerateDevices to continue cover https://bugs.webkit.org/show_bug.cgi?id=194106.

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust replaced element's intrinsic ratio
        https://bugs.webkit.org/show_bug.cgi?id=194154

        Reviewed by Antti Koivisto.

        761

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Show test results in minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=194150

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.show_results_html_file):

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] MiniBrowser: add ky bindings for back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=194151

        Reviewed by Žan Doberšek.

        ALT + <- go back
        ALT + -> go forward

        * MiniBrowser/wpe/main.cpp:
        (main):

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Set intrinsic size on Layout::Replaced
        https://bugs.webkit.org/show_bug.cgi?id=194139

        Reviewed by Antti Koivisto.

        744

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] MiniBrowser: use g_file_new_for_commandline_arg
        https://bugs.webkit.org/show_bug.cgi?id=194146

        Reviewed by Xabier Rodriguez-Calvar.

        It allows to open relative paths.

        * MiniBrowser/wpe/main.cpp:
        (main):

2019-01-31  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration after recent queue changes
        https://bugs.webkit.org/show_bug.cgi?id=194127

        Rubber-stamped by Aakash Jain.

        Apple Windows queues were updated in r237755, and Sierra was removed in r239859.

        * TestResultServer/static-dashboards/builders.jsonp:

2019-01-31  Youenn Fablet  <youenn@apple.com>

        Add an API test to cover UIClient checkUserMediaPermissionForOrigin being nullptr
        https://bugs.webkit.org/show_bug.cgi?id=194106
        <rdar://problem/47676333>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2019-01-31  Chris Dumez  <cdumez@apple.com>

        Page zoom level is lost after a process swap or a crash
        https://bugs.webkit.org/show_bug.cgi?id=194105
        <rdar://problem/47610781>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didCommitNavigation:]):

2019-01-31  Alex Christensen  <achristensen@webkit.org>

        Revert r238819 which is unneeded and caused a performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=192272
        <rdar://problem/46664625>

        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm:
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]):
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]): Deleted.

2019-01-31  Jiewen Tan  <jiewen_tan@apple.com>

        Formalize WebKitAdditions mechanism of LoadOptimizer
        https://bugs.webkit.org/show_bug.cgi?id=193886
        <rdar://problem/47696809>

        Reviewed by Brent Fulgham.

        * MiniBrowser/MiniBrowser.entitlements:
        Make com.apple.security.temporary-exception.mach-lookup.global-name an array.

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Margin before/after/start/end initial value is 0 and not auto.
        https://bugs.webkit.org/show_bug.cgi?id=194090

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedHorizontalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194074

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block level replaced box.
        https://bugs.webkit.org/show_bug.cgi?id=194071

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        Fix WebKitTestRunner's testPath with Windows full paths
        https://bugs.webkit.org/show_bug.cgi?id=194012

        Reviewed by Alex Christensen.

        updateTestOptionsFromTestHeader failed to open test files because
        testPath returned wrong file paths. It returned a path "/C:/..."
        if a URL "file:///C:/..." was given.

        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath): Removed the first '/' if the path starts with something like "/C:/".

2019-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Bump font related dependencies to match the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=194017

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.
        * wpe/patches/icudata-stdlibs.patch: Added.

2019-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Enable swipe tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194076

        Reviewed by Geoffrey Garen.

        Removed the superflous call to prepareForAsyncTask and asyncTaskComplete as
        it causes a debug assertion failure in runUIScript.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):

2019-01-30  Keith Rollin  <krollin@apple.com>

        Use correct printf format specifier
        https://bugs.webkit.org/show_bug.cgi?id=194062
        <rdar://problem/47686167>

        Reviewed by Alexey Proskuryakov.

        LayoutTestSpellChecker.mm is trying to format a variable of type
        NSTextCheckingType with %tu (unsigned ptrdiff_t), when the type is
        actually an unsigned long long. Fix this by formatting with %llu.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (-[LayoutTestTextCheckingResult description]):

2019-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r240541): WebKit.WebsitePoliciesCustomJavaScriptUserAgent is failing since introduction on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193979

        Reviewed by Wenson Hsieh.

        Fix the test for iOS. Make the test work with iOS UA string.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-01-30  Ryan Haddad  <ryanhaddad@apple.com>

        Replace High Sierra LLINT CLoop bot due to hardware failure
        https://bugs.webkit.org/show_bug.cgi?id=194066

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2019-01-30  Keith Rollin  <krollin@apple.com>

        [NSDragItem init] is unavailable
        https://bugs.webkit.org/show_bug.cgi?id=194059
        <rdar://problem/47685715>

        Reviewed by Wenson Hsieh.

        [NSDragItem init] is marked as NS_UNAVAILABLE. This affects
        DumpRenderTree and TestWebKitAPI, which both try to create an
        NSDragItem in a manner that invokes this method. Address this by using
        -initWithPasteboardWriter instead.

        Note that the parameter passed to initWithPasteboardWriter is likely
        incorrect. In both cases, the object passed does not conform to
        NSPasteboardWriting. However, with this fix, we're no worse off than
        before, and can now perform builds with newer compilers and SDKs until
        a real fix can be crafted. That work is tracked in
        https://bugs.webkit.org/show_bug.cgi?id=194060

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):

2019-01-30  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Fix a bug where the wrong usage code was used for F13 thru F24.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey):

2019-01-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Load hang can occur on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194030
        <rdar://problem/47656939>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage.

        Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-30  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add openjpeg support
        https://bugs.webkit.org/show_bug.cgi?id=194019

        Reviewed by Michael Catanzaro.

        * flatpak/org.webkit.CommonModules.yaml:

2019-01-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r240708.
        https://bugs.webkit.org/show_bug.cgi?id=194022

        It broke WPE build (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Bump font related dependencies to match the GTK+ port"
        https://bugs.webkit.org/show_bug.cgi?id=194017
        https://trac.webkit.org/changeset/240708

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] nextBreakablePosition returns the same position on hyphen characters
        https://bugs.webkit.org/show_bug.cgi?id=194001

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedVerticalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194020

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Support color well on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194010

        Reviewed by Joanmarie Diggs.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):

2019-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Bump font related dependencies to match the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=194017

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.
        * wpe/patches/icudata-stdlibs.patch: Added.

2019-01-29  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Update window scale API usage
        https://bugs.webkit.org/show_bug.cgi?id=193991
        rdar://problem/47614795

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (changeWindowScaleIfNeeded):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

2019-01-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION: ProcessSwap.DoSameSiteNavigationAfterCrossSiteProvisionalLoadStarted Failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193977
        <rdar://problem/47643716>

        Reviewed by Geoff Garen.

        Update API test to address flakiness on iOS. Instead of doing the last navigation after receiving the
        didStartProvisionalLoad, do we right after we answer the navigation policy request. Flakiness was due
        to the previous provisional committing *before* we make the last load. 

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-29  Youenn Fablet  <youenn@apple.com>

        Adopt new SPI to evaluate server certificate trust
        https://bugs.webkit.org/show_bug.cgi?id=193355

        Reviewed by Alex Christensen.

        Add infrastructure to handle HTTPS server trust evaluation testing.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation):
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess):
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::serverTrustEvaluationCallbackCallsCount const):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const):

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to print bot Configuration
        https://bugs.webkit.org/show_bug.cgi?id=193887

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Build step to print configuration.
        * BuildSlaveSupport/ews-build/factories.py:

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Regression (r240046): [PSON] Spurious changes to [WKWebView url] and [WKWebView loading] after [WKWebView loadRequest]
        https://bugs.webkit.org/show_bug.cgi?id=193967
        <rdar://problem/47635348>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONLoadingObserver observeValueForKeyPath:ofObject:change:context:]):

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Handle incoming results data
        https://bugs.webkit.org/show_bug.cgi?id=193973

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/results.py:

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Make the results url generic
        https://bugs.webkit.org/show_bug.cgi?id=193928

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/urls.py:

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Configure buildbot to send events to ews-app
        https://bugs.webkit.org/show_bug.cgi?id=193968

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py: Added.
        * BuildSlaveSupport/ews-build/master.cfg:

2019-01-29  Keith Rollin  <krollin@apple.com>

        Add .xcfilelists to Run Script build phases
        https://bugs.webkit.org/show_bug.cgi?id=193792
        <rdar://problem/47201785>

        Reviewed by Alex Christensen.

        As part of supporting XCBuild, update the necessary Run Script build
        phases in their Xcode projects to refer to their associated
        .xcfilelist files.

        Note that the addition of these files bumps the Xcode project version
        number to something that's Xcode 10 compatible. This change means that
        older versions of the Xcode IDE can't read these projects. Nor can it
        fully load workspaces that refer to these projects (the updated
        projects are shown as non-expandable placeholders). `xcodebuild` can
        still build these projects; it's just that the IDE can't open them.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-29  John Wilander  <wilander@apple.com>

        Add data abstraction and validation for Ad Click Attribution
        https://bugs.webkit.org/show_bug.cgi?id=193916
        <rdar://problem/47603481>

        Reviewed by Daniel Bates, Brent Fulgham, and Alex Christensen.

        Ad click attribution has two steps. First, the storage of an ad
        campaign ID for a click that takes the user to a destination
        site. Second, a conversion on the destination site that can be
        attributed to the ad click.

        This patch adds a class that represents a request for ad click
        attribution. Validation makes sure that the bits of entropy
        reported through this mechanism is limited.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp: Added.
        (TestWebKitAPI::TEST):

2019-01-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab
        https://bugs.webkit.org/show_bug.cgi?id=193932
        <rdar://problem/47598947>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        Adding new passing LFC tests.

        Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Remove incorrect downcast<Container>
        https://bugs.webkit.org/show_bug.cgi?id=193964

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Do not ignore next sibling box while laying out BFC.
        https://bugs.webkit.org/show_bug.cgi?id=193954

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for running subtests
        https://bugs.webkit.org/show_bug.cgi?id=193904

        Reviewed by Michael Catanzaro.

        pytest already supports it by passing test.py::subtest, so we can do the same.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (get_item_name): Made this global.
        (CollectRecorder.__init__): Receive the parameter to ignore.
        (CollectRecorder.pytest_collectreport): Collect also the subtests.
        (TestExpectationsMarker.pytest_collection_modifyitems): Use get_item_name().
        (collect): Add parameter to ignore.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.collect): Pass the driver name as parameter to ignore.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.collect_tests): Handle subtest name in test path.
        (WebDriverTestRunnerSelenium.run): Ditto.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.collect_tests): Ditto.
        (WebDriverTestRunnerW3C.run): Ditto.

2019-01-28  Ryosuke Niwa  <rniwa@webkit.org>

        User agent string override for navigator.userAgent should be site specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=193950

        Reviewed by Brent Fulgham.

        Updated per the _WKWebsitePolicies rename.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
        https://bugs.webkit.org/show_bug.cgi?id=193941

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/ConcurrentPtrHashSet.cpp:
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WTF/ScopedLambda.cpp:
        * TestWebKitAPI/Tests/WTF/Time.cpp:
        * TestWebKitAPI/Tests/WTF/UniqueArray.cpp:
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:

2019-01-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, reorder my emails to fix autocomplete in bugzilla

        * Scripts/webkitpy/common/config/contributors.json:

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-28  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r236481): Move soft-linking of LocalAuthentication.framework out of LocalAuthenticationSoftLink.h
        <https://webkit.org/b/193884>

        Reviewed by Jiewen Tan.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add LocalAuthentication to
        `frameworks_with_soft_links`.

2019-01-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKitTestRunner] Error: test and reference images have different sizes. Test image is 784x561, reference image is 800x600
        https://bugs.webkit.org/show_bug.cgi?id=193891

        Reviewed by Ross Kirsling.

        There were three problems in window sizes of WebView and the host window.
        1. The sizes of pixel image output were incorrect.
        2. The host window is going to appear after window.resize was invoked.
        3. window.resize resized only the host window, not WebView.

        This change solves them with a following approach.
        a. PlatformWebView::PlatformWebView creates the initial host window as zero size.
        b. Changes the host window style from WS_OVERLAPPEDWINDOW to WS_POPUP
           as well as DumpRenderTree in order to match the client area and the window area.
        c. PlatformWebView::resizeTo simply calls PlatformWebView::setWindowFrame as well as Mac port and GTK port.
        d. PlatformWebView::setWindowFrame changes both window sizes.
        e. PlatformWebView::setWindowFrame moves the host window to the out side of screen if m_options.shouldShowWebView.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): Create the host window
        and WebView as zero size. Use WS_POPUP instead of WS_OVERLAPPEDWINDOW.
        (WTR::PlatformWebView::resizeTo): Calls PlatformWebView::setWindowFrame.
        (WTR::PlatformWebView::setWindowFrame): Change both window sizes.

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to save Step data to database
        https://bugs.webkit.org/show_bug.cgi?id=193890

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/step.py:
        (Step.save_step): Method to save step data.
        (Step.update_step): Method to update step data.
        (Step.get_existing_step): Method to fetch existing step from database.
        (Step.is_valid_result): Method to validate valid step result.

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to save Build data to database
        https://bugs.webkit.org/show_bug.cgi?id=193735

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build.save_build): Method to save build information to database.
        (Build.get_existing_build): Method to fetch existing build from database.
        (Build.is_valid_result): Method to validate build result.
        * BuildSlaveSupport/ews-app/ews/common/util.py:
        (is_valid_int_id): Method to validate valid id.

2019-01-28  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebPageProxy::didStartProgress()
        https://bugs.webkit.org/show_bug.cgi?id=193915
        <rdar://problem/47560907>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename id variables
        https://bugs.webkit.org/show_bug.cgi?id=193883

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:
        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/patch.py:
        * BuildSlaveSupport/ews-app/ews/views/results.py:
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Allow certain fields to be empty
        https://bugs.webkit.org/show_bug.cgi?id=193892

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-01-28  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::TEST):

2019-01-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][MarginCollapsing][Quirks] Quirk margin values get propagated through margin collapsing
        https://bugs.webkit.org/show_bug.cgi?id=193896

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge): Use makeString.
        (WTR::TestController::downloadDidFail): Use an ASCIILiteral via the _s syntax.

2019-01-27  Jiewen Tan  <jiewen_tan@apple.com>

        Use a load optimizer for some sites
        https://bugs.webkit.org/show_bug.cgi?id=193881
        <rdar://problem/46325455>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm: Added.

2019-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Introduce a static accessibility tree
        https://bugs.webkit.org/show_bug.cgi?id=193348
        <rdar://problem/47203295>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] The default values for top/bottom in contentHeightForFormattingContextRoot should not be 0.
        https://bugs.webkit.org/show_bug.cgi?id=193867

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Ignore last inflow child's collapsed through margin after when computing containing block's height.
        https://bugs.webkit.org/show_bug.cgi?id=193865

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Need a mechanism to override navigator.userAgent
        https://bugs.webkit.org/show_bug.cgi?id=193762
        <rdar://problem/47504939>

        Reviewed by Brent Fulgham.

        Added test cases for _WKWebsitePolicies.customJavaScriptUserAgent.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomJavaScriptUserAgentDelegate webView:didFinishNavigation:]):

2019-01-25  Dean Jackson  <dino@apple.com>

        REGRESSION: Some USDz from 3rd party websites don't go directly to AR QL
        https://bugs.webkit.org/show_bug.cgi?id=193831
        <rdar://problem/47399263>

        Reviewed by Chris Dumez.

        Two new tests that exercise cross-origin and same-origin System
        Previews.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Check .xcfilelists" build phase
        https://bugs.webkit.org/show_bug.cgi?id=193790
        <rdar://problem/47201374>

        Reviewed by Alex Christensen.

        Support for XCBuild includes specifying inputs and outputs to various
        Run Script build phases. These inputs and outputs are specified as
        .xcfilelist files. Once created, these .xcfilelist files need to be
        kept up-to-date. In order to check that they are up-to-date or not,
        add an Xcode build step that invokes an external script that performs
        the checking. If the .xcfilelists are found to be out-of-date, update
        them, halt the build, and instruct the developer to restart the build
        with up-to-date files.

        At this time, the checking and regenerating is performed only if the
        WK_ENABLE_CHECK_XCFILELISTS environment variable is set to 1. People
        who want to use this facility can set this variable and test out the
        checking/regenerating. Once it seems like there are no egregious
        issues that upset a developer's workflow, we'll unconditionally enable
        this facility.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/check-xcfilelists.sh: Added.
        * WebKitTestRunner/Scripts/check-xcfilelists.sh: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Apply Configuration to XCFileLists" build target
        https://bugs.webkit.org/show_bug.cgi?id=193781
        <rdar://problem/47201153>

        Reviewed by Alex Christensen.

        Part of generating the .xcfilelists used as part of adopting XCBuild
        includes running `make DerivedSources.make` from a standalone script.
        It’s important for this invocation to have the same environment as
        when the actual build invokes `make DerivedSources.make`. If the
        environments are different, then the two invocations will provide
        different results. In order to get the same environment in the
        standalone script, have the script launch xcodebuild targeting the
        "Apply Configuration to XCFileLists" build target, which will then
        re-invoke our standalone script. The script is now running again, this
        time in an environment with all workspace, project, target, xcconfig
        and other environment variables established.

        The "Apply Configuration to XCFileLists" build target accomplishes
        this task via a small embedded shell script that consists only of:

            eval "${WK_SUBLAUNCH_SCRIPT_PARAMETERS[@]}"

        The process that invokes "Apply Configuration to XCFileLists" first
        sets WK_SUBLAUNCH_SCRIPT_PARAMETERS to an array of commands to be
        evaluated and exports it into the shell environment. When xcodebuild
        is invoked, it inherits the value of this variable and can `eval` the
        contents of that variable. Our external standalone script can then set
        WK_SUBLAUNCH_SCRIPT_PARAMETERS to the path to itself, along with a set
        of command-line parameters needed to restart itself in the appropriate
        state.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform an application that "Go Back" has been clicked from a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193802
        <rdar://problem/46010580>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]):
        (TEST):

2019-01-25  Daniel Bates  <dabates@apple.com>

        [iOS] uiController.keyDown() does not translate Control modified key
        https://bugs.webkit.org/show_bug.cgi?id=192898

        Reviewed by Wenson Hsieh.

        Implement uiController.keyDown() in terms of HIDEventGenerator so that UIKit performs
        key translation, as applicable. Among other cases, key translation occurs when performing
        a Control key modified key sequence. Writing uiController.keyDown() in terms of HIDEventGenerator
        also makes the behavior of uiController.keyDown() more closely match the behavior of a
        human pressing down and releasing key(s) using a hardware keyboard.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator sendMarkerHIDEventWithCompletionBlock:]): Renamed; formerly named _sendMarkerHIDEventWithCompletionBlock.

        (-[HIDEventGenerator touchDown:touchCount:completionBlock:]):
        (-[HIDEventGenerator liftUp:touchCount:completionBlock:]):
        (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusUpAtPoint:completionBlock:]):
        (-[HIDEventGenerator stylusTapAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
        (-[HIDEventGenerator longPress:completionBlock:]):
        (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
        Update code for above renaming.

        (hidUsageCodeForCharacter): Translate \b to a backspace and teach this function to recognize the
        DumpRenderTree EventSender-compatible modifier key names (e.g. "metaKey").

        (-[HIDEventGenerator keyDown:]): Added.
        (-[HIDEventGenerator keyUp:]): Added.
        (-[HIDEventGenerator keyPress:completionBlock:]):
        (-[HIDEventGenerator eventDispatchThreadEntry:]):
        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]): Deleted; renamed to sendMarkerHIDEventWithCompletionBlock.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::parseModifierArray): Modified to return a vector of strings that represent the modifier keys to press.
        (WTR::UIScriptController::keyDown): Write in terms of HIDEventGenerator.
        (WTR::parseModifier): Deleted.

2019-01-25  Keith Rollin  <krollin@apple.com>

        Complete the implementation of generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193782

        Reviewed by Alex Christensen.

        A preliminary version of generate-xcfilelists was added in r238008.
        This patch updates that script in order to:

        - Support checking of .xcfilelists
        - Perform better execution of `make DerivedSources.make` by
          relaunching generate-xcfilelists under xcodebuild
        - Support incremental generation and checking of .xcfilelists
        - Support supplementary .xcfilelists files from WebKitAdditions
        - Support being wrapped by parallel version of generate-xcfilelists in
          Internal that adds support for (re)generating WebKit projects in
          that repo.
        - Support builds that have been performed in WebKitBuild as well as
          ~/Library/Developer/code/DerivedData
        - Increase robustness and debugging facilities.

        * Scripts/generate-xcfilelists:

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Unreviewed test case fix.

        These test cases require ResourceLoadStatistics to be active, so the feature must be turned on.
        Previously, the default data store turned the feature on automatically, allowing these tests to pass.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update existing .xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193791
        <rdar://problem/47201706>

        Reviewed by Alex Christensen.

        Many .xcfilelist files were added in r238824 in order to support
        XCBuild. Update these with recent changes to the set of build files
        and with the current generate-xcfilelist script.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:
        * WebKitTestRunner/DerivedSources-input.xcfilelist:
        * WebKitTestRunner/DerivedSources-output.xcfilelist:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Fix missing dependencies in extract-dependencies-from-makefile
        https://bugs.webkit.org/show_bug.cgi?id=193783
        <rdar://problem/47201571>

        Reviewed by Alex Christensen.

        The extract-dependencies-from-makefile script generates .xcfilelists
        for XCBuild by invoking a makefile in --debug mode, parsing the
        dependency information in the output, and extracting information
        regarding targets and dependents. However, the way `make` emits this
        dependency information is not rigorous, and so we need to determine
        what lines to look for and parse by trial and error. This approach
        didn't coriginally atch all the information we needed to collect, so
        update the script to look for the additional lines we now know to look
        for.

        * Scripts/extract-dependencies-from-makefile:
        (Parser):
        (Parser.addTarget):
        (Parser.addPrereq):
        (Parser.doParse):

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit Cocoa/ResourceLoadStatistics.mm:
            Revise tests to ensure a running NetworkProcess before attempting ResourceLoadStatistics operations.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
        activating the message used to trigger the callback when it is set.

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        WKWebView.goBack should reload if there is a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193805
        <rdar://problem/46908216>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (+[Simple3LookupContext sharedLookupContext]):
        (-[Simple3LookupContext lookUpURL:completionHandler:]):
        (-[WKWebViewGoBackNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) cross-site provisional page is not canceled if a new same-site one is started
        https://bugs.webkit.org/show_bug.cgi?id=193788
        <rdar://problem/47531231>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):

2019-01-25  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Missing PID in crashlog name should not be fatal (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=193771

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs): Correct syntax for catching multiple exception types.

2019-01-25  Alexey Proskuryakov  <ap@apple.com>

        * Scripts/webkitpy/common/config/contributors.json: Removing a stray comma.

2019-01-25  Alexey Proskuryakov  <ap@apple.com>

        Add contributors.json entries for Ling Ho and for a new bot watchers group.

        * Scripts/webkitpy/common/config/contributors.json:

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON?) Crash under NavigationState::NavigationClient::decidePolicyForNavigationAction()
        https://bugs.webkit.org/show_bug.cgi?id=193779
        <rdar://problem/46170903>

        Reviewed by Antti Koivisto.

        Add API test that quickly navigates forward to a previous process without waiting for it to
        suspend. I suspect the crash could have been happening due to receiving leftover IPC from
        the process' previous page when reconnecting the it for the forward navigation.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Need a way for JavaScript (or bundle) code to participate in undo
        https://bugs.webkit.org/show_bug.cgi?id=190009
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Add UIScriptController helpers to grab the platform undo and redo action labels. Currently only implemented for
        Cocoa platforms in WebKit2. See other ChangeLogs for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        (WTR::UIScriptController::platformUndoManager const):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        (WTR::UIScriptController::platformUndoManager const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformUndoManager const):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformUndoManager const):

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add "clear" to static position computation.
        https://bugs.webkit.org/show_bug.cgi?id=193824

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-24  Ryan Haddad  <ryanhaddad@apple.com>

        Update macOS JSC bot configurations
        https://bugs.webkit.org/show_bug.cgi?id=193739

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove 32-bit BuildAndTest queue.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Move JSC EWS to Mojave section.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Remove 32-bit BuildAndTest queue from dashboard.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update unit test.

2019-01-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKitTestRunner] Implement EventSenderProxy
        https://bugs.webkit.org/show_bug.cgi?id=193755

        Reviewed by Don Olmstead.

        * WebKitTestRunner/EventSenderProxy.h: Removed unused members m_buttonState and m_mouseButtonsCurrentlyDown.
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::dispatchMessage):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for API test failure after r240437.

        TestWTF.WTF.StringOperators apparently can't deal with another test using String::operator+. This is fine...

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2019-01-24  Jonathan Bedard  <jbedard@apple.com>

        [webkitdirs] iosSimulatorApplicationsPath may not have iOS.simruntime in its path
        https://bugs.webkit.org/show_bug.cgi?id=193787
        <rdar://problem/47497634>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (iosSimulatorApplicationsPath): Pick from available runtime directories.

2019-01-24  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240446.

        Casued 5 API failures

        Reverted changeset:

        "Activate the WebResourceLoadStatisticsStore in the
        NetworkProcess and deactivate it in the UIProcess."
        https://bugs.webkit.org/show_bug.cgi?id=193297
        https://trac.webkit.org/changeset/240446

2019-01-24  Zalan Bujtas  <zalan@apple.com>

        DidFirstVisuallyNonEmptyLayout milestone should always fire at some point.
        https://bugs.webkit.org/show_bug.cgi?id=193741
        <rdar://problem/47135030>

        Reviewed by Antti Koivisto and Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):

2019-01-24  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
        activating the message used to trigger the callback when it is set.

2019-01-24  John Wilander  <wilander@apple.com>

        Add Ad Click Attribution as an internal/experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=193685
        <rdar://problem/47450399>

        Reviewed by Brent Fulgham.

        Added test option adClickAttributionEnabled.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2019-01-24  Antti Koivisto  <antti@apple.com>

        [PSON] Flash on back navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193716
        <rdar://problem/47148458>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

        Closing of the previous page is delayed so waiting for didFinishNavigation is
        not sufficient to guarantee we have received all the messages. Wait for them.

2019-01-24  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Back/Forward list items' URL sometimes gets replaced with the URL of a subframe
        https://bugs.webkit.org/show_bug.cgi?id=193761
        <rdar://problem/47456405>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-24  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Missing PID in crashlog name should not be fatal
        https://bugs.webkit.org/show_bug.cgi?id=193771

        If we can't determine the PID of a crashlog, just ignore the crashlog instead
        of raising an exception.

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs):

2019-01-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        test_exporter.py: webkitpy.common.system.executive.ScriptError from create_branch_with_patch
        https://bugs.webkit.org/show_bug.cgi?id=193746

        Reviewed by Youenn Fablet.

        It calls 'git apply --index --abort', but --abort is not a valid argument to 'git apply',
        so we'd best just not call it.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter.create_branch_with_patch):

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Move FileSystem to WTF
        https://bugs.webkit.org/show_bug.cgi?id=193602

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/FileSystem.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp.
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:

2019-01-24  Philippe Normand  <pnormand@igalia.com>

        [WPE] Remove hard dependency on subprocess32 for the API tests

        Rubber-stamped by Carlos Garcia Campos.

        * glib/api_test_runner.py:
        (TestRunner._run_test_qt): Lazily import subprocess32 and check
        its presence only when running WPEQt tests.

2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Expose JavaScriptCore options in GLib public API
        https://bugs.webkit.org/show_bug.cgi?id=188742

        Reviewed by Michael Catanzaro.

        Add a test for the new API.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testsJSCOptions):
        (main):

2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Support JPEG 2000 images
        https://bugs.webkit.org/show_bug.cgi?id=186272

        Reviewed by Žan Doberšek.

        Add OpenJPEG to jhbuild since 2.2.0 version is required and it's not available in debian stable.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should warn when using soft-linking macros in a header
        <https://webkit.org/b/193750>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add softlink/header check by refactoring the
        softlink/framework check.
        (CppChecker): Enable softlink/header check by default.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_softlink_framework): Rename from
        CppStyleTest.test_softlink() and change test framework name in
        case AVFoundation gets its own AVFoundationSoftLink.{h,mm}
        files. Set file_name for macros that only appear in headers.
        (CppStyleTest.test_softlink_header): Add tests for using
        soft-link macros in headers.

2019-01-23  Chris Dumez  <cdumez@apple.com>

        Deprecate API to limit the maximum number of WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=193725
        <rdar://problem/47464879>

        Reviewed by Geoff Garen.

        Update existing API tests to stop using deprecated API.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):

2019-01-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename ews model buildermappings to buildermapping
        https://bugs.webkit.org/show_bug.cgi?id=193729

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/buildermappings.py.
        (BuilderMapping): Renamed BuildMappings to BuilderMapping.
        * BuildSlaveSupport/ews-app/ews/models/__init__.py: Ditto.

2019-01-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename ews model steps to step
        https://bugs.webkit.org/show_bug.cgi?id=193697

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/step.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/steps.py.
        (Step): Renamed Steps to Step.

2019-01-23  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796
        <rdar://problem/46824999>

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext):
        (WTR::RemoveAllIndexedDatabasesCallback):
        (WTR::TestController::ClearIndexedDatabases):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-01-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename ews model Builds to Build
        https://bugs.webkit.org/show_bug.cgi?id=193695

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/builds.py.
        (Build): Renamed Builds to Build.

2019-01-23  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Wait longer when launching WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=193734

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Increase timeout from 6 seconds to 15 seconds.

2019-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] fast/events/touch/ios/hover-when-style-change-is-async.html times out
        https://bugs.webkit.org/show_bug.cgi?id=193182
        <rdar://problem/47452154>

        Reviewed by Tim Horton.

        This test was timing out because one of its preceding tests (drag-to-autoscroll-in-single-line-editable.html)
        long presses and drags to select text, but does not end the touch by lifting up; subsequently, the tap gesture
        recognizer isn't fired when simulating a tap in hover-when-style-change-is-async.html.

        To fix this, tweak the test runner to make it safe for tests to end while touching the web view without
        preventing later tests from recognizing gestures.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Cancel all touches in the UIApplication when resetting to a consistent state between tests.

2019-01-23  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use correct config for --iphone-simulator and --ipad-simulator
        https://bugs.webkit.org/show_bug.cgi?id=193722
        <rdar://problem/47481475>

        Reviewed by Lucas Forschler.

        iPhone and iPad ports should both use the iOS config.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IPhoneSimulatorPort.__init__):
        (IPadSimulatorPort.__init__):

2019-01-23  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        Add unit tests for both parse modes of ParsedContentType.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp: Added.
        (TestWebKitAPI::TEST):

2019-01-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] fetch loop should not stop on network issues
        https://bugs.webkit.org/show_bug.cgi?id=193666

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.run): Ensure that fetch loop doesn't exit on any exception.

2019-01-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Multiple WKWebViewAutofillTests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=189165
        <rdar://problem/47433765>

        Reviewed by Tim Horton.

        These tests are currently flaky because they expect an invocation of "Element.blur()" in the web process to
        immediately dispatch an IPC message to notify the UI process that the element has been blurred. In particular,
        the -textInputHasAutofillContext helper assumes that waiting for the next remote layer tree commit in the UI
        process in sufficient to ensure that any previous action that blurred the focused element in the web process
        would make its way to the UI process by the time the layer tree commit is finished.

        However, WebPage::elementDidBlur sends its IPC message to the UI process asynchronously, using callOnMainThread.
        This means that if a layer tree flush was already scheduled in the web process before the element was blurred,
        the element blur IPC message to the UI process will lose the race against the layer tree commit, and the test
        will fail because it asks for -_autofillContext too early.

        To fix this, we tweak these tests to actually wait until the intended input session change triggered by script
        is handled in the UI process.

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:

        Tweak some of these tests to wait for input session changes before checking for the presence of an autofill
        context. The only exception is an existing test that doesn't allow programmatic focus to begin input sessions
        by default; to fix this test, we simply wait for _WKInputDelegate to be invoked, instead of waiting for a new
        input session.

        (-[AutofillTestView textInputHasAutofillContext]):

        Remove the incorrect presentation update here. This helper now assumes that the UI process is up to date.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (nextInputSessionChangeCount):

        Monotonically increasing identifier that's incremented whenever an input session is started in the UI process.
        This includes changing the focused element from one to another.

        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        (-[TestWKWebView didStartFormControlInteraction]):
        (-[TestWKWebView didEndFormControlInteraction]):
        (-[TestWKWebView evaluateJavaScriptAndWaitForInputSessionToChange:]):

        Add a helper to evaluate JavaScript and wait for this script to cause some change in the input session. This
        handles three cases: (1) changing focus from an element that doesn't require an input session to one that does,
        (2) changing focus between elements that require input sessions, and (3) changing focus from an input session
        that doesn't require an input session to one that doesn't.

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style reports false-positive whitespace/init warning in C++ initialization parameters
        <https://webkit.org/b/193676>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        - Don't report missing whitespace around colon if the colon at
          the start of the line is formatted correctly.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):
        - Add a test for a missing permutation of existing tests.
        - Add a test this false-positive.
        - Add blank lines between subtests to make them easier to read.

2019-01-22  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Unit-test failure after r237113
        https://bugs.webkit.org/show_bug.cgi?id=193669

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (Factory.__init__): Properly check for --no-experimental-features flag when additionalArguments has 
        multiple or zero flags.

2019-01-22  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add test helper to execute bytecode-cache tests: it executes each test
        twice, the first with JSC_diskCachePath set to a temporary directory
        and second with JSC_forceDiskCache=true (in addition to the cache path)
        to guarantee that only the disk cache is being used and no new
        UnlinkedCodeBlocks are being created.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh: Added.
        * Scripts/run-jsc-stress-tests:

2019-01-22  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        Allow tests to enable the CSSLogicalEnabled flag in WK1.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Allow CSS property definitions to have a 'runtime-flag' parameter which
        disables the property when the specified runtime flag is disabled.

2019-01-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK][WPE] libgcrypt-1.7.6 can't be compiled on Ubuntu 18.10
        https://bugs.webkit.org/show_bug.cgi?id=193643

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Bumped to libgcrypt-1.8.4.
        * wpe/jhbuild.modules: Ditto.

2019-01-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Take float top position into account when computing containing block height.
        https://bugs.webkit.org/show_bug.cgi?id=193655

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-21  David Kilzer  <ddkilzer@apple.com>

        Switch remaining VideoToolbox soft-linking in WebCore over to VideoToolboxSoftLink.{cpp,h}
        <https://webkit.org/b/193645>
        <rdar://problem/47421574>

        Reviewed by Alex Christensen.

        - Now checks for local soft-linking of all frameworks that have
          their own *SoftLinking.{cpp,h,mm} files.
        - Changes softlink/uikit warning to softlink/framework.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):

2019-01-20  Saam Barati  <sbarati@apple.com>

        Rollout r240210: It broke tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193640

        Unreviewed.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper:
        * Scripts/run-jsc-stress-tests:

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):

2019-01-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, add my new email address

        * Scripts/webkitpy/common/config/contributors.json:

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] <body>'s overflow property value is propagated to viewport
        https://bugs.webkit.org/show_bug.cgi?id=193617

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r240209.

        Broke GTK/WPE injected bundle

        Reverted changeset:

        "AX: Support returning relative frames for accessibility"
        https://bugs.webkit.org/show_bug.cgi?id=193414
        https://trac.webkit.org/changeset/240209

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * DumpRenderTree/mac/LayoutTestHelper.m: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * TestWebKitAPI/Configurations/Base.xcconfig: Removed -iframework options from OTHER_CFLAGS
          and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.

2019-01-20  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add test helper to execute bytecode-cache tests: it executes each test
        twice, the first with JSC_diskCachePath set to a temporary directory
        and second with JSC_forceDiskCache=true (in addition to the cache path)
        to guarantee that only the disk cache is being used and no new
        UnlinkedCodeBlocks are being created.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper: Added.
        * Scripts/run-jsc-stress-tests:

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):

2019-01-20  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        Unreviewed. Also enable Pointer Events for iosmac.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Ensure that floats in FloatingContext::m_floats are always horizontally ordered.
        https://bugs.webkit.org/show_bug.cgi?id=193613

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-19  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-18  Zhifei FANG  <zhifei_fang@apple.com>

        Disable the run-jsc-stress-test remote host key check [second round].
        https://bugs.webkit.org/show_bug.cgi?id=192988

        Reviewed by Dewei Zhu.

        * Scripts/run-jsc-stress-tests:

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] unit-test failure Builder GTK Linux 32-bit Release doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=193597

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] api tests failures are incorrectly named as unit test failures
        https://bugs.webkit.org/show_bug.cgi?id=193595

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/factories.py: Renamed RunUnitTests to RunAPITests.
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

2019-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Content blockers are sometimes lost on back navigation cross-site
        https://bugs.webkit.org/show_bug.cgi?id=193588
        <rdar://problem/47131566>

        Reviewed by Alex Christensen.

        Add layout test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        Add a check-webkit-style check that ensures all SDKVariant.xcconfig files match.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/SDKVariant.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/sdkvariant.py: Added.
        (SDKVariantChecker):
        (SDKVariantChecker.__init__):
        (SDKVariantChecker.check):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig: Added.
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig: Added.
        * WebKitLauncher/Configurations/SDKVariant.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig: Added.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig: Added.

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        Switch remaining UIKit soft-linking in WebCore, WebKitLegacy over to UIKitSoftLink.{cpp,h}
        <https://webkit.org/b/193568>
        <rdar://problem/47381130>

        Reviewed by Alex Christensen.

        Make sure no one re-introduces UIKit soft-linking by adding a
        style rule.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add softlink/uikit check.
        (CppChecker): Enable softlink/uikit check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest): Add test for softlink/uikit.

2019-01-18  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] install-dependencies tool looks for libunistring-dev for dnf
        https://bugs.webkit.org/show_bug.cgi?id=193584

        Change "-dev" to "-devel".

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add iPhone and iPad ports
        https://bugs.webkit.org/show_bug.cgi?id=193537
        <rdar://problem/47353390>

        Reviewed by Lucas Forschler.

        Add --iphone-simulator and --ipad-simulator commands to run-webkit-tests which separate iPhone and iPad into separate
        ports. Note that this separation is optional, the --ios-simulator command remains.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_test_division): Drive-by fix.
        (RunTest.test_device_type_specific_listing): Ditto.
        (RunTest.test_ipad_test_division):
        (RunTest):
        (RunTest.test_ipad_listing):
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add --iphone-simulator and --ipad-simulator flags.
        (PortFactory):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IPhoneSimulatorPort):
        (IPadSimulatorPort):

2019-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Scroll position is not always restored properly when navigating back
        https://bugs.webkit.org/show_bug.cgi?id=193578
        <rdar://problem/47386331>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-18  Youenn Fablet  <youenn@apple.com>

        Add a new SPI to request for cache storage quota increase
        https://bugs.webkit.org/show_bug.cgi?id=193323

        Reviewed by Alex Christensen.

        Implement WebsiteDataStore quota delegate to handle quota requests.
        By default, do not update quota.
        Update quota if test calls the new testRunner.allowCacheStorageQuotaIncrease method.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::allowCacheStorageQuotaIncrease):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::allowCacheStorageQuotaIncrease):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (-[CacheStorageQuotaManager init]):
        (-[CacheStorageQuotaManager _requestCacheStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::allowCacheStorageQuotaIncrease):

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Pass owner to the triggered builds
        https://bugs.webkit.org/show_bug.cgi?id=193574

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.propertiesToPassToTriggers):

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Send patch author as a build property
        https://bugs.webkit.org/show_bug.cgi?id=193560

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Don't boot a device if no tests are available to run on it.

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Use DEVICE_TYPE when running API tests.

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Rubber-stamped by Aakash Jain.

        This change uses device_type to select a different set of TestExpectation files based on the type of device running
        tests. This requires multiple baseline search paths to be used in a single instantiation of run-webkit-tests. Note
        that while multiple baseline search paths are used, any single test will only ever be run on a single device type.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_tests): Pass device_type through.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        (LayoutTestFinderTests.test_touched_but_skipped_test): Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Make _expectations an OrderedDict indexed by device_type, add current_device_type.
        (Manager._collect_tests): Pass device type to test finder.
        (Manager._needs_web_platform_test):
        (Manager._prepare_lists): Index _expectations by device type.
        (Manager._test_input_for_file):
        (Manager._test_is_slow): Ditto.
        (Manager._test_should_dump_jsconsolelog_in_stderr):
        (Manager._test_should_dump_jsconsolelog_in_stderr): Ditto.
        (Manager._get_test_inputs):
        (Manager._update_worker_count):
        (Manager._set_up_run): Use current_device_type instead of passing device_type in.
        (Manager.run): Re-write function to gather and parse expectations from multiple baseline search paths. In the event
        that a test can be run on multiple device types, the first device in the device type list which is eligible will be
        the one which runs the test.
        (Manager._run_test_subset):
        (Manager._run_tests): Index _expectations by current_device_type.
        (Manager._print_expectation_line_for_test): Ditto.
        (Manager._print_expectations_for_subset): Ditto.
        (Manager.print_expectations): Re-write function to gather and parse expectations from multiple baseline search paths.
        Unlike run, this function will behave the same regardless of what devices are available.
        (Manager._custom_device_for_test): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_uses_custom_device): Deleted.
        (ManagerTest.test_uses_custom_device.get_manager): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Pass expectations as a dictionary indexed by device type.
        (JSONLayoutResultsGenerator._insert_failure_summaries): The number of fixable tests must take into consideration
        all of the expectations.
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py:
        (FakePort.skipped_layout_tests): Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__): Allow device_type to be passed through.
        (TestExpectations.parse_all_expectations): Pick expectations_dict by device type.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results): Expectations are stored in a dictionary indexed by device_type. When determining the expectation
        a test ran with, one must check all expectations to find the first non-skip expectation.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_test_division):
        (RunTest):
        (RunTest.test_device_type_specific_listing):
        * Scripts/webkitpy/port/base.py:
        (Port): Add default values for DEVICE_TYPE and DEFAULT_DEVICE_TYPES.
        (Port.supported_device_types): The result of this function will change based on what devices are available.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._device_type_with_version): Replace DEFAULT_DEVICE_TYPE with DEVICE_TYPE.
        (DevicePort.default_child_processes): DEVICE_TYPE is a general type, so the built-in comparison of the DeviceType object
        can be used.
        (DevicePort.supported_device_types): Generates a list of device types determined by the available devices, if there are
        any, or the DEFAULT_DEVICE_TYPES of the port.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Change DEFAULT_DEVICE_TYPE to DEVICE_TYPE.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Set the DEFAULT_DEVICE_TYPES to the devices currently used to run layout tests.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort): Change DEFAULT_DEVICE_TYPE to DEVICE_TYPE.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort): Set the DEFAULT_DEVICE_TYPES to the device currently used to run layout tests.
        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType):
        (DeviceType.__hash__): Allow DeviceType to be used as a dictionary index.

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] run-qt-wpe-minibrowser needlessly expects a --wpe argument
        https://bugs.webkit.org/show_bug.cgi?id=193575

        Reviewed by Michael Catanzaro.

        Allow the script to run without explicit port argument because
        it's specific to the WPE port anyway.

        * Scripts/run-qt-wpe-minibrowser: Manually insert --wpe in argv
        and simplify the rest of the code accordingly.

2019-01-18  Charlie Turner  <cturner@igalia.com>

        [GStreamer][EME][ClearKey] Request keys from CDMInstance rather than passing via bus messages
        https://bugs.webkit.org/show_bug.cgi?id=192229

        Reviewed by Xabier Rodriguez-Calvar.

        * MiniBrowser/wpe/main.cpp:
        (main): Enable encrypted-media by default.

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Missing KeyboardInterrupt exception handler
        https://bugs.webkit.org/show_bug.cgi?id=193570

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Basic KeyboardInterrupt handling.

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Collapsing through should not ignore floats.
        https://bugs.webkit.org/show_bug.cgi?id=193564

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not skip float boxes that are not part of the current formatting context when computing bottom.
        https://bugs.webkit.org/show_bug.cgi?id=193562

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Check for inflow children while computing height for block formatting context roots.
        https://bugs.webkit.org/show_bug.cgi?id=193555

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add Qt extension
        https://bugs.webkit.org/show_bug.cgi?id=191464

        Reviewed by Carlos Garcia Campos.

        MiniBrowser and API tests for the WPE Qt API. To run the
        MiniBrowser a new script is introduced. Example invocation:

        $ run-qt-wpe-minibrowser -platform wayland https://webkit.org

        Also note-worthy is the introduction of the python2-subprocess32
        dependency to run the GLib API tests.

        * MiniBrowser/wpe/CMakeLists.txt:
        * MiniBrowser/wpe/qt/CMakeLists.txt: Added.
        * MiniBrowser/wpe/qt/main.cpp: Added.
        (main):
        * MiniBrowser/wpe/qt/main.qml: Added.
        * MiniBrowser/wpe/qt/qml.qrc: Added.
        * Scripts/run-gtk-tests:
        (GtkTestRunner.is_google_test):
        (GtkTestRunner):
        (GtkTestRunner.is_qt_test):
        * Scripts/run-qt-wpe-minibrowser: Added.
        * Scripts/run-wpe-tests:
        (WPETestRunner):
        (WPETestRunner.is_google_test):
        (WPETestRunner.is_qt_test):
        * TestWebKitAPI/Tests/WPEQt/TestLoad.cpp: Added.
        (TestLoad::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadHtml.cpp: Added.
        (TestLoadHtml::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadRequest.cpp: Added.
        (TestLoadRequest::main):
        * TestWebKitAPI/Tests/WPEQt/TestRunJavaScript.cpp: Added.
        (TestRunJavaScript::main):
        * TestWebKitAPI/Tests/WPEQt/WPEQtTest.cpp: Added.
        (waitForSignal):
        * TestWebKitAPI/Tests/WPEQt/WPEQtTest.h: Added.
        (LoadSpy::LoadSpy):
        (LoadSpy::~LoadSpy):
        (LoadSpy::onLoadingChanged):
        (LoadStartedCatcher::LoadStartedCatcher):
        (LoadStartedCatcher::~LoadStartedCatcher):
        (LoadStartedCatcher::onLoadingChanged):
        (waitForLoadSucceeded):
        (waitForLoadFailed):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/org.webkit.CommonModules.yaml:
        * flatpak/org.webkit.WPE.yaml:
        * flatpak/org.webkit.WPEModules.yaml:
        * flatpak/org.webkit.WPEQT.yaml: Copied from Tools/flatpak/org.webkit.WebKit.yaml.
        * flatpak/org.webkit.WebKit.yaml:
        * glib/api_test_runner.py:
        (TestRunner._run_test_qt):
        (TestRunner.is_qt_test):
        (TestRunner._run_test):

2019-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Content offset jumps erratically when autoscrolling near scroll view content inset areas
        https://bugs.webkit.org/show_bug.cgi?id=193494
        <rdar://problem/46859627>

        Reviewed by Simon Fraser and Tim Horton.

        Add a new test option to add a top content inset to the test runner's WKWebView's scroll view, and automatically
        scroll to reveal this top content inset area when beginning the test (i.e., scroll to (0, -topContentInset)).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        Also add new UIScriptController methods to ask for the content offset of the platform scroll view.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Alex Christensen  <achristensen@webkit.org>

        Fix string concatenation API test after r239920
        https://bugs.webkit.org/show_bug.cgi?id=193551
        <rdar://problem/47359304>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST):
        Cocoa platforms' interpretation of UChar/unsigned short equality is not affected by ICU's recent change of UChar's type
        in WebKit's build configuration like it apparently is on Linux.

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] validate-patch should handle the case when bug_id is None
        https://bugs.webkit.org/show_bug.cgi?id=193547

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed): Gracefully handle the case when bug_id is None.
        (ValidatePatch.start): If bug_id is set as None in build properties, fetch it from the patch.

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add patch author information in build
        https://bugs.webkit.org/show_bug.cgi?id=193465

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_patch_obsolete):

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Pass bug_id to the triggered builds
        https://bugs.webkit.org/show_bug.cgi?id=193548

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.propertiesToPassToTriggers):

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        Add a check-webkit-style check that ensures all SDKVariant.xcconfig files match.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/SDKVariant.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/sdkvariant.py: Added.
        (SDKVariantChecker):
        (SDKVariantChecker.__init__):
        (SDKVariantChecker.check):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig: Added.
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig: Added.
        * WebKitLauncher/Configurations/SDKVariant.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig: Added.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig: Added.

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] An element with transform is a containing block for positioned descendants.
        https://bugs.webkit.org/show_bug.cgi?id=193534

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Take body padding and border into account when stretching height.
        https://bugs.webkit.org/show_bug.cgi?id=193528

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] For height computation, the bottom edge of the last line box value should include top border/padding
        https://bugs.webkit.org/show_bug.cgi?id=193520

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] unapply-patch step should not update source
        https://bugs.webkit.org/show_bug.cgi?id=193234

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanWorkingDirectory): Use clean-webkit script to clean the working directory.
        (UnApplyPatchIfRequired): Use CleanWorkingDirectory as base class.

2019-01-16  Youenn Fablet  <youenn@apple.com>

        Add a new SPI for controlling getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=192793

        Reviewed by Eric Carlson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForFrame:devices:decisionHandler:]):
        (-[WK2BrowserWindowController _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (-[MediaStreamTrackDetachedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        (-[SimulateFailedSandboxUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Inflow non-replaced used width should not be negative.
        https://bugs.webkit.org/show_bug.cgi?id=193495

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Set used vertical margin values when top/height/bottom are non-auto.
        https://bugs.webkit.org/show_bug.cgi?id=193470

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust margin box verification.
        https://bugs.webkit.org/show_bug.cgi?id=193482

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-15  Sihui Liu  <sihui_liu@apple.com>

        Fix API test WebKit.WebsiteDataStoreCustomPathsWithoutPrewarming after 193354
        https://bugs.webkit.org/show_bug.cgi?id=193451

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/DuplicateCompletionHandlerCalls.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):

2019-01-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support boolean simctl isAvailable
        https://bugs.webkit.org/show_bug.cgi?id=193472
        <rdar://problem/47296150>

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_runtimes):
        (SimulatedDeviceManager._create_device_with_runtime):

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r239993, r239995, r239997, and
        r239999.

        Caused assertions under
        ViewGestureController::disconnectFromProcess()

        Reverted changesets:

        "Regression(PSON) View becomes blank after click a cross-site
        download link"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239993

        "Unreviewed iOS build fix after r239993."
        https://trac.webkit.org/changeset/239995

        "Fix iOS build after r239993"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239997

        "Unreviewed, revert part of r239997 as it is not needed to fix
        the build."
        https://trac.webkit.org/changeset/239999

2019-01-15  Tim Horton  <timothy_horton@apple.com>

        Cannot tab out of WKWebView on macOS
        https://bugs.webkit.org/show_bug.cgi?id=161448
        <rdar://problem/28100085>

        Reviewed by Dean Jackson.

        Add a test that tabbing into and out of WKWebView works correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTest::SetUp):
        (-[CommandBackForwardOffscreenWindow isKeyWindow]): Deleted.
        (-[CommandBackForwardOffscreenWindow isVisible]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/TabOutOfWebView.mm: Added.
        (-[FocusableView canBecomeKeyView]):
        (TEST):
        * TestWebKitAPI/mac/OffscreenWindow.h: Added.
        * TestWebKitAPI/mac/OffscreenWindow.mm: Added.
        (-[OffscreenWindow initWithSize:]):
        (-[OffscreenWindow isKeyWindow]):
        (-[OffscreenWindow isVisible]):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::initialize):
        (-[ActiveOffscreenWindow isKeyWindow]): Deleted.
        (-[ActiveOffscreenWindow isVisible]): Deleted.
        Factor ActiveOffscreenWindow out into OffscreenWindow and share it.

2019-01-15  Ryan Haddad  <ryanhaddad@apple.com>

        Adjust the arguments passed to run-javascriptcore-tests for the 32-bit JSC bot
        https://bugs.webkit.org/show_bug.cgi?id=193459

        Reviewed by Mark Lam.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (Run32bitJSCTests): This queue should not run JIT, testair, testb3, or testmasm.

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Ignore bottom when the vertical values are over-constrained
        https://bugs.webkit.org/show_bug.cgi?id=193448

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=192162

        Reviewed by Lucas Forschler.

        Device type specific expected results covers two related ideas. The first (covered by this change)
        is where to search for -expected.* files. The second is which tests to run based on the
        TestExpectations.txt file.

        After this change, the baseline search path will be determined by the type of device running a
        test. Device type will be passed into any function which picks a file based on the baseline search
        path.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._update_test_input): Pass device_type to self._port.reference_files(...).
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Print baseline search path for each round of devices.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Pass device_type into expected_*(...).
        (SingleTestRunner._expected_driver_output): Ditto.
        (SingleTestRunner._driver_input): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config): Move printing of baseline search path to a separate function.
        (Printer.print_baseline_search_path): Moved from Printer.print_config.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):
        (Testprinter.test_print_baseline_search_path):
        * Scripts/webkitpy/port/base.py:
        (Port.baseline_search_path): Pass device_type through.
        (Port._expected_baselines_for_suffixes): Ditto.
        (Port.expected_baselines): Ditto.
        (Port.expected_filename): Ditto.
        (Port.expected_checksum): Ditto.
        (Port.expected_image): Ditto.
        (Port.expected_audio): Ditto.
        (Port.expected_text): Ditto.
        (Port.reference_files): Ditto.
        (Port.tests): Ditto.
        (Port._expanded_paths): Ditto.
        (Port.skipped_layout_tests): Ditto.
        (Port.expectations_dict): Ditto.
        (Port._port_specific_expectations_files): Ditto.
        (Port.expectations_files): Ditto.
        (Port.test_search_path): Ditto.
        (Port._tests_for_other_platforms): Ditto.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_additional_platform_directory): Accept, but do not use, device_type.
        (PortTest.test_nonexistant_expectations): Ditto.
        (test_ref_tests_platform_directory): Ditto.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._port_specific_expectations_files): Accept device_type.
        * Scripts/webkitpy/port/driver.py:
        (DriverProxy):
        (DriverProxy.host): Expose _target_host for device_type information.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._port_specific_expectations_files): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort. default_baseline_search_path): Remove memoized, since it does not accept **kwargs.
        * Scripts/webkitpy/port/mac.py:
        (MacPort. default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/port_testcase.py:
        (TestWebKitPort._tests_for_other_platforms): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch.py:
        (WatchPort. default_baseline_search_path): Remove memoized, since it does not accept **kwargs.
        * Scripts/webkitpy/port/win.py:
        (WinPort.test_search_path): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._port_specific_expectations_files): Ditto.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort.baseline_search_path): Ditto.

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the containing block's padding box to position out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=193431

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-14  Tim Horton  <timothy_horton@apple.com>

        Move a test implementation file that got misplaced in the Xcode project

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2019-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239901, r239909, r239910, r239912,
        r239913, and r239914.
        https://bugs.webkit.org/show_bug.cgi?id=193407

        These revisions caused an internal failure (Requested by
        Truitt on #webkit).

        Reverted changesets:

        "[Cocoa] Avoid importing directly from subumbrella frameworks"
        https://bugs.webkit.org/show_bug.cgi?id=186016
        https://trac.webkit.org/changeset/239901

        "Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901."
        https://trac.webkit.org/changeset/239909

        "Tried to fix the build."
        https://trac.webkit.org/changeset/239910

        "Fixed iOS builds after r239910."
        https://trac.webkit.org/changeset/239912

        "More build fixing."
        https://trac.webkit.org/changeset/239913

        "Tried to fix USE(APPLE_INTERNAL_SDK) 32-bit builds."
        https://trac.webkit.org/changeset/239914

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Re-enable ability to build --cloop builds.
        https://bugs.webkit.org/show_bug.cgi?id=192955
        <rdar://problem/46882363>

        Reviewed by Saam barati and Keith Miller.

        The --cloop build option was being ignored this whole time since r236381.
        This patch makes it possible to build CLoop builds again.

        * Scripts/build-jsc:
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Expose device_type from host-like objects
        https://bugs.webkit.org/show_bug.cgi?id=193406
        <rdar://problem/47262305>

        Reviewed by Lucas Forschler.

        Devices should expose device_type. As a result, all host objects should
        provide a device_type property, even if they do not yet define a device_type.

        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost):
        (SystemHost.device_type):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost):
        (MockSystemHost.device_type):
        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.device_type):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._find_exisiting_device_for_request):
        (SimulatedDeviceManager._disambiguate_device_type):
        (SimulatedDeviceManager._does_fulfill_request):
        (SimulatedDeviceManager.device_count_for_type):
        (SimulatedDeviceManager.initialize_devices):
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_available_devices):
        (test_swapping_devices):

2019-01-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support alternate simctl device list output (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=193362
        <rdar://problem/47122965>

        Rubber-stamped by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):

2019-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Expose SPI to access the current sentence boundary and selection state
        https://bugs.webkit.org/show_bug.cgi?id=193398
        <rdar://problem/45893108>

        Reviewed by Dean Jackson.

        Add an API test to verify that an SPI client can observe changes in the `@"_selectionAttributes"` key path on
        WKWebView, and that inserting text, deleting, and changing the selection cause selection attributes to change as
        expected.

        * TestWebKitAPI/EditingTestHarness.h:
        * TestWebKitAPI/EditingTestHarness.mm:
        (-[EditingTestHarness moveBackward]):
        (-[EditingTestHarness moveForward]):
        (-[EditingTestHarness moveForwardAndExpectEditorStateWith:]):

        Add a couple of new helper methods on EditingTestHarness.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (-[SelectionChangeObserver initWithWebView:]):
        (-[SelectionChangeObserver webView]):
        (-[SelectionChangeObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[SelectionChangeObserver currentSelectionAttributes]):

2019-01-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add basic box-sizing support.
        https://bugs.webkit.org/show_bug.cgi?id=193392

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [WPE] API test gardening
        https://bugs.webkit.org/show_bug.cgi?id=193319

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/glib/TestExpectations.json: Remove some now
        passing tests.

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Add sharedBuffer utility to GstMappedBuffer, and a testsuite
        https://bugs.webkit.org/show_bug.cgi?id=192977

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformGTK.cmake: Build the new GStreamer test harness
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.
        * TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp: Added.
        (TestWebKitAPI::GStreamerTest::SetUp):
        (TestWebKitAPI::GStreamerTest::TearDown):
        * TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.h: Added.
        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp: Added.
        (TestWebKitAPI::TEST_F):

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [WPE] Workaround for incorrect template specialization being selected when UChar=char16_t
        https://bugs.webkit.org/show_bug.cgi?id=193332

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: When UChar is
        defined as a char16_t, which changed in ICU 59, the
        StringTypeAdapter<UnsignedInt, ...> overload catches casts to
        unsigned short. This test is relying on the behaviour that
        UChar=unsigned short, which doesn't hold across platforms and ICU
        library versions. The full fix would be a special syntax for
        literal characters so that these ambiguities do not arise. That
        work is proposed in https://bugs.webkit.org/show_bug.cgi?id=193101.
        (TestWebKitAPI::TEST):

2019-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK][WPE] Run distcheck with gtkdoc and MiniBrowser enabled

        * Scripts/make-dist:
        (Distcheck.configure):

2019-01-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193365
        <rdar://problem/47221073>

        Unreviewed, renamed mac-high-sierra to mac-highsierra to match with build.webkit.org configuration.

        * BuildSlaveSupport/ews-build/config.json:

2019-01-13  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust assert for statically positioned fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=193385

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-13  Philippe Normand  <pnormand@igalia.com>

        [WPE][MiniBrowser] Ephemeral WebContext leaks in automation mode
        https://bugs.webkit.org/show_bug.cgi?id=193387

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/wpe/main.cpp:
        (main):

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions.
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm:

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * DumpRenderTree/mac/LayoutTestHelper.m: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * TestWebKitAPI/Configurations/Base.xcconfig: Removed -iframework options from OTHER_CFLAGS
          and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.

2019-01-11  John Wilander  <wilander@apple.com>

        Compile out Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=193370
        <rdar://problem/45388584>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
            Defined ENABLE_WEB_API_STATISTICS, off by default.

2019-01-11  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add Tools/gtkdoc to manifest.txt.in files.
        This should have been done in r238853 and caused failure in building WebKitGTK+ unstable release 2.23.2.

        * gtk/manifest.txt.in: Add Tools/gtkdoc directory.
        * wpe/manifest.txt.in: Add Tools/gtkdoc directory and uncomment lines to move documentation artifacts.

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Precision drop state thrashes when dragging near the top edge of an editable element
        https://bugs.webkit.org/show_bug.cgi?id=193364
        <rdar://problem/47214117>

        Reviewed by Tim Horton.

        Add a test to verify that dragging near the top of a textarea element does not flag the drop proposal as
        precise, whereas dragging near the middle of the textarea does.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):

2019-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support alternate simctl device list output
        https://bugs.webkit.org/show_bug.cgi?id=193362
        <rdar://problem/47122965>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):

2019-01-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193365

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Incorporate device type into baseline search path
        https://bugs.webkit.org/show_bug.cgi?id=193356
        <rdar://problem/47215515>

        Reviewed by Lucas Forschler.

        We need a way to include device type in the baseline search path for iOS to support device specific test expectations.

        * Scripts/webkitpy/port/base.py:
        (Port.default_baseline_search_path): Allow device type to be passed in.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.default_baseline_search_path): Ignore device type.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Optionally allow device type to be incorporated into the baseline search path.
        (IOSPort.test_expectations_file_position): Update index for the additional device-type specific baseline search path.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Ignore device type.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort.default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort.default_baseline_search_path): Ditto.
        (WinCairoPort.default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.default_baseline_search_path): Ditto.

2019-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Print abbreviated baseline search path that includes only folders that exist
        https://bugs.webkit.org/show_bug.cgi?id=193352
        <rdar://problem/47210736>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config): Print list on only baseline search paths which exist. 
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):

2019-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup possible WK*Copy/Create leaks in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=193340

        Reviewed by David Kilzer.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        Pull the strings out into a WKRetainPtr.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::closeWebNotification):
        Adopt the created value into the WKRetainPtr.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateWhitelist):
        Immediately adopt a created value to avoid potential mistakes.

2019-01-11  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Run again JIT-tests
        on ARM by default.

        * Scripts/run-jsc-stress-tests:

2019-01-11  Timothy Hatcher  <timothy@apple.com>

        Unreviewed, fix #ifdef in API test added in r239851.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm:

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce IDL files for runtime-enabled UndoManager and UndoItem JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=193109
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Introduce and respect a test option to enable the UndoManager API.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2019-01-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Adjust vertical position when box margin collapses through.
        https://bugs.webkit.org/show_bug.cgi?id=193346

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix typo that breaks dashboard link.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2019-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193329

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.macos-sierra img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        MiniBrowser should be able to navigate to about:blank
        https://bugs.webkit.org/show_bug.cgi?id=193345

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController addProtocolIfNecessary:]):
        Don't prepend "http://" to "about:" prefixed URLs like "about:blank".

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController fetch:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        Clean up the code that uses this to match style.

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Remove MiniBrowser custom "Process Swap" menu item which does not work
        https://bugs.webkit.org/show_bug.cgi?id=193344

        Reviewed by Simon Fraser.

        There is a menu item under the Experimental menu that does work.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController processSwapOnNavigationEnabled]): Deleted.
        (-[SettingsController toggleProcessSwapOnNavigation:]): Deleted.

2019-01-10  Timothy Hatcher  <timothy@apple.com>

        Add WKBundlePage SPI to temporarily force light or dark appearance on a page.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm: Added.
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm: Added.
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::ForceLightAppearanceInBundleTest):
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didCreatePage):
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKit/mac/dark-mode.html: Added.

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Leak of WKWebProcessPlugInHitTestResult (160 bytes) in com.apple.WebKit.WebContent running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193338
        <rdar://problem/46664774>

        Reviewed by David Kilzer.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):

2019-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239825.
        https://bugs.webkit.org/show_bug.cgi?id=193330

        Broke tests on armv7/linux bots (Requested by guijemont on
        #webkit).

        Reverted changeset:

        "Enable DFG on ARM/Linux again"
        https://bugs.webkit.org/show_bug.cgi?id=192496
        https://trac.webkit.org/changeset/239825

2019-01-10  Zhifei Fang  <zhifei_fang@apple.com>

        Disable the run-jsc-stress-test remote host key check.
        https://bugs.webkit.org/show_bug.cgi?id=192988

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

2019-01-10  John Wilander  <wilander@apple.com>

        Override the session configuration for cookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=190925
        <rdar://problem/45497382>

        Reviewed by Alexey Proskuryakov and Alex Christensen.

        Test infrastructure for setting a first-party-only cookie policy.

        * DumpRenderTree/TestRunner.cpp:
        (setOnlyAcceptFirstPartyCookiesCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setOnlyAcceptFirstPartyCookies):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setOnlyAcceptFirstPartyCookies):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOnlyAcceptFirstPartyCookies):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-01-09  Matt Rajca  <mrajca@apple.com>

        Put per-document autoplay behavior behind runtime website policies quirk instead of a compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=193301

        Reviewed by Jer Noble.
        
        Added API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/autoplaying-multiple-media-elements.html: Added.

2019-01-10  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Take collapsed through siblings into account when computing vertical position
        https://bugs.webkit.org/show_bug.cgi?id=193310

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-10  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Run again JIT-tests
        on ARM by default.

        * Scripts/run-jsc-stress-tests:

2019-01-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] wchar_t strings shouldn't be treated as BSTR
        https://bugs.webkit.org/show_bug.cgi?id=193271

        Reviewed by Brent Fulgham.

        BSTR is a special data structure created by SysAllocString, not a
        wchar_t null-terminated string.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setDatabaseQuota): Use L"" instead of "" for _bstr_t.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFinishLoadForFrame): Use _bstr_t to create
        BSTR from wide string literals.

2019-01-09  Alexey Proskuryakov  <ap@apple.com>

        Tweak wording for build/version_check style checker error
        https://bugs.webkit.org/show_bug.cgi?id=193256

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add link to bug along with bug title
        https://bugs.webkit.org/show_bug.cgi?id=193293

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed): Fetch bug title from Bugzilla and add it to the build.
        (ConfigureBuild.add_bug_id_url): Deleted.
        (ConfigureBuild.getBugURL): Deleted.

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use https for ews-build server
        https://bugs.webkit.org/show_bug.cgi?id=193193

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Parse and display number of style failures
        https://bugs.webkit.org/show_bug.cgi?id=193280

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckStyle): Use TestWithFailureCount as base class.
        (CheckStyle.countFailures): Count the number of style failures.

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] use patch_id instead of ewspatchid
        https://bugs.webkit.org/show_bug.cgi?id=193235

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py: Replaced ewspatchid with patch_id.
        * BuildSlaveSupport/ews-build/steps.py: Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Ditto.

2019-01-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add support for peculiar cases.
        https://bugs.webkit.org/show_bug.cgi?id=192625

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Purge use of g_assert() under TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=192841

        Reviewed by Carlos Garcia Campos.

        There are separate g_assert_*() macros for use in tests, which we use inconsistently
        currently. Use them always. We'll get nicer error messages now when tests fail, and the
        assertions will now run during tests even if G_DISABLE_ASSERT is used when building.

        Note that the documentation of g_assert() says that it is not to be used when writing tests.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/EditorTest.cpp:
        (WebKitWebEditorTest::testSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testMainFrame):
        (WebKitFrameTest::testURI):
        (WebKitFrameTest::testJavaScriptContext):
        (WebKitFrameTest::testJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationRequest):
        (testWebViewAuthenticationLoadCancelled):
        (testWebViewAuthenticationFailure):
        (testWebViewAuthenticationStorage):
        (ProxyAuthenticationTest::ProxyAuthenticationTest):
        (testWebViewAuthenticationProxy):
        (testWebViewAuthenticationProxyHTTPS):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (testBackForwardListNavigation):
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
        (ConsoleMessageTest::consoleMessageReceivedCallback):
        (testWebKitConsoleMessageConsoleAPI):
        (testWebKitConsoleMessageJavaScriptException):
        (testWebKitConsoleMessageNetworkError):
        (testWebKitConsoleMessageSecurityError):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerAcceptPolicy):
        (testCookieManagerCookiesChanged):
        (testCookieManagerPersistentStorage):
        (testCookieManagerPersistentStorageDeleteAll):
        (testCookieManagerEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/TestDOMElement.cpp:
        (testWebKitDOMElementAutoFill):
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (downloadLocalFileSuccessfully):
        (createFileAtDestination):
        (testDownloadOverwriteDestinationDisallowed):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testWebViewDownloadURI):
        (testPolicyResponseDownload):
        (testPolicyResponseDownloadCancel):
        (testDownloadMIMEType):
        (contextMenuCallback):
        (testContextMenuDownloadActions):
        (testBlobDownload):
        * TestWebKitAPI/Tests/WebKitGLib/TestEditor.cpp:
        (testWebKitWebEditorSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameMainFrame):
        (testWebKitFrameURI):
        (testWebKitFrameJavaScriptContext):
        (testWebKitFrameJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (LoadStopTrackingTest::loadFailed):
        (testWebViewTitle):
        (testURIRequestHTTPHeaders):
        (testURIRequestHTTPMethod):
        (testURIResponseHTTPHeaders):
        (testRedirectToDataURI):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (testProcessPerWebView):
        (testWebProcessLimit):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewResources):
        (testWebResourceLoading):
        (testWebResourceSuggestedFilename):
        (testWebResourceGetData):
        (testWebResourceGetDataError):
        (testWebViewResourcesHistoryCache):
        (testWebResourceSendRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL):
        (testInsecureContent):
        (testTLSErrorsPolicy):
        (testTLSErrorsRedirect):
        (testTLSErrorsHTTPAuth):
        (testLoadFailedWithTLSErrors):
        (testSubresourceLoadFailedWithTLSErrors):
        (httpsServerCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):
        (testWebViewJavaScriptDialogs):
        (testWebViewWindowProperties):
        (testWebViewMouseTarget):
        (testWebViewFileChooserRequest):
        (testWebViewColorChooserRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testDocumentLoadedSignal):
        (testWebKitWebViewProcessCrashed):
        (testWebExtensionWindowObjectCleared):
        (testWebExtensionIsolatedWorld):
        (permissionRequestCallback):
        (didAssociateFormControlsCallback):
        (testWebExtensionFormControlsAssociated):
        (FormSubmissionTest::FormSubmissionTest):
        (FormSubmissionTest::testFormSubmissionResult):
        (testWebExtensionFormSubmissionSteps):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized):
        (testClearDatabase):
        (testPrivateBrowsing):
        (testGetFavicon):
        (testWebViewFavicon):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp:
        (testFindControllerTextFound):
        (testFindControllerTextNotFound):
        (testFindControllerMatchCount):
        (testFindControllerMaxMatchCount):
        (testFindControllerNext):
        (testFindControllerPrevious):
        (testFindControllerCountedMatches):
        (testFindControllerOptions):
        (testFindControllerHide):
        (testFindControllerInstance):
        (testFindControllerGetters):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
        (testNavigationPolicy):
        (testResponsePolicy):
        (testNewWindowPolicy):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp:
        (testSecurityOriginBasicConstructor):
        (testSecurityOriginURIConstructor):
        (testSecurityOriginDefaultPort):
        (testSecurityOriginFileURI):
        (testOpaqueSecurityOrigin):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (testWebKitSettingsNewWithSettings):
        (testWebKitSettingsUserAgent):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testWebViewNewWithUserContentManager):
        (isStyleSheetInjectedForURLAtPath):
        (isScriptInjectedForURLAtPath):
        (testUserContentManagerInjectedStyleSheet):
        (testUserContentManagerInjectedScript):
        (UserScriptMessageTest::scriptMessageReceived):
        (UserScriptMessageTest::waitUntilMessageReceived):
        (UserScriptMessageTest::runJavaScriptFinished):
        (testUserContentManagerScriptMessageReceived):
        (testUserContentManagerScriptMessageInWorldReceived):
        (testUserContentManagerScriptMessageFromDOMBindings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextDefault):
        (testWebContextEphemeral):
        (testWebContextGetPlugins):
        (testWebContextURIScheme):
        (testWebContextSpellChecker):
        (testWebContextLanguages):
        (consoleMessageReceivedCallback):
        (testWebContextSecurityFileXHR):
        (ProxyTest::ProxyTest):
        (testWebContextProxySettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (testWebViewWebBackend):
        (testWebViewEphemeral):
        (testWebViewCustomCharset):
        (testWebViewSettings):
        (testWebViewRunJavaScript):
        (testWebViewCanShowMIMEType):
        (testWebViewSubmitForm):
        (testWebViewSave):
        (testWebViewPageVisibility):
        (testWebViewSnapshot):
        (testWebViewNotification):
        (testWebViewNotificationInitialPermissionAllowed):
        (testWebViewNotificationInitialPermissionDisallowed):
        (testWebViewIsPlayingAudio):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (WebsiteDataTest::WebsiteDataTest):
        (WebsiteDataTest::remove):
        (WebsiteDataTest::clear):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataCache):
        (testWebsiteDataStorage):
        (testWebsiteDataDatabases):
        (testWebsiteDataAppcache):
        (testWebsiteDataCookies):
        (testWebsiteDataDeviceIdHashSalt):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (emitDocumentLoaded):
        (emitURIChanged):
        (sendRequestCallback):
        (contextMenuCallback):
        (consoleMessageSentCallback):
        (emitFormControlsAssociated):
        (formControlsAssociatedCallback):
        (emitFormSubmissionEvent):
        (willSubmitFormCallback):
        (windowObjectCleared):
        (methodCallCallback):
        (registerGResource):
        (webkit_web_extension_initialize_with_user_data):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (checkLeaks):
        (WebProcessTest::create):
        (runTest):
        * TestWebKitAPI/Tests/WebKitGtk/AutocleanupsTest.cpp:
        (AutocleanupsTest::testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/DOMClientRectTest.cpp:
        (WebKitDOMClientRectTest::testDivBoundingClientRectPosition):
        (WebKitDOMClientRectTest::testDivClientRectsPositionAndLength):
        * TestWebKitAPI/Tests/WebKitGtk/DOMDOMWindowTest.cpp:
        (WebKitDOMDOMWindowTest::testSignals):
        (WebKitDOMDOMWindowTest::testDispatchEvent):
        (WebKitDOMDOMWindowTest::testGetComputedStyle):
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeFilterTest.cpp:
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testHierarchyNavigation):
        (WebKitDOMNodeTest::testInsertion):
        (WebKitDOMNodeTest::testTagNamesNodeList):
        (WebKitDOMNodeTest::testTagNamesHTMLCollection):
        (WebKitDOMNodeTest::testDOMCache):
        * TestWebKitAPI/Tests/WebKitGtk/DOMXPathNSResolverTest.cpp:
        (WebKitDOMXPathNSResolverTest::evaluateFooChildTextAndCheckResult):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverNative):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKitGtk/TestAutocleanups.cpp:
        (testUIProcessAutocleanups):
        (testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (testContextMenuPopulateMenu):
        (testContextMenuDismissed):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMClientRect.cpp:
        (testWebKitDOMClientRectDivBoundingClientRectPosition):
        (testWebKitDOMClientRectDivClientRectsPositionAndLength):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMDOMWindow.cpp:
        (testWebKitDOMDOMWindowSignals):
        (testWebKitDOMDOMWindowDispatchEvent):
        (testWebKitDOMDOMWindowGetComputedStyle):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNode.cpp:
        (testWebKitDOMNodeHierarchyNavigation):
        (testWebKitDOMNodeInsertion):
        (testWebKitDOMNodeTagNamesNodeList):
        (testWebKitDOMNodeTagNamesHTMLCollection):
        (testWebKitDOMObjectCache):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNodeFilter.cpp:
        (testWebKitDOMNodeFilterTreeWalker):
        (testWebKitDOMNodeFilterNodeIterator):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMXPathNSResolver.cpp:
        (testWebKitDOMXPathNSResolverNative):
        (testWebKitDOMXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        (testInspectorCustomContainerDestroyed):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:
        (startTestServer):
        (testInspectorServerPageList):
        * TestWebKitAPI/Tests/WebKitGtk/TestOptionMenu.cpp:
        (OptionMenuTest::showOptionMenuCallback):
        (OptionMenuTest::menuCloseCallback):
        (OptionMenuTest::close):
        (OptionMenuTest::activateItem):
        (OptionMenuTest::selectItem):
        (testOptionMenuSimple):
        (testOptionMenuGroups):
        (testOptionMenuActivate):
        (testOptionMenuSelect):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        (testPrintOperationPrintSettings):
        (webViewPrintCallback):
        (testPrintOperationPrint):
        (testPrintCustomWidget):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (checkAtspiAccessible):
        (testAtspiBasicHierarchy):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitVersion.cpp:
        (testWebKitCheckVersion):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        (loadContentsAndTryToCutSelection):
        (testWebViewEditorNonEditable):
        (testWebViewEditorEditable):
        (testWebViewEditorEditorStateTypingAttributes):
        (testWebViewEditorInsertImage):
        (testWebViewEditorCreateLink):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (loadFailedCallback):
        (loadFailedWithTLSErrorsCallback):
        (LoadTrackingTest::LoadTrackingTest):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (registerGResource):
        (removeNonEmptyDirectory):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::adoptView):
        (Test::~Test):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::getOrCreateConnection):
        (WebKitTestBus::createProxy):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::getWebSocketURIForPath const):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        (WebViewTest::loadURI):
        (WebViewTest::loadHtml):
        (WebViewTest::loadPlainText):
        (WebViewTest::loadBytes):
        (WebViewTest::loadRequest):
        (WebViewTest::loadAlternateHTML):
        (WebViewTest::goBack):
        (WebViewTest::goForward):
        (WebViewTest::goToBackForwardListItem):
        (resourceGetDataCallback):
        (WebViewTest::mainResourceData):
        (WebViewTest::javascriptResultToCString):
        (WebViewTest::javascriptResultToNumber):
        (WebViewTest::javascriptResultToBoolean):
        (WebViewTest::javascriptResultIsNull):
        (WebViewTest::javascriptResultIsUndefined):
        (onSnapshotReady):
        (WebViewTest::runWebProcessTest):
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::platformInitializeWebView):
        (WebViewTest::showInWindow):
        (WebViewTest::showInWindowAndWaitUntilMapped):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::emitPopupMenuSignal):
        (WebViewTest::keyStroke):
        (WebViewTest::doMouseButtonEvent):

2019-01-09  Philippe Normand  <pnormand@igalia.com>

        [WPE] API tests can't run in flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=193242

        Reviewed by Michael Catanzaro.

        * Scripts/run-wpe-tests: Add --wpe to arguments passed to
        flatpakutils so that it knows which port it's dealing with.
        * glib/common.py: Remove build_dir globals so that subsequent
        calls actually take args into account.
        (library_build_path):
        (binary_build_path):

2019-01-08  Dean Jackson  <dino@apple.com>

        Blob references for System Previews don't get a correct file extension
        https://bugs.webkit.org/show_bug.cgi?id=193268
        <rdar://problem/47133037>

        Reviewed by Tim Horton.

        New test that a Blob download of a USDZ file gets named correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[BlobWithUSDZExtensionDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[BlobWithUSDZExtensionDownloadDelegate _downloadDidFinish:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreviewBlobNaming.html: Added.

2019-01-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support U2F HID Authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191535
        <rdar://problem/47102027>

        Reviewed by Brent Fulgham.

        This patch:
        1) adds support for U2F mocking mechanism;
        2) updates tests to reflect U2fCommandConstructor changes.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2019-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Dispatch a synthetic mousedown event prior to starting drags
        https://bugs.webkit.org/show_bug.cgi?id=193229
        <rdar://problem/46717097>

        Reviewed by Tim Horton.

        Add a cross-platform drag and drop test to verify that calling `preventDefault()` on the mousedown event
        prevents a drag from starting.

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/link-and-target-div.html:

        Tweak this test to make it robust when dragging the link to the target element multiple times in a single test.

2019-01-08  Zhifei Fang  <zhifei_fang@apple.com>
  
        Layout test will generate a perf metric file to results dir.
        https://bugs.webkit.org/show_bug.cgi?id=192030
        <rdar://problem/32779516>

        Reviewed by Aakash Jain.

        Layout test running time will be collected to a perf metric file.
        For now, instead of outputing running time of all tests (which is huge),
        we aggregate them by test directories which are at most two level deep. 

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._end_test_run):
        (Manager._output_perf_metrics):
        (Manager._print_expectation_line_for_test):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (add_test_perf_metric):
        (test_perf_metrics):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.test_test_timings_trie):
        (JSONGeneratorTest):
        (JSONGeneratorTest.test_test_perf_metrics):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

2019-01-08  Patrick Griffis  <pgriffis@igalia.com>

        [WPE][GTK] Add php-json to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=193233

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:
        * wpe/install-dependencies:

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Regression(PSON-r239182): Blank view when navigating back and forth between google.com and stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=193224
        <rdar://problem/47097726>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Leak of ScrollCompletionCallbackData (16 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193222>
        <rdar://problem/46862309>

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::executeCallback): Fix camel case of variable name.
        (WTR::EventSendingController::callAfterScrollingCompletes): If
        WKBundlePageRegisterScrollOperationCompletionCallback() returns
        false, make sure to release the ScrollCompletionCallbackData
        object.  This fixes the leak.

2019-01-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] EWS: wincairo-ews cannot apply a patch with *.png
        https://bugs.webkit.org/show_bug.cgi?id=193044

        Reviewed by Daniel Bates.

        WinCairo EWS bots are using Windows Perl. Binary files should be
        opened as binary mode.

        * Scripts/svn-apply:
        (handleGitBinaryChange): Use 'binmode' for binary file handles.

2019-01-07  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add ENABLE_CSS_TYPED_OM option
        https://bugs.webkit.org/show_bug.cgi?id=193216

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Prefer RetainPtr<NSObject> to RetainPtr<NSObject *>
        <https://webkit.org/b/193056>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checker.py:
        - Ignore use of new runtime/retainptr check in
          Tools/TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm since it
          contains tests to ensure RetainPtr<NSObject *> is compatible
          with RetainPtr<NSObject>.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        - Add checker for use of '*' in RetainPtr<> type.  A for loop
          was used instead of a single regex so that angle brackets
          could be matched up when checking the type contained within
          the RetainPtr<> type.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        - Add unit test for new runtime/retainptr check.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.h:
        * TestWebKitAPI/EditingTestHarness.h:
        - Remove '*' from RetainPtr<> type.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add cf/RetainPtr.cpp back to TestWTFLibrary target!  This
          regressed in r201938.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        (TestWebKitAPI::TEST):
        - Update tests to match RetainPtr.mm tests (except for the
          `*SimilarNSType` tests since there is no CF equivalent of
          RetainPtr<NSString> and RetainPtr<NSString *>).

        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        - Update tests to:
          - Not conflict by name with equivalent CF tests in
            RetainPtr.cpp.
          - Add test cases for RetainPtr<NSObject>,
            RetainPtr<NSObject *> and RetainPtr<id> were appropriate.
          - Add `*SimilarNSType` tests for converting between
            RetainPtr<NSObject> and RetainPtr<NSObject *>.
          - Change `0` to `nil` as appropriate.
          - Re-alphabetize the tests by name.
          - Add Optional<RetainPtr<>> tests.
          - Add retainPtr() tests.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/IconLoadingDelegate.mm:
        (TEST):
        - Remove '*' from RetainPtr<> type.

        * TestWebKitAPI/Tests/WebKitCocoa/JITEnabled.mm:
        (TEST(WebKit, JITEnabled)):
        - Add missing WTFMove().  Apparently a temporary was being
          created before in the argument list due to mismatched
          RetainPtr<> types.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::setUpWebViewForTestingVideoControlsManager):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::resourcesDirectoryURL):
        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        - Remove '*' from RetainPtr<> type.

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        A MediaTime timescale must never be zero
        https://bugs.webkit.org/show_bug.cgi?id=193156
        <rdar://problem/32504501>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST): Add tests for zero timescale.

2019-01-07  Youenn Fablet  <youenn@apple.com>

        API test broken: TestWebKitAPI.WebKit.CustomDataStorePathsVersusCompletionHandlers
        https://bugs.webkit.org/show_bug.cgi?id=193175

        Reviewed by Chris Dumez.

        Updated API test as we bumped the SW schema to version 4.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-4.sqlite3: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-3.sqlite3.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2019-01-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings of MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=193029

        Reviewed by Ross Kirsling.

        * MiniBrowser/win/MiniBrowserWebHost.h: Removed unused m_oldFont
        and m_URLBarFont. Reorder member variables to fix -Wreorder
        warning.
        * MiniBrowser/win/PageLoadTestClient.cpp:
        (PageLoadTestClient::PageLoadTestClient): Reorder the member initializer list.
        * MiniBrowser/win/PageLoadTestClient.h: Removed 'virtual' of
        pageLoadStartedAtTime and pageLoadEndedAtTime. Removed unused
        m_currentURLIndex.
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Initialize
        navigationClient with '{ }' to fix the missing field warning.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (initDocStruct): Changed the argument type docname to const.

2019-01-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import U2F command/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=193150
        <rdar://problem/47054028>

        Reviewed by Brent Fulgham.

        Adds API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::getTestAttestedCredentialDataBytes):
        (TestWebKitAPI::getTestAuthenticatorDataBytes):
        (TestWebKitAPI::getTestAttestationObjectBytes):
        (TestWebKitAPI::getTestSignResponse):
        (TestWebKitAPI::getTestU2fRegisterResponse):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::convertToVector): Deleted.
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp: Added.
        (TestWebKitAPI::constructMakeCredentialRequest):
        (TestWebKitAPI::constructGetAssertionRequest):
        (TestWebKitAPI::TEST):

2019-01-05  Oriol Brufau  <obrufau@igalia.com>

        [GTK] Add python3-setuptools, libunistring-dev, bison and flex dependencies
        https://bugs.webkit.org/show_bug.cgi?id=193136

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:
        Add python3-setuptools, libunistring-dev, bison and flex to install-dependencies,
        they are needed by update-webkitgtk-libs.

2019-01-05  Aakash Jain  <aakash_jain@apple.com>

        Unreviewed follow-up fix to r239650
        https://bugs.webkit.org/show_bug.cgi?id=193140
        <rdar://problem/47063037>

        Typecast patch_id to string.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_patch_obsolete):

2019-01-04  Daniel Bates  <dabates@apple.com>

        [lldb-webkit]: Add support for pretty-printing raw bitmask types
        https://bugs.webkit.org/show_bug.cgi?id=193024

        Reviewed by Jer Noble.

        Add support infrastructure to pretty-print a raw bitmask type. Included is a pretty-printer
        for the bitmask type WebEventFlags as an example.

        Exposed a new function lldb_webkit.addSummaryAndSyntheticFormattersForRawBitmaskType()
        that can be used to register summary and synthetic child formatters for a bitmask type.
        For example, consider the following enum and bitmask typedefs:

        typedef enum {
            A = 1 << 0,
            B = 1 << 1,
            C = 1 << 2,
        } SpecialFlagValues;
        typedef unsigned SpecialFlags;

        To teach lldb-webkit how to pretty print SpecialFlags types, add the following code inside
        __lldb_init_module():

            addSummaryAndSyntheticFormattersForRawBitmaskType(debugger, "SpecialFlags", {
                    1 << 0: "A",
                    1 << 1: "B",
                    1 << 2: "C",
            })

        * lldb/lldb_webkit.py:
        (addSummaryAndSyntheticFormattersForRawBitmaskType):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.GeneratedRawBitmaskProvider):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.raw_bitmask_summary_provider):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.lldb_webkit):
        A convenience function to dynamically creaste a synthetic formatter class and summary
        string function for the specified bitmask type and enumerator value to name map. This
        function register the dynamically created class and function with LLDB.

        (__lldb_init_module):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._enumerator_value_to_name_map):
        (FlagEnumerationProvider._bitmask):
        (FlagEnumerationProvider._update):
        (FlagEnumerationProvider.has_children):
        (FlagEnumerationProvider.num_children):
        (FlagEnumerationProvider.get_child_index):
        (FlagEnumerationProvider.get_child_at_index):
        (FlagEnumerationProvider.update):
        Extract out provider logic from WTFOptionSetProvider into a base class that can be shared.

        (WTFOptionSetProvider):
        (WTFOptionSetProvider._enumerator_value_to_name_map):
        (WTFOptionSetProvider._bitmask):
        (WTFOptionSetProvider._update):
        Write in terms of the base class.

        (RawBitmaskProviderBase):
        (RawBitmaskProviderBase._enumerator_value_to_name_map):
        (RawBitmaskProviderBase._bitmask):
        Added. Base synthetic formatter class for a raw bitmask type. Derived classes are expected to
        override the class variable ENUMERATOR_VALUE_TO_NAME_MAP with a dictionary of the form:
        {
            1 << 0: "A",
            1 << 1: "B",
            1 << 2: "C",
        }
        It is not necessary to instantiate such a derived class directory. Instead use the convenience
        function addSummaryAndSyntheticFormattersForRawBitmaskType.

        (WTFOptionSetProvider.has_children): Deleted.
        (WTFOptionSetProvider.num_children): Deleted.
        (WTFOptionSetProvider.get_child_index): Deleted.
        (WTFOptionSetProvider.get_child_at_index): Deleted.
        (WTFOptionSetProvider.update): Deleted.

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to validate the patch before processing it
        https://bugs.webkit.org/show_bug.cgi?id=193140

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Added ValidatePatch step.
        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch):
        (ValidatePatch.fetch_data_from_url): Fetch data from a url.
        (ValidatePatch.get_patch_json): Get patch json data.
        (ValidatePatch.get_bug_json): Get bug json data.
        (ValidatePatch.get_bug_id_from_patch): Get bug id from a patch id.
        (ValidatePatch._is_patch_obsolete): Check if the patch is obsolete.
        (ValidatePatch._is_patch_review_denied): Check if the patch is marked r-.
        (ValidatePatch._is_bug_closed): Check if the bug is already closed.
        (ValidatePatch.skip_build): Skip the build.
        (ValidatePatch.start):

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Progress towards fixing Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=193105

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformMac.cmake:

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r239631
        https://bugs.webkit.org/show_bug.cgi?id=193118

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        This test relied on m_maximumProcessCount being set to 1 in ProcessPoolConfiguration::createWithLegacyOptions.
        Do the same thing via the API to fix the test.

2019-01-04  Jer Noble  <jer.noble@apple.com>

        [WebKitLegacy] Media playback pauses on scroll
        https://bugs.webkit.org/show_bug.cgi?id=192829

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/StopSuspendResumeAllMedia.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm: Added.
        (-[ScrollingDoesNotPauseMediaDelegate webViewDidFinishLoad:]):
        (-[ScrollingDoesNotPauseMediaDelegate uiWebView:didCommitLoadForFrame:]):
        (-[ScrollingDoesNotPauseMediaDelegate handleEvent:]):
        (TestWebKitAPI::TEST):

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Add support for toggling device orientation API support per site
        https://bugs.webkit.org/show_bug.cgi?id=193143
        <rdar://problem/46605724>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[DataMappingSchemeHandler setTaskHandler:]):
        (-[DataMappingSchemeHandler webView:startURLSchemeTask:]):
        (-[WebsitePoliciesDeviceOrientationDelegate initWithDeviceOrientationEventEnabled:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationDelegate webView:didFinishNavigation:]):

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] use svn-apply script to apply the patches
        https://bugs.webkit.org/show_bug.cgi?id=193138

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Add the ApplyPatch step.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): Added step name.
        (CheckOutSource.__init__): Used alwaysUseLatest so that it doesn't apply patch.
        (ApplyPatch): Build step to apply patch using svn-apply script.
        (UnApplyPatchIfRequired):
        (UnApplyPatchIfRequired.__init__): Deleted, since the alwaysUseLatest parameter is now in base class.

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKContextCreate
        https://bugs.webkit.org/show_bug.cgi?id=193118

        Reviewed by Brady Eidson.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        * TestWebKitAPI/Tests/WebKit/AboutBlankLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseThenTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EvaluateJavaScript.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EventModifiers.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FailedLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Find.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ForceRepaint.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::loadAlternateHTMLString):
        * TestWebKitAPI/Tests/WebKit/LoadPageOnCrash.cpp:
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        * TestWebKitAPI/Tests/WebKit/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::buildAndPerformTest):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NavigationClientDefaultCrypto.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageGroup.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ProcessDidTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeWindowAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ScrollPinningBehaviors.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/TerminateTwice.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageConfiguration.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageCopySessionStateWithFiltering.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageGetScaleFactorNotZero.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WebCoreStatisticsWithNoWebProcess.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/RestoreStateAfterTermination.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTestWKView::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeRegistry.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):

2019-01-03  Matt Rajca  <mrajca@apple.com>

        Make DidPlayMediaPreventedFromPlaying autoplay event more generic.
        https://bugs.webkit.org/show_bug.cgi?id=193128
        rdar://34554231

        Reviewed by Jer Noble.

        Today, the "DidPlayMediaPreventedFromPlaying" autoplay event is only sent for
        media prevented from autoplaying. It could be generalized to a "DidPlayMediaWithUserGesture"
        event along with a flag that indicates whether or not autoplay was actually prevented.

        Tests: existing API tests were updated to reflect the new names. New API tests
        were added for the new case in which the "DidPlayMediaWithUserGesture" event is sent.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/long-test.mp4: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/audio-with-play-button.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/video-with-play-button.html: Added.

2019-01-04  Chris Dumez  <cdumez@apple.com>

        [PSON] Calling history.back() from inside the load event handler prevents process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=193120

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessPool::addSuspendedPage()
        https://bugs.webkit.org/show_bug.cgi?id=193110

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Check patch relevance before applying the patch
        https://bugs.webkit.org/show_bug.cgi?id=193102

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Moved CheckPatchRelevance step to base class.

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Check patch relevance step should print patch id
        https://bugs.webkit.org/show_bug.cgi?id=193137

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance.start): Update the status to include patch id.

2019-01-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Increase simulator teardown timeout
        https://bugs.webkit.org/show_bug.cgi?id=193141
        <rdar://problem/46174217>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Use SIMULATOR_BOOT_TIMEOUT.

2019-01-03  Ross Kirsling  <ross.kirsling@sony.com>

        test262-runner misbehaves when test file YAML has a trailing space
        https://bugs.webkit.org/show_bug.cgi?id=193053

        Reviewed by Yusuke Suzuki.

        * Scripts/test262/Runner.pm:
        (parseData):
        Accept trailing space when parsing a test file's YAML block.

2019-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        UserMedia test should use WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=192913

        Reviewed by Youenn Fablet.

        The test currently uses the deprecated WKPageLoaderClient. It should use
        WKPageNavigationClient instead, which provides the same callback under a similar name.

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):

2019-01-02  Alex Christensen  <achristensen@webkit.org>

        Homograph with LATIN SMALL LETTER R WITH FISHHOOK
        https://bugs.webkit.org/show_bug.cgi?id=192944

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2019-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for using the current text selection as the find string on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193034
        <rdar://problem/45138739>

        Reviewed by Tim Horton.

        Add a new API test to verify that the new WebKit SPI (_stringForFind, _takeFindStringFromSelection:, and
        _setStringForFind) works as expected.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/UseSelectionAsFindString.mm: Added.

2019-01-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use git on OpenSource EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=193092

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): Use git instead of svn.
        (CheckOutSource.__init__): Use timeout of 2 hours since the initial checkout might take a long time.

2019-01-02  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Remove broken code to print WTF::OptionSet::m_storage
        https://bugs.webkit.org/show_bug.cgi?id=193023

        Reviewed by Simon Fraser.

        The code to print WTF::OptionSet::m_storage as an item in the set never worked and does
        not seem meaningful to fix because WTF::OptionSet::m_storage is just the sum of the printed
        enumerator values. We should just remove this code.

        * lldb/lldb_webkit.py:
        (WTFOptionSetProvider.has_children):
        (WTFOptionSetProvider.num_children):
        (WTFOptionSetProvider.get_child_index):
        (WTFOptionSetProvider.get_child_at_index):

2018-12-29  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        .ycm_extra_conf.py should handle XXXInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=193055

        Reviewed by Carlos Garcia Campos.

        compile_commands.json database only records flags and options for cpp source files.
        So, when we open headers, this database does not have any information for that.
        Our .ycm_extra_conf.py alleviates this by using XXX.cpp's configuration for XXX.h.
        But this mitigation does not handle XXXInlines.h well since we do not have XXXInlines.cpp.
        This patch adds support for XXXInlines.h in .ycm_extra_conf.py. When XXXInlines.h is queried,
        we attempt to find XXX.cpp and use the configuration if it exists.

        * gtk/ycm_extra_conf.py:
        (getImplementationFilename):
        (FlagsForFile):

2018-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Support PHP 7.3 in Debian.

        Add 7.3 to the list of php versions supported in Debian.

        * Scripts/webkitpy/port/base.py:
        (Port._debian_php_version):

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * TestWebKitAPI/PlatformMac.cmake:

2018-12-26  Adrian Perez de Castro  <aperez@igalia.com>

        [Tools] Remove references to Bison and Flex
        https://bugs.webkit.org/show_bug.cgi?id=193033

        Reviewed by Michael Catanzaro.

        The Bison and Flex tools are not needed anymore since r209883.

        * CygwinDownloader/cygwin-downloader.py:
        * EWSTools/ubuntu-ews-packages:
        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):
        * gtk/install-dependencies:
        * wpe/install-dependencies:

2018-12-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: warn about non existing tests when parsing expectations
        https://bugs.webkit.org/show_bug.cgi?id=192979

        Reviewed by Michael Catanzaro.

        It's common to update web driver tests and forget updating the test expectations in case of tests removed or
        renamed.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__):

2018-12-21  Chris Dumez  <cdumez@apple.com>

        navigator.userAgent in service workers does not reflect customUserAgent set by client
        https://bugs.webkit.org/show_bug.cgi?id=192951

        Reviewed by Youenn Fablet.

        Extend API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWCustomUserAgentDelegate initWithUserAgent:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[SWUserAgentMessageHandler initWithExpectedMessage:]):
        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] userPresence should always be true
        https://bugs.webkit.org/show_bug.cgi?id=192835
        <rdar://problem/46538788>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):

2018-12-19  Simon Fraser  <simon.fraser@apple.com>

        Add support to run-benchmark to use non-default copies of the browser apps
        https://bugs.webkit.org/show_bug.cgi?id=192905
        rdar://problem/46845840

        Reviewed by Dewei Zhu.
        
        Add support for a --browser-path argument to run-benchmark, which allows you to use
        a custom app bundle for a given browser (only implemented for Safari at present).

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory.create):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver._launch_process):
        (OSXBrowserDriver._launch_process_with_caffeinate): Fix spelling.
        (OSXBrowserDriver._launch_process_with_caffinate): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeCanaryDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxNightlyDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.__init__):
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args):
        (run_benchmark_plan):
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner.__init__):
        * Scripts/webkitpy/browserperfdash/browserperfdash_unittest.py:
        (FakeBenchmarkRunner.__init__):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import an APDU coder from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=192949
        <rdar://problem/46879933>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ApduTest.cpp: Added.
        (TestWebKitAPI::TEST):

2018-12-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Setting the file wrapper and content type of an attachment to a PDF should update its image
        https://bugs.webkit.org/show_bug.cgi?id=192984
        <rdar://problem/46798028>

        Reviewed by Tim Horton.

        Add an API test to verify that setting the file wrapper for a _WKAttachment with an enclosing image element with
        PDF data correctly updates the image element.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2018-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add JSCOnly to bot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=192964

        Reviewed by Alexey Proskuryakov.

        Apparently we have five JSCOnly test bots and multiple developers working on keeping them in
        good shape. Sadly, they are hidden bots not exposed in the dashboard. They would be more
        useful if they were not so secret, so add them.

        There appear to be no build-only bots, so the first column is blank. And of course there are
        no WebKit1 or WebKit2 bots, because this is JSCOnly, so the second and third columns are
        blank too. That's OK. This will be the last bot on the dashboard, so it won't look too bad,
        and there's plenty of room in the final column for all the bots.

        I had a hard time picking a logo to use, because the JavaScript language does not have an
        official logo. But I believe I've found one that will be satisfactory.

        I will sneak in one bonus change: WPE's EWS queue was missing, and has been added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/SquirrelFish.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/SquirrelFish@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.linux-jsconly img.logo):

2018-12-21  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/46194315> macOS: WebKit1 does not handle occlusion changes
        https://bugs.webkit.org/show_bug.cgi?id=192821

        Reviewed by Chris Dumez.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:

2018-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings of DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=192924

        Reviewed by Alex Christensen.

        * DumpRenderTree/AccessibilityController.h: Added member variable initializations in the class definition.
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController): Moved member variable initializations to the class definition.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem): String literals can't be converted non-const type. Use auto for them.
        (resetWebPreferencesToConsistentValues): Pass a temporal _bstr_t
        object to the argument of setDefaultTextEncodingName instead of a
        const string literal.
        (createWebViewAndOffscreenWindow): Use %lx for HRESULT (aka 'long').
        (main): Exit if _dup2 fails. Use %lu for'DWORD'(aka 'unsigned long').
        (setCacheFolder): Deleted.
        * DumpRenderTree/win/DumpRenderTreeWin.h: Fix class/struct mismatch of FrameLoadDelegate and PolicyDelegate declarations.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (dump): Use %d for int.
        * DumpRenderTree/win/FrameLoadDelegate.cpp: Removed unused variable g_delegateWaitingOnTimer.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (BSTRFromString): Deleted unused function.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setDatabaseQuota): Pass a temporal _bstr_t object to
        the arguemnt of setQuota instead of const string literal.
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (jsStringRefToWString): Deleted unused function.

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Add API test coverage for customUserAgent client setting and service workers
        https://bugs.webkit.org/show_bug.cgi?id=192952

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[SWSchemes webView:startURLSchemeTask:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CBORWriterTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FileSystem.cpp:
        (TestWebKitAPI::TEST_F):

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Add style script rule to check for uses of std::optional<>
        https://bugs.webkit.org/show_bug.cgi?id=192931

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_optional):
        (check_style):

2018-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a runtime flag for local authenticator
        https://bugs.webkit.org/show_bug.cgi?id=192792
        <rdar://problem/46798738>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-12-20  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Autoinstall package URLs have changed
        https://bugs.webkit.org/show_bug.cgi?id=192909
        <rdar://problem/46860359>

        Rubber-stamped by Alexey Proskuryakov.

        PyPi urls have been moved around, we need to update our auto-installed packages.

        We should check for Selenium before asking PyPi for the latest version.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize): Update with new pypi url.
        (AutoinstallImportHook._install_keyring): Ditto.
        (AutoinstallImportHook._install_pep8): Ditto.
        (AutoinstallImportHook._install_mozlog): Ditto.
        (AutoinstallImportHook._install_mozprocess): Ditto.
        (AutoinstallImportHook._install_pytest_timeout): Ditto.
        (AutoinstallImportHook._install_pytest): Ditto.
        (AutoinstallImportHook._install_pylint): Ditto.
        (AutoinstallImportHook._install_buildbot): Ditto.
        (AutoinstallImportHook._install_coverage): Ditto.
        (AutoinstallImportHook._install_twisted_15_5_0): Ditto.
        (AutoinstallImportHook._install_selenium): Update with new pypi url, only check
        for new Selenium if the installed version isn't sufficient.
        (AutoinstallImportHook.get_latest_pypi_url): Update with new pypi url.

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::checkURL):

2018-12-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r239417.

        Introduced two API test failures on macOS.

        Reverted changeset:

        "<rdar://problem/46194315> macOS: WebKit1 does not handle
        occlusion changes"
        https://bugs.webkit.org/show_bug.cgi?id=192821
        https://trac.webkit.org/changeset/239417

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: UIString should take an optional key and description to aid localization
        https://bugs.webkit.org/show_bug.cgi?id=153962
        <rdar://problem/24542505>

        Reviewed by Brian Burg.

        * Scripts/extract-localizable-js-strings:

2018-12-20  Tim Horton  <timothy_horton@apple.com>

        Unparented WKWebView can't retrieve main resource data for a main frame plugin
        https://bugs.webkit.org/show_bug.cgi?id=192923
        <rdar://problem/46859068>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/WebKitCocoa/GetResourceData.mm:
        Add a test ensuring that both parented and unparented WKWebViews can
        retrieve main resource data when loading a PDF.

2018-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Bump webkitgtk-test-fonts to 0.0.8
        https://bugs.webkit.org/show_bug.cgi?id=192852

        Reviewed by Michael Catanzaro.

        EmojiOne font was replaced by Noto Color Emoji.

        * WebKitTestRunner/gtk/fonts/fonts.conf: Use Noto Color Emoji when Apple Color Emoji font family is used in tests.
        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2018-12-19  Chris Dumez  <cdumez@apple.com>

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        * DumpRenderTree/*:
        * MiniBrowser/*:
        * TestRunnerShared/*:
        * TestWebKitAPI/*:
        * WebGPUAPIStructure/*:
        * WebKitTestRunner/*:

2018-12-19  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/46194315> macOS: WebKit1 does not handle occlusion changes
        https://bugs.webkit.org/show_bug.cgi?id=192821

        Reviewed by Chris Dumez.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):

2018-12-19  Alex Christensen  <achristensen@webkit.org>

        Navigations away from the SafeBrowsing interstitial show a flash of old content
        https://bugs.webkit.org/show_bug.cgi?id=192676

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (safeBrowsingView):
        (TEST):
        (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): Deleted.

2018-12-19  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Unify TestController::platformRunUntil() and honor condition flag
        https://bugs.webkit.org/show_bug.cgi?id=192855

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::notifyDone): Use the WPE implementation.
        (WTR::TestController::platformRunUntil): Use the WPE implementation.
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformRunUntil): Honor the condition flag.

2018-12-19  Megan Gardner  <megan_gardner@apple.com>

        Allow clients to set the navigator platform
        https://bugs.webkit.org/show_bug.cgi?id=192735

        Reviewed by Tim Horton.

        Add a test for setting a custom navigator platform.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomNavigatorPlatformDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomNavigatorPlatformDelegate webView:didFinishNavigation:]):

2018-12-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r239358.

        Revision caused imported/w3c/web-platform-tests/IndexedDB/ to
        crash on Debug bots

        Reverted changeset:

        "Clean up IndexedDB files between tests"
        https://bugs.webkit.org/show_bug.cgi?id=192796
        https://trac.webkit.org/changeset/239358

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A copied text selection is pasted as a web archive attachment in the entry view in Messages
        https://bugs.webkit.org/show_bug.cgi?id=192842
        <rdar://problem/46823586>

        Reviewed by Tim Horton.

        Adjusts an existing API test to verify that "com.apple.webarchive" is not one of the types registered to the
        item provider when dragging a rich text selection.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-12-18  David Quesada  <david_quesada@apple.com>

        REGRESSION: [iOS] API test TestWebKitAPI._WKDownload.OriginatingWebView is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=192810
        <rdar://problem/46812536>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
            After releasing our reference to the web view, wait until the next turn of the runloop
            before checking that the originatingWebView has been zeroed, since the web view might
            still be referenced in the autorelease pool. This _WKDownload unit test isn't about
            testing general memory management of WKWebViews, only that _WKDownload does not retain
            its web view via the 'originatingWebView' property.

2018-12-18  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext):
        (WTR::RemoveAllIndexedDatabasesCallback):
        (WTR::TestController::ClearIndexedDatabases):
        * WebKitTestRunner/TestController.h:

2018-12-18  Alex Christensen  <achristensen@webkit.org>

        Fix API test introduced in r239339 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=192675

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        The iOS implementation of the safe browsing warning is a little different.
        It does some element creation when it is added to the window so it knows how big it is.
        To test these elements, we need to simulate adding it to the window.
        A similar technique is done in other iOS API tests, such as SafeBrowsing.ShowWarningSPI.

2018-12-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore device type for test when using --force
        https://bugs.webkit.org/show_bug.cgi?id=192786
        <rdar://problem/46794894>

        Reviewed by Daniel Bates.

        It is sometimes the case that a contributor will wish to run a test on a specific device,
        despite expectations which indicate a test should not be run on that device.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.default_child_processes): Strip device type information when using --force.
        (DevicePort.setup_test_run): Only allow incomplete match when using --force.

2018-12-18  Alex Christensen  <achristensen@webkit.org>

        WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations
        https://bugs.webkit.org/show_bug.cgi?id=192675

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (TEST):
        (visitUnsafeSite):
        (-[SafeBrowsingHelper observeValueForKeyPath:ofObject:change:context:]):
        (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

2018-12-18  Chris Dumez  <cdumez@apple.com>

        Regression(r239182) SuspendedPage's process reuse for link navigation optimization sometimes broken
        https://bugs.webkit.org/show_bug.cgi?id=192772

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, JHBuild GTK build fix attempt

        * gtk/jhbuild.modules: There's no libffi in this moduleset anymore.
        There's no ninja module either, it should be provided by the
        host system.

2018-12-17  Chris Dumez  <cdumez@apple.com>

        Allow passing nil as session state to [WKWebView _restoreSessionState:]
        https://bugs.webkit.org/show_bug.cgi?id=192789
        <rdar://problem/46755277>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm:
        (TEST):

2018-12-17  Simon Fraser  <simon.fraser@apple.com>

        Don't use more expensive layer backing store formats when subpixel text antialiasing is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=192780
        rdar://problem/43394387

        Reviewed by Tim Horton.

        No need to set "AppleFontSmoothing" defaults for WK2.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2018-12-17  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Handle case where stdout and stderr don't accept unicode
        https://bugs.webkit.org/show_bug.cgi?id=192775
        <rdar://problem/46497303>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): If unicode cannot be written to the stream, replace unicode
        characters with '?'.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_stream_with_encoding):

2018-12-17  Daniel Bates  <dabates@apple.com>

        Support concatenating StringView with other string types
        https://bugs.webkit.org/show_bug.cgi?id=177566

        Reviewed by Darin Adler.

        Add some tests to ensure we do not regress the number of allocations needed when performing
        string concatenation with string views.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST):

2018-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239265 and r239274.
        https://bugs.webkit.org/show_bug.cgi?id=192765

        unorm_normalize is deprecated, and broke an internal build
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "[GTK][WPE] Need a function to convert internal URI to display
        ("pretty") URI"
        https://bugs.webkit.org/show_bug.cgi?id=174816
        https://trac.webkit.org/changeset/239265

        "Fix the Apple Internal Mac build with a newer SDK"
        https://trac.webkit.org/changeset/239274

2018-12-17  Daniel Bates  <dabates@apple.com>

        Implement UIScriptController::toggleCapsLock() for iOS
        https://bugs.webkit.org/show_bug.cgi?id=191815

        Reviewed by Andy Estes.

        Add support for toggling the caps lock state in WebKitTestRunner on iOS.

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Clear the current modifier state
        before running a test. This ensures that the caps lock state does not persist between
        tests should a test enable caps lock and not disable it.
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter): Map "capsLock" to the Caps Lock key usage code.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::createUIPhysicalKeyboardEvent): Modified to take the keyboard input flags to use to
        create the event. Also substituted NSString* for const String& as the data type for the first
        two parameters to avoid conversions in the implementation of UIScriptController::toggleCapsLock()
        below.
        (WTR::UIScriptController::keyDown): Update as needed due to changes to prototype of createUIPhysicalKeyboardEvent().
        (WTR::UIScriptController::toggleCapsLock): Dispatch a UIEvent to toggle caps lock.

2018-12-17  Daniel Bates  <dabates@apple.com>

        [iOS] Remove -[WebEvent initWithKeyEventType:...:characterSet:]
        https://bugs.webkit.org/show_bug.cgi?id=192633

        Reviewed by Wenson Hsieh.

        Update code to use the modern initializer.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: loop variable is copied but only used as const reference in WebCore, WebKit, Tools
        <https://webkit.org/b/192751>
        <rdar://problem/46771623>

        Reviewed by Daniel Bates.

        Change loop variables to const references to avoid unnecessary
        copies.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard pasteboardItems]):

2018-12-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add tests for userVisibleString() and (for GTK and WPE) webkit_uri_for_display().

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/URLHelpers.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitURIUtilities.cpp: Added.
        (testURIForDisplayUnaffected):
        (testURIForDisplayAffected):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:

2018-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add a test case to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFrameDisplayed):
        (beforeAll):
        * wpe/jhbuild.modules: Bump WPEBackend-fdo to 1.1.0.

2018-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix after r239253

        * gtk/jhbuild.modules: Fix typo in libpsl dependency name.

2018-12-15  Darin Adler  <darin@apple.com>

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon): Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.
        * DumpRenderTree/mac/TextInputControllerMac.m:
        (-[TextInputController interpretKeyEvents:withSender:]): Use
        IGNORE_WARNINGS_BEGIN/END.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseForceClick): Use
        IGNORE_NULL_CHECK_WARNINGS_BEGIN/END.
        (WTR::EventSenderProxy::startAndCancelMouseForceClick): Ditto.
        (WTR::EventSenderProxy::mouseForceDown): Ditto.
        (WTR::EventSenderProxy::mouseForceUp): Ditto.
        (WTR::EventSenderProxy::mouseForceChanged): Ditto.

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge): Use makeString.
        (WTR::TestController::downloadDidFail): Use an ASCIILiteral via the _s syntax.

2018-12-15  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Add libpsl to JHBuild module sets
        https://bugs.webkit.org/show_bug.cgi?id=192740

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add libpsl module.
        * wpe/jhbuild.modules: Ditto.

2018-12-14  Alexey Proskuryakov  <ap@apple.com>

        Add a style checker rule for Xcode version macros use
        https://bugs.webkit.org/show_bug.cgi?id=192703

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        (process_line):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls
        https://bugs.webkit.org/show_bug.cgi?id=192704

        Reviewed by Geoffrey Garen.

        Extend existing API test to reproduce the problem.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] WebsitePolicies are lost on process-swap
        https://bugs.webkit.org/show_bug.cgi?id=192694
        <rdar://problem/46715748>

        Reviewed by Brady Eidson.

        Extend existing API test to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2018-12-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Error writing data to TLS socket in some sites when using the jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=192678

        Reviewed by Carlos Garcia Campos.

        Update our ancient versions of libsoup and glib-networking.

        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * gtk/patches/libsoup-auth-Fix-async-authentication-when-flag-SOUP_MESSAGE.patch: Removed.
        * gtk/patches/libsoup-auth-do-not-use-cached-credentials-in-lookup-method-.patch: Removed.
        * gtk/patches/libsoup-soup-message-io-Do-not-fail-when-there-s-no-empty-li.patch: Removed.
        * gtk/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Removed.
        * wpe/install-dependencies:
        * wpe/jhbuild.modules:
        * wpe/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Removed.

2018-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use new view state API from libwpe
        https://bugs.webkit.org/show_bug.cgi?id=191906

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (beforeAll): Enable /webkit/WebKitWebView/page-visibility in WPE.
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend): Make the view initially hidden for consistency with GTK+ tests.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow): Add wpe_view_activity_state_visible, wpe_view_activity_state_in_window and
        wpe_view_activity_state_focused state flags.
        (WebViewTest::hideView): Remove wpe_view_activity_state_visible and wpe_view_activity_state_focused state flags.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Assume view is always visible, focused and in window.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Update the view state flags depending on state
        received in configure callback.
        * wpe/jhbuild.modules: Bump libwpe to 1.1.0

2018-12-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory'
        https://bugs.webkit.org/show_bug.cgi?id=192688

        Reviewed by Ross Kirsling.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (copyEnvironmentVariable): Moved.
        (getStringValue): Enclosed with #if !defined(WIN_CAIRO).
        (applePathFromRegistry): Ditto.
        (appleApplicationSupportDirectory): Ditto.
        (prependPath): Ditto.

2018-12-13  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed. Changed my status to a reviewer.

        * Scripts/webkitpy/common/config/contributors.json:

2018-12-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support dropping contact card data (public.vcard) in editable content
        https://bugs.webkit.org/show_bug.cgi?id=192570
        <rdar://problem/35626913>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

        Add API tests to verify that registering `MKMapItem`s and `CNContact`s to item providers and dropping them in
        attachment-enabled rich text editable areas inserts attachment elements (and in the case of `MKMapItem`,
        additionally inserts a link).

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::createMapItemForTesting):
        (TestWebKitAPI::createContactItemForTesting):

        Add API tests to verify that dropping map items and contact items into rich and plain editable areas behaves as
        expected (in the case where a URL is present, e.g. dropping a map item, we insert the URL as an anchor, and when
        there is no other suitable representation in the item provider, we do nothing at all, which is the case for the
        dropped `CNContact`). Also, add a test to verify that drag and drop can be used to upload these items as .vcf
        files.

2018-12-13  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed -- update my status to "reviewer".

        * Scripts/webkitpy/common/config/contributors.json:

2018-12-13  Youenn Fablet  <youenn@apple.com>

        On page close, WebPage::m_userMediaPermissionRequestManager is nullified too early
        https://bugs.webkit.org/show_bug.cgi?id=192657

        Reviewed by Eric Carlson.

        Add a test that loads a page registering ondevicechange,
        load another page in the same process, closes the first page.
        Ensure that the process does not crash in that case.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didCrashCallback):
        * TestWebKitAPI/Tests/WebKit/ondevicechange.html: Added.

2018-12-13  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GStreamer][JHBuild] update-webkit{gtk,wpe}-libs fails with libfdk-2.0.0
        https://bugs.webkit.org/show_bug.cgi?id=192643

        Reviewed by Philippe Normand.

        This problem happens with Arch Linux users which have libfdk-2.0.0
        installed (which is anybody with gst-plugins-bad 1.14.4 installed).

        The problem has already been solved upstream at
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/77.

        Adding patches while this problem is not in a release yet.

        * gstreamer/jhbuild.modules: Add patches to fix build of gst-plugins-bad with libfdk-2.0.0.
        * gstreamer/patches/gst-plugins-bad-0003-fdkaacenc-Remove-MODE_2_1.patch: Added.
        * gstreamer/patches/gst-plugins-bad-0004-fdkaacdec-Use-WAV-channel-mapping-instead-of-interleave-setting.patch: Added.

2018-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        Add cairo patch to avoid crashes.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.

2018-12-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][WebKitLegacy] WebFrame.cpp: warning: delete called on non-final 'WebFrame' that has virtual functions but non-virtual destructor [-Wdelete-non-virtual-dtor]
        https://bugs.webkit.org/show_bug.cgi?id=192618

        Reviewed by Alex Christensen.

        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/UIDelegate.h:

2018-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        Make TextInputController.legacyAttributedString take DOM nodes and offsets
        https://bugs.webkit.org/show_bug.cgi?id=192653

        Reviewed by Wenson Hsieh.

        Updated TextInputController.legacyAttributedString to take DOM nodes and offsets instead of
        a DOM Range object in preparation to add layout tests for HTMLConverter which crosses
        shadow boundaries.

        * DumpRenderTree/mac/TextInputControllerMac.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]): Updated the selector signature.
        (+[TextInputController webScriptNameForSelector:]): Ditto.
        (-[TextInputController legacyAttributedString:offset:to:offset:]): Made this function take
        start node and offset then end node and offset pairs.

2018-12-12  Alex Christensen  <achristensen@webkit.org>

        Implement safe browsing in WebKit on WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=192641
        <rdar://problem/46376188>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate _webViewDidShowSafeBrowsingWarning:]):
        (safeBrowsingView):
        Add a test that the new delegate callback is called.

2018-12-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed manual rollout of r239100-r239102 and r239116
        https://bugs.webkit.org/show_bug.cgi?id=192151
        <rdar://problem/46655586>

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Removed.

2018-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239103.
        https://bugs.webkit.org/show_bug.cgi?id=192627

        It broke the built because it depends on another patch that
        didn't land yet (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Add API to notify about frame displayed view backend
        callback"
        https://bugs.webkit.org/show_bug.cgi?id=192224
        https://trac.webkit.org/changeset/239103

2018-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add a test case to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFrameDisplayed):
        (beforeAll):

2018-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        Add cairo patch to avoid crashes.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.

2018-12-11  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag for CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192610

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-12-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix bad check in API test added in r239080.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix warning -Wmissing-field-initializers
        https://bugs.webkit.org/show_bug.cgi?id=192584

        Reviewed by Yusuke Suzuki.

        Initialize a struct with '{ }' instead of '= {0}'.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/EventSender.cpp:
        (makeMsg):
        (replaySavedEvents):
        (beginDragWithFilesCallback):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (updateMenuItemForHistoryItem):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * TestWebKitAPI/win/HostWindow.cpp:
        (TestWebKitAPI::HostWindow::clientRect const):
        (TestWebKitAPI::HostWindow::registerWindowClass):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::registerWindowClass):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::windowSnapshotImage):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        PSON logic gets confused by concurrent decidePolicyForNavigationAction requests
        https://bugs.webkit.org/show_bug.cgi?id=192482
        <rdar://problem/46470145>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-11  Andy Estes  <aestes@apple.com>

        Introduce makeBlockPtr for lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192594

        Reviewed by Alex Christensen.

        Adopted makeBlockPtr and added API tests.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::callUIScriptCallback):
        * TestWebKitAPI/Tests/WTF/BlockPtr.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner init]):
        (-[DownloadProgressTestRunner subscribeAndWaitForProgress]):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238764-238783): TestWTF.WTF.StringOperators is failing
        https://bugs.webkit.org/show_bug.cgi?id=192361
        <rdar://problem/46524903>

        Reviewed by Alex Christensen.

        Compile StringOperators.cpp with -O1 optimization level instead of -Os. This
        fixes the failures for me locally.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2018-12-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after r239028

        The FLATPAK_USER_DIR env var is not set early enough, leading to:

        Traceback (most recent call last):
        File "/home/phil/WebKit/Tools/Scripts/webkit-flatpak", line 28, in <module>
          sys.exit(WebkitFlatpak.load_from_args().run())
        File "/home/phil/WebKit/Tools/flatpak/flatpakutils.py", line 761, in run
          if not self.clean_args():
        File "/home/phil/WebKit/Tools/flatpak/flatpakutils.py", line 574, in clean_args
          _log.debug("Using flatpak user dir: %s" % os.environ["FLATPAK_USER_DIR"])
        File "/usr/lib/python2.7/UserDict.py", line 40, in __getitem__
          raise KeyError(key)
        KeyError: 'FLATPAK_USER_DIR'

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add ENABLE_RESOURCE_LOAD_STATISTICS to WebKitFeatures.cmake
        https://bugs.webkit.org/show_bug.cgi?id=192574

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Sync FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=192565

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to upload data that conforms to "public.item" but not "public.content"
        https://bugs.webkit.org/show_bug.cgi?id=192555
        <rdar://problem/35204990>

        Reviewed by Tim Horton.

        Add a test to verify that `.p12` files may be uploaded as files via drag and drop. "com.rsa.pkcs-12" is an
        example of a data type that conforms to "public.item", but not "public.content"; before this patch, we would
        only support uploading "public.content", so files such as these would not be accepted when dropping into file
        inputs, or be exposed as files on DataTransfer.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):

2018-12-10  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Follow-up to address Darin's feedback.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::keyExistsInKeychain):

2018-12-10  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ref tests don't respect platform specific expectations
        https://bugs.webkit.org/show_bug.cgi?id=192515
        <rdar://problem/46564839>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/base.py:
        (Port._expected_baselines_for_suffixes): Accept multiple suffixes so ref tests can use this function.
        (Port.expected_baselines): Move implementation to _expected_baselines_for_suffixes.
        (Port.expected_filename): Remove irrelevant FIXME, code clean-up.
        (Port.reference_files): Instead of just searching a single directory, use _expected_baselines_for_suffixes to
        search all platform expectations as well.
        * Scripts/webkitpy/port/base_unittest.py:
        (test_ref_tests_platform_directory):

2018-12-10  Chris Dumez  <cdumez@apple.com>

        Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192509
        <rdar://problem/46500832>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[DataMappingSchemeHandler addMappingFromURLString:toData:]):
        (-[DataMappingSchemeHandler webView:startURLSchemeTask:]):
        (-[DataMappingSchemeHandler webView:stopURLSchemeTask:]):
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomUserAgentDelegate webView:didFinishNavigation:]):

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Caret is obscured by finger when dragging over an editable element
        https://bugs.webkit.org/show_bug.cgi?id=192499
        <rdar://problem/46570101>

        Reviewed by Tim Horton.

        Augment some existing API tests to check that the `precise` flag is either on or off on `UIDropProposal`.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator lastKnownDropProposal]):

        Rename `currentDropProposal` to `lastKnownDropProposal`, and expose it as a readonly property.

        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator setShowCustomActionSheetBlock:]):
        (-[DragAndDropSimulator showCustomActionSheetBlock]):
        (-[DragAndDropSimulator setConvertItemProvidersBlock:]):
        (-[DragAndDropSimulator convertItemProvidersBlock]):
        (-[DragAndDropSimulator setOverridePerformDropBlock:]):
        (-[DragAndDropSimulator overridePerformDropBlock]):
        (-[DragAndDropSimulator setOverrideDragUpdateBlock:]):
        (-[DragAndDropSimulator overrideDragUpdateBlock]):
        (-[DragAndDropSimulator setDropCompletionBlock:]):
        (-[DragAndDropSimulator dropCompletionBlock]):

        Refactor these properties to return and take normal Objective-C blocks, rather than `BlockPtr`s. However, use
        `BlockPtr` instance variables to manage the lifetimes of these blocks.

        (-[DragAndDropSimulator _webView:willUpdateDropProposalToProposal:forSession:]):
        (-[DragAndDropSimulator _webView:willUpdateDataInteractionOperationToOperation:forSession:]): Deleted.

        Update this to use the new WebKit delegate hook for overriding the drop proposal.

2018-12-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] run-minibrowser improperly creates webkit-flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=190241

        Reviewed by Carlos Garcia Campos.

        run-minibrowser calls into webkit-flatpak to check if a flatpak environment is available.
        Currently this actually creates the directories needed for the flatpak environment. Fix it.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run):

2018-12-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Don't use the slice allocator
        https://bugs.webkit.org/show_bug.cgi?id=192360

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (aboutDataRequestFree):
        (aboutDataRequestNew):

2018-12-10  Tim Horton  <timothy_horton@apple.com>

        WKWebView should support custom tintColor
        https://bugs.webkit.org/show_bug.cgi?id=192518
        <rdar://problem/37243261>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        (TestWebKitAPI::TEST):
        Add a test that tintColor affects UITextInputTraits' interaction colors.

2018-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] DragAndDropTests.RespectsExternalSourceFidelityRankings is flaky
        https://bugs.webkit.org/show_bug.cgi?id=192524

        Reviewed by Ryosuke Niwa.

        This test started failing on certain builds of iOS where UIKit now attempts to reveal the selection by scrolling
        (see <rdar://problem/28300343>). This API test simulates two drops from external sources, both from the point
        (300, 400) to (100, 300) in window coordinates. On these aforementioned builds of iOS, what happens is that the
        first drop inserts text that overflows the editable region by an enormous amount, which creates an extremely
        wide selection rect and increases the width of the document; revealing this selection causes the web view to
        scroll horizontally, such that the second attempt to simulate a drag from (300, 400) to (100, 300) fails, since
        these window coordinates no longer correspond to the drop destination element in the document.

        To fix this test, we simply mark the drop destination as `overflow: hidden` to ensure that we don't try and
        scroll horizontally after the first drop.

        * TestWebKitAPI/Tests/WebKitCocoa/autofocus-contenteditable.html:

2018-12-08  Daniel Bates  <dabates@apple.com>

        Fix lldb_webkit.py following r238771
        (https://bugs.webkit.org/show_bug.cgi?id=190234)

        Substitute WTFURLProvider for WebCoreURLProvider in one call site that was inadvertently
        missed in r238771.

        * lldb/lldb_webkit.py:
        (WebCoreDocumentProvider.url):

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] check-patch-relevance failure should not mark the overall build as failure
        https://bugs.webkit.org/show_bug.cgi?id=192510

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance.start):

2018-12-07  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.UseSessionCookiesAfterProcessSwapInPrivateBrowsing API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=192362
        <rdar://problem/46460360>

        Reviewed by Ryosuke Niwa.

        Move the call to _setCookieAcceptPolicy *after* we've constructed a WKWebView and thus
        *after* we know for sure we have a network process to communicate the policy to.
        This should address the failures on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-07  Jiewen Tan  <jiewen_tan@apple.com>

        Add keychain access entitlement to WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=192489
        <rdar://problem/45057952>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/Configurations/WebKitTestRunnerApp-iOS.entitlements:

2018-12-07  Saam Barati  <sbarati@apple.com>

        WKWebProcessPlugInLoadDelegate should have API for saying which rendering events it wants to listen for
        https://bugs.webkit.org/show_bug.cgi?id=192473

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgress.mm: Added.
        (-[DidFirstMeaningfulPaintRemoteObject didFirstMeaningfulPaint]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgressPlugIn.mm: Added.
        (-[RenderingProgressPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RenderingProgressPlugIn webProcessPlugInBrowserContextControllerRenderingProgressEvents:]):
        (-[RenderingProgressPlugIn webProcessPlugInBrowserContextController:renderingProgressDidChange:]):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgressProtocol.h: Added.

2018-12-07  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: run-webkit-tests may fail when using booted simulators (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192470
        <rdar://problem/46532001>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.setup_test_run): Check that the number of initialized devices matches the
        number of child processes.

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Send bug id as a build property
        https://bugs.webkit.org/show_bug.cgi?id=192494

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Builds should have a link to patch and bug
        https://bugs.webkit.org/show_bug.cgi?id=192492

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.add_patch_id_url): Method to add Patch URL.
        (ConfigureBuild.add_bug_id_url): Method to add Bug URL.
        (ConfigureBuild.getPatchURL): Method to get Patch URL.
        (ConfigureBuild.getBugURL): Method to get Bug URL.

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Configure logfile for ews-app logs
        https://bugs.webkit.org/show_bug.cgi?id=192493

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py:

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        Style queue exception on some security bugs
        https://bugs.webkit.org/show_bug.cgi?id=190793

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/tool/steps/applywatchlist.py:
        (ApplyWatchList.run):

2018-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Cloned attachment elements lose their unique identifiers
        https://bugs.webkit.org/show_bug.cgi?id=192483

        Reviewed by Tim Horton.

        Introduce a new API test.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        Consecutive DumpRenderTree crashes are happening again on WinCairo BuildBots since r238903
        https://bugs.webkit.org/show_bug.cgi?id=192486

        Unreviewed infrastructure fix.

        WinCairo bots define WEBKIT_TEST_CHILD_PROCESSES to run less processes due to RAM restrictions.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options):

2018-12-06  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Reviewed by Simon Fraser.

        This patch:
        - Fixes leaks in various injected bundle methods that return +1
          retained WKTypeRef objects via pointer.
        - Asserts the returned object is the expected WKTypeRef.
        - Replaces 0 with nullptr in many places.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestRunner::statisticsUpdateCookieBlocking):
        (WTR::TestRunner::statisticsSubmitTelemetry):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::statisticsResetToConsistentState):
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::domCacheSize):
        (WTR::TestRunner::injectUserScript):
        (WTR::TestRunner::keyExistsInKeychain):

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: run-webkit-tests may fail when using booted simulators
        https://bugs.webkit.org/show_bug.cgi?id=192470
        <rdar://problem/46532001>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Logging uses the number of child processes to print out information about how efficiently tests
        were sharded after the fact. This number is the most meaningful if it is the maximum number of child processes used.
        * Scripts/webkitpy/port/base.py:
        (Port.max_child_processes): By default, Ports do not support running on any specific kind of device.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.default_child_processes): Rather than using the currently initialized devices as a proxy for how many
        child processes are being used, check the device manager every time. Regardless of which devices are attached or
        available, iOS cannot boot watchOS devices and vice-versa. dedicated_simulators is not a known argument to
        device_count_for_type, use use_booted_simulator instead.
        (DevicePort.max_child_processes): Simulators can boot more devices than what is specified by device_count_for_type,
        but, if no devices are available, then max_child_processes should return 0 even for simulators.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        (IOSDeviceTest.test_max_child_processes):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.test_max_child_processes):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.test_max_child_processes):
        * Scripts/webkitpy/port/watch_simulator_unittest.py:
        (WatchSimulatorTest):
        (WatchSimulatorTest.test_max_child_processes):

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore case when comparing device types (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192409
        <rdar://problem/46491558>

        Unreviewed typo fix.

        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_comparison_lower_case):
        (DeviceTypeTest.test_comparsion_lower_case): Deleted.

2018-12-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Create device given lower-case DeviceType
        <https://bugs.webkit.org/show_bug.cgi?id=192472>
        <rdar://problem/46532650>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._get_device_identifier_for_type): Comparing simctl device identifiers with DeviceTypes
        should be letter-case agnostic.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_lower_case_device_type):

2018-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView should match UITextView behavior when editing text with an RTL keyboard
        https://bugs.webkit.org/show_bug.cgi?id=187554
        <rdar://problem/42075638>

        Reviewed by Tim Horton.

        Add support for simulating the keyboard input mode in layout tests using UIScriptController, as well as a new
        `TestOption` to make the web view editable.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::overriddenKeyboardInputMode const):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::swizzleCurrentInputMode):
        (WTR::TestController::setKeyboardInputModeIdentifier):

        Swizzle out several `UIKeyboardInputModeController` methods in order to convince UIKit that the user has
        selected a `UIKeyboardInputMode` corresponding to the given identifier. The call to
        `-prepareKeyboardInputModeFromPreferences:` is also necessary on iOS 12 in order to update cached writing
        direction state in UIKit.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::setEditable):

2018-12-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Share ClassMethodSwizzler and InstanceMethodSwizzler between TestWebKitAPI and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=192437

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.h: Renamed from Tools/TestWebKitAPI/ClassMethodSwizzler.h.
        * TestRunnerShared/cocoa/ClassMethodSwizzler.mm: Renamed from Tools/TestWebKitAPI/ClassMethodSwizzler.mm.
        (ClassMethodSwizzler::ClassMethodSwizzler):
        (ClassMethodSwizzler::~ClassMethodSwizzler):
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.h: Renamed from Tools/TestWebKitAPI/cocoa/InstanceMethodSwizzler.h.
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.mm: Renamed from Tools/TestWebKitAPI/cocoa/InstanceMethodSwizzler.mm.
        (InstanceMethodSwizzler::InstanceMethodSwizzler):
        (InstanceMethodSwizzler::~InstanceMethodSwizzler):

        Move these swizzling helper classes into TestRunnerShared.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (safeBrowsingView):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):

        Remove namespacing around ClassMethodSwizzler and InstanceMethodSwizzler in a few API tests.

        * TestWebKitAPI/mac/TestFontOptions.mm:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::ClassMethodSwizzler::ClassMethodSwizzler): Deleted.
        (WTR::ClassMethodSwizzler::~ClassMethodSwizzler): Deleted.

        Remove this duplicate implementation of ClassMethodSwizzler in WebKitTestRunner.

2018-12-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Clean-up apple_additions
        https://bugs.webkit.org/show_bug.cgi?id=192413
        <rdar://problem/46493491>

        Reviewed by Lucas Forschler.

        After the addition of watchOS, some functions which were originally iOS specific were
        generalized to include all devices.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._driver_class): Replace iOS specific call with generalized device call.
        (IOSDevicePort.path_to_crash_logs): Ditto.
        (IOSDevicePort.clean_up_test_run): Ditto.

2018-12-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore case when comparing device types
        https://bugs.webkit.org/show_bug.cgi?id=192409
        <rdar://problem/46491558>

        Reviewed by Lucas Forschler.

        This allows DeviceTypes constructed with lowercase strings to correctly compare
        against DeviceTypes coming from the simulator runtime.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__eq__):
        (DeviceType.__contains__):
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_comparsion_lower_case):

2018-12-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Sort tests by associated device type
        https://bugs.webkit.org/show_bug.cgi?id=192161
        <rdar://problem/46345392>

        Reviewed by Lucas Forschler.

        Sort tests by device type and make an effort to run each specified device type.
        Do not run tests if their specified device is not available.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.is_watchos): Add watchos bits to platform info.
        (PlatformInfo._determine_os_name): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Assign each test a device type. Then, generate a list of
        device types to sequentially iterate through. Note that a test will run
        on the first device which matches.
        (Manager._end_test_run): Handle the case where no devices are available and no
        tests are run.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Manage child processes in manager.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.default_child_processes): Accept additional arguments.
        (Port.max_child_processes): Add upper limit for number of child processes.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort._device_type_with_version): Adds version to the DeviceType.
        (DevicePort.default_child_processes): Allows default_child_processes to be
        attached to a device type.
        (DevicePort.max_child_processes): Add upper limit to the maximum number of child processes.
        (DevicePort.setup_test_run): Use _device_type_with_version.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort.default_child_processes): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.default_child_processes): Deleted.
        (IOSSimulatorPort.check_sys_deps): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_child_processes): Accept additional arguments.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort):
        (WatchDevicePort.default_child_processes): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.default_child_processes): Deleted.
        (WatchSimulatorPort.check_sys_deps): Deleted.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.device_count_for_type): Count the number of devices
        available for a specific device type.

2018-12-05  Devin Rousso  <drousso@apple.com>

        Unreviewed, add myself to some watch lists.

        * Scripts/webkitpy/common/config/watchlist:

2018-12-05  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove the AppendPipeline state machine
        https://bugs.webkit.org/show_bug.cgi?id=192204

        Reviewed by Xabier Rodriguez-Calvar.

        Updated AbortableTaskQueue tests:

        Added test: AbortedBySyncTaskHandler.

        Renamed test: AbortDuringSyncTask -> AbortBeforeSyncTaskRun (in
        order to avoid confusion with the new test).

        Added checks for the correct destruction of response objects.

        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::FancyResponse::FancyResponse):
        (TestWebKitAPI::FancyResponse::~FancyResponse):
        (TestWebKitAPI::TEST):

2018-12-04  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.UseSessionCookiesAfterProcessSwapInPrivateBrowsing API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=192362

        Reviewed by Alex Christensen.

        Set the cookie policy to Accept to make sure the cookies are saved.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Update GLib
        https://bugs.webkit.org/show_bug.cgi?id=191222

        Reviewed by Žan Doberšek.

        When I try running API tests locally, they crash with:

        GLib-GIO-WARNING **: unknown schema extension 'd'

        We need to update our old glib to support the 'd' value type, otherwise schemas that may
        exist on the host using this type will cause instant crashes.

        Also, switch the GLib build to use meson. This requires updating meson as well.

        * gtk/jhbuild.modules:
        * gtk/patches/glib-cast-function-type.patch: Removed.
        * gtk/patches/glib-gtester-do-not-consider-skipped-tests-as-failures.patch: Removed.
        * wpe/jhbuild.modules:
        * wpe/patches/glib-cast-function-type.patch: Removed.
        * wpe/patches/glib-revert-wakeup-changes.patch: Removed.

2018-12-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Run BugzillaPatchFetcher periodically
        https://bugs.webkit.org/show_bug.cgi?id=192241

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py:
        * BuildSlaveSupport/ews-app/ews/apps.py:
        (EwsConfig.ready): This method is called by Django on startup.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop): Class which invokes BugzillaPatchFetcher every 60s.

2018-12-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support unicode in MeteredStream
        https://bugs.webkit.org/show_bug.cgi?id=192260

        Reviewed by Aakash Jain.

        It's possible that the test runner returns unicode characters to be logged when
        running layout tests.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Print message without attempting to encode/decode it.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_unicode):

2018-12-04  Keith Rollin  <krollin@apple.com>

        Update scripts for generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192081
        <rdar://problem/46312290>

        Reviewed by Brent Fulgham.

        The initial pass at generate-xcfilelists (a script for
        creating/updating the .xcfilelist files needed for various Generate
        Foo Source build phases in Xcode) only generated the .xcfilelist files
        that held the output files; it did not generate the list of input
        files. As well, for the sources generated by DerivedSources.make
        makefiles, the script accomplished this via the implementation of a
        convention in the makefile that allowed the printing of these output
        files when invoked with the 'print_all_generated_files' target. Use of
        this convention is inconvenient and error-prone.

        The script is now updated to address both of these issues. First, it
        generates for the input and output sets of files. Second, it does away
        with the convention in the DerivedSources.make makefiles and instead
        works from the dependency output information printed when `make` is
        invoked with --debug. This second part is implemented in the new
        script extract-dependencies-from-makefile.

        * Scripts/extract-dependencies-from-makefile: Added.
        (Parser):
        (Parser.__init__):
        (Parser.nextLine):
        (Parser.addTarget):
        (Parser.addPrereq):
        (Parser.doParse):
        (Parser.printInputs):
        (Parser.printOutputs):
        (parseArgs):
        (main):
        * Scripts/generate-xcfilelists:

2018-12-04  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add gtk-doc to WPE port. This patch tries to reuse as much code from
        WebKitGTK+ as possible.

        * gtkdoc/generate-gtkdoc: Renamed from Tools/gtk/generate-gtkdoc.
        (get_gtkdoc_module_paths): Add GDK and GTK only if building for GTK.
        (prepare_environment_for_gtkdoc_generation):
        (build_gtkdoc_for_wpe): Code to generate doc for WPE.
        (build_gtkdoc_for_wkgtk): Code to generate doc for WebKitGTK+. Moved from main.
        * gtkdoc/gtkdoc.py: Renamed from Tools/gtk/gtkdoc.py.
        (GTKDoc.__init__): Initialized required variables according to pylint.
        (GTKDoc.api_missing_documentation):
        * wpe/install-dependencies: Add gtkdoc dependency.

2018-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move URLSoup back to WebCore after r238771
        https://bugs.webkit.org/show_bug.cgi?id=192306

        Reviewed by Michael Catanzaro.

        Include GUniquePtrSoup from WebCore again.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:

2018-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump freetype, fontconfig, harfbuzz, cairo and icu in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=192310

        Reviewed by Michael Catanzaro.

        Update those dependencies to their latest stable versions.

        * gtk/jhbuild.modules:

2018-12-03  Tomas Popela  <tpopela@redhat.com>

        [GTK] Can't run MiniBrowser due to missing python2-yaml
        https://bugs.webkit.org/show_bug.cgi?id=192308

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2018-12-03  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Google OAuth is broken in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=192337
        <rdar://problem/46353558>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GetSessionCookie.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SetSessionCookie.html: Added.

2018-12-03  Chris Dumez  <cdumez@apple.com>

        [PSON] Request by the client to process-swap is ignored if the window has an opener
        https://bugs.webkit.org/show_bug.cgi?id=192267
        <rdar://problem/46386886>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-03  Keith Rollin  <krollin@apple.com>

        Add .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192082
        <rdar://problem/46312533>

        Reviewed by Brent Fulgham.

        Add .xcfilelist files for Generate Derived Sources and Generate
        Unified Sources build phases in Xcode. These are just being staged for
        now; they'll be added to the Xcode projects later.

        * DumpRenderTree/DerivedSources-input.xcfilelist: Added.
        * DumpRenderTree/DerivedSources-output.xcfilelist: Added.
        * WebKitTestRunner/DerivedSources-input.xcfilelist: Added.
        * WebKitTestRunner/DerivedSources-output.xcfilelist: Added.

2018-12-03  Alex Christensen  <achristensen@webkit.org>

        Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=192272

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm:
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]):
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]):

2018-12-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Unable to upload non-image files using drag and drop in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=192283
        <rdar://problem/46399461>

        Reviewed by Ryosuke Niwa.

        Add a new API test to check that an item provider which contains plain text data and a file URL (but is not
        marked as an attachment) is still treated as an attachment upon drop. Furthermore, verify that "text/uri-list"
        does not expose the actual file URL written to the item provider.

        Additionally, rebaseline an existing API test to remove an extraneous "text/uri-list" type that appears in
        `DataTransfer.types`, but whose data is inaccessible via `getData` anyways.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-12-01  Don Olmstead  <don.olmstead@sony.com>

        Cleanup WebKit Features
        https://bugs.webkit.org/show_bug.cgi?id=192262

        Reviewed by Michael Catanzaro.

        Removes obsolete ENABLE options and variable names. Syncs the option's
        descriptions with what is present in WebKitFeatures.cmake. Sorts the
        options based on the associated define.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-01  Chris Dumez  <cdumez@apple.com>

        [PSON] process-swapping may occur even though opener has handle to openee
        https://bugs.webkit.org/show_bug.cgi?id=192277

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-01  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r238764.

        Breaks existing layout tests

        Reverted changeset:

        "webkitpy: Support unicode in MeteredStream"
        https://bugs.webkit.org/show_bug.cgi?id=192260
        https://trac.webkit.org/changeset/238764

2018-12-01  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Move URL tests from TestWebKitAPI to TestWTF
        https://bugs.webkit.org/show_bug.cgi?id=192275

        Reviewed by Keith Miller.

        Since URL is moved from WebCore to WTF, we also move tests for them from TestWebKitAPI (TestWebCore) to TestWTF.
        But we still have some tests in TestWebCore since only WebCore implements TextEncoding. That part is now decoupled
        from URLParser tests and new URLParserTextEncoding.cpp is created.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/URL.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/URL.cpp.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/URLParser.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp: Added.
        (TestWebKitAPI::ExpectedParts::isInvalid const):
        (TestWebKitAPI::eq):
        (TestWebKitAPI::insertTabAtLocation):
        (TestWebKitAPI::invalidParts):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        Unreviewed LFC passing test list update.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Move URL from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=190234

        Reviewed by Keith Miller.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::createURL):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::originalDataAsString):
        (TestWebKitAPI::userVisibleString):
        (TestWebKitAPI::literalURL):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        (literalURL):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        * TestWebKitAPI/Tests/mac/SSLKeyGenerator.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createURLForResource):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WTFURL_SummaryProvider):
        (WTFURLProvider):
        (WebCoreURL_SummaryProvider): Deleted.
        (WebCoreURLProvider): Deleted.
        (WebCoreURLProvider.__init__): Deleted.
        (WebCoreURLProvider.to_string): Deleted.

2018-11-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support unicode in MeteredStream
        https://bugs.webkit.org/show_bug.cgi?id=192260

        Reviewed by Stephanie Lewis.

        It's possible that the test runner returns unicode characters to be logged when
        running layout tests.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Message written to metered stream should be unicode.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_unicode):

2018-11-30  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r238749): run-api-tests dies with AttributeError: 'IOSSimulatorPort' object has no attribute 'DEFAULT_DEVICE_CLASS'
        https://bugs.webkit.org/show_bug.cgi?id=192257
        <rdar://problem/46384671>

        Reviewed by Stephanie Lewis.

        Follow-up fix for r238749.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Use DEFAULT_DEVICE_TYPE instead of DEFAULT_DEVICE_CLASS.

2018-11-30  Chris Dumez  <cdumez@apple.com>

        [PSON] We are sometimes swapping processes even though there is an opened window with an opener link to us
        https://bugs.webkit.org/show_bug.cgi?id=192242

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-30  Don Olmstead  <don.olmstead@sony.com>

        Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=192197

        Reviewed by Jiewen Tan.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-30  Dean Jackson  <dino@apple.com>

        Add first-class support for .mjs files in jsc binary
        https://bugs.webkit.org/show_bug.cgi?id=192190
        <rdar://problem/46375715>

        Reviewed by Keith Miller.

        Add .mjs files to the regexp looking for all JS files.

        * Scripts/run-jsc-stress-tests:

2018-11-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use DeviceType instead of str to represent device class
        https://bugs.webkit.org/show_bug.cgi?id=192160
        <rdar://problem/46344845>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._custom_device_for_test): Use DeviceTypes instead of strings to represent device type.
        (Manager._set_up_run): Do not set _options.device_class, use device_type instead of device_class.
        (Manager.run): Use device_type instead of device_class.
        (Manager._print_expectations_for_subset): Ditto.
        (Manager.print_expectations): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_uses_custom_device): Use DeviceType and actual device definition.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_workers_and_shards): Outputting the device suffix doesn't really help, and means
        device type needs to be passed around.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.setup_test_run): Receive device_type as DeviceType object.
        (DevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort):
        (IOSSimulatorPort.__init__): Deleted.
        (IOSSimulatorPort._set_device_class): Deleted.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch.py:
        (WatchPort):
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort):
        (WatchSimulatorPort.__init__): Deleted.
        (WatchSimulatorPort._set_device_class): Deleted.
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type): Using the existing devices for this is
        a problem if no such device exists yet. Use the _device_identifier_to_name dictionary instead
        since this should have hardware types in the device names.

2018-11-30  David Quesada  <david_quesada@apple.com>

        -[WKProcessPool _downloadURLRequest:] should allow specifying the initiating web view
        https://bugs.webkit.org/show_bug.cgi?id=192212
        rdar://problem/46363706

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Compute min/maxHeight margins only when they are needed.
        https://bugs.webkit.org/show_bug.cgi?id=192223

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Do not use computed display box values for border and padding
        https://bugs.webkit.org/show_bug.cgi?id=192214

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-30  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][MiniBrowser] Handle Device Info permission requests
        https://bugs.webkit.org/show_bug.cgi?id=191585

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserTab.c:
        (permissionRequestDataNew):
        (permissionRequestDataFree):
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (browserTabConstructed):

2018-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK+ gardening. Stop running tests without complex text enforced

        We have enforced complex text in GTK+ for one release cycle without noticing any major issue nor performance
        regression.

        * WebKitTestRunner/gtk/main.cpp:
        (main):

2018-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r238635): Dragging a text selection within WKWebView causes the selection highlight to get into a bad state
        https://bugs.webkit.org/show_bug.cgi?id=192165
        <rdar://problem/46346682>

        Reviewed by Daniel Bates.

        Fixes 11 API tests that started failing or timing out after r238635. See below for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::webViewForEditActionTestingWithPageNamed):

        Ensure that the web view becomes first responder before executing edit actions.

        * TestWebKitAPI/Tests/WebKitCocoa/autofocus-contenteditable.html:
        * TestWebKitAPI/Tests/WebKitCocoa/contenteditable-and-textarea.html:

        Tweak these tests to allow selected content to overflow the width of the web view. Without this change,
        ContentEditableToContentEditable and ContentEditableToTextarea will sometimes fail because the content causes
        the body to scroll horizontally, so we miss the drop destination.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (loadTestPageAndEnsureInputSession):

        Add a new helper to load a test page with a given name, become first responder, and wait until an input session
        starts. Use this in various drag and drop tests to reduce code duplication.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):

        To more accurately emulate UIKit behavior, begin focus preservation when starting a drag, and attempt to clear
        the focus preservation token when the drag session ends. This allows us to simulate and test the scenario that
        regressed with r238635.

        (-[DragAndDropSimulator ensureInputSession]):
        (-[DragAndDropSimulator _webView:didStartInputSession:]):
        (-[DragAndDropSimulator waitForInputSession]): Deleted.

        Refactored into -ensureInputSession. Instead of assuming that an input session has not yet been started, simply
        wait for an input session to start if needed.

        * TestWebKitAPI/ios/UIKitSPI.h:

        Add a new SPI declaration.

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Inform clients when editable image attachment backing data changes
        https://bugs.webkit.org/show_bug.cgi?id=192206
        <rdar://problem/46350277>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[AttachmentUpdateObserver init]):
        (-[AttachmentUpdateObserver dataInvalidated]):
        (-[AttachmentUpdateObserver _webView:didInvalidateDataForAttachment:]):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::expectAttachmentInvalidation):
        (webViewForTestingAttachments):
        (TestWebKitAPI::forEachViewInHierarchy):
        (TestWebKitAPI::findEditableImageCanvas):
        (TestWebKitAPI::drawSquareInEditableImage):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/PencilKitTestSPI.h: Added.
        Add a test ensuring that we get an invalidation callback when an editable image is changed.

2018-11-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238445)[Buildbot] Unknown builder 'GTK Linux 32-bit Release' in scheduler 'trunk'
        https://bugs.webkit.org/show_bug.cgi?id=192143

        Reviewed by Philippe Normand.

        Buildbot can't start since r238445.

        > Configuration Errors:
        >   Unknown builder 'GTK Linux 32-bit Release' in scheduler 'trunk'
        >   Unknown builder 'GTK Linux ARM Release' in scheduler 'trunk'

        * BuildSlaveSupport/build.webkit.org-config/config.json: Removed deprecated builders.

2018-11-29  David Quesada  <david_quesada@apple.com>

        Add SPI to publish NSProgress on active downloads
        https://bugs.webkit.org/show_bug.cgi?id=192021
        rdar://problem/44405661

        Reviewed by Alex Christensen.

        Add API tests to exercise the progress-publishing functionality in a variety of scenarios.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm: Added.
        (+[DownloadProgressTestProtocol registerProtocolForTestRunner:]):
        (+[DownloadProgressTestProtocol unregisterProtocol]):
        (+[DownloadProgressTestProtocol canInitWithRequest:]):
        (+[DownloadProgressTestProtocol canonicalRequestForRequest:]):
        (+[DownloadProgressTestProtocol requestIsCacheEquivalent:toRequest:]):
        (-[DownloadProgressTestProtocol startLoading]):
        (-[DownloadProgressTestProtocol stopLoading]):
        (-[DownloadProgressTestRunner init]):
        (-[DownloadProgressTestRunner startLoadingWithProtocol:]):
        (-[DownloadProgressTestRunner tearDown]):
        (-[DownloadProgressTestRunner _didGetProgress:]):
        (-[DownloadProgressTestRunner _didLoseProgress]):
        (-[DownloadProgressTestRunner subscribeAndWaitForProgress]):
        (-[DownloadProgressTestRunner waitToLoseProgress]):
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):
        (-[DownloadProgressTestRunner publishProgress]):
        (-[DownloadProgressTestRunner receiveData:]):
        (-[DownloadProgressTestRunner finishDownloadTask]):
        (-[DownloadProgressTestRunner failDownloadTask]):
        (-[DownloadProgressTestRunner waitForDownloadDidCreateDestination]):
        (-[DownloadProgressTestRunner waitForDownloadFinished]):
        (-[DownloadProgressTestRunner waitForDownloadCanceled]):
        (-[DownloadProgressTestRunner waitForDownloadFailed]):
        (-[DownloadProgressTestRunner waitForUpdatedCompletedUnitCount]):
        (-[DownloadProgressTestRunner observeValueForKeyPath:ofObject:change:context:]):
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DownloadProgressTestRunner _downloadDidStart:]):
        (-[DownloadProgressTestRunner _download:didCreateDestination:]):
        (-[DownloadProgressTestRunner _downloadDidFinish:]):
        (-[DownloadProgressTestRunner _downloadDidCancel:]):
        (-[DownloadProgressTestRunner _download:didFailWithError:]):
        (-[DownloadProgressTestRunner _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (TEST):

2018-11-29  Alexey Proskuryakov  <ap@apple.com>

        Exception in bot watcher's dashboard if a hidden platform in no longer configured for display
        https://bugs.webkit.org/show_bug.cgi?id=185527

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (updateHiddenPlatforms):

2018-11-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Body and html height stretching.
        https://bugs.webkit.org/show_bug.cgi?id=192154

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Unify device creation
        https://bugs.webkit.org/show_bug.cgi?id=192158
        <rdar://problem/46344757>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.setup_test_run): Use DEVICE_MANAGER to create devices based on the specified device class.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Add DEFAULT_DEVICE_CLASS.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Deleted.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort): Add DEFAULT_DEVICE_CLASS.
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort):
        (WatchDevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort._create_devices): Deleted.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_from_string): Test that DeviceTypes without hardware types can be constructed
        from strings.

2018-11-29  Jonathan Bedard  <jbedard@apple.com>

        EWS iOS-sim bots sometimes fails to shutdown simulator
        https://bugs.webkit.org/show_bug.cgi?id=191864

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice._shut_down): Increase time to wait for simulated device to
        shut down, ignore exit code indicating a device is already shut down.

2018-11-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Unify ios_version/watchos_version code
        https://bugs.webkit.org/show_bug.cgi?id=192153
        <rdar://problem/46343642>

        Reviewed by Lucas Forschler.

        Treating watchOS and iOS versions differently makes it harder to share code between the similar ports.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.device_version): Added.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Use device_version() instead of ios_version().
        (IOSPort.ios_version): Deleted.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.device_version): Renamed from ios_version().
        (IOSDevicePort.ios_version): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.device_version): Renamed from ios_version().
        (IOSSimulatorPort.default_child_processes.booted_ios_devices_filter): Use device_version() instead of ios_version().
        (IOSSimulatorPort._create_devices): Ditto.
        (IOSSimulatorPort.check_sys_deps): Ditto.
        (IOSSimulatorPort.ios_version): Deleted.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort.default_baseline_search_path): Use device_version() instead of watchos_version().
        (WatchPort.watchos_version): Deleted.
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.device_version): Renamed from watchos_version().
        (WatchDevicePort.watchos_version): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.device_version): Renamed from watchos_version().
        (WatchSimulatorPort.default_child_processes.filter_booted_watchos_devices): Use device_version() instead of watchos_version().
        (WatchSimulatorPort._create_devices): Ditto.
        (WatchSimulatorPort.check_sys_deps): Ditto.
        (WatchSimulatorPort.watchos_version): Deleted.

2018-11-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOSMac] Dropping text selections from web content into editable elements crashes the web process
        https://bugs.webkit.org/show_bug.cgi?id=192113
        <rdar://problem/46323701>

        Reviewed by Ryosuke Niwa.

        Add a test to verify that, when dropping an item with both "com.apple.webarchive" and "public.utf8-plain-text"
        representations, the higher fidelity web archive data is used when handling the drop.

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Fetch bugs from Bugzilla and submit to Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191947

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py: Added.

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API test after r238585
        https://bugs.webkit.org/show_bug.cgi?id=192022

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        On iOS, a safe browsing warning over a WKWebView with frame of {0, 0, 0, 0} has a size of {0, 0}, which is fine.
        The test was added to catch a bug on Mac platforms, so testing it only on Mac will catch any regression.

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Configure python logging
        https://bugs.webkit.org/show_bug.cgi?id=192005

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py: Configured logging.

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192031
        <rdar://problem/46286816>

        Reviewed by Alex Christensen.

        The Generate Derived Sources and Generate Unified Sources build phases
        in Xcode need to have their inputs and outputs specified. This
        specification will come in the form of .xcfilelist files that will be
        attached to these build phases. There is one .xcfilelist file that
        lists the input file and one that lists the output files. As part of
        this work, the various generate-{derived,unified}-sources scripts that
        are executed in these Generate build phases are modified to help in
        the creation of these .xcfilelist files. In particular, they can now
        be invoked with command-line parameters. These parameters are then
        used to alter the normal execution of these scripts, causing them to
        produce the .xcfilelist files as opposed to actually generating the
        files that are listed in those files.

        * DumpRenderTree/Scripts/generate-derived-sources.sh:
        * WebKitTestRunner/Scripts/generate-derived-sources.sh:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Revert print_all_generated_files work in r238008; tighten up target specifications
        https://bugs.webkit.org/show_bug.cgi?id=192025
        <rdar://problem/46284301>

        Reviewed by Alex Christensen.

        In r238008, I added a facility for DerivedSources.make makefiles to
        print out the list of files that they generate. This output was used
        in the generation of .xcfilelist files used to specify the output of
        the associated Generate Derived Sources build phases in Xcode. This
        approach worked, but it meant that people would need to follow a
        specific convention to keep this mechanism working.

        Instead of continuing this approach, I'm going to implement a new
        facility based on the output of `make` when passed the -d flag (which
        prints dependency information). This new mechanism is completely
        automatic and doesn't need maintainers to follow a convention. To that
        end, remove most of the work performed in r238008 that supports the
        print_all_generated_files target.

        At the same time, it's important for the sets of targets and their
        dependencies to be complete and correct. Therefore, also include
        changes to bring those up-to-date. As part of that, you'll see
        prevalent use of a particular technique. Here's an example:

            BYTECODE_FILES = \
                Bytecodes.h \
                BytecodeIndices.h \
                BytecodeStructs.h \
                InitBytecodes.asm \
            #
            BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))

            all : $(BYTECODE_FILES)

            $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
                ...

        These lines indicate a set of generated files (those specified in
        BYTECODE_FILES). These files are generated by the BytecodeList.rb
        tool. But, as opposed to the normal rule where a single foo.output is
        generated by foo.input plus some additional dependencies, this rule
        produces multiple output files from a tool whose connection to the
        output files is not immediately clear. A special approach is needed
        where a single rule produces multiple output files. The normal way to
        implement this is to use an .INTERMEDIATE target. However, we used
        this approach in the past and ran into a problem with it, addressing
        it with an alternate approach in r210507. The above example shows this
        approach. The .'s in the list of target files are replaced with %'s,
        and the result is used as the left side of the dependency rule.

        * DumpRenderTree/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.make:

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to get list of Bugzilla patches needing review
        https://bugs.webkit.org/show_bug.cgi?id=191942

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla.get_list_of_patches_needing_reviews): Get list of patches needing review.
        (BugzillaBeautifulSoup.fetch_attachment_ids_from_review_queue): Copied from Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py
        (BugzillaBeautifulSoup._load_query): Ditto.
        (BugzillaBeautifulSoup._parse_attachment_ids_request_query): Ditto.

2018-11-28  Daniel Bates  <dabates@apple.com>

        [iOS] Page not defocused when Find-in-page becomes first responder
        https://bugs.webkit.org/show_bug.cgi?id=192084
        <rdar://problem/46146777>

        Reviewed by Tim Horton.

        Add tests for both Mac and iOS to ensure that when finding a string on the page
        that we do not start an input session if a match is found in an <input> and the
        WKWebView is not the first responder.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm: Added.
        (-[WKWebViewFindStringInputDelegate _webView:didStartInputSession:]):
        (-[WKWebViewFindStringFindDelegate findString]):
        (-[WKWebViewFindStringFindDelegate _webView:didCountMatches:forString:]):
        (-[WKWebViewFindStringFindDelegate _webView:didFindMatches:forString:withMatchIndex:]):
        (-[WKWebViewFindStringFindDelegate _webView:didFailToFindString:]):
        (returnNo):
        (returnYes):
        (viewIsFirstResponder):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView): Make the view the first responder before the
        window key. This matches the ordering used in PlatformWebView::focus(). No behavior change.

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add BeautifulSoup
        https://bugs.webkit.org/show_bug.cgi?id=191994

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/thirdparty: Added.
        * BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py: Added.
        * BuildSlaveSupport/ews-app/ews/thirdparty/__init__.py: Added.

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to download Patch from Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=191943

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py: Added.
        (Bugzilla.retrieve_attachment): Retreives the attachment from Bugzilla and saves to disk.
        (Bugzilla._fetch_attachment_json):
        (Bugzilla.file_path_for_patch):
        * BuildSlaveSupport/ews-app/ews/common/util.py: Added.
        (fetch_data_from_url): Method to fetch data from given url.
        * BuildSlaveSupport/ews-app/ews/config.py:

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add methods to update Patch fields
        https://bugs.webkit.org/show_bug.cgi?id=191931

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.set_sent_to_buildbot):
        (Patch.set_bug_id):
        (Patch.set_obsolete):

2018-11-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Allow WebKit clients to specify a minimum effective width for layout.
        https://bugs.webkit.org/show_bug.cgi?id=191499
        <rdar://problem/45362678>

        Reviewed by Wenson Hsieh.

        Allow UIScriptController to set WKWebView's minimum effective width with a new `setMinimumEffectiveWidth` method.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setViewScale):
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

2018-11-28  Lucas Forschler  <lforschler@apple.com>

        Fix webkitbot hi command.
        https://bugs.webkit.org/show_bug.cgi?id=192080

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2018-11-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
        https://bugs.webkit.org/show_bug.cgi?id=192078

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for quirk container's collapsing top margin in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=192070

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [WebRTC][GStreamer] Make sure to have the default microphone on the top of the list
        https://bugs.webkit.org/show_bug.cgi?id=192026

        Reviewed by Philippe Normand.

        Otherwise we might end up picking a useless one in some applications
        (not sure what those application do though).

        GStreamer patch proposed as https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/merge_requests/34/diffs

        * flatpak/org.webkit.CommonModules.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0014-pulse-Mark-default-devices-as-default.patch: Added.

2018-11-28  Tomas Popela  <tpopela@redhat.com>

        [GTK] Silence compilation warnings in glib unittests
        https://bugs.webkit.org/show_bug.cgi?id=192009

        Reviewed by Michael Catanzaro.

        Mark the destructor as virtual.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::~Test):

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
        https://bugs.webkit.org/show_bug.cgi?id=192055
        <rdar://problem/46288783>

        Reviewed by Saam Barati.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Make synchronous IPC introduced in r237267 asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=190757

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-27  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add watchOS ports
        https://bugs.webkit.org/show_bug.cgi?id=191974
        <rdar://problem/46251051>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/factory.py:
        (PortFactory): Add WatchDevice and WatchSimulator ports.
        * Scripts/webkitpy/port/watch.py: Added.
        (WatchPort): Base class for watchOS ports.
        * Scripts/webkitpy/port/watch_device.py: Added.
        (WatchDevicePort): Class for running layout tests on a watchOS device.
        * Scripts/webkitpy/port/watch_simulator.py: Added.
        (WatchSimulatorPort): Class for running layout tests on a watchOS simulator.
        * Scripts/webkitpy/port/watch_simulator_unittest.py: Added.
        (WatchSimulatorTest):
        * Scripts/webkitpy/port/watch_testcase.py: Added.
        (WatchTest):

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning text needs to be visible on High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=192022

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):

2018-11-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the watchOS engineering build

        Disable a newly added API test, since DDScannerResult is unavailable on watchOS.

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:

2018-11-27  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) crash under WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame()
        https://bugs.webkit.org/show_bug.cgi?id=191983
        <rdar://problem/46246863>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to communicate with Buildbot (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191935
        <rdar://problem/46262314>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.send_patch_to_buildbot):

2018-11-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] No way for clients to tell whether the content view is in the responder chain when the web view is
        https://bugs.webkit.org/show_bug.cgi?id=169212
        <rdar://problem/30899656>

        Reviewed by Tim Horton.

        Add an API test to exercise the behavior of `-_contentViewIsFirstResponder` when an embedded text input becomes
        and resigns first responder.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFirstResponderTests.mm: Added.
        (-[FirstResponderTestingView initWithFrame:]):
        (-[FirstResponderTestingView inputField]):
        (TestWebKitAPI::TEST):

2018-11-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Remove ENABLE_ACCESSIBILITY CMake variable
        https://bugs.webkit.org/show_bug.cgi?id=191831

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/CMakeLists.txt:

2018-11-26  Tim Horton  <timothy_horton@apple.com>

        Insert <attachment> elements under editable images to make their backing data accessible
        https://bugs.webkit.org/show_bug.cgi?id=191844
        <rdar://problem/30900149>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::attachmentInfo):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::attachmentInfo):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::attachmentInfo):
        Add a UIScriptController mechanism to retrieve information about
        a given attachment.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to communicate with Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191935

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/__init__.py: Added.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py: Added.

2018-11-26  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Race condition in ServerProcess tests
        https://bugs.webkit.org/show_bug.cgi?id=191989
        <rdar://problem/45536844>

        Reviewed by Lucas Forschler.

        Serializing these tests to prevent the race conditions.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.serial_test_basic):
        (TestServerProcess.serial_test_read_after_process_exits):
        (TestServerProcess.serial_test_process_crashing):
        (TestServerProcess.serial_test_process_crashing_no_data):
        (TestServerProcess.test_basic): Deleted.
        (TestServerProcess.test_read_after_process_exits): Deleted.
        (TestServerProcess.test_process_crashing): Deleted.
        (TestServerProcess.test_process_crashing_no_data): Deleted.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add field in Patch object to indicate if it has been sent to Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191929

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch): Added sent_to_buildbot field.
        (Patch.is_patch_sent_to_buildbot): Checks if the patch has been sent to Buildbot.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add a config file
        https://bugs.webkit.org/show_bug.cgi?id=191933

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py: Added.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add methods to save patch to database
        https://bugs.webkit.org/show_bug.cgi?id=191928

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch): Method to save the patch to database.
        (Patch.save_patches): Method to save multiple patches to database.
        (Patch.is_valid_patch_id): Checks if the patch id is valid.
        (Patch.is_existing_patch_id): Checks if the patch id already exists in database.

2018-11-26  Alex Christensen  <achristensen@webkit.org>

        Rename WKWebView._safeBrowsingWarningForTesting to _safeBrowsingWarning to use it for more than testing
        https://bugs.webkit.org/show_bug.cgi?id=191981

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):

2018-11-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r237738): Command Down Arrow doesn't scroll to the end of a page anymore
        https://bugs.webkit.org/show_bug.cgi?id=191967
        <rdar://problem/45976390>

        Reviewed by Tim Horton.

        Add more test infrastructure to dispatch key up events.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (createHIDKeyEvent): Renamed from createHIDKeyDownEvent() and modified to take a boolean as
        to whether to create an event for a key down or key up.
        (createHIDKeyDownEvent): Deleted; renamed to createHIDKeyEvent().
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::createUIPhysicalKeyboardEvent): Added. Convenience function to create a UIPhysicalKeyboardEvent.
        (WTR::UIScriptController::keyDown): Modified to dispatch a key up event in addition to dispatching
        a key down event.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set Foreign Keys in EWS Django app models
        https://bugs.webkit.org/show_bug.cgi?id=191790

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/builds.py: Set Foreign Key.
        * BuildSlaveSupport/ews-app/ews/models/steps.py: Ditto.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Do not store patch content in database
        https://bugs.webkit.org/show_bug.cgi?id=191788

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py: Removed content field.

2018-11-26  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Retry app installation on watchOS simulators (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191769
        <rdar://problem/46139850>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice): Increase retry attempts.

2018-11-26  Daniel Bates  <dabates@apple.com>

        Move testRunner.toggleCapsLock() to uiController
        https://bugs.webkit.org/show_bug.cgi?id=191972

        Reviewed by Tim Horton.

        Move testRunner.toggleCapsLock() to uiController as uiController is the preferred JavaScript
        object for UI test functions. Having this functionality be on uiController makes it an
        asynchronous function naturally and complements use of onkeydown, onkeyup listeners to know
        when the Caps Lock key event is dispatched. It also facilitates its use directly as part of
        scripts with other uiController functions invocations that are passed in a single invocation
        of testRunner.runUIScript().

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::toggleCapsLock):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::toggleCapsLock):
        Added stub functions that invoke the callback. We do not support toggling caps lock in Legacy
        WebKit at the moment. Legacy WebKit reads the caps lock key state directly from the OS. Modern
        WebKit caches the caps lock state in the WebProcess as a natural side effect of the fact that
        the UIProcess is the only process capable of querying the caps lock key state from the OS and
        hence the UIProcess must send over this state to the WebProcess.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: Add IDL for new function.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::toggleCapsLock): Added empty implementation for ports non-Cocoa ports.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::toggleCapsLock): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::toggleCapsLock): Deleted; moved to UIScriptController::toggleCapsLock().
        Removed logic to handle testRunner.toggleCapsLock().

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::toggleCapsLock): Add stub function that invokes the callback
        and a FIXME comment that explains that we will implement this function in <https://bugs.webkit.org/show_bug.cgi?id=191815>.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::toggleCapsLock): Moved the implementation from TestController::toggleCapsLock().

2018-11-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Reduce the use of WKSI library calls: CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=191777
        <rdar://problem/46140542>

        Reviewed by Zalan Bujtas.

        Update the Windows build of WebKit to refer to the SPI headers, rather than WebKitSystemInterface.
        Move a small amount of glue code from WKSI to WebCore, and remove any includes or link
        directives for WebKitSystemInterface.lib.

        * TestWebKitAPI/PlatformWin.cmake:

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use float box's margin box to adjust the line constraints.
        https://bugs.webkit.org/show_bug.cgi?id=191961

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-25  Zalan Bujtas  <zalan@apple.com>

        Unreviewed test fix after r238467.

        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::TEST):

2018-11-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal iOS 12 build after r238471

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        (TEST):

2018-11-25  Tim Horton  <timothy_horton@apple.com>

        Make it possible to insert editable images with a gesture
        https://bugs.webkit.org/show_bug.cgi?id=191937

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        If the canvas already has a drawing, draw a new stroke on top of it
        instead of removing the existing stroke.

2018-11-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add WKWebView SPI to trigger and remove data detection
        https://bugs.webkit.org/show_bug.cgi?id=191918
        <rdar://problem/36185051>

        Reviewed by Tim Horton.

        Add an API test to exercise the new WebKit SPI.

        * TestWebKitAPI/DataDetectorsCoreSPI.h: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        (-[WKWebView synchronouslyDetectDataWithTypes:]):
        (-[WKWebView synchronouslyRemoveDataDetectedLinks]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        (-[TestWKWebView tagsInBody]): Deleted.
        (-[TestWKWebView expectElementTagsInOrder:]): Deleted.
        (-[TestWKWebView expectElementCount:tagName:]): Deleted.
        (-[TestWKWebView expectElementTag:toComeBefore:]): Deleted.

        Rename this from `-expectElementCount:tagName:` to `-expectElementCount:querySelector:`.

        * TestWebKitAPI/Tests/WebKitCocoa/data-detectors.html: Added.

        Add a new test page containing some content that can be data detected.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView tagsInBody]):
        (-[WKWebView expectElementTagsInOrder:]):
        (-[WKWebView expectElementCount:querySelector:]):
        (-[WKWebView expectElementTag:toComeBefore:]):

        Move some testing helper functions from WKAttachmentTests to a testing category on WKWebView. This allows us to
        use `-expectElementCount:querySelector:` in tests outside of WKAttachmentTests.

        (-[WKWebView objectByEvaluatingJavaScript:]):
        (-[WKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
        (-[WKWebView stringByEvaluatingJavaScript:]):

        Move some common helper functions from TestWKWebView to a testing category on WKWebView.

        (-[TestWKWebView objectByEvaluatingJavaScript:]): Deleted.
        (-[TestWKWebView objectByEvaluatingJavaScriptWithUserGesture:]): Deleted.
        (-[TestWKWebView stringByEvaluatingJavaScript:]): Deleted.

2018-11-23  Sam Weinig  <sam@webkit.org>

        Add raw pointer overloads to ListHashSet via SmartPtr specialized functions
        https://bugs.webkit.org/show_bug.cgi?id=191936

        Reviewed by Zalan Bujtas.

        Adds tests for raw pointer overloads in ListHashSet.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:

2018-11-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable drag and drop support for iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=191818
        <rdar://problem/43907454>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for variable height runs.
        https://bugs.webkit.org/show_bug.cgi?id=191925

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-23  Alberto Garcia  <berto@igalia.com>

        [GTK] [WPE] Tools/Platform{GTK,WPE}.cmake files missing from the tarballs
        https://bugs.webkit.org/show_bug.cgi?id=191923

        Add Tools/PlatformGTK.cmake and Tools/PlatformWPE.cmake to their
        respective tarballs.

        Reviewed by Carlos Garcia Campos.

        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:

2018-11-22  Chris Dumez  <cdumez@apple.com>

        Regression(r238353) Load sometimes hangs when navigating back after a cross-site navigation
        https://bugs.webkit.org/show_bug.cgi?id=191914

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Offset formatting context root runs with horizontal margins.
        https://bugs.webkit.org/show_bug.cgi?id=191900

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-22  Philippe Normand  <pnormand@igalia.com>

        [GTK] Remove unmaintained bots
        https://bugs.webkit.org/show_bug.cgi?id=191467

        Reviewed by Alex Christensen.

        The Linux 32-bits and ARM build-slaves are no longer maintained
        and have been failing for months, so get rid of them.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2018-11-22  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Do not disable signals when running "usual" commands
        https://bugs.webkit.org/show_bug.cgi?id=190679

        Reviewed by Philippe Normand.

        Otherwise <ctr>c doesn't work while compiling. It is not the best fix
        as there are cases we want to let only children receive signals, but
        it is not clear how to determine when (when running gdb, we still
        disable those).

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2018-11-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WebKit2] Add support for replacing find-in-page text matches
        https://bugs.webkit.org/show_bug.cgi?id=191786
        <rdar://problem/45813871>

        Reviewed by Ryosuke Niwa.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController setFindBarView:]):

        Fix a bug in MiniBrowser that prevents AppKit from displaying the "All" button in the find bar after checking
        the "Replace" option.

        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:

        Add an API test to exercise find-and-replace API using WKWebView.

        (replaceMatches):
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::findOptionsFromArray):
        (WTR::TestRunner::findString):
        (WTR::TestRunner::findStringMatchesInPage):
        (WTR::TestRunner::replaceFindMatchesAtIndices):

        Add TestRunner hooks to simulate find-in-page and replace.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Horizontal margins should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191894

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Border should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191891

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Take nonBreakableStart/End into use.
        https://bugs.webkit.org/show_bug.cgi?id=191873

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-20  Jeff Miller  <jeffm@apple.com>

        Return nullptr immediately if the key doesn't exist in the HashMap.
        https://bugs.webkit.org/show_bug.cgi?id=191841

        Reviewed by Chris Dumez.
        
        Add a test that would crash prior to the fix for this bug.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKNSDictionaryEmptyDictionaryCrash.mm: Added.
        (TestWebKitAPI::TEST):

2018-11-19  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable JIT in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=191822
        <rdar://problem/28119360>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DisableJIT.mm: Added.
        (TEST):

2018-11-19  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for CertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=191647

        Reviewed by Alex Christensen.

        Added test for new WKCertificateInfo API.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp: Added.
        (TestWebKitAPI::Curl::makeCertificateInfo):
        (TestWebKitAPI::Curl::isSamePEM):
        (TestWebKitAPI::Curl::TEST):

2018-11-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal iOS debug build after r238380

        UICalloutBar should only be declared when the public (non-internal) SDK is used to build WebKit; otherwise, we
        end up with duplicate declarations of UICalloutBar.

        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-19  David Quesada  <david_quesada@apple.com>

        EXC_BAD_ACCESS when invoking a DownloadProxy's destination decision handler after the download has been canceled
        https://bugs.webkit.org/show_bug.cgi?id=191762
        rdar://problem/46151509

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
            Enable the Download API test on iOS, since the platform supports downloads. All the
            tests pass already, except for one which was written using AppKit-specific code:
        TEST(_WKDownload, RedirectedDownload):
            Use a more platform-agnostic approach to starting the download in this API test.
            Instead of manually triggering an NSMenu item to download a file from a link, the
            test will simulate a user-initiated click on the link, and the navigation delegate
            will direct the web view to start a download based on the link's navigation action.
            Additionally, remove the manual creation of a new NSWindow. TestWKWebView makes its
            own UI/NSWindow.
        TEST(_WKDownload, DownloadCanceledWhileDecidingDestination):
            Add an API test _WKDownload.DownloadCanceledWhileDecidingDestination to simulate the
            conditions that would trigger this crash - handling a download's -decideDestination…
            delegate call by canceling the download, waiting for the UI process to be notified
            that the download has been canceled, and calling the decision handler. This should
            not crash.
        (-[CancelDownloadWhileDecidingDestinationDelegate _downloadDidFinish:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _download:didFailWithError:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _downloadDidCancel:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
            Add a user-initated version of -objectByEvaluatingJavaScript:. This is needed in
            order to maintain the behavior of the RedirectedDownload test, which verifies the
            state of the _WKDownload.wasUserInitiated property.

2018-11-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS Debug] Assertion failure in NSComparisonResult UIContentSizeCategoryCompareToCategory()
        https://bugs.webkit.org/show_bug.cgi?id=190401
        <rdar://problem/45195285>

        Reviewed by Dean Jackson.

        Work around sporadic UIKit assertions when running API tests that may present a UICalloutBar. Currently, UIKit
        asks for the `UIApp`’s `-preferredContentSizeCategory` when showing or laying out the callout bar. However,
        TestWebKitAPI lacks a UIApp altogether, and forcing one to be initialized via `UIApplicationInstantiateSingleton`
        causes numerous other UIKit and WebKit assertions to be hit.

        In lieu of TestWebKitAPI becoming a real UI application (see https://webkit.org/b/175204), simply don't allow
        the callout bar to be initialized in TestWKWebView-based API tests. This encompasses all API tests which
        have some chance of causing the callout bar to be shown by making a ranged text selections during the test.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (suppressUICalloutBar):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238016)[GTK][TestWebKitAPI][Ninja] TestJSC can't compile "Bytecodes.h: No such file or directory"
        https://bugs.webkit.org/show_bug.cgi?id=191692

        Reviewed by Michael Catanzaro.

        r238016 added a new #include, and requires JSC's derived headers
        to be copied into the forwarding header directory.

        WEBKIT_MAKE_FORWARDING_HEADERS is using POST_BUILD event to copy
        derived headers to the forwarding header directory. This is done
        after linking JSC library.

        GTK port has TestJSC which has a dependency to JSC static library.
        And, this dependency is a link time dependency which means
        compiling source files of TestJSC starts before the POST_BUILD
        event of JSC. Thus, required header can't be found.

        Add an intermediate target between TestJSC and JavaScriptCore to
        ensure derived headers are copied into the forwarding header
        directory.

        * TestWebKitAPI/PlatformGTK.cmake: Added a new custom target pre-TestJSC.
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.

2018-11-19  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Solve some issues in the enumerateDevices code
        https://bugs.webkit.org/show_bug.cgi?id=191832

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback): Make all the Strings with HTML code static.
        (testWebsiteDataDeviceIdHashSalt): Change the webView settings in
        the test.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView): Remove the initialization of the
        webView settings, we now do it in the specific test.

2018-11-18  Chris Dumez  <cdumez@apple.com>

        [PSON] Received an invalid message "WebPageProxy.DidPerformClientRedirect" from the web process
        https://bugs.webkit.org/show_bug.cgi?id=191828

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/client-side-redirect.html: Added.

2018-11-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Remove all usages of UIItemProvider, UIItemProviderReading, and related classes
        https://bugs.webkit.org/show_bug.cgi?id=191819

        Reviewed by Dan Bernstein.

        Replace UIItemProvider (and related classes) with NSItemProvider.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyPNG):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]):

        Replace usages of this deprecated method with `-registerDataRepresentationForTypeIdentifier:visibility:loadHandler:`.

        (checkEstimatedSize):
        (checkSuggestedNameAndEstimatedSize):
        (TestWebKitAPI::TEST):
        (-[UIItemProvider registerDataRepresentationForTypeIdentifier:withData:]): Deleted.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[MockDragDropSession canLoadObjectsOfClass:]):
        (-[MockDragDropSession canLoadObjectsOfClasses:]):
        (-[MockDropSession initWithProviders:location:window:allowMove:]):
        (-[MockDropSession canCreateItemsOfClass:]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        (-[DragAndDropSimulator _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-17  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_messageReceivers.contains(...) under ViewGestureController removeMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=191734
        <rdar://problem/46151497>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] InlineFormattingState::addDetachingRule should accumulate rules.
        https://bugs.webkit.org/show_bug.cgi?id=191801

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-17  Jer Noble  <jer.noble@apple.com>

        Regression(r233865): Causes synchronous IPC in the middle of layout
        https://bugs.webkit.org/show_bug.cgi?id=188307
        <rdar://problem/42807306>

        Reviewed by Eric Carlson.

        Follow-up test fix for r238322:

        In ExitFullscreenOnEnterPiP.ElementFullScreen, explicitly make the video
        element in element fullscreen the "main content" by playing the video during
        a user gesture; only "main content" videos will cause fullscreen mode to exit
        when that element is taken into PiP.

        In FullscreenZoomInitialFrame.WebKit, the WebView is not visible, so the Page
        is considered hidden, and fullscreen is not allowed when the WebView is hidden.
        Make the WebView visible by ordering the test window on-screen.

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.html:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::runTest):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Tweak _showSafeBrowsingWarningWithTitle SPI
        https://bugs.webkit.org/show_bug.cgi?id=191799

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):

2018-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r238294): TestWebKitAPI.WKNavigation.ProcessCrashDuringCallback failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=191783

        Reviewed by Chris Dumez.

        Allow either WKErrorWebContentProcessTerminated or WKErrorWebViewInvalidated since the test
        is closing WebView, thereby invalidating the view, which is racing with the process termination.

        * TestWebKitAPI/Tests/WebKitCocoa/WebContentProcessDidTerminate.mm:
        (TEST):

2018-11-16  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.DisableForInspector API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=191798

        Reviewed by Joseph Pecoraro.

        We support process swapping when Web Inspector is shown now so update the
        API test accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-16  Ryan Haddad  <ryanhaddad@apple.com>

        Update buildbot dashboard after Windows 7/10 updates
        https://bugs.webkit.org/show_bug.cgi?id=191219

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform td.logo::before):
        (table.queue-grid tr.platform.windows-10 td.logo::before):
        (table.queue-grid tr.platform.wincairo-windows-10 td.logo::before):
        (table.queue-grid tr.platform.windows-7 td.logo::before):
        (table.queue-grid tr.platform.wincairo-windows-10 img.logo):

2018-11-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) WebKit.GeolocationTransitionToHighAccuracy API test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=191789

        Reviewed by Alex Christensen.

        Relate the 2 test pages so they use the same process since WKContextSetMaximumNumberOfProcesses()
        SPI no longer works with PSON / Process prewarming.

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):

2018-11-16  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Retry app installation on watchOS simulators
        https://bugs.webkit.org/show_bug.cgi?id=191769
        <rdar://problem/46139850>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Retry app installations.

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        Add DidFirstMeaningfulPaint milestone.
        https://bugs.webkit.org/show_bug.cgi?id=191754

        Reviewed by Simon Fraser.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone.cpp: Added.
        (TestWebKitAPI::didReachMilestone):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone_Bundle.cpp: Copied from Source/WebKit/UIProcess/API/C/WKPageRenderingProgressEvents.h.
        (TestWebKitAPI::FirstMeaningfulPaintMilestoneTest::FirstMeaningfulPaintMilestoneTest):
        (TestWebKitAPI::FirstMeaningfulPaintMilestoneTest::didCreatePage):

2018-11-16  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][WebKitTestRunner] Test contents window is displayed while testing.
        https://bugs.webkit.org/show_bug.cgi?id=191593

        Reviewed by Alex Christensen.

        Hide TestRunner window and taskbar button.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::windowSnapshotImage):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Add API to disable safe browsing checks
        https://bugs.webkit.org/show_bug.cgi?id=191610

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (resourceURL):
        (TEST):
        (safeBrowsingView):
        (simpleURL): Deleted.

2018-11-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for out-of-flow positioned boxes
        https://bugs.webkit.org/show_bug.cgi?id=191726

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-15  Myles C. Maxfield  <mmaxfield@apple.com>

        WKPreferencesSetFontSmoothingLevel doesn't actually do anything
        https://bugs.webkit.org/show_bug.cgi?id=191708

        Reviewed by Simon Fraser.

        Delete the symbol because no one calls it and it doesn't do anything

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-11-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238244.

        Caused High Sierra test runs to fail early with 50 crashes and
        casued 25 API failures.

        Reverted changeset:

        "[css-logical] Implement flow-relative margin, padding and
        border shorthands"
        https://bugs.webkit.org/show_bug.cgi?id=188697
        https://trac.webkit.org/changeset/238244

2018-11-15  Aakash Jain  <aakash_jain@apple.com>

        Increase EWS lock timeout to 3 hours
        https://bugs.webkit.org/show_bug.cgi?id=191705

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py: Increased EWS lock timeout to 3 hours.

2018-11-15  Chris Dumez  <cdumez@apple.com>

        IndexedDB.IndexedDBTempFileSize API test times out with process prewarming enabled
        https://bugs.webkit.org/show_bug.cgi?id=191671
        <rdar://problem/46086062>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2018-11-15  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        Allow tests to enable the CSSLogicalEnabled flag in WK1.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Allow CSS property definitions to have a 'runtime-flag' parameter which
        disables the property when the specified runtime flag is disabled.

2018-11-15  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r238212): WebKit.BackgroundColor* API test failures.
        https://bugs.webkit.org/show_bug.cgi?id=191697
        rdar://problem/46098570

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/mac/BackgroundColor.mm:
        (TestWebKitAPI::TEST): Updated for new default background color.

2018-11-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Check for specific process instead of using data migrator (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191551
        <rdar://problem/45993156>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Use software_variant instead of software_version for watchOS.

2018-11-15  Daniel Bates  <dabates@apple.com>

        [iOS] Shift + Tab does not focus previous field
        https://bugs.webkit.org/show_bug.cgi?id=191596
        <rdar://problem/45892053>

        Reviewed by Wenson Hsieh.

        Add infrastructure to support testing a key down event with modifiers by creating
        and dispatching a UIEvent. This infrastructure replaces the previous mechanism in
        Tools/WebKitTestRunner/ios/HIDEventGenerator.mm to generate a IOHIDEvent for a
        keydown as it did not support creating an event with modifier key state that would
        be recognized by UIKit.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        Add function uiController.keyDown() that takes a character that represents a keyboard key
        and an array of modifier keys. The behavior of this function is analogous to eventSender.keyDown().
        Remove functions uiController.keyDownUsingHardwareKeyboard() and uiController.keyUpUsingHardwareKeyboard()
        as the former is replaced by uiController.keyDown() and the latter was never used.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::keyDown): Added.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (createHIDKeyDownEvent): Added.
        (-[HIDEventGenerator keyDown:completionBlock:]): Deleted.
        (-[HIDEventGenerator keyUp:completionBlock:]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength): Added.
        (WTR::parseModifier): Added.
        (WTR::parseModifierArray): Added.
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.

2018-11-15  Keith Rollin  <krollin@apple.com>

        Delete old .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191669
        <rdar://problem/46081994>

        Reviewed by Chris Dumez.

        .xcfilelist files were created and added to the Xcode project files in
        https://trac.webkit.org/changeset/238008/webkit. However, they caused
        build issues and they were removed from the Xcode projects in
        https://trac.webkit.org/changeset/238055/webkit. This check-in removes
        the files from the repository altogether. They'll ultimately be
        replaced with new files with names that indicate whether the
        associated files are inputs to the Run Script phase or are files
        created by the Run Script phase.

        * DumpRenderTree/DerivedSources.xcfilelist: Removed.
        * WebKitTestRunner/DerivedSources.xcfilelist: Removed.

2018-11-14  Zalan Butjas  <zalan@apple.com>

        [LFC][IFC] Add support for in-flow positioned inline boxes.
        https://bugs.webkit.org/show_bug.cgi?id=191672

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-14  Keith Rollin  <krollin@apple.com>

        Move scripts for Derived and Unified Sources to external files
        https://bugs.webkit.org/show_bug.cgi?id=191670
        <rdar://problem/46082278>

        Reviewed by Keith Miller.

        Move the scripts in the Generate Derived Sources and Generate Unified
        Sources Run Script phases from the Xcode projects to external shell
        script files. Then invoke those scripts from the Run Script phases.
        This refactoring is being performed to support later work that will
        invoke these scripts in other contexts.

        The scripts were maintained as-is when making the move. I did a little
        reformatting and added 'set -e' to the top of each file, but that's
        it.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/generate-derived-sources.sh: Added.
        * WebKitTestRunner/Scripts/generate-derived-sources.sh: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.DecidePolicyForNavigationActionForHyperlinkThatRedirects API fails when PSON is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191640

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (runDecidePolicyForNavigationActionForHyperlinkThatRedirects):
        (TEST):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238115): [iOS] TestWebKitAPI.ProcessSwap.NavigateToInvalidURL is failing
        https://bugs.webkit.org/show_bug.cgi?id=191660

        Reviewed by Ryosuke Niwa.

        The test tries to navigate to an invalid URL and makes sure that we do not process swap
        for such load. The test was inherently racing because it was doing:
        <body onload="setTimeout(() => alert('DONE'), 0); location.href = 'http://A=a%B=b'">

        Its load event handler tries to navigate to 'http://A=a%B=b' and sets a 0 timer to
        log an alert, which causes the API test to keep going and check that we did not swap
        process. The issue is that a 0 timer may not be sufficient to trigger the load, as
        the policy decision is asynchronous and relies on the UIProcess responding to it.

        To address the issue, the test now waits for the next policy decision, spins the
        run loop and then makes sure we did not swap process. It no longer relies on a message
        from the page.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsiteDataStoreCustomPaths API test is failing when enabling process prewarming
        https://bugs.webkit.org/show_bug.cgi?id=191638

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        (TEST):

2018-11-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI to show a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=191604

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):

2018-11-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A few drag and drop tests are crashing after r238146
        https://bugs.webkit.org/show_bug.cgi?id=191617

        Reviewed by Dean Jackson.

        Augment these crashing tests to verify that selection commands are suppressed during drop over editable elements
        via more robust means. These tests currently hit an assertion when revealing the callout bar too early, because
        TestWebKitAPI is not a UI application (see <https://webkit.org/b/190401>).

        Instead of relying on this other bug, directly ask the text input whether it is suppressing selection commands
        during a drop, and remember the answer via DragAndDropSimulator.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):

        Add to the existing tests that started failing after r238146.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView textInputContentView]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WebKit2] Hook up some more editing actions (-pasteAndMatchStyle:, -makeTextWritingDirectionNatural:)
        https://bugs.webkit.org/show_bug.cgi?id=191605
        <rdar://problem/45813991>

        Reviewed by Dean Jackson.

        Adds two new API tests to exercise -_pasteAndMatchStyle: and -makeTextWritingDirectionNatural:.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView _synchronouslyExecuteEditCommand:argument:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:

        Pull `-_synchronouslyExecuteEditCommand:argument:` out of WKAttachmentTests and into shared code, in a new
        category on WKWebView declared in TestWKWebView. Also, fix an unrelated typo in a nearby category.

        (-[WKWebView _synchronouslyExecuteEditCommand:argument:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.ApplicationManifestBasic API test is failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191602

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Refactor port code for devices
        https://bugs.webkit.org/show_bug.cgi?id=191568
        <rdar://problem/46005821>

        Reviewed by Alex Christensen.

        watchOS and iOS device ports share many characteristics in testing, mostly due
        to the fact that both are devices.

        * Scripts/webkitpy/port/device_port.py: Added.
        (DevicePort): Add base class that all simulated/physical device ports share.
        (DevicePort.__init__):
        (DevicePort.driver_cmd_line_for_logging): Moved from iOS port.
        (DevicePort._generate_all_test_configurations): Ditto.
        (DevicePort.child_processes): Ditto.
        (DevicePort.driver_name): Ditto.
        (DevicePort.target_host): Generalize worker access to attached devices and
        simulated devices based on the device manager.
        (DevicePort.devices): Return a list of all devices associated with this port.
        (DevicePort._create_devices):
        (DevicePort._build_driver_flags): Moved from iOSSimulatorPort/iOSDevicePort.
        (DevicePort._install): Moved from iOS port.
        (DevicePort.setup_test_run): Ditto.
        (DevicePort.clean_up_test_run): Ditto.
        (DevicePort.did_spawn_worker): Ditto.
        (DevicePort.setup_environ_for_server): Ditto.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSPort.driver_cmd_line_for_logging): Moved to DevicePort.
        (IOSPort.driver_name): Ditto.
        (IOSPort._generate_all_test_configurations): Ditto.
        (IOSPort.child_processes): Ditto.
        (IOSPort._testing_device): Ditto.
        (IOSPort.target_host): Ditto.
        (IOSPort._create_devices): Ditto.
        (IOSPort.setup_test_run): Ditto.
        (IOSPort.clean_up_test_run): Ditto.
        (IOSPort.did_spawn_worker): Ditto.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): IOSDevicePort uses a device manager from apple_additions.
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir): Use DevicePort.devices().
        (IOSDevicePort._get_crash_log): Ditto.
        (IOSDevicePort.ios_version): Ditto.
        (IOSDevicePort._create_devices): Ditto.
        (IOSDevicePort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSSimulatorPort._build_driver_flags): Moved to DevicePort.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_get_crash_log):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): IOSSimulatorPort uses the SimulatedDeviceManager.
        (IOSSimulatorPort._create_devices): Clean up logging statement.
        (IOSSimulatorPort.setup_environ_for_server): Some of environment set-up is shared
        across all devices.
        (IOSSimulatorPort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSSimulatorPort._build_driver_flags): Moved to DevicePort.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_32bit):
        (IOSSimulatorTest.test_64bit):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WKHTTPCookieStoreWithoutProcessPool API test is failing with process prewarming is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191624

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (runWKHTTPCookieStoreWithoutProcessPool):
        (TEST):

2018-11-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support CTAP HID authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188623
        <rdar://problem/43353777>

        Reviewed by Brent Fulgham and Chris Dumez.

        This patch adds support for the mock testing and entitlements to allow minibrowser to talk
        to hid devices.

        * MiniBrowser/MiniBrowser.entitlements:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-11-13  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit.GeolocationTransitionToLowAccuracy API crashes when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191616

        Reviewed by Chris Dumez.

        The crash was caused by WKView in autorelease pool invoking stopUpdatingCallback after
        GeolocationTransitionToLowAccuracyStateTracker in the stack had been destroyed,
        resulting in the use-after-free.

        Made the tests more robust by clearing geolocation provider before exiting each test
        since we can't really prevent WKView from entering an autorelease pool.

        Also made WebKit.GeolocationTransitionToLowAccuracy wait for the success callback
        instead of simply the end of the navigation so that the test would continue to work
        even if a web content process was created for the second web view (lowAccuracyWebView)

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::setupGeolocationProvider): Moved "*" to match the WebKit coding style guideline.
        (TestWebKitAPI::clearGeolocationProvider): Added.
        (TestWebKitAPI::runJavaScriptAlert): Added.
        (TestWebKitAPI::didFinishNavigation): Deleted.
        * TestWebKitAPI/Tests/WebKit/geolocationWatchPosition.html:

2018-11-13  Chris Dumez  <cdumez@apple.com>

        WKProcessPool.InitialWarmedProcessUsed API is failing with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=191618

        Reviewed by Ryosuke Niwa.

        Update API test to explicitly disable automatic process prewarning since it is testing
        manual prewarming.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (TEST):

2018-11-13  Chris Dumez  <cdumez@apple.com>

        Several Service Worker API tests are failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191619

        Reviewed by Youenn Fablet.

        Update tests to use _webProcessCountIgnoringPrewarmed instead of _webProcessCount so that they are
        not impacted by process prewarming.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not show selection UI for editable elements with opacity near zero
        https://bugs.webkit.org/show_bug.cgi?id=191442
        <rdar://problem/45958625>

        Reviewed by Simon Fraser.

        Add a couple of new testing helpers to UIScriptController.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::textSelectionRangeRects const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::textSelectionRangeRects const):

        Rename `selectionRangeViewRects` to `textSelectionRangeRects`. This allows us to draw a distinction between
        `textSelectionRangeRects`/`textSelectionCaretRect`, which retrieve information about selection rects known
        to the text interaction assistant, and `selectionCaretViewRect`/`selectionRangeViewRects`, which retrieve the
        actual frames of the selection views used to draw overlaid selection UI. This difference is important in the
        new layout tests added in this patch, which only suppress caret rendering (i.e. selection views remain hidden).

        Also, drive-by fix a leaked `NSMutableArray`.

        (WTR::UIScriptController::selectionStartGrabberViewRect const):
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):

        Testing helpers to grab the frames of caret and selection views, in WKContentView's coordinate space. These
        rects are also clamped to WKContentView bounds.

2018-11-13  Daniel Bates  <dabates@apple.com>

        Consolidate WebKit UIKitSPI.h and UIKitTestSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=173341
        <rdar://problem/32752890>

        Reviewed by Simon Fraser.

        There is little value to making a distinction between forward declarations
        of UIKit SPI needed in the WebKit layer and just for testing. Moreover,
        the contents of these two headers can conflict with each other following
        r218275 as DumpRenderTree includes both headers. Instead we should remove
        UIKitTestSPI.h and have WebKitTestRunner include the WebKit variant, UIKitSPI.h.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * TestRunnerShared/spi/UIKitTestSPI.h: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

2018-11-13  Takashi Komori  <Takashi.Komori@sony.com>

        Remove WebKitTestRunnerLib's build warnings.
        https://bugs.webkit.org/show_bug.cgi?id=191580

        Reviewed by Fujii Hironori.

        Include cmakeconfig.h in precompiled header.

        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2018-11-12  Darshan Kadu  <darsh7807@gmail.com>

        Implement Cache API support for WPE/GTK
        https://bugs.webkit.org/show_bug.cgi?id=178316

        Reviewed by Michael Catanzaro.

        Called WKWebsiteDataStoreSetCacheStoragePerOriginQuota function to set the cache limit to 400 * 1200
        on all the platforms in TestController.cpp. Also, removed the setCacheStoragePerOriginQuota call from TestControllerCocoa.mm

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2018-11-12  Christopher Reid  <chris.reid@sony.com>

        [Curl] Reject entire cookie if the domain fails a tailmatch.
        https://bugs.webkit.org/show_bug.cgi?id=191406

        Reviewed by Youenn Fablet.

        Added unittests for Curl cookie implementation.

        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        (TestWebKitAPI::Curl::CurlCookies::RejectTailmatchFailureDomain):

2018-11-12  Alex Christensen  <achristensen@webkit.org>

        [iOS] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=191441

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (checkTitleAndClick):
        (TEST):

2018-11-12  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API Test for Curl cookie backend.
        https://bugs.webkit.org/show_bug.cgi?id=191493

        Reviewed by Youenn Fablet.

        Add unit test to TestWebCore.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp: Added.

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        Add a test option to enable editable images.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::findEditableImageCanvas):
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        Add the ability to draw on a PKCanvasView that is a subview of the WKWebView,
        and also to retrieve the number of strokes currently on the PKCanvasView.
        Currently this just takes the first canvas; we might need to make it
        take an identifier or something in the future if we need tests with multiple
        canvases. The indirect testing mechanism is required because PKCanvasView
        can currently not actually paint its strokes in the Simulator.

2018-11-12  Ryan Haddad  <ryanhaddad@apple.com>

        [MediaStream] Screen capture should be an experimental feature on OSX only
        https://bugs.webkit.org/show_bug.cgi?id=191552

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm: Only run these tests on macOS.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-green.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-red.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mojave.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mojave@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite@2x.png:

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit Tools Xcode projects for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=191495

        Reviewed by Alexey Proskuryakov.

        * ContentExtensionTester/ContentExtensionTester.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * EditingHistory/EditingHistory.xcodeproj/project.pbxproj:
        * FontWithFeatures/FontWithFeatures.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * lldb/lldbWebKitTester/lldbWebKitTester.xcodeproj/project.pbxproj:
        These are less important because they're not localized, but since
        I made the style checker complain, it now complains any time anyone
        touches any of these projects... so upgrade them.

2018-11-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Check for specific process instead of using data migrator
        https://bugs.webkit.org/show_bug.cgi?id=191551
        <rdar://problem/45993156>

        Rubber-stamped by Aakash Jain.

        It's possible for the data migrator process to be stuck, but for a simulator to be
        usable. Use device-specific processes to detect when a device is usable.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._wait_until_device_is_usable):
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.initialize_devices): Explicitly wait until a device is usable
        since this implies that a device is booted.
        (SimulatedDeviceManager.swap): Ditto.
        (SimulatedDevice.is_usable): Check that a device is booted and that a device-specific
        process indicating the device is usable can be found.
        (SimulatedDeviceManager.wait_until_data_migration_is_done): Deleted.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py: Update simctl_json so that
        it triggers the logic in is_usable()

2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>

        Resurrect WebKitTestRunner for Windows port
        https://bugs.webkit.org/show_bug.cgi?id=189257

        Reviewed by Fujii Hironori.

        Implement WebKitTestRunner for WinCairo.

        * PlatformWin.cmake:
        * Scripts/build-webkittestrunner:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::rangeToStr):
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp: Added.
        (WTR::AccessibilityController::resetToConsistentState):
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::platformName):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp: Added.
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::isChecked const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild const):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::clearSelectedChildren const):
        (WTR::AccessibilityUIElement::accessibilityValue const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isVisible const):
        (WTR::AccessibilityUIElement::isOffScreen const):
        (WTR::AccessibilityUIElement::isCollapsed const):
        (WTR::AccessibilityUIElement::isIgnored const):
        (WTR::AccessibilityUIElement::isSingleLine const):
        (WTR::AccessibilityUIElement::isMultiLine const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::supportedActions const):
        (WTR::AccessibilityUIElement::pathDescription const):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
        (WTR::AccessibilityUIElement::classList const):
        (WTR::AccessibilityUIElement::characterAtOffset):
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        * WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::activateFonts):
        (WTR::installFakeHelvetica):
        (WTR::uninstallFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp: Added.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::inspectorTestStubURL):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::installFakeHelvetica):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/PlatformWin.cmake: Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::createTestURL):
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/win/EventSenderProxyWin.cpp: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::~EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::keyDown):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        (WTR::PlatformWebView::didInitializeClients):
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::addToWindow):
        (WTR::PlatformWebView::removeFromWindow):
        (WTR::PlatformWebView::setWindowIsKey):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        (WTR::generateCairoSurfaceFromBitmap):
        (WTR::PlatformWebView::windowSnapshotImage):
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        (WTR::PlatformWebView::setNavigationGesturesEnabled):
        (WTR::PlatformWebView::forceWindowFramesChanged):
        (WTR::PlatformWebView::drawsBackground const):
        (WTR::PlatformWebView::setDrawsBackground):
        * WebKitTestRunner/win/TestControllerWin.cpp: Added.
        (WTR::exceptionFilter):
        (WTR::runRunLoopUntil):
        (WTR::TestController::notifyDone):
        (WTR::TestController::setHidden):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformPreferences):
        (WTR::TestController::platformDestroy):
        (WTR::toWK):
        (WTR::TestController::platformInitializeContext):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::platformDidCommitLoadForFrame):
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):
        (WTR::TestController::runModal):
        (WTR::TestController::platformContext):
        (WTR::TestController::platformLibraryPathForTesting):
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
        * WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp: Added.
        * WebKitTestRunner/win/main.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (dllLauncherEntryPoint):

2018-11-12  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Introduce AbortableTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=190902

        Reviewed by Xabier Rodriguez-Calvar.

        Tests for AbortableTaskQueue are included.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::FancyResponse::FancyResponse):
        (TestWebKitAPI::FancyResponse::operator=):
        (TestWebKitAPI::DeterministicScheduler::DeterministicScheduler):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::ThreadContext):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::waitMyTurn):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::yieldToThread):

2018-11-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        run-bindings-tests is timing out in some WinCairo bots
        https://bugs.webkit.org/show_bug.cgi?id=191348

        Reviewed by Alex Christensen.

        BuildBot kills run-bindings-tests if it outputs nothing for 20
        minutes. run-bindings-tests runs very slowly in WinCairo Docker,
        and it takes more than 30 minutes to finish. And, Windows Python
        buffers the progress output.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.detect_changes): Call sys.stdout.flush() after the
        test case result is output.

2018-11-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement a new edit command to change the enclosing list type
        https://bugs.webkit.org/show_bug.cgi?id=191487
        <rdar://problem/45955922>

        Reviewed by Ryosuke Niwa.

        Add a new API test to verify that `-[WKWebView _changeListType:]` is hooked up to the corresponding editing
        command in WebCore. See the new layout test for a test that exercises more nuanced corner cases.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (-[TestWKWebView setPosition:offset:]):
        (-[TestWKWebView setBase:baseOffset:extent:extentOffset:]):
        (TestWebKitAPI::webViewForEditActionTestingWithPageNamed):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/editable-nested-lists.html: Added.

2018-11-11  Dan Bernstein  <mitz@apple.com>

        ProcessPoolConfiguration::copy() doesn’t copy m_customWebContentServiceBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=191514

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm: Added.
        (TEST):

2018-11-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        Update file name.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2018-11-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238065.

        Breaks internal builds.

        Reverted changeset:

        "Make it possible to edit images inline"
        https://bugs.webkit.org/show_bug.cgi?id=191352
        https://trac.webkit.org/changeset/238065

2018-11-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test /webkit/WebKitSettings/webkit-settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191221

        Unreviewed, fix a typo from the previous patch. After disabling the setting, we should test
        that it is disabled, but we're testing that it is enabled, because I failed to update this
        line.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2018-11-10  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        Add a test option to enable editable images.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::findEditableImageCanvas):
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        Add the ability to draw on a PKCanvasView that is a subview of the WKWebView,
        and also to retrieve the number of strokes currently on the PKCanvasView.
        Currently this just takes the first canvas; we might need to make it
        take an identifier or something in the future if we need tests with multiple
        canvases. The indirect testing mechanism is required because PKCanvasView
        can currently not actually paint its strokes in the Simulator.

2018-11-09  Chris Dumez  <cdumez@apple.com>

        Suspended page persists even after back/forward list item is gone
        https://bugs.webkit.org/show_bug.cgi?id=191488
        <rdar://problem/45953006>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Implement SPI on WKWebView to increase and decrease list levels
        https://bugs.webkit.org/show_bug.cgi?id=191471
        <rdar://problem/45952472>

        Reviewed by Tim Horton.

        Add an API test to ensure that list levels can be incremented and decremented via WKWebView SPI.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):

2018-11-09  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl][WebKit] Implement Proxy configuration API.
        https://bugs.webkit.org/show_bug.cgi?id=189053

        Reviewed by Youenn Fablet.

        Added Proxy Settings dialog to call newly added API.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/Common.cpp:
        (askProxySettings):
        (askCredential):
        (authDialogProc): Deleted.
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/DialogHelper.h: Added.
        (Dialog::run):
        (Dialog::doalogProc):
        (Dialog::handle):
        (Dialog::setup):
        (Dialog::update):
        (Dialog::validate):
        (Dialog::updateOkButton):
        (Dialog::command):
        (Dialog::ok):
        (Dialog::cancel):
        (Dialog::close):
        (Dialog::hDlg):
        (Dialog::item):
        (Dialog::setEnabled):
        (Dialog::setText):
        (Dialog::getText):
        (Dialog::getTextLength):
        (Dialog::RadioGroup::RadioGroup):
        (Dialog::RadioGroup::set):
        (Dialog::RadioGroup::get):
        (Dialog::radioGroup):
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc):
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createWKURL):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::updateProxySettings):
        (WebKitBrowserWindow::loadURL):
        (WebKitBrowserWindow::loadHTMLString):
        (WebKitBrowserWindow::openProxySettings):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::openProxySettings):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2018-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Introduce WKWebView SPI to insert nested ordered and unordered lists
        https://bugs.webkit.org/show_bug.cgi?id=191410
        <rdar://problem/45898610>

        Reviewed by Dean Jackson.

        Move WKWebViewEditActions from iOS to WebKitCocoa, and enable the relevant WKWebViewEditActions tests on macOS.
        Additionally, add new API tests to verify that `-_pasteAsQuotation:` and `-_insertNested(Un)OrderedList:` are
        hooked up to their respective editing commands.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm: Renamed from Tools/TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm.
        (-[TestWKWebView querySelectorExists:]):
        (-[TestWKWebView insertString:]):

        Add a helper method to insert a piece of text. This abstracts platform differences between iOS and macOS, by
        invoking the WKWebView directly on macOS and calling on the content view on iOS.

        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):

2018-11-09  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Refactoring and drive-by fixes
        https://bugs.webkit.org/show_bug.cgi?id=191421

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (inFlatpakSandbox): Flatpak now has a /.flatpak-info file when in
        the sandbox, so rely on this.
        * flatpak/flatpakutils.py:
        (expand_manifest): Pass explicit keywords to load_manifest() and
        remove unused local variable.
        (WebkitFlatpak.clean_args): Move hard-coded sdk/runtime infos to the manifest file.
        (WebkitFlatpak.run_in_sandbox): Add support for extra environment variables.
        (WebkitFlatpak.setup_dev_env): Stop build at final app. Refactor
        build_type handling a bit.
        * flatpak/org.webkit.CommonModules.yaml: Added.
        * flatpak/org.webkit.WPE.yaml: wpebackend upstream was renamed to libwpe.
        * flatpak/org.webkit.WebKit.yaml: Move common dependencies
        declaration to CommonModules, so it can be reused later when we
        add support for building extra libraries depending on WPE.

2018-11-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

onal supported image formats
        https://bugs.webkit.org/show_bug.cgi?id=190454

        Reviewed by Simon Fraser.

        Test opening a TGA image in WebView which is not allowed by default. The
        TGA format will be allowed through WKWebViewConfiguration.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/100x100-red.tga: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/400x400-green.png: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalSupportedImageTypes.mm: Added.
        (runTest):
        (TEST):

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a proper build fix for r237983

        Don't include header PublicKeyCredential.h in CtapResponseTest.cpp.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/CtapRequestTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/CtapResponseTest.cpp.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):

2018-11-08  Keith Rollin  <krollin@apple.com>

        Create .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191324
        <rdar://problem/45852819>

        Reviewed by Alex Christensen.

        As part of preparing for enabling XCBuild, create and use .xcfilelist
        files. These files are using during Run Script build phases in an
        Xcode project. If a Run Script build phase produces new files that are
        used later as inputs to subsequent build phases, XCBuild needs to know
        about these files. These files can be either specified in an "output
        files" section of the Run Script phase editor, or in .xcfilelist files
        that are associated with the Run Script build phase.

        This patch takes the second approach. It consists of three sets of changes:

        - Modify the DerivedSources.make files to have a
          'print_all_generated_files" target that produces a list of the files
          they create.

        - Create a shell script that produces .xcfilelist files from the
          output of the previous step, as well as for the files created in the
          Generate Unified Sources build steps.

        - Add the new .xcfilelist files to the associated projects.

        Note that, with these changes, the Xcode workspace and projects can no
        longer be fully loaded into Xcode 9. Xcode will attempt to load the
        projects that have .xcfilelist files associated with them, but will
        fail and display a placeholder for those projects instead. It's
        expected that all developers are using Xcode 10 by now and that not
        being able to load into Xcode 9 is not a practical issue. Keep in mind
        that this is strictly an IDE issue, and that the projects can still be
        built with `xcodebuild`.

        Also note that the shell script that creates the .xcfilelist files can
        also be used to verify that the set of files that's currently checked
        in is up-to-date. This checking can be used as part of a check-in hook
        or part of check-webkit-style to sooner catch cases where the
        .xcfilelist files need to be regenerated.

        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/DerivedSources.xcfilelist: Added.
        * Scripts/generate-xcfilelists: Added.
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.xcfilelist: Added.

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a quick build fix for r237983

        Temporarily make CtapRequestTest.cpp/CtapResponseTest.cpp to mac only to avoid iOS build failures.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
        * TestWebKitAPI/Tests/WebCore/mac/CtapRequestTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/mac/CtapResponseTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):

2018-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        Fix steps_unittest.py failures related to recent Win10/Win7 changes
        https://bugs.webkit.org/show_bug.cgi?id=191290

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update expected results.

2018-11-08  Dean Jackson  <dino@apple.com>

        Add a String literal that returns a String
        https://bugs.webkit.org/show_bug.cgi?id=191425
        <rdar://problem/45914556>

        Reviewed by Sam Weinig.

        Test _str.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2018-11-08  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Generalize trailing SDK specifier (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Rubber-stamped by Aakash Jain.

        Re-landing this change, configuration issues have been resolved.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Use normalized SDK.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Use normalized SDK.
        (IOSSimulatorPort._build_driver_flags): Use platform SDK in build driver flags.

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP device request/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=190784
        <rdar://problem/45460333>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: Added.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h: Added.

2018-11-07  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add support to BigInt into ValueAdd
        https://bugs.webkit.org/show_bug.cgi?id=186177

        Reviewed by Keith Miller.

        * Scripts/run-jsc-benchmarks:

2018-11-07  Sihui Liu  <sihui_liu@apple.com>

        RELEASE_ASSERT(!m_hardClosedForUserDelete) fails in WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer
        https://bugs.webkit.org/show_bug.cgi?id=191326
        <rdar://problem/45769269>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBUserDelete.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBUserDelete.mm: Added.
        (-[IndexedDBUserDeleteMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2018-11-07  Daniel Bates  <dabates@apple.com>

        Override +[UIKeyboard isInHardwareKeyboardMode] in WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=190141

        Reviewed by Darin Adler.

        Override +[UIKeyboard isInHardwareKeyboardMode] to always return NO so as to make test
        runs deterministic regardless of whether a hardware keyboard is attached.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (overrideIsInHardwareKeyboardMode): Added.
        (prepareConsistentTestingEnvironment):
        * TestRunnerShared/spi/UIKitTestSPI.h: Forward declare SPI.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overrideIsInHardwareKeyboardMode): Added.
        (WTR::TestController::platformInitialize):

2018-11-07  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r237913.

        Breaks running tests on Mac without iOS SDK installed

        Reverted changeset:

        "webkitpy: Generalize trailing SDK specifier (Part 2)"
        https://bugs.webkit.org/show_bug.cgi?id=191275
        https://trac.webkit.org/changeset/237913

2018-11-07  Zamiul Haque  <zhaque@apple.com>

        Force a gregorian calendar to show for credit card expiration date inputs
        (autocomplete='cc-exp'*) regardless of default system settings.
        https://bugs.webkit.org/show_bug.cgi?id=191096
        rdar://problem/42640256

        Reviewed by Tim Horton.

        Implemented simulateForeignDefaultCalendar and calendarType to be used
        for changing the default calendar returned by the system (ie. [NSCalendar
        currentCalendar]) and getting the calendar type identifier of a presented date
        picker.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingDataListSuggestions const):
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::setDefaultCalendarType):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::setDefaultCalendarType):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::calendarType const): Deleted.
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::swizzledCalendar):
        (WTR::TestController::getOverriddenCalendarIdentifier const):
        (WTR::TestController::setDefaultCalendarType):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::calendarType const): Deleted.

2018-11-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Boot a single worker for custom devices
        https://bugs.webkit.org/show_bug.cgi?id=191312
        <rdar://problem/45848717>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Custom devices only run a hand-full of tests. Booting multiple
        simulators is expensive and unneeded for these tests.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort. child_processes): No reason to memoize this call, and it prevents
        overriding the number of child processes when booting custom devices.

2018-11-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Generalize trailing SDK specifier (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Use normalized SDK.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Use normalized SDK.
        (IOSSimulatorPort._build_driver_flags): Use platform SDK in build driver flags.

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Properly disable WEBGPU on all non-Metal platforms for now.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add URL configuration for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191132

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews-app/urls.py: Added entry for ews.urls.
        * BuildSlaveSupport/ews-app/ews/urls.py: Added.

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Make mDNS ICE Candidate an experimental flag again
        https://bugs.webkit.org/show_bug.cgi?id=191262

        Reviewed by Dean Jackson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled):
        (WTR::TestRunner::setMDNSICECandidatesEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add views for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191131

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/index.py: Added.
        * BuildSlaveSupport/ews-app/ews/views/patch.py:
        * BuildSlaveSupport/ews-app/ews/views/results.py: Added.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added.

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add models for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191123

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/__init__.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermappings.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/builds.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        * BuildSlaveSupport/ews-app/ews/models/steps.py: Added.

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Fix Invalid HTTP_HOST header
        https://bugs.webkit.org/show_bug.cgi?id=191325

        Reviewed by Lucas Forschler.

        Changing ALLOWED_HOSTS to * as the landing page should be publicly accessible.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename EWS_app to ews-app - part 2
        https://bugs.webkit.org/show_bug.cgi?id=191317

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/EWS_app: Removed.
        * BuildSlaveSupport/ews-app/ews-app: Moved from BuildSlaveSupport/ews-app/EWS_app.
        * BuildSlaveSupport/ews-app/ews-app/settings.py:
        * BuildSlaveSupport/ews-app/ews-app/urls.py:
        * BuildSlaveSupport/ews-app/ews-app/wsgi.py:
        * BuildSlaveSupport/ews-app/manage.py:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename EWS_app to ews-app - part 1
        https://bugs.webkit.org/show_bug.cgi?id=191317

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/EWS_app: Removed.
        * BuildSlaveSupport/ews-app: Moved from BuildSlaveSupport/EWS_app.

2018-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        Previously, it was impossible for WebKitTestRunner to draw spelling dots. This patch adds support for a header
        at the top of test files, of the form <!-- webkit-test-runner [ spellCheckingDots=true ] --> which will cause
        dots to be drawn.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2018-11-06  Don Olmstead  <don.olmstead@sony.com>

        Feature flags not present for Visual Studio when using build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=191288

        Reviewed by Fujii Hironori.

        Passes feature flags to Visual studio builds within build-webkit.
        Removes cmakeBasedPortArguments as it is no longer in use.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortArguments): Deleted.

2018-11-06  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r230523): Caps lock indicator not shown in password field
        https://bugs.webkit.org/show_bug.cgi?id=190056

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::toggleCapsLock):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::toggleCapsLock):

2018-11-06  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: WAL file keeps growing
        https://bugs.webkit.org/show_bug.cgi?id=191294
        <rdar://problem/41333493>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm: Added.
        (-[IndexedDBFileSizeMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2018-11-06  Alex Christensen  <achristensen@webkit.org>

        Fix tests after r237863
        https://bugs.webkit.org/show_bug.cgi?id=191315

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        With the timing change of r237863, the WKWebView progressed further than before when loading main.html so it completed before main2.html.
        This test was meant to test that main2.html does eventually load, and it doesn't matter if main.html loads before it.  I updated the test
        to verify that main2.html eventually loads, making this test less timing dependent.

2018-11-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237834.

        Tests for this change crash on iOS Simulator

        Reverted changeset:

        "Spelling dots are drawn in the wrong place"
        https://bugs.webkit.org/show_bug.cgi?id=190764
        https://trac.webkit.org/changeset/237834

2018-11-05  Alex Christensen  <achristensen@webkit.org>

        [Mac] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188871

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webView:didCommitNavigation:]):
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:]):
        (-[TestLookupContext lookUpURL:completionHandler:]):
        (simpleURL):
        (safeBrowsingView):
        (TEST):
        (-[SafeBrowsingNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:knownToBeUnsafe:]): Deleted.
        (-[TestServiceLookupResult isKnownToBeUnsafe]): Deleted.
        * TestWebKitAPI/Utilities.h:

2018-11-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Generalize trailing SDK specifier (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.available_sdks): List all installed SDKs with version numbers stripped out.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo):
        (TestPlatformInfo.test_available_sdks):

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        Previously, it was impossible for WebKitTestRunner to draw spelling dots. This patch adds support for a header
        at the top of test files, of the form <!-- webkit-test-runner [ spellCheckingDots=true ] --> which will cause
        dots to be drawn.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2018-11-05  Chris Dumez  <cdumez@apple.com>

        Use same limit for page cache and suspended pages
        https://bugs.webkit.org/show_bug.cgi?id=191266

        Reviewed by Geoffrey Garen.

        Update API tests accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-05  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [style] Exclude style check for auto generated files.
        https://bugs.webkit.org/show_bug.cgi?id=191118

        Reviewed by Eric Carlson.

        Some files checked in to the repository are generated by other tools. In this patch,
        "MiniBrowserLibResource.h" is the file generated and managed by resource editor of
        VisualStudio.

        There's no need to check these files because it's not practical to fix the style errors
        or it's hard to maintain those fixes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (is_generated_file):
        (CppChecker.check):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Build libx264 as it is the h264 encoder we support in WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=190680

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WebKit.yaml:

2018-11-05  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Fix formatting nits in Document and Frame summary strings
        https://bugs.webkit.org/show_bug.cgi?id=191094

        Reviewed by Andy Estes.

        Format boolean as 1/0 when printing Frame summary to be consistent with the formatting of
        booleans in other summary strings, substitute "inMainFrame" for "isMainFrame" in the printed
        Document summary and add closing brace '}' to both Frame and Document summary strings to make
        them look pretty.

        * lldb/lldb_webkit.py:
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):

2018-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow WKWebView clients to customize bar button item groups in the accessory view when editing
        https://bugs.webkit.org/show_bug.cgi?id=191240
        <rdar://problem/44872806>

        Reviewed by Tim Horton.

        Add new API tests to verify that setting leading and trailing bar button groups on WKWebView sets the first
        responder's (i.e. WKContentView's) leading and trailing bar button groups, and that this can also be achieved by
        overriding `-[WKWebView inputAssistantItem]`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[InputAssistantItemTestingWebView fakeLeadingBarButtonItemAction]):
        (-[InputAssistantItemTestingWebView fakeTrailingBarButtonItemAction]):
        (+[InputAssistantItemTestingWebView barButtonIcon]):
        (+[InputAssistantItemTestingWebView leadingItemsForWebView:]):
        (+[InputAssistantItemTestingWebView trailingItemsForWebView:]):
        (-[InputAssistantItemTestingWebView inputAssistantItem]):
        (TestWebKitAPI::TEST):

2018-11-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Changing view scale sometimes does not zoom the page to the new initial scale when the page is zoomed in when ignoring meta viewport
        https://bugs.webkit.org/show_bug.cgi?id=191226
        <rdar://problem/45781765>

        Reviewed by Tim Horton.

        Add a missing check for `shouldIgnoreMetaViewport` when comparing TestOptions, to ensure that "ignore meta
        viewport" state doesn't unexpectedly persist after running a layout test that ignores meta viewport.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237784 and r237788.
        https://bugs.webkit.org/show_bug.cgi?id=191270

        Caused mediastream layout test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237784

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237788

2018-11-05  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=191268
        Remove unused bots.

        rubber-stamped by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test runner fails to respect default build type
        https://bugs.webkit.org/show_bug.cgi?id=190247

        Reviewed by Carlos Garcia Campos.

        Problem is it's looking for a release build, even though I've run set-webkit-configuration
        --debug. It should look for a debug build unless I explicitly pass --release.

        * glib/api_test_runner.py:
        (TestRunner.__init__):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add webrtcencoder bin to cleanup and refactor the way we set encoders
        https://bugs.webkit.org/show_bug.cgi?id=190674

        Reviewed by Philippe Normand.

        webrtcencoder is a simple GstBin with a set of well known GStreamer encoders which
        it can use to implement encoding for different formats exposing a trimmed down unified API.

        It also adds proper handling of H264 profiles.

        The added files follow GStreamer coding style as we aim at upstreaming the element
        in the future.

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py:

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test /webkit/WebKitSettings/webkit-settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191221

        Reviewed by Carlos Garcia Campos.

        This test ensures that MSE is disabled by default, but we now enable it by default, so
        reverse the semantics of the test.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r237031): [GTK] Test /webkit/WebKitWebView/settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191225

        Reviewed by Alejandro G. Castro.

        Fix a memory leak causing this test to fail.

        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):

2018-11-04  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Support WPE in the run-web-platform-tests script
        https://bugs.webkit.org/show_bug.cgi?id=191183

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/w3c/wpt_runner.py:
        (parse_args): Support `--wpe` as an argument that specifies WPE as the
        target port. Additionally, the `--display-server` flag now accepts
        `headless` as a valid value, enabling the WPE WebDriver to run in
        headless mode.

2018-11-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use C++14, not C++17
        https://bugs.webkit.org/show_bug.cgi?id=191101

        Reviewed by Alex Christensen.

        std::basic_string::data() returns a read-only const buffer in
        C++14.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString): Use std::vector instead of std::wstring.
        (createUTF8String): Use std::vector instead of std::string.

2018-11-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Fold common UIScriptController functionality on macOS and iOS into UIScriptControllerCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=191231

        Reviewed by Simon Fraser.

        Moves some UIScriptController method implementations specific to iOS and macOS into UIScriptControllerCocoa, so
        it can be shared between iOS-family and macOS platforms. See below for more details.

        No change in behavior.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::overridePreference):

        Add a method stub for DumpRenderTree.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):

        Unify these method implementations.

        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):

        Move the macOS implementation to UIScriptControllerCocoa. On iOS, this method currently only adds the web view
        to the window, and does not attempt to invoke the given completion block; additionally, invoking the completion
        block after a presentation update (as done on macOS) causes pageoverlay/overlay-remove-reinsert-view.html to
        begin failing consistently. This patch does not attempt to change behavior, but adds a FIXME describing this.

        (WTR::UIScriptController::overridePreference):
        (WTR::UIScriptController::findString):
        (WTR::UIScriptController::contentsOfUserInterfaceItem const):

        Move these from UIScriptControllerMac to UIScriptControllerCocoa, so that it is now implemented on iOS as well.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask): Deleted.
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.
        (WTR::UIScriptController::contentsOfUserInterfaceItem const): Deleted.
        (WTR::UIScriptController::findString): Deleted.
        (WTR::UIScriptController::removeViewFromWindow): Deleted.
        (WTR::UIScriptController::addViewToWindow): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAsyncTask): Deleted.
        (WTR::UIScriptController::contentsOfUserInterfaceItem const): Deleted.
        (WTR::UIScriptController::overridePreference): Deleted.
        (WTR::UIScriptController::findString): Deleted.
        (WTR::UIScriptController::removeViewFromWindow): Deleted.
        (WTR::UIScriptController::addViewToWindow): Deleted.
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.

2018-11-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (-[GetDisplayMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (TestWebKitAPI::GetDisplayMediaTest::promptForCapture):
        (TestWebKitAPI::TEST_F):

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for percentage height in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=191232

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BCF] Add support for block level non-replaced inflow height percentage
        https://bugs.webkit.org/show_bug.cgi?id=191229

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Resolve percentage height values.
        https://bugs.webkit.org/show_bug.cgi?id=191224

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-03  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm: Added.
        (TEST):

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r237761.

        Makes most API tests timeout and WK2 tests crash

        Reverted changeset:

        "Mac production builds should sign the network process xpc
        service with entitlements"
        https://bugs.webkit.org/show_bug.cgi?id=191209
        https://trac.webkit.org/changeset/237761

2018-11-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed API test gardening

        * TestWebKitAPI/glib/TestExpectations.json:

2018-11-02  Justin Michaud  <justin_michaud@apple.com>

        Add new global object and preliminary Worklets support for CSS painting api
        https://bugs.webkit.org/show_bug.cgi?id=190979

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm: Added.
        (TEST):

2018-11-02  Lucas Forschler  <lforschler@apple.com>

        Add Windows 10 archive bots
        https://bugs.webkit.org/show_bug.cgi?id=190964
        
        This Change updates the Apple Windows Buildbot configuration.
        - Add Windows 10 specific builders and testers for release and debug.
        - Refactor Windows -> Windows 7.
        - Remove Windows 7 Debug.

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2018-11-02  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Enable GST_DEBUG_NO_COLOR environment variable pass-through

        Rubber-stamped by Michael Catanzaro.

        This variable is useful to get rid of shell color escapes in tests stderr files.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):

2018-11-02  Aakash Jain  <aakash_jain@apple.com>

        Add Basic Django web app for OpenSource EWS
        https://bugs.webkit.org/show_bug.cgi?id=191091

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/EWS_app/manage.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/__init__.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/settings.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/urls.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/wsgi.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/admin.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/apps.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/migrations/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/tests.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/models/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/models/patch.py: Added.
        * BuildSlaveSupport/EWS_app/ews/views/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/views/patch.py: Added.

2018-11-02  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit should dispatch DOM events when a modifier key is pressed
        https://bugs.webkit.org/show_bug.cgi?id=190487

        Reviewed by Tim Horton.

        Update the code for renamed enumerations. For WebKitTestRunner, removed comment that does not
        match my observations when using the simulator to simulate iOS 12 and add support for testing
        right-hand side modifiers.

        * DumpRenderTree/mac/EventSendingController.mm:
        (modifierFlags):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        (-[EventSendingController setTouchModifier:value:]):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

2018-11-02  Chris Dumez  <cdumez@apple.com>

        [PSON] Reuse SuspendedPages' process when possible, for performance
        https://bugs.webkit.org/show_bug.cgi?id=191166

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for intrinsic width calculation
        https://bugs.webkit.org/show_bug.cgi?id=191144

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-01  Philippe Normand  <pnormand@igalia.com>

        [Apache] Self-signed SSL certificate RSA key is considered too weak
        https://bugs.webkit.org/show_bug.cgi?id=191156

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/system/pemfile.py:

2018-11-02  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r237678.

        * wpe/jhbuild.modules: The patch element apparently has to be a child
        of the branch in order for Jhbuild to properly detect and apply the
        patch file.

2018-11-01  Ross Kirsling  <ross.kirsling@sony.com>

        build-jsc --wincairo should update WinCairo libraries
        https://bugs.webkit.org/show_bug.cgi?id=191170

        Reviewed by Fujii Hironori.

        * Scripts/build-jsc:

2018-11-01  John Wilander  <wilander@apple.com>

        In WebCore::ResourceLoadObserver, use document.sessionID().isEphemeral() when possible and check for page existence when not
        https://bugs.webkit.org/show_bug.cgi?id=191119
        <rdar://problem/44176965>

        Reviewed by Chris Dumez.

        This is an API test for a WebKitLegacy WebView that is first closed and then
        JavaScript is handed a keyboard event.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/ClosingWebView.mm: Added.
        (-[ClosingWebViewThenSendingItAKeyDownEventLoadDelegate webView:didFinishLoadForFrame:]):
        (-[KeyboardEventListener handleEvent:]):
        (TestWebKitAPI::TEST):

2018-11-01  Sihui Liu  <sihui_liu@apple.com>

        Add a storage limit for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=190598
        <rdar://problem/44654715>

        Reviewed by Chris Dumez.

        Add API for testing.

        * DumpRenderTree/TestRunner.cpp:
        (setIDBPerOriginQuotaCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setIDBPerOriginQuota):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setIDBPerOriginQuota):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-11-01  Chris Dumez  <cdumez@apple.com>

        [PSON] WebPageProxy::receivedNavigationPolicyDecision() should not schedule the new load asynchronously when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=191076

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate init]):
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-11-01  Adrian Perez de Castro  <aperez@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147
        <rdar://problem/45726710>

        Unreviewed build fix.

        This adds the missing compilation guards in the WPE MiniBrowser.

        * MiniBrowser/wpe/main.cpp:
        (main): Condition GST includes and calls.

2018-10-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for inline-block elements.
        https://bugs.webkit.org/show_bug.cgi?id=191143

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Add missing libsoup patch to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=191149

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Added.

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/main.c:
        (main): Condition GST includes and calls

2018-10-31  Justin Michaud  <justin_michaud@apple.com>

        Add Justin Michaud to the list of WebKit Committers
        https://bugs.webkit.org/show_bug.cgi?id=191142

        * Scripts/webkitpy/common/config/contributors.json:

2018-10-31  Guillaume Emont  <guijemont@igalia.com>

        Don't run JIT tests on 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=191074

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:

2018-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Attachment dropped from one web view to another is missing its file wrapper
        https://bugs.webkit.org/show_bug.cgi?id=190530
        <rdar://problem/45232149>

        Reviewed by Tim Horton.

        Add a test to verify that copying different types of attachments and pasting in a new web view inserts
        attachments in the second web view that are backed by _WKAttachment objects, whose NSFileWrappers hold data that
        is equivalent to the original file wrappers used to insert attachments in the first web view.

        Existing API tests verify that when copying and pasting within a single web view, the pasted attachment element
        is still backed by the same NSFileWrapper instance.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2018-10-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove obsolete code for Visual Studio Express in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=190949

        Reviewed by Alex Christensen.

        Visual Studio 2017 Community is the alternative.

        * Scripts/webkitdirs.pm: Remove $willUseVCExpressWhenBuilding variable.
        (setupCygwinEnv): Remove obsolete code for Visual Studio Express.
        (buildVisualStudioProject): Ditto.
        (dieIfWindowsPlatformSDKNotInstalled): Deleted.
        (usingVisualStudioExpress): Deleted.

2018-10-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Direct2D] Support building DumpRenderTree for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=191093
        <rdar://problem/45685706>

        Unreviewed build fix.

        error C2065: 'renderTarget': undeclared identifier

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Restored the previous implementation.

2018-10-30  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=191072

        Reviewed by Brent Fulgham.

        Add platform scripts for building the PlayStation port.
        perl Tools/Scripts/build-webkit --playstation

        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineConfigurationProductDir):
        (isPlayStation): Added.
        (getMSBuildPlatformArgument): Added.
        (buildVisualStudioProject):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        * TestWebKitAPI/PlatformPlayStation.cmake: Added.

2018-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Support building DumpRenderTree for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=191093
        <rdar://problem/45685706>

        Reviewed by Alex Christensen.

        * DumpRenderTree/PixelDumpSupport.cpp: Update for Direct2D use.
        * DumpRenderTree/PlatformWin.cmake: Add support for Direct2D build.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.cpp: Added.
        (pixelDumpSystemFactory): Added.
        (printPNG): Create stub.
        (computeMD5HashStringForBitmapContext): Ditto.
        (dumpBitmap): Ditto.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.h: Added.
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):
        (BitmapContext::platformContext const):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Update to support Direct2D.
        * MiniBrowser/win/MiniBrowserReplace.h: Drive-by fix: The old WebKit
        logo is no longer available at this location. Switch to the new logo.

2018-10-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support alternate simctl list outputs
        https://bugs.webkit.org/show_bug.cgi?id=191090
        <rdar://problem/45684255>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_runtimes): Support alternative availability format.
        (SimulatedDeviceManager._create_device_with_runtime): Ditto.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_available_devices): Add iOS 12 with alternative availability format.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-10-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Fixes to the PublicSuffix implementation
        https://bugs.webkit.org/show_bug.cgi?id=191031

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        (TestWebKitAPI::TEST_F): Remove a test for a domain
        that is not registrable and shouldn't be tested there.

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * Scripts/check-inspector-strings:
        * Scripts/update-webkit-localizable-strings:
        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:
        English->en

2018-10-29  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Last aliased enumerator in OptionSet is printed; should print first enumerator
        https://bugs.webkit.org/show_bug.cgi?id=191036

        Reviewed by Andy Estes.

        Prefer the first enumerator (in parse order) when pretty-printing an OptionSet that is parameterized
        by an enum that contains two or more enumerators with the same value. For example, suppose
        you have the following enum:

        enum Flag {
            A = 1 << 0,
            AAlias = A,
        };

        Then pretty-printing OptionSet<Flag>(Flag::A) should print A instead of AAlias. A side effect of
        this change is that OptionSet<Flag>(Flag::AAlias) will also print A as its only member as we cannot
        differentiate between A and Alias. This should be acceptable in practice as aliased enumerators
        tend to be used in bounds checks as opposed to code that adds to a set.

        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders):
        * lldb/lldb_webkit.py:
        (WTFOptionSetProvider.update):
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple):
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_aliased_flag):

2018-10-29  Daniel Bates  <dabates@apple.com>

        [llbd-webkit] Add summaries for Document, Frame, and SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=191033

        Reviewed by Andy Estes.

        For Documents we display its origin, URL, whether it's in the main frame, and its page cache state.
        We display the same details in the summary for a Frame because its Document tends to be the most
        interesting aspect of it. For SecurityOrigin we display its origin, domain (affects cookie access),
        and whether the origin has universal access.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        Register new summary providers.

        (WebCoreSecurityOrigin_SummaryProvider):
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):
        Add new summary providers.

        (StdOptionalWrapper):
        (StdOptionalWrapper.__init__):
        (StdOptionalWrapper.has_value):
        (StdOptionalWrapper.value):
        Convenience data type that provides access to the fields of a std::optional<>.
        
        (WebCoreSecurityOriginProvider):
        (WebCoreSecurityOriginProvider.__init__):
        (WebCoreSecurityOriginProvider.is_unique):
        (WebCoreSecurityOriginProvider.scheme):
        (WebCoreSecurityOriginProvider.host):
        (WebCoreSecurityOriginProvider.port):
        (WebCoreSecurityOriginProvider.domain):
        (WebCoreSecurityOriginProvider.has_universal_access):
        (WebCoreSecurityOriginProvider.to_string):
        (WebCoreFrameProvider):
        (WebCoreFrameProvider.__init__):
        (WebCoreFrameProvider.is_main_frame):
        (WebCoreFrameProvider.document):
        (WebCoreDocumentProvider):
        (WebCoreDocumentProvider.__init__):
        (WebCoreDocumentProvider.url):
        (WebCoreDocumentProvider.origin):
        (WebCoreDocumentProvider.page_cache_state):
        (WebCoreDocumentProvider.frame):

2018-10-29  Chris Dumez  <cdumez@apple.com>

        [PSON] When Safari restores session state after launching, going back and forward does not swap processes
        https://bugs.webkit.org/show_bug.cgi?id=190975
        <rdar://problem/45059256>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Compute estimated margin top for inline formatting root's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=191018

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for inflow non replaced content height when the box is an inline formatting root.
        https://bugs.webkit.org/show_bug.cgi?id=191011

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        Missing from r237549

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for simple intruding floats.
        https://bugs.webkit.org/show_bug.cgi?id=190998

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Inline layout produces separate runs when float is present.
        https://bugs.webkit.org/show_bug.cgi?id=190980

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Do not force ENABLE_JIT=true when $forceCLoop is false.

        * Scripts/build-jsc:

2018-10-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Try to fix the xserver-xorg build in the Ubuntu LTS bot

        Unreviewed build fix

        The build fails because of some array-bound check related
        to strcmp() macro optimizations. Disabling selective Werrors
        when building xserver-xorg might get past this.

        * gtk/jhbuild.modules: Add --disable-selective-werror to xserver-xorg
        configuration.

2018-10-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Update API test expectations after r237383
        https://bugs.webkit.org/show_bug.cgi?id=186913

        Unreviewed gardening.

        * TestWebKitAPI/glib/TestExpectations.json: Remove
        passing TestSSL tests.

2018-10-28  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Add the WebKitVersion.h header
        https://bugs.webkit.org/show_bug.cgi?id=191015

        Reviewed by Michael Catanzaro.

        * MiniBrowser/wpe/main.cpp:
        (automationStartedCallback): Remove the FIXME and finally enable the
        webkit_application_info_set_version() call.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: Remove
        this FIXME as well and remove the custom WEBKIT_*_VERSION macros.

2018-10-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove obsolete code for vcxproj builds in build-api-tests and build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=190948

        Reviewed by Brent Fulgham.

        vcxproj files have been removed in Bug 154388.

        * Scripts/build-api-tests: Removed obsolete code to build vcproj.
        * Scripts/build-jsc:
        (buildMyProject): Ditto. Removed a condition of buiding bmalloc
        which is not used because Windows ports are using CMake.

2018-10-28  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Renamed IsRandom to
        IsEvenlyDistributed to reflect the fact that we're only testing the
        distribution. Added a test case that covers more table densities and
        the remove() operation.

2018-10-27  Charlie Turner  <cturner@igalia.com>

        [GTK] Add bubblewrap feature option
        https://bugs.webkit.org/show_bug.cgi?id=190981

        Reviewed by Xabier Rodriguez-Calvar.

        Without this, it was not possible to disable the bubblewrap sandbox
        from the webkit build scripts.

        * Scripts/webkitperl/FeatureList.pm:

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237479 and r237484.
        https://bugs.webkit.org/show_bug.cgi?id=190978

        broke JSC on iOS (Requested by tadeuzagallo on #webkit).

        Reverted changesets:

        "New bytecode format for JSC"
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237479

        "Gardening: Build fix after r237479."
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237484

2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Do not force ENABLE_JIT=true when $forceCLoop is false.

        * Scripts/build-jsc:

2018-10-26  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Updated the Random_IsRandom to
        more thoroughly test for randomness.

2018-10-26  Antti Koivisto  <antti@apple.com>

        hashSet.remove(hashSet.random()) doesn't build
        https://bugs.webkit.org/show_bug.cgi?id=190953

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):

2018-10-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Layout floats as part of the inline content
        https://bugs.webkit.org/show_bug.cgi?id=190942

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-26  Alicia Boya García  <aboya@igalia.com>

        [MSE][WTF][Media] Invalid MediaTime should be falsy
        https://bugs.webkit.org/show_bug.cgi?id=190893

        Reviewed by Jer Noble.

        This patch adds additional API tests for the conversions from
        MediaTime to boolean.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST):

2018-10-25  Chris Dumez  <cdumez@apple.com>

        [PSON] Navigating cross-site with locked history but unlocked back/forward list fails to create a new BackForwardListItem
        https://bugs.webkit.org/show_bug.cgi?id=190915
        <rdar://problem/45059069>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a watchlist message rule to warn about feature checking new inspector protocol changes
        https://bugs.webkit.org/show_bug.cgi?id=190896

        Reviewed by Matt Baker.

        * Scripts/webkitpy/common/config/watchlist:

2018-10-25  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        Unit testing is fun and easy!

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::ZeroHash::hash):
        (TestWebKitAPI::TEST):

2018-10-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237331): DismissingActionSheetShouldNotDismissPresentingViewController times out
        https://bugs.webkit.org/show_bug.cgi?id=190897

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::TEST):
        Disable the test for now.

2018-10-24  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete macOS version guards
        https://bugs.webkit.org/show_bug.cgi?id=190887

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (__simulated_forceClickAssociatedEventsMask):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:]):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-24  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE] Fix CMake rules in for TestWebKitAPIBase library building in developer mode
        https://bugs.webkit.org/show_bug.cgi?id=190328

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWPE.cmake:

2018-10-24  Chris Dumez  <cdumez@apple.com>

        [PSON] When navigating back and forth, 'about:blank' shows up in the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=190846
        <rdar://problem/45058938>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-24  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] TestSSL failing because of missing libsoup patch
        https://bugs.webkit.org/show_bug.cgi?id=190869

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add the patch below to fix the API test TestSSL
        * gtk/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Added.

2018-10-23  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Rename old GPU* implementation files to GPULegacy* for WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190817

        Reviewed by Dean Jackson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyBuffer.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyCommandQueue.mm: Copied from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyDevice.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyFunction.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyLibrary.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyTest.h: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h.

2018-10-23  Chris Dumez  <cdumez@apple.com>

        [PSON] Add support for cross-site client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=190806
        <rdar://problem/45047344>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate _webView:willPerformClientRedirectToURL:delay:]):
        (-[PSONNavigationDelegate _webView:didPerformClientRedirectFromURL:toURL:]):

2018-10-23  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Pass full certificate chain in CertificateInfo coder
        https://bugs.webkit.org/show_bug.cgi?id=190789

        Reviewed by Michael Catanzaro.

        When the network process serializes certificate data to other
        processes through the argument coders, the certificate chain, if
        present, is lost. In practice this means that applications using
        the public API to process certificate info have no details on the
        certificate chain, other than the very basics included in the
        certificate. Serialize the entire chain if available in the
        certificate.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL): Test that the self-signed certificate has no bogus
        issuer certificate.

2018-10-22  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237331): InteractionDeadlockAfterCrash API test fails
        https://bugs.webkit.org/show_bug.cgi?id=190801
        <rdar://problem/43674361>

        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        (TEST):
        Use a parented WKWebView for this test, otherwise none of the assertions
        about gesture recognizers work anymore.

2018-10-22  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r234081): TestWebKitAPI.VideoControlsManager.VideoControlsManagerAudioElementFollowingUserInteraction is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=187972

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST): Disable the flaky test.

2018-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] fast/forms/datalist/datalist-show-hide.html fails
        https://bugs.webkit.org/show_bug.cgi?id=190777

        Reviewed by Tim Horton.

        Implement isShowingDataListSuggestions on iOS. See below for more details.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingDataListSuggestions const):

        Add a stub implementation for DumpRenderTree.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isShowingDataListSuggestions const):

        Move this stub implementation to !PLATFORM(COCOA).

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::forEachViewInHierarchy):

        Add a helper function to apply a given function to a UIView and each of its subviews, recursively.

        (WTR::UIScriptController::isShowingDataListSuggestions const):

        For iOS, return whether the UIRemoteKeyboardWindow contains a subview of type WKDataListSuggestionsPickerView.

2018-10-19  Dan Bernstein  <mitz@apple.com>

        [macOS] MiniBrowser has an unused injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=190770

        Reviewed by Tim Horton.

        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Removed the MiniBrowserBundle target,
          the Copy Bundle build phase in the MiniBrowser target, and references to removed files.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.h: Removed.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.m: Removed.
        * MiniBrowser/mac/Bundle: Removed.

2018-10-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] Can't pick datalist suggestions in a stock WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190621
        <rdar://problem/45310649>

        Reviewed by Tim Horton.

        Add a UIScriptController hook to resign first responder on WKWebView. See LayoutTests/ChangeLog for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::resignFirstResponder):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::makeWebViewFirstResponder):

        Implement this method stub on iOS, to ensure that TestController::resetStateToConsistentValues restores first
        responder on the WKWebView when running iOS layout tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        After resigning first responder to dismiss any on-screen keyboard, ensure that we restore first responder.

2018-10-19  Dean Jackson  <dino@apple.com>

        ASSERTION FAILED: !frame().animation().hasAnimations() in WebCore::FrameView::didDestroyRenderTree()
        https://bugs.webkit.org/show_bug.cgi?id=186946
        <rdar://problem/41724248>

        Reviewed by Antoine Quint.

        If the incoming test has different enableWebAnimationsCSSIntegration options,
        then we need to create a new WebView.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::webViewIsCompatibleWithOptions const):

2018-10-19  Charlie Turner  <cturner@igalia.com>

        [EME] Fix crash during tracing in  gst_qtdemux_request_protection_context
        https://bugs.webkit.org/show_bug.cgi?id=190738

        Reviewed by Xabier Rodriguez-Calvar.

        Add a GStreamer patch to avoid crashing when the run-time logging
        level is TRACE. There was a missing null check which caused many
        tests to crash.

        * gstreamer/patches/gst-plugins-good-0013-Avoid-warning-when-reporting-about-decryptors.patch: Added.

2018-10-18  Alicia Boya García  <aboya@igalia.com>

        [Media] Use nanoseconds as MaximumTimeScale
        https://bugs.webkit.org/show_bug.cgi?id=190631

        Rebased MediaTime tests covering timescales over the maximum.

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST):

2018-10-18  Dean Johnson  <dean_johnson@apple.com>

        clean-webkit pulls in many unnecessary dependencies in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=190732

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/host.py:
        (Host.__init__): Split out 'bugs', 'bugzilla', and 'web' to only be created when used.
        (Host):
        (Host.bugs):
        (Host.bugzilla):
        (Host.web):

2018-10-18  Chris Dumez  <cdumez@apple.com>

        [PSON] SuspendedPages do not report meaningful domains in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=190721
        <rdar://problem/45059699>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.h:
        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback):
        (TestRunner::staticFunctions):
        (TestRunner::callUIScriptCallback):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        * DumpRenderTree/ios/DumpRenderTreeAppMain.mm:
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        * DumpRenderTree/ios/TextInputControllerIOS.m:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (destroyWebViewAndOffscreenWindow):
        (resetWebPreferencesToConsistentValues):
        (setDefaultsToConsistentValuesForTesting):
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        (addTestPluginsToPluginSearchPath):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (DumpRenderTreeMain):
        (dumpFrameAsPDF):
        (dumpBackForwardListForAllWindows):
        (updateDisplay):
        (dump):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        (displayWebView):
        (displayAndTrackRepaintsWebView):
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]):
        (-[DumpRenderTreeWindow webView]):
        (-[DumpRenderTreeWindow webViewStartedAcceleratedCompositing:]):
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController dealloc]):
        (-[EventSendingController currentEventTime]):
        (-[EventSendingController clearKillRing]):
        (modifierFlags):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController scalePageBy:atX:andY:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/LayoutTestHelper.m:
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider timerFired]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMainFrameIsFirstResponder):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::setUseDashboardCompatibilityMode):
        (TestRunner::isCommandEnabled):
        (TestRunner::inspectorTestStubURL):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (TestRunner::abortModal):
        (TestRunner::setTextDirection):
        (TestRunner::addChromeInputField):
        (TestRunner::removeChromeInputField):
        (TestRunner::focusWebView):
        (TestRunner::setBackingScaleFactor):
        (TestRunner::imageCountInGeneralPasteboard const):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate modalWindowWillClose:]):
        (-[UIDelegate webViewRunModal:]):
        (-[UIDelegate webView:supportsFullScreenForElement:withKeyboard:]):
        (-[UIDelegate dealloc]):
        * Scripts/check-for-inappropriate-objc-class-names:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * TestRunnerShared/spi/UIKitTestSPI.h:
        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        * TestWebKitAPI/Tests/WebCore/MarkedText.cpp:
        (WebCore::operator<<):
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp:
        * TestWebKitAPI/Tests/WebKit/NoHistoryItemScrollToFragment.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLs.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRangeHandle.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRangeHandlePlugIn.mm:
        (-[BundleRangeHandlePlugIn webProcessPlugInBrowserContextController:didFinishDocumentLoadForFrame:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Coding.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        (createWebViewWithCustomPasteboardDataEnabled):
        * TestWebKitAPI/Tests/WebKitCocoa/Copying.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoAfterNextPresentationUpdateAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FixedLayoutSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Geolocation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        (defaultWebsiteCacheDirectory):
        (defaultApplicationCacheDirectory):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NSFileManagerExtras.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlaying.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RenderedImageWithOptions.mm:
        (runTestWithWidth):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderedImageWithOptionsPlugIn.mm:
        (-[RenderedImageWithOptionsPlugIn renderImageWithWidth:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShrinkToFit.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VisibleContentRect.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyRichTextWithMultipleAttachments):
        (platformCopyRichTextWithImage):
        (platformCopyPNG):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewTargetForAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewStablePresentationUpdateCallback.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/AccessingPastedImage.mm:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/RenderingProgressTests.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        * TestWebKitAPI/Tests/ios/SynchronousTimeoutTests.mm:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegate.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFinishNavigation]):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/TestWKWebViewController.h:
        * TestWebKitAPI/ios/TestWKWebViewController.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName):
        (WTR::TestController::networkProcessName):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::imageCountInGeneralPasteboard const):
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:

2018-10-18  Chris Dumez  <cdumez@apple.com>

        [PSON] Cap number of SuspendedPageProxy objects and allow a WebPageProxy to have more than one
        https://bugs.webkit.org/show_bug.cgi?id=190688
        <rdar://problem/45354095>

        Reviewed by Antti Koivisto.

        Extended API test coverage to confirm that:
        - We do not accumulate more than 3 suspended processes.
        - We can navigate back 3 times and use the page cache for each of these loads.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable the datalist element by default on iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=190594
        <rdar://problem/45281159>

        Reviewed by Ryosuke Niwa and Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Certain tags should identify their context to iOS API
        https://bugs.webkit.org/show_bug.cgi?id=190622
        <rdar://problem/45308194>

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::stringAttributeValue):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringAttributeValue):

2018-10-16  Sihui Liu  <sihui_liu@apple.com>

        Add a switch for Web SQL
        https://bugs.webkit.org/show_bug.cgi?id=190271

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-10-16  Alex Christensen  <achristensen@webkit.org>

        Remove InjectedBundleBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=190640

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::dumpBackForwardListsForAllPages):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::prepare):
        (WTR::InjectedBundlePage::dumpHistory):
        (WTR::hasPrefix): Deleted.
        (WTR::compareByTargetName): Deleted.
        (WTR::dumpBackForwardListItem): Deleted.
        (WTR::InjectedBundlePage::dumpBackForwardList): Deleted.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearBackForwardList):

2018-10-16  Dominik Infuehr  <dinfuehr@igalia.com>

        Unreviewed, added myself to contributors.json.

        * Scripts/webkitpy/common/config/contributors.json:

2018-10-16  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag and bindings for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190237

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK Ubuntu LTS Jhbuild prospective build fix

        * gstreamer/jhbuild.modules:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        [GTK][JHBuild] Disable libmount support in glib

        Rubber-stamped by Alejandro G. Castro.

        This feature doesn't seem required for our setup.

        * gtk/jhbuild.modules:

2018-10-15  Justin Fan  <justin_fan@apple.com>

        Add WebGPU 2018 feature flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=190509

        Reviewed by Dean Jackson.

        Re-add ENABLE_WEBGPU, an experimental feature flag, and a RuntimeEnabledFeature
        for the 2018 WebGPU prototype.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Update bot configuration for Sierra archive queues
        https://bugs.webkit.org/show_bug.cgi?id=190605

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        * Scripts/webkitperl/FeatureList.pm: Added ENABLE_DARK_MODE_CSS as dark-mode-css.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added ENABLE_DARK_MODE_CSS.

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [JHBuild] Add xdg-dbus-proxy module
        https://bugs.webkit.org/show_bug.cgi?id=190589

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules:

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Add new sandboxing dependencies to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=190588

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Experiment: target=_blank on anchors should imply rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=190481

        Reviewed by Alex Christensen.

        Add API test coverage to make sure we can now swap process when target=_blank
        is specified on an anchor but rel=noopener is not.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Can't select text after dismissing the keyboard when changing focus
        https://bugs.webkit.org/show_bug.cgi?id=190563
        <rdar://problem/44613559>

        Reviewed by Tim Horton.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingKeyboard const):

        Add a new UIScriptController method that returns whether the keyboard is shown. See `ui-helper.js` for more
        details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isShowingKeyboard const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:

        Also rename the `isShowingKeyboard` Objective-C property to the more canonical `showingKeyboard`, with
        `isShowingKeyboard` as the getter method.

        (-[TestRunnerWKWebView _invokeShowKeyboardCallbackIfNecessary]):
        (-[TestRunnerWKWebView _invokeHideKeyboardCallbackIfNecessary]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingKeyboard const):

2018-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix JSC tests after WebGPUShadingLanguageRI directory was removed in r237115.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Remove wsl-tests.yaml.

2018-10-15  Christopher Reid  <chris.reid@sony.com>

        [Curl][WinCairo] Add Public Suffix support to WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=183060

        Reviewed by Alex Christensen.

        Share mac's PublicSuffix tests with all ports.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        * TestWebKitAPI/Tests/mac/PublicSuffix.mm: Removed.

2018-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Migrated WebGPUShadingLanguageRI to the W3C
        https://bugs.webkit.org/show_bug.cgi?id=190555

        Unreviewed.

        Migrated to https://github.com/gpuweb/WHLSL/tree/master/Source

        * WebGPUShadingLanguageRI/AddressSpace.js: Removed.
        * WebGPUShadingLanguageRI/All.js: Removed.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js: Removed.
        * WebGPUShadingLanguageRI/AnonymousVariable.js: Removed.
        * WebGPUShadingLanguageRI/ArrayRefType.js: Removed.
        * WebGPUShadingLanguageRI/ArrayType.js: Removed.
        * WebGPUShadingLanguageRI/Assignment.js: Removed.
        * WebGPUShadingLanguageRI/AutoWrapper.js: Removed.
        * WebGPUShadingLanguageRI/Block.js: Removed.
        * WebGPUShadingLanguageRI/BoolLiteral.js: Removed.
        * WebGPUShadingLanguageRI/Break.js: Removed.
        * WebGPUShadingLanguageRI/BuiltInSemantic.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinMatrixGetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinMatrixSetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinVectorGetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinVectorSetter.js: Removed.
        * WebGPUShadingLanguageRI/CallExpression.js: Removed.
        * WebGPUShadingLanguageRI/CallFunction.js: Removed.
        * WebGPUShadingLanguageRI/Casts.js: Removed.
        * WebGPUShadingLanguageRI/Check.js: Removed.
        * WebGPUShadingLanguageRI/CheckLiteralTypes.js: Removed.
        * WebGPUShadingLanguageRI/CheckLoops.js: Removed.
        * WebGPUShadingLanguageRI/CheckNativeFuncStages.js: Removed.
        * WebGPUShadingLanguageRI/CheckRecursion.js: Removed.
        * WebGPUShadingLanguageRI/CheckRecursiveTypes.js: Removed.
        * WebGPUShadingLanguageRI/CheckReturns.js: Removed.
        * WebGPUShadingLanguageRI/CheckTypesWithArguments.js: Removed.
        * WebGPUShadingLanguageRI/CheckUnreachableCode.js: Removed.
        * WebGPUShadingLanguageRI/CheckWrapped.js: Removed.
        * WebGPUShadingLanguageRI/Checker.js: Removed.
        * WebGPUShadingLanguageRI/CloneProgram.js: Removed.
        * WebGPUShadingLanguageRI/CommaExpression.js: Removed.
        * WebGPUShadingLanguageRI/ConstexprFolder.js: Removed.
        * WebGPUShadingLanguageRI/Continue.js: Removed.
        * WebGPUShadingLanguageRI/ConvertPtrToArrayRefExpression.js: Removed.
        * WebGPUShadingLanguageRI/CreateLiteral.js: Removed.
        * WebGPUShadingLanguageRI/CreateLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/DereferenceExpression.js: Removed.
        * WebGPUShadingLanguageRI/DoWhileLoop.js: Removed.
        * WebGPUShadingLanguageRI/DotExpression.js: Removed.
        * WebGPUShadingLanguageRI/EArrayRef.js: Removed.
        * WebGPUShadingLanguageRI/EBuffer.js: Removed.
        * WebGPUShadingLanguageRI/EBufferBuilder.js: Removed.
        * WebGPUShadingLanguageRI/EPtr.js: Removed.
        * WebGPUShadingLanguageRI/EnumLiteral.js: Removed.
        * WebGPUShadingLanguageRI/EnumMember.js: Removed.
        * WebGPUShadingLanguageRI/EnumType.js: Removed.
        * WebGPUShadingLanguageRI/EvaluationCommon.js: Removed.
        * WebGPUShadingLanguageRI/Evaluator.js: Removed.
        * WebGPUShadingLanguageRI/Expression.js: Removed.
        * WebGPUShadingLanguageRI/ExpressionFinder.js: Removed.
        * WebGPUShadingLanguageRI/ExternalOrigin.js: Removed.
        * WebGPUShadingLanguageRI/Field.js: Removed.
        * WebGPUShadingLanguageRI/FindHighZombies.js: Removed.
        * WebGPUShadingLanguageRI/FlattenedStructOffsetGatherer.js: Removed.
        * WebGPUShadingLanguageRI/FloatLiteral.js: Removed.
        * WebGPUShadingLanguageRI/FloatLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/FoldConstexprs.js: Removed.
        * WebGPUShadingLanguageRI/ForLoop.js: Removed.
        * WebGPUShadingLanguageRI/Func.js: Removed.
        * WebGPUShadingLanguageRI/FuncAttribute.js: Removed.
        * WebGPUShadingLanguageRI/FuncDef.js: Removed.
        * WebGPUShadingLanguageRI/FuncNumThreadsAttribute.js: Removed.
        * WebGPUShadingLanguageRI/FuncParameter.js: Removed.
        * WebGPUShadingLanguageRI/FunctionLikeBlock.js: Removed.
        * WebGPUShadingLanguageRI/HighZombieFinder.js: Removed.
        * WebGPUShadingLanguageRI/IdentityExpression.js: Removed.
        * WebGPUShadingLanguageRI/IfStatement.js: Removed.
        * WebGPUShadingLanguageRI/IndexExpression.js: Removed.
        * WebGPUShadingLanguageRI/InferTypesForCall.js: Removed.
        * WebGPUShadingLanguageRI/Inline.js: Removed.
        * WebGPUShadingLanguageRI/Inliner.js: Removed.
        * WebGPUShadingLanguageRI/IntLiteral.js: Removed.
        * WebGPUShadingLanguageRI/IntLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/Intrinsics.js: Removed.
        * WebGPUShadingLanguageRI/LayoutBuffers.js: Removed.
        * WebGPUShadingLanguageRI/Lexer.js: Removed.
        * WebGPUShadingLanguageRI/LexerToken.js: Removed.
        * WebGPUShadingLanguageRI/LiteralTypeChecker.js: Removed.
        * WebGPUShadingLanguageRI/LogicalExpression.js: Removed.
        * WebGPUShadingLanguageRI/LogicalNot.js: Removed.
        * WebGPUShadingLanguageRI/LoopChecker.js: Removed.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js: Removed.
        * WebGPUShadingLanguageRI/MakePtrExpression.js: Removed.
        * WebGPUShadingLanguageRI/MatrixType.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLCompileResult.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLConstexprEmitter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionForwardDeclaration.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLInsertTrapParameter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLNameMangler.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLNativeFunctionCall.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributes.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributesMap.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeUnifier.js: Removed.
        * WebGPUShadingLanguageRI/Metal/TypeOf.js: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/.gitignore: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/AppIcon.appiconset/Contents.json: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/Contents.json: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Base.lproj/Main.storyboard: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Info.plist: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/WHLSL.entitlements: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/_SharedMetal.txt: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/main.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/Info.plist: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/WHLSL_ToyTests.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Removed.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.js: Removed.
        * WebGPUShadingLanguageRI/NameContext.js: Removed.
        * WebGPUShadingLanguageRI/NameFinder.js: Removed.
        * WebGPUShadingLanguageRI/NameResolver.js: Removed.
        * WebGPUShadingLanguageRI/NativeFunc.js: Removed.
        * WebGPUShadingLanguageRI/NativeType.js: Removed.
        * WebGPUShadingLanguageRI/Node.js: Removed.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver.js: Removed.
        * WebGPUShadingLanguageRI/NullLiteral.js: Removed.
        * WebGPUShadingLanguageRI/NullType.js: Removed.
        * WebGPUShadingLanguageRI/OperatorAnderIndexer.js: Removed.
        * WebGPUShadingLanguageRI/OperatorArrayRefLength.js: Removed.
        * WebGPUShadingLanguageRI/OriginKind.js: Removed.
        * WebGPUShadingLanguageRI/OverloadResolutionFailure.js: Removed.
        * WebGPUShadingLanguageRI/Parse.js: Removed.
        * WebGPUShadingLanguageRI/Prepare.js: Removed.
        * WebGPUShadingLanguageRI/Program.js: Removed.
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js: Removed.
        * WebGPUShadingLanguageRI/PropertyAccessExpression.js: Removed.
        * WebGPUShadingLanguageRI/PropertyResolver.js: Removed.
        * WebGPUShadingLanguageRI/PtrType.js: Removed.
        * WebGPUShadingLanguageRI/ReadModifyWriteExpression.js: Removed.
        * WebGPUShadingLanguageRI/RecursionChecker.js: Removed.
        * WebGPUShadingLanguageRI/RecursiveTypeChecker.js: Removed.
        * WebGPUShadingLanguageRI/ReferenceType.js: Removed.
        * WebGPUShadingLanguageRI/ResolveNames.js: Removed.
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js: Removed.
        * WebGPUShadingLanguageRI/ResolveProperties.js: Removed.
        * WebGPUShadingLanguageRI/ResolveTypeDefs.js: Removed.
        * WebGPUShadingLanguageRI/ResourceSemantic.js: Removed.
        * WebGPUShadingLanguageRI/Return.js: Removed.
        * WebGPUShadingLanguageRI/ReturnChecker.js: Removed.
        * WebGPUShadingLanguageRI/ReturnException.js: Removed.
        * WebGPUShadingLanguageRI/Rewriter.js: Removed.
        * WebGPUShadingLanguageRI/SPIR-V.js: Removed.
        * WebGPUShadingLanguageRI/SPIRV.html: Removed.
        * WebGPUShadingLanguageRI/SPIRVCodegen.js: Removed.
        * WebGPUShadingLanguageRI/SPIRVTypeAnalyzer.js: Removed.
        * WebGPUShadingLanguageRI/SPIRVVariableAnalyzer.js: Removed.
        * WebGPUShadingLanguageRI/Sampler.js: Removed.
        * WebGPUShadingLanguageRI/Semantic.js: Removed.
        * WebGPUShadingLanguageRI/SpecializationConstantSemantic.js: Removed.
        * WebGPUShadingLanguageRI/StageInOutSemantic.js: Removed.
        * WebGPUShadingLanguageRI/StandardLibrary.js: Removed.
        * WebGPUShadingLanguageRI/StatementCloner.js: Removed.
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js: Removed.
        * WebGPUShadingLanguageRI/StructType.js: Removed.
        * WebGPUShadingLanguageRI/SwitchCase.js: Removed.
        * WebGPUShadingLanguageRI/SwitchStatement.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeArrayOperatorLength.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeCopyConstructorOperator.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeDefaultConstructorOperator.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Removed.
        * WebGPUShadingLanguageRI/TernaryExpression.js: Removed.
        * WebGPUShadingLanguageRI/Test.html: Removed.
        * WebGPUShadingLanguageRI/Test.js: Removed.
        * WebGPUShadingLanguageRI/Texture.js: Removed.
        * WebGPUShadingLanguageRI/TextureOperations.js: Removed.
        * WebGPUShadingLanguageRI/TrapStatement.js: Removed.
        * WebGPUShadingLanguageRI/Type.js: Removed.
        * WebGPUShadingLanguageRI/TypeDef.js: Removed.
        * WebGPUShadingLanguageRI/TypeDefResolver.js: Removed.
        * WebGPUShadingLanguageRI/TypeOverloadResolutionFailure.js: Removed.
        * WebGPUShadingLanguageRI/TypeRef.js: Removed.
        * WebGPUShadingLanguageRI/TypedValue.js: Removed.
        * WebGPUShadingLanguageRI/UintLiteral.js: Removed.
        * WebGPUShadingLanguageRI/UintLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/UnificationContext.js: Removed.
        * WebGPUShadingLanguageRI/UnreachableCodeChecker.js: Removed.
        * WebGPUShadingLanguageRI/Value.js: Removed.
        * WebGPUShadingLanguageRI/VariableDecl.js: Removed.
        * WebGPUShadingLanguageRI/VariableRef.js: Removed.
        * WebGPUShadingLanguageRI/VectorType.js: Removed.
        * WebGPUShadingLanguageRI/VisitingSet.js: Removed.
        * WebGPUShadingLanguageRI/Visitor.js: Removed.
        * WebGPUShadingLanguageRI/WLexicalError.js: Removed.
        * WebGPUShadingLanguageRI/WSyntaxError.js: Removed.
        * WebGPUShadingLanguageRI/WTrapError.js: Removed.
        * WebGPUShadingLanguageRI/WTypeError.js: Removed.
        * WebGPUShadingLanguageRI/WhileLoop.js: Removed.
        * WebGPUShadingLanguageRI/WrapChecker.js: Removed.
        * WebGPUShadingLanguageRI/index.html: Removed.
        * WebGPUShadingLanguageRI/spirv.core.grammar.json: Removed.
        * WebGPUShadingLanguageRI/wsl-tests.yaml: Removed.

2018-10-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Disable MSE build support on Debian and Ubuntu LTS bots
        https://bugs.webkit.org/show_bug.cgi?id=190581

        Reviewed by Michael Catanzaro.

        These bots don't use JHBuild and their host GStreamer version is
        too old for the GStreamer MSE backend. Version 1.14 is needed at least.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Use pragma once in WTF
        https://bugs.webkit.org/show_bug.cgi?id=190527

        Reviewed by Chris Dumez.

        Put WorkQueue in namespace DRT so it does not conflict with WTF::WorkQueue.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::queueLoadHTMLString):
        (TestRunner::queueLoadAlternateHTMLString):
        (TestRunner::queueBackNavigation):
        (TestRunner::queueForwardNavigation):
        (TestRunner::queueLoadingScript):
        (TestRunner::queueNonLoadingScript):
        (TestRunner::queueReload):
        * DumpRenderTree/WorkQueue.cpp:
        (WorkQueue::singleton): Deleted.
        (WorkQueue::WorkQueue): Deleted.
        (WorkQueue::queue): Deleted.
        (WorkQueue::dequeue): Deleted.
        (WorkQueue::count): Deleted.
        (WorkQueue::clear): Deleted.
        (WorkQueue::processWork): Deleted.
        * DumpRenderTree/WorkQueue.h:
        (WorkQueue::setFrozen): Deleted.
        * DumpRenderTree/WorkQueueItem.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        (TestRunner::queueLoad):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::processWork):
        (FrameLoadDelegate::locationChangeDone):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        (TestRunner::queueLoad):

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Option::useAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=190567

        Reviewed by Saam Barati.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-15  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Silence a unused-parameter warning

        Unreviewed.
        * MiniBrowser/wpe/main.cpp:
        (decidePermissionRequest):

2018-10-12  Guillaume Emont  <guijemont@igalia.com>

        [Tools][webkitpy] fix handling of JSCTESTS_OPTIONS
        https://bugs.webkit.org/show_bug.cgi?id=190537

        Reviewed by Alexey Proskuryakov.

        In DeprecatedPort.run_javascriptcore_tests_command() JSCTESTS_OPTIONS
        needs to be split before adding it to the command since it is treated
        as a list of args.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):

2018-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view
        https://bugs.webkit.org/show_bug.cgi?id=190504
        <rdar://problem/45117760>

        Reviewed by Tim Horton.

        Teach UIScriptController to set WKWebView's view scale via a new `setViewScale` method, supported in WebKit2 on
        macOS and iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setViewScale):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setViewScale):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setViewScale):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm: Added.

        Add a new file for UIScriptController methods on Cocoa platforms.

        (WTR::UIScriptController::setViewScale):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

        Ensure that _viewScale is reset to 1 after running a layout test.

2018-10-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Rename iOS-11-Simulator-Tests-EWS to iOS-11-Simulator-WK2-Tests-EWS
        https://bugs.webkit.org/show_bug.cgi?id=190536

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/config.json: Renamed iOS-11-Simulator-Tests-EWS to iOS-11-Simulator-WK2-Tests-EWS.

2018-10-11  Youenn Fablet  <youenn@apple.com>

        IOS 12 - Service worker cache not shared when added to homescreen
        https://bugs.webkit.org/show_bug.cgi?id=190269
        <rdar://problem/45009961>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Add test to ensure that CacheStorage use the default website data store parameters.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        Clicking on bookmarklet crashes at NavigationState::willRecordNavigationSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=190476
        <rdar://problem/32757191>

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Tests/WebKitCocoa/SnapshotStore.mm:
        (TEST):
        Add a test that we don't crash.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237037): Cannot use webkit-patch upload, always fails with unknown 'cc_radar'

        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        Fix the name of the variable that the --cc-radar option writes into.

2018-10-10  Dean Jackson  <dino@apple.com>

        Add --cc-radar option to webkit-patch bug creation
        https://bugs.webkit.org/show_bug.cgi?id=190451
        <rdar://problem/45176671>

        Reviewed by Antoine Quint.

        Add a new command line option to automatically
        CC radar to new or updated bugs.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs):
        * Scripts/webkitpy/tool/commands/upload.py:
        (CreateBug.__init__):
        (CreateBug.execute):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_prepare_with_cc):
        (test_prepare_with_radar):
        (test_prepare_with_cc_and_radar):
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.options):
        (CreateBug.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2018-10-11  Claudio Saavedra  <csaavedra@igalia.com>

        [GStreamer] Do not build gstgtk plugins
        https://bugs.webkit.org/show_bug.cgi?id=190463

        Reviewed by Xabier Rodriguez-Calvar.

        These plugins pull a GTK+ dependency that, at least in WPE,
        is unnecessary. The GTK+ port doesn't need it either, as far
        as I can tell.

        * gstreamer/jhbuild.modules: Disable gstgtk plugins

2018-10-11  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add mediaDevices.enumerateDevices support
        https://bugs.webkit.org/show_bug.cgi?id=185761

        Reviewed by Youenn Fablet.

        Added new API test for the mediaDevices.enumerateDevices:
        usermedia-enumeratedevices-permission-check. And a new API test
        for the WebsiteDataStore: testWebsiteDataDeviceIdHashSalt.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback): Added a new section to the about:data
        webpage to include the information about the hash salt.
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewUserMediaEnumerateDevicesPermissionCheck): Added the
        new test checking the enumerateDevices API when permission is
        denied and when permission is allowed for the origin.
        (beforeAll): Defined the new test.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback): Register a new URI for the enumerateDevices.
        (testWebsiteDataConfiguration): Remove the hash salts from the
        directories.
        (testWebsiteDataDeviceIdHashSalt): New test cheking the
        enumerateDevices API.
        (beforeAll): Added the new test testWebsiteDataDeviceIdHashSalt to
        the init structure.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView): Make sure the media-stream is
        activated in the webView.

2018-10-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add WinCairo to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=188345

        Reviewed by Lucas Forschler.

        * TestResultServer/static-dashboards/builders.jsonp: Regenerated by generate_builders_json.py.
        * TestResultServer/static-dashboards/flakiness_dashboard.js: Added a new platform 'WINCAIRO'.

2018-10-10  Dean Jackson  <dino@apple.com>

        [WHSL -> MSL] Annotate semantics correctly in generated MSL
        https://bugs.webkit.org/show_bug.cgi?id=190452
        <rdar://problem/45178272>

        Reviewed by Myles Maxfield.

        Correctly label the appropriate semantics as [[position]]
        and [[color(N)]].

        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Identify position
        and color attributes. Also use the semantic's index rather than
        a counter.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Use a <pre> for
        output, and only include the actual shader code.

2018-10-10  Ross Kirsling  <ross.kirsling@sony.com>

        build-webkit --inspector-frontend shouldn't have a nonzero exit code
        https://bugs.webkit.org/show_bug.cgi?id=190430

        Reviewed by Brian Burg.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        --inspector-frontend should only be popped off of argv by determineIsInspectorFrontend;
        it shouldn't be re-inserted as a CLI option by argumentsForConfiguration.

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        Share more WKShareSheet code between macOS and iOS, and fix a few bugs
        https://bugs.webkit.org/show_bug.cgi?id=190420

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        Change the testing mechanism for the share sheet such that we up-front
        set that it should immediately return with a particular state, instead
        of programmatically dismissing the sheet.

        Otherwise, running the tests on macOS doesn't work, because we pop
        a context menu, which spins the runloop and prevents dismissal from
        going through.

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=190429

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:
        (TestWebKitAPI::TEST_F):

2018-10-10  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): Assertion hit under WebPageProxy::didNavigateWithNavigationData()
        https://bugs.webkit.org/show_bug.cgi?id=190418
        <rdar://problem/45059769>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-10  Guillaume Emont  <guijemont@igalia.com>

        [JSCOnly Add an armv7 JSCOnly EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=190191

        Reviewed by Michael Catanzaro.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):
        Add the possibility to pass arguments to run-javascriptcore-tests with
        the JSCTESTS_OPTIONS environment variable
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):


2018-10-09  Guillaume Emont  <guijemont@igalia.com>

        Allow run-javascriptcore-tests to distribute tests between devices
        https://bugs.webkit.org/show_bug.cgi?id=190190

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2018-10-09  Dean Jackson  <dino@apple.com>

        Update WHLSL to Metal tester with semantics
        https://bugs.webkit.org/show_bug.cgi?id=190416
        <rdar://problem/45145139>

        Reviewed by Myles Maxfield.

        A few small changes to the WHLSL to Metal tools:
        - Make it compile by adding some missing JS files :)
        - Add semantics to the default shader
        - Add FIXMEs to the other shaders
        - Create an in-browser test for the WHLSLToMetal codepath
        - Fix typos in the semantics checker

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype._checkSemantics.checkSemanticTypes):
        (Checker.prototype._checkSemantics.checkSemanticForShaderType):
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj:
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Added.

2018-10-09  Jer Noble  <jer.noble@apple.com>

        Crash when closing WKWebView during enter fullscreen animation
        https://bugs.webkit.org/show_bug.cgi?id=190412

        Reviewed by Brian Burg.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewDuringEnterFullscreen.mm: Added.
        (-[CloseWebViewDuringEnterFullscreenUIDelegate _webViewWillEnterFullscreen:]):
        (-[CloseWebViewDuringEnterFullscreenUIDelegate _webViewWillExitFullscreen:]):
        (TestWebKitAPI::TEST):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        Anchor target should be ignored on activation when the download attribute is set
        https://bugs.webkit.org/show_bug.cgi?id=190408

        Reviewed by Geoffrey Garen.

        Update WebKitTestRunner to block popups by default and add support for testRunner.setCanOpenWindows()
        for tests that need popups. This aligns WebKitTestRunner with DumpRenderTree and allows testing
        popup blocking.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanOpenWindows):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2018-10-09  Jer Noble  <jer.noble@apple.com>

        WebDriver: thrown ObjC exception under -[WKFullScreenWindowController windowDidFailToEnterFullScreen:] when session is terminated
        https://bugs.webkit.org/show_bug.cgi?id=190098
        <rdar://problem/42822671>

        Reviewed by Brian Burg.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewAfterEnterFullscreen.mm: Added.
        (-[CloseWebViewAfterEnterFullscreenUIDelegate _webViewDidEnterFullscreen:]):
        (-[CloseWebViewAfterEnterFullscreenUIDelegate _webViewDidExitFullscreen:]):
        (TestWebKitAPI::TEST):

2018-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP HID message and packet structure from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=189289
        <rdar://problem/44120310>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp: Added.
        (TestWebKitAPI::TEST):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        PSON: Doing a cross-site navigation via the URL bar does not swap process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190378
        <rdar://problem/45059466>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-09  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp: Added.
        (TestWebKitAPI::TEST):

2018-10-09  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update to GStreamer 1.14.4
        https://bugs.webkit.org/show_bug.cgi?id=190395

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Remove patches merged in 1.14.4 and bump version of GStreamer modules.
        * gstreamer/patches/gst-plugins-good-0007-matroskademux-Allow-Matroska-headers-to-be-read-more.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0009-matroskademux-Parse-successive-Tracks-elements.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch: Removed.

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] API test DragAndDropTests.DropColor is failing on macOS 10.12
        https://bugs.webkit.org/show_bug.cgi?id=190386

        Reviewed by Ryosuke Niwa.

        Unlike macOS 10.13 and 10.14, -[NSColor redColor] is not equivalent to a fully red color in sRGB on macOS 10.12.
        Fix the test by dragging and dropping an NSColor that is equivalent to rgb(255, 0, 0) on all relevant versions
        of macOS.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
        (TEST):

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WK2] Add support for text alignment and text lists in font attributes
        https://bugs.webkit.org/show_bug.cgi?id=190342
        <rdar://problem/44767118>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:

        Add a new API test to check that the font attributes dictionary contains the correct NSParagraphStyles when
        moving the selection around text inside nested list elements.

        (TestWebKitAPI::checkParagraphStyles):

        Add a new helper to check an NSParagraphStyle against expected results.

        (TestWebKitAPI::webViewForTestingFontAttributes):

        Allow each test to pass in the name of the test page to load.

        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/nested-lists.html: Added.

        Add a new test page that contains text enclosed in multiple levels of unordered and ordered lists.

        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html:

        Remove `text-align: left` from one of these elements, to test for NSTextAlignmentNatural.

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebMetalEnabled):
        (WTR::TestRunner::setWebGPUEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-10-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236941.
        https://bugs.webkit.org/show_bug.cgi?id=190374

        Causing API test failures in new test (Requested by jernoble
        on #webkit).

        Reverted changeset:

        "ISOTrackEncryptionBox returns incorrect defaultKeyID"
        https://bugs.webkit.org/show_bug.cgi?id=190368
        https://trac.webkit.org/changeset/236941

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-08  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp: Added.
        (TestWebKitAPI::TEST):

2018-10-08  Alex Christensen  <achristensen@webkit.org>

        Remove WKBundleFileHandleRef
        https://bugs.webkit.org/show_bug.cgi?id=190360

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle_Bundle.cpp: Removed.

2018-10-08  Dan Bernstein  <mitz@apple.com>

        Tools part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * DumpRenderTree/mac/DumpRenderTreeMac.h: Addressed the strict prototype warning.

        * DumpRenderTree/mac/EditingDelegate.mm: Suppressed the deprecated implementations warning
          around deprecated methods or categories on deprecated classes.
        * DumpRenderTree/mac/FrameLoadDelegate.mm: Ditto.
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/mac/TestRunnerMac.mm: Ditto.
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):

        * MiniBrowser/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * MiniBrowser/mac/AppDelegate.h: Addressed the strict prototypes warning.
        * MiniBrowser/mac/WK2BrowserWindowController.m: Removed an unused #import to avoid having to
          address the fact that many of the WebKit C SPI headers trigger the strict prototypes warning.

        * MobileMiniBrowser/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_SUSPICIOUS_MOVE (by fixing a typo),
          CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, and CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj: Let Xcode update
          LastUpgradeCheck and remove the .xcconfig files from the Copy Bundle Resources build phase.

        * TestWebKitAPI/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.
          Made the WebKit headers be treated as system headers to avoid dealing with the fact that
          many C SPI headers trigger the strict prototypes warning.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[BlobDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]):
        (-[RedirectedDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (-[AudioSessionCategoryUIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        (-[RenderInContextWebViewDelegate webViewDidFinishLoad:]):
        (-[RenderInContextWebViewDelegate webView:didFailLoadWithError:]):
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        (-[SetTimeoutFunctionWebViewDelegate webViewDidFinishLoad:]):
        (-[SetTimeoutFunctionWebViewDelegate webView:didFailLoadWithError:]):
        (-[SetTimeoutFunctionWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        (-[DragInfo namesOfPromisedFilesDroppedAtDestination:]):
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropTestWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        (-[SyntheticBackingScaleFactorWindow IGNORE_WARNINGS_END]):
        (-[SyntheticBackingScaleFactorWindow userSpaceScaleFactor]): Deleted.
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo namesOfPromisedFilesDroppedAtDestination:]):

        In all of the above, suppressed the deprecated implementations warning where needed.

        * WebKitTestRunner/Configurations/Base.xcconfig: Enabled ENABLE_STRICT_OBJC_MSGSEND,
          CLANG_WARN_BOOL_CONVERSION, CLANG_WARN_COMMA, CLANG_WARN_CONSTANT_CONVERSION,
          CLANG_WARN_EMPTY_BODY, CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_UNREACHABLE_CODE, CLANG_WARN__DUPLICATE_METHOD_MATCH,
          GCC_WARN_UNDECLARED_SELECTOR, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF,
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          and GCC_NO_COMMON_BLOCKS.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]): Suppressed
          the deprecated implementations warning.

        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::replaceTextAtRange): Addressed an int-conversion warning.

2018-10-07  Yacine Bandou  <yacine.bandou@softathome.com>

        [GStreamer][EME][webm] Add the WebM encrypted content support in matroskademux
        https://bugs.webkit.org/show_bug.cgi?id=189238

        Reviewed by Xabier Rodriguez-Calvar.

        Modifications on GStreamer, tracked in GStreamer bugzilla:
        https://bugzilla.gnome.org/show_bug.cgi?id=797231
        https://bugzilla.gnome.org/show_bug.cgi?id=765275

        * gstreamer/jhbuild.modules: Add new patches.
        * gstreamer/patches/gstreamer-0001-protection-Add-a-new-definition-for-unspecified-syst.patch: Added.
        * gstreamer/patches/gstreamer-0002-protection-Fix-the-string-to-define-unspecified-syst.patch: Added.
        * gstreamer/patches/gst-plugins-good-0011-matroska-Add-the-WebM-encrypted-content-support-in-m.patch: Added.
        * gstreamer/patches/gst-plugins-good-0012-matroskdemux-do-not-use-MapInfo.data-after-unmapping.patch: Added.

2018-10-06  Dan Bernstein  <mitz@apple.com>

        [Xcode] Never build yasm with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=190327

        Reviewed by Youenn Fablet.

        * asan/asan.xcconfig: Allow targets to opt out of building with ASAN by setting
          the WK_ASAN_DISALLOWED build setting to YES (or, actually, anything other than NO or unset).

2018-10-05  Chris Dumez  <cdumez@apple.com>

        Regression(r236862): Crash under DOMWindowExtension::willDetachGlobalObjectFromFrame()
        https://bugs.webkit.org/show_bug.cgi?id=190320
        <rdar://problem/45044814>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyGlobalObjectForDOMWindowExtension):

2018-10-03  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoQualityDisplayCompositing.mm: Added.
        (TestWebKitAPI::TEST):

2018-10-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236866.

        Breaks internal builds.

        Reverted changeset:

        "Add support for reporting "display composited video frames"
        through the VideoPlaybackQuality object."
        https://bugs.webkit.org/show_bug.cgi?id=190266
        https://trac.webkit.org/changeset/236866

2018-10-05  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE][JSC] Use Unified Sources for Platform-specific sources
        https://bugs.webkit.org/show_bug.cgi?id=190300

        Reviewed by Yusuke Suzuki.

        Currently the GTK port already used Unified Sources with the same source files.
        As WPE has conditional code using gmodule, we need to add GLIB_GMODULE_LIBRARIES
        to the list of libraries to link with.

        * TestWebKitAPI/PlatformWPE.cmake:

2018-10-05  Zach Li  <zachli@apple.com>

        Expose whether WKWebProcessPlugInNodeHandle is a select element to clients
        https://bugs.webkit.org/show_bug.cgi?id=190302
        <rdar://problem/45031469>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InjectedBundleNodeHandleIsSelectElement.mm: Added.
        (-[InjectedBundleNodeHandleIsSelectElement verifySelectElementForHTMLElementTag:document:jsContext:expectedResult:failedElementTags:]):
        (-[InjectedBundleNodeHandleIsSelectElement webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[InjectedBundleNodeHandleIsSelectElementDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WK2] Expose some more editing SPI on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190232
        <rdar://problem/44963368>

        Reviewed by Tim Horton.

        Adds new API tests to exercise the new SPIs.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm: Added.
        (-[TestWKWebView querySelectorExists:]):
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (-[TestWKWebView collapseToStart]): Deleted.
        (-[TestWKWebView collapseToEnd]): Deleted.
        (-[TestWKWebView stylePropertyAtSelectionStart:]): Deleted.
        (-[TestWKWebView stylePropertyAtSelectionEnd:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView stylePropertyAtSelectionStart:]):
        (-[TestWKWebView stylePropertyAtSelectionEnd:]):
        (-[TestWKWebView collapseToStart]):
        (-[TestWKWebView collapseToEnd]):

        Pull some common testing helpers out of NSFontManager and into TestWKWebView.

2018-10-04  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoQualityDisplayCompositing.mm: Added.
        (TestWebKitAPI::TEST):

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190119
        <rdar://problem/44767062>

        Reviewed by Tim Horton.

        Add a new API test that loads a document containing various rich text styles. This test moves the selection
        around the document and checks the last set of font attributes received via the new UI delegate hook.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm: Added.
        (-[FontAttributesListener _webView:didChangeFontAttributes:]):
        (-[FontAttributesListener lastFontAttributes]):
        (-[TestWKWebView selectElementWithIdentifier:]):
        (-[TestWKWebView fontAttributesAfterNextPresentationUpdate]):
        (ColorExpectation::ColorExpectation):
        (ShadowExpectation::ShadowExpectation):
        (checkColor):
        (checkShadow):
        (checkFont):
        (webViewForTestingFontAttributes):
        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html: Added.

2018-10-04  Alan Coon  <alancoon@apple.com>

        Unreviewed, add self as contributor.

        * Scripts/webkitpy/common/config/contributors.json:

2018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Fix some font attribute conversion bugs in preparation for "Font > Styles…" support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=190289
        <rdar://problem/45020806>

        Reviewed by Ryosuke Niwa.

        Add new API tests to exercise two corner cases when using NSFontOptions ("Font > Styles…") to change font
        attributes at the current selection.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/TestFontOptions.h: Copied from Source/WebCore/editing/cocoa/FontAttributesCocoa.mm.
        * TestWebKitAPI/mac/TestFontOptions.mm: Added.

        Introduce TestFontOptions, which wraps the shared NSFontOptions and swizzles `-sharedFontOptions` to return a
        global instance of itself. TestFontOptions supports several testing helpers to add or remove font shadows,
        foreground colors, and background colors.

        (sharedFontOptionsForTesting):
        (+[TestFontOptions sharedInstance]):
        (-[TestFontOptions initWithFontOptions:]):
        (-[TestFontOptions selectedAttributes]):
        (-[TestFontOptions fontOptions]):
        (-[TestFontOptions shadowWidth]):
        (-[TestFontOptions setShadowWidth:]):
        (-[TestFontOptions shadowHeight]):
        (-[TestFontOptions setShadowHeight:]):
        (-[TestFontOptions setShadowBlurRadius:]):
        (-[TestFontOptions setHasShadow:]):
        (-[TestFontOptions foregroundColor]):
        (-[TestFontOptions setForegroundColor:]):
        (-[TestFontOptions backgroundColor]):
        (-[TestFontOptions setBackgroundColor:]):
        (-[TestFontOptions _dispatchFontAttributeChanges]):
        (-[TestFontOptions convertAttributes:]):
        (-[TestFontOptions setSelectedAttributes:isMultiple:]):
        (-[TestFontOptions forwardInvocation:]):

2018-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Move time out control from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=189642
        <rdar://problem/44476765>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-10-04  YUHAN WU  <yuhan_wu@apple.com>

        Runtime flag and IDL for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=190018

        Reviewed by Youenn Fablet and Chris Dumez.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2018-10-04  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [LayoutTests][Win] Stop wpt server correctly.
        https://bugs.webkit.org/show_bug.cgi?id=190248

        Reviewed by Fujii Hironori.

        Use signal.CTRL_C_EVENT instead of signal.SIGINT for Windows.
        Also refactoring the detection of Windows and cygwin environment check.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.__init__): Check environment once.
        (Executive._should_close_fds):
        (Executive.kill_process):
        (Executive.check_running_pid):
        (Executive.running_pids):
        (Executive.interrupt): Use signal.CTRL_C_EVENT for Windows.
        (Executive.kill_all):
        (Executive._child_process_encoding):
        (Executive._should_encode_child_process_arguments):
        (Executive.popen):
        (Executive.run_in_parallel):

2018-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Convert tests to use navigation client
        https://bugs.webkit.org/show_bug.cgi?id=190153

        Reviewed by Alex Christensen.

        Convert these tests from PagePolicyClient and PageLoaderClient to PageNavigationClient.

        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (TestWebKitAPI::setPagePolicyClient):
        * TestWebKitAPI/Tests/WebKit/ProvisionalURLAfterWillSendRequestCallback.cpp:
        (TestWebKitAPI::didCommitNavigationCallback):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didCommitLoadForFrame): Deleted.

2018-10-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Let clients specify an NSFileWrapper subclassed to be used for _WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=190270

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2018-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        Enable selectionAcrossShadowBoundariesEnabled by default in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=190238

        Reviewed by Antti Koivisto.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Format > Bold and Format > Italic don't toggle between bold and italic style
        https://bugs.webkit.org/show_bug.cgi?id=179787
        <rdar://problem/35593389>

        Reviewed by Tim Horton.

        Add a test to verify that NSFontManager's selected font is updated when applying italic and bold styles using
        menu items.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (webViewForFontManagerTesting):
        (menuItemCellForFontAction):
        (TestWebKitAPI::TEST):

2018-10-02  Chris Dumez  <cdumez@apple.com>

        REGRESSION: TestWebKitAPI.WKWebView.ProvisionalURLNotChange API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=190176
        <rdar://problem/44925871>

        Reviewed by Alex Christensen.

        Use a URL that is truly recognized as invalid by WebCore's URL parser.

        * TestWebKitAPI/Tests/WebKitCocoa/ProvisionalURLNotChange.mm:
        (TEST):

2018-10-02  Alex Christensen  <achristensen@webkit.org>

        Remove ParsedURLString
        https://bugs.webkit.org/show_bug.cgi?id=190154

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasLinuxPlatformQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk):
        (TestWebKitAPI::TEST):

2018-10-02  Daniel Bates  <dabates@apple.com>

        Fix iOS TestWebKitAPI failures following <https://trac.webkit.org/changeset/236619>
        (https://bugs.webkit.org/show_bug.cgi?id=190017)

        For now swizzle +[UIKeyboard isInHardwareKeyboardMode] to return NO in the following tests:
            WKWebViewAutofillTests.AutofillRequiresInputSession
            DragAndDropTests.ExternalSourceJPEGOnly
            DragAndDropTests.ExternalSourceUTF8PlainTextOnly

        so that the presence of a hardware keyboad does not effect their results. In <https://bugs.webkit.org/show_bug.cgi?id=190211>
        we will look to swizzle this method for all test by default.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-10-02  Dawei Fenton  <realdawei@apple.com>

        Unreviewed, rolling out r236751.

        broke the iOS Build

        Reverted changeset:

        "Fix iOS TestWebKitAPI failures following
        <https://trac.webkit.org/changeset/236619>"
        https://bugs.webkit.org/show_bug.cgi?id=190017
        https://trac.webkit.org/changeset/236751

2018-10-02  Daniel Bates  <dabates@apple.com>

        Fix iOS TestWebKitAPI failures following <https://trac.webkit.org/changeset/236619>
        (https://bugs.webkit.org/show_bug.cgi?id=190017)

        For now swizzle +[UIKeyboard isInHardwareKeyboardMode] to return NO in the following tests:
            WKWebViewAutofillTests.AutofillRequiresInputSession
            DragAndDropTests.ExternalSourceJPEGOnly
            DragAndDropTests.ExternalSourceUTF8PlainTextOnly

        so that the presence of a hardware keyboad does not effect their results. In <https://bugs.webkit.org/show_bug.cgi?id=190211>
        we will look to swizzle this method for all test by default.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-10-01  Dean Jackson  <dino@apple.com>

        Remove CSS Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=190175
        <rdar://problem/44925626>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Use our own check of flatpak repos
        https://bugs.webkit.org/show_bug.cgi?id=190194

        Allowing us to not mess up with user installation
        and "--assumeyes" everywhere.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (FlatpakPackage.__init__):
        (FlatpakPackage.install):
        (FlatpakPackage.update):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Implement a way for the UI process to request typing attributes at the current selection
        https://bugs.webkit.org/show_bug.cgi?id=189983
        <rdar://problem/44648705>

        Reviewed by Ryosuke Niwa.

        Adds new FontManagerTests that exercise -typingAttributesWithCompletionHandler:. See below for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:

        Add a new test that exercises font attribute modification via inspector bar. Also, add a new test that checks
        typing attributes when using subscript/superscript/unscript. Lastly, augment an existing NSFontPanel test to
        additionally check that shadowed text and strike-through are reflected in typing attributes.

        (-[FontManagerTestWKWebView inspectorBarItemIdentifiers]):
        (-[TestWKWebView typingAttributes]):

        Add a synchronous wrapper around `-typingAttributesWithCompletionHandler:` by spinning the runloop.

        (-[TestWKWebView collapseToStart]):
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/mac/TestInspectorBar.h: Copied from Tools/TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h.
        * TestWebKitAPI/mac/TestInspectorBar.mm: Added.

        Introduce subclasses of `__InspectorBarItemController` and `NSInspectorBar` for testing inspector bar interaction.

        (-[TestInspectorBarItemController initWithInspectorBar:]):
        (-[TestInspectorBarItemController inspectorBar]):
        (-[TestInspectorBarItemController updateSelectedAttributes]):
        (-[TestInspectorBar initWithWebView:]):
        (+[TestInspectorBar standardItemControllerClass]):
        (+[TestInspectorBar standardTextItemIdentifiers]):
        (-[TestInspectorBar _setStyleControlSelected:atIndex:]):
        (-[TestInspectorBar chooseFontSize:]):
        (-[TestInspectorBar chooseFontFamily:]):
        (-[TestInspectorBar _chooseColor:inColorWell:]):
        (-[TestInspectorBar chooseForegroundColor:]):
        (-[TestInspectorBar chooseBackgroundColor:]):
        (-[TestInspectorBar formatBold:]):
        (-[TestInspectorBar formatItalic:]):
        (-[TestInspectorBar formatUnderline:]):

        Add helper methods to TestInspectorBar to simulate interacting with various controls (e.g. color wells and font
        styling controls).

        (-[TestInspectorBar itemController]):
        (-[TestInspectorBar setItemController:]):

2018-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Implement icecream and ccache support
        https://bugs.webkit.org/show_bug.cgi?id=190146

        Reviewed by Alejandro G. Castro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.save_config):
        (WebkitFlatpak):
        (WebkitFlatpak.setup_ccache):
        (WebkitFlatpak.setup_icecc):
        (WebkitFlatpak.setup_dev_env):
        * flatpak/org.webkit.WebKit.yaml:

2018-10-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix missing return value in TestController::keyExistsInKeychain

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::keyExistsInKeychain):

2018-10-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Enable WPT tests environment.
        https://bugs.webkit.org/show_bug.cgi?id=190128

        Reviewed by Youenn Fablet.

        Escaping backslash of the path not to confuse the JSON parser.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._prepare_config):

2018-10-01  Ross Kirsling  <ross.kirsling@sony.com>

        [Win][DRT] Actually set "experimental:WebAnimationsCSSIntegrationEnabled" when requested
        https://bugs.webkit.org/show_bug.cgi?id=190150

        Reviewed by Fujii Hironori.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        DRT has been recognizing this field, but not propagating its value to WebPreferences.

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r236551.

        Fails URL validating too aggressively

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236551

2018-10-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add SPI to customize the input accessory view when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=190152
        <rdar://problem/42754975>

        Reviewed by Dan Bernstein.

        Add an API test to verify that setting a custom input accessory view and custom input view on the form input
        session when focusing an element overrides the first responder's (i.e. WKContentView's) `-inputView` and
        `-inputAccessoryView`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (webViewWithAutofocusedInput):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setWillStartInputSessionHandler:]):
        (-[TestInputDelegate willStartInputSessionHandler]):
        (-[TestInputDelegate _webView:willStartInputSession:]):

2018-10-01  Sihui Liu  <sihui_liu@apple.com>

        Remove StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=189975

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::terminateStorageProcess): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::databaseProcessName): Deleted.
        (WTR::TestController::databaseProcessDidCrash): Deleted.
        (WTR::TestController::terminateStorageProcess): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-10-01  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import a JS CBOR coder
        https://bugs.webkit.org/show_bug.cgi?id=189877
        <rdar://problem/44701124>

        Reviewed by Chris Dumez.

        Add logic to only process privateKeyBase64, userCertificateBase64 and intermediateCACertificateBase64
        only if acceptAttestation is true.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-10-01  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        The test relies on EventSender to send events to the page synchronously to the page and then uses console.log
        to log those events. It also uses console.log() before sending those events to indicate what the test is about
        to do. Note that console.log() normally causes the WebKitTestRunner to send an asynchronous IPC to the UIProcess
        so that it can log the message.
        The issue is that EventSender uses IPC::SendOption::UseFullySynchronousModeForTesting when sending the
        sync IPC to the UIProcess. This option causes follow-up *asynchronous* IPC sent from the synchronous IPC reply
        handler to be transformed into synchronous IPC.
        As a result, some of the console.log IPC ended up being asynchronous and some other ended up being synchronous.
        Because synchronous and asynchronous IPC is not necessarily processed in-order by the UIProcess, the logged
        messages may end up being out of order, leading to flakiness.

        To address the issue, we now make sure that InjectedBundle::outputText() uses a new IPC::SendOption indicated
        that the IPC should always be sent asynchronously, even if the connection is in fully synchronous mode. As a
        result, all text outputing IPC to the UIProcess will be asynchronous, and thus in order.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::outputText):

2018-10-01  Daniel Bates  <dabates@apple.com>

        [iOS] Special keys are misidentified in DOM keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=189974

        Reviewed by Wenson Hsieh.

        Add support for testing keys Forward Delete and Num Lock / Clear.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

2018-10-01  Alex Christensen  <achristensen@webkit.org>

        URL should not use TextEncoding internally
        https://bugs.webkit.org/show_bug.cgi?id=190111

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::testUserPass):
        (TestWebKitAPI::TEST_F):

2018-10-01  Daniel Bates  <dabates@apple.com>

        LLDB tests may use wrong configuration of lldbWebKitTester
        https://bugs.webkit.org/show_bug.cgi?id=189011

        Reviewed by Dean Jackson.

        Fixes an issue where the LLDB unit tests may use the wrong configuration of lldbWebKitTester.
        Additionally, add back the unit tests originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).

        Currently the unit tests pick the LLDBWebKitTester binary based on the configuration set by
        script set-webkit-configuration. This may not be the same configuration specified to test-webkitpy.
        So, the unit tests may use the wrong binary. Instead we have test-webkitpy store the path
        to the correct lldbWebKitTester binary that the unit tests should use in an environment variable,
        called LLDB_WEBKIT_TESTER_EXECUTABLE. (We use an environment variable because the test driver,
        test-webkitpy, and the unit tests cannot talk to each other directly due the limitations of
        the Python unittest module, the Python multiprocessing module, and the general principle of unit
        tests - to test code in isolation). The unit tests make use of the value of this environment
        variable to launch lldbWebKitTester binary.

        * Scripts/build-lldbwebkittester: We only support building lldbWebKitTester on Mac for now. Error
        out if this script is invoked for a non-Mac platform.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Build lldbWebKitTester and store the path to it in the environment variable
        LLDB_WEBKIT_TESTER_EXECUTABLE.
        (_build_lldb_webkit_tester): Deleted.
        * lldb/dump_class_layout_unittest.py:
        (TestDumpClassLayout.shouldSkip): Use SystemHost() here and remove the _host global variable as
        this is the only call site that needs the Host object now.
        (TestDumpClassLayout.setUpClass): Take the path to the lldbWebKitTester binary from the value of
        the environment variable LLDB_WEBKIT_TESTER_EXECUTABLE.
        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders): Add back unit test support infrastructure originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).
        * lldb/lldb_webkit_unittest.py:
        (LLDBDebugSession.setup): Take the path to the lldbWebKitTester binary from the value of the environment
        variable LLDB_WEBKIT_TESTER_EXECUTABLE.
        (TestSummaryProviders):
        (TestSummaryProviders.shouldSkip): Skip the tests on non-Mac platforms.
        (TestSummaryProviders.serial_test_WTFHashSet_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_empty):
        (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_simple):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_empty):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple):
        Add back the unit tests originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).

2018-10-01  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] Update install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=190127

        Reviewed by Michael Catanzaro.

        * wpe/install-dependencies:
        libxrandr-dev is needed for gstreamer-vaapi in jhbuild
        It is used by gstvaapidisplay_x11.c.
        Add it only for Apt, already ok for Pacman and DNF.

        Install libevent-dev for WebRTC (like GTK)

        Install libasound2-dev for WebRTC.
        Add it only for Apt, already ok for Pacam and DNF.

        Install libgbm-dev for HeadlessViewBackend, which uses gbm.h

2018-10-01  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add libunwind in the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=190123

        Allowing us to get proper traces in GStreamer trace grabing
        debug functions.

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WebKit.yaml:

2018-09-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236631.
        https://bugs.webkit.org/show_bug.cgi?id=190112

        Caused various eventSender tests, including fast/css/pseudo-
        active-style-sharing*, to fail (Requested by smfr on #webkit).

        Reverted changeset:

        "Regression(r236512): http/tests/navigation/keyboard-events-
        during-provisional-navigation.html is flaky"
        https://bugs.webkit.org/show_bug.cgi?id=190052
        https://trac.webkit.org/changeset/236631

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Fix build after r236635
        https://bugs.webkit.org/show_bug.cgi?id=189210

        Unreviewed.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.atomicsNull):
        (tests.numThreads):
        (tests.textureDimensionsNull):

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Allow uniform buffers to be used in the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=189210

        Reviewed by Filip Pizlo.

        Every lvalue is associated with an address space, and the propagation of these address spaces
        matches the propagation of lvalues. Luckily, there was already the infrastructure to do most
        of this, so this patch just goes the last few yards. It also updates the standard library to
        allow for writing into all writable address spaces for out-params.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitAssignment):
        (Checker.prototype._finishVisitingPropertyAccess):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        (Intrinsics.checkFalse):
        (Intrinsics):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.threadArrayRefLoad):
        (tests.threadArrayRefLoadIntLiteral):
        (tests.deviceArrayRefLoad):
        (tests.threadArrayRefStore):
        (tests.deviceArrayRefStore):
        (tests.deviceArrayRefStoreIntLiteral):
        (tests.threadPointerLoad):
        (tests.threadPointerStore):
        (tests.devicePointerLoad):
        (tests.devicePointerStore):
        (tests.arrayLoad):
        (tests.constantAddressSpace):
        (tests.standardLibraryDevicePointers):
        (tests.threadArrayLoad): Deleted.
        (tests.threadArrayLoadIntLiteral): Deleted.
        (tests.deviceArrayLoad): Deleted.
        (tests.threadArrayStore): Deleted.
        (tests.deviceArrayStore): Deleted.
        (tests.deviceArrayStoreIntLiteral): Deleted.

2018-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        No DOM API to instantiate an attachment for an img element
        https://bugs.webkit.org/show_bug.cgi?id=189934
        <rdar://problem/44743222>

        Reviewed by Ryosuke Niwa.

        Adds 3 new API tests in WKAttachmentTests:

        `AddAttachmentToConnectedImageElement` verifies that an image element that's already in the document can gain an
        attachment element via `HTMLAttachmentElement.getAttachmentIdentifier`.

        `ChangeFileWrapperForPastedImage` verifies that an image that has been pasted produces a _WKAttachment in the UI
        process, and changing the file wrapper of that _WKAttachment changes the pasted image.

        `ConnectImageWithAttachmentToDocument` verifies that script can create an image element, ensure that it has an
        attachment, and set a file wrapper for the generated _WKAttachment. Connecting the image to the document should
        then result in an image element with the contents of the _WKAttachment's file wrapper.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView imageElementSize]):
        (-[TestWKWebView waitForImageElementSizeToBecome:]):
        (TestWebKitAPI::TEST):
        (-[TestWKWebView waitForAttachmentElementSizeToBecome:]): Deleted.

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        The test relies on EventSender to send events to the page synchronously to the page and then uses console.log
        to log those events. It also uses console.log() before sending those events to indicate what the test is about
        to do. Note that console.log() normally causes the WebKitTestRunner to send an asynchronous IPC to the UIProcess
        so that it can log the message.
        The issue is that EventSender uses IPC::SendOption::UseFullySynchronousModeForTesting when sending the
        sync IPC to the UIProcess. This option causes follow-up *asynchronous* IPC sent from the synchronous IPC reply
        handler to be transformed into synchronous IPC.
        As a result, some of the console.log IPC ended up being asynchronous and some other ended up being synchronous.
        Because synchronous and asynchronous IPC is not necessarily processed in-order by the UIProcess, the logged
        messages may end up being out of order, leading to flakiness.

        To address the issue, we now make sure that InjectedBundle::outputText() uses a new IPC::SendOption indicating
        that the IPC should always be sent asynchronously, even if the connection is in fully synchronous mode. As a
        result, all text outputing IPC to the UIProcess will be asynchronous, and thus in order.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::outputText):

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Pointers should have automatically-generated equality checks
        https://bugs.webkit.org/show_bug.cgi?id=189986

        Reviewed by Filip Pizlo.

        C allows for pointer equality, and we need it so people can do null checks.
        This is generated the same way all our other NativeFuncs are generated - by Checker
        creating NativeFuncs inside CallExpression.resolve().

        This patch also does some general cleanup.

        * WebGPUShadingLanguageRI/All.js: Everything the late checker does is no longer necessary.
        The last thing it was doing was making sure that only primitive types are in resources, but
        it's totally reasonable to put structs and arrays in resources, so I removed this pass. We
        still have to add a check to make sure resources can't live within resources, but I expect
        that will be done in the same place that semantics are checked.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:
        (allocateAtEntryPoints.updateFunction.UpdateFunctions.prototype._addVariableDeclaration):
        Name the global struct for debugging purposes.
        * WebGPUShadingLanguageRI/CallExpression.js: 
        (CallExpression.prototype._resolveByInstantiation): Cleanup
        (CallExpression.prototype._resolveWithOperatorAnderIndexer): Ditto
        (CallExpression.prototype._resolveWithOperatorLength): Ditto
        (CallExpression.prototype._resolveWithReferenceComparator): Add support to automatically
        generate pointer equality NativeFuncs.
        * WebGPUShadingLanguageRI/EPtr.js: Implement pointer equality in the interpreter.
        * WebGPUShadingLanguageRI/LateChecker.js: Removed.
        * WebGPUShadingLanguageRI/LayoutBuffers.js: Renamed from Tools/WebGPUShadingLanguageRI/LateCheckAndLayoutBuffers.js.
        (layoutBuffers):
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj:
        * WebGPUShadingLanguageRI/NativeFunc.js:
        * WebGPUShadingLanguageRI/OperatorArrayRefLength.js:
        (OperatorArrayRefLength.prototype.instantiateImplementation):
        (OperatorArrayRefLength):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.ternaryExpression):
        (tests.break): Speed up testing time
        (tests.doWhile): Ditto
        (tests.forLoop): Ditto
        (tests.atomics): Ditto
        (tests.atomicsNull): Ditto
        (tests.pointerEquality): Test pointer equality
        (tests.standardLibraryDevicePointers):
        (tests.devicePtrPtr): Deleted.
        (tests.threadgroupPtrPtr): Deleted.
        (tests.constantPtrPtr): Deleted.
        * WebGPUShadingLanguageRI/index.html:

2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish WebAuthN auto-test environment
        https://bugs.webkit.org/show_bug.cgi?id=189283
        <rdar://problem/44117828>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-09-28  Chris Dumez  <cdumez@apple.com>

        Drop support for cross-origin-window-policy header
        https://bugs.webkit.org/show_bug.cgi?id=190081

        Reviewed by Ryosuke Niwa.

        190081_DropCrossOriginWindowPolicy

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-09-28  Koby Boyango  <koby.b@mce.systems>

        [WTF] Add ExternalStringImpl, a StringImpl for user controlled buffers
        https://bugs.webkit.org/show_bug.cgi?id=189991

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for Mojave queues
        https://bugs.webkit.org/show_bug.cgi?id=190068

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Mojave
        https://bugs.webkit.org/show_bug.cgi?id=189935

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove trigger, update bot assignment.

2018-09-24  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Mojave
        https://bugs.webkit.org/show_bug.cgi?id=189935

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Increase the timeout for iOS Simulator data migration
        https://bugs.webkit.org/show_bug.cgi?id=190059

        Reviewed by Aakash Jain.

        3 minutes isn't always enough time for the data migrator to complete
        when booting up multiple iOS Simulators. Change the timeout to 10 minutes.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager): Create a constant for the default timeout.
        (SimulatedDeviceManager.initialize_devices): Use new constant.
        (SimulatedDeviceManager.swap): Ditto.
        (SimulatedDeviceManager.wait_until_data_migration_is_done): Ditto.

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLParser should use TextEncoding through an abstract class
        https://bugs.webkit.org/show_bug.cgi?id=190027

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        iOS Simulator bots should pass '--dedicated-simulators' to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=190042

        Reviewed by Aakash Jain.

        To make iOS Simulator bots resilient to issues that can arise from reusing
        existing simulators, ensure that dedicated simulators are created for each test run.

        * Scripts/webkitpy/common/config/ports.py:
        (IOSSimulatorWK2Port.run_webkit_tests_command):

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::originalDataAsString):
        (TestWebKitAPI::TEST):

2018-09-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win][WebKit] Implement authentication dialog on MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=189846

        Reviewed by Fujii Hironori.

        It was implemented for WebKitLegacy, but not for WebKit.
        Also added text field to display Realm information.

        * MiniBrowser/win/Common.cpp:
        (authDialogProc):
        (askCredential):
        (displayAuthDialog): Deleted.
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString):
        (createUTF8String):
        (createWKString):
        (createWKURL):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):
        (toNullTerminatedUTF8): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:

2018-09-27  Youenn Fablet  <youenn@apple.com>

        Enable getUserMedia in mini browser
        https://bugs.webkit.org/show_bug.cgi?id=190012

        Reviewed by Eric Carlson.

        Enable MediaDevices and mock capture devices.
        Grant mock devices access to any getUserMedia call.
        Covered by manual testing.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[WK2BrowserWindowController _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):

2018-09-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Dean Jackson.

        * DumpRenderTree/TestOptions.h:

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r236524.

        Broke API tests

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236524

2018-09-26  James Savage  <james.savage@apple.com>

        Allow override of viewport configuration.
        https://bugs.webkit.org/show_bug.cgi?id=188772.
        <rdar://problem/43538892>.

        Reviewed by Simon Fraser.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader): Parse new test option key from comments.
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest): Handle new test option by
        modifying the web view's preferences accordingly.

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLs with mismatched surrogate pairs in the host should fail to parse
        https://bugs.webkit.org/show_bug.cgi?id=190005

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::TEST_F):

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979
        <rdar://problem/44119696>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Selection should work across shadow boundary when initiated by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=151380
        <rdar://problem/24363872>

        Reviewed by Wenson Hsieh.

        Added the support for internal:selectionAcrossShadowBoundariesEnabled test option.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):

2018-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        MiniBrowser doesn't respect default enabled-ness of experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189989

        Reviewed by Simon Fraser.

        When the preference isn't found in user defaults, use the default value of each feature's enabledness.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):

2018-09-26  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Bump to apr 1.6.5

        Version 1.6.3 is no longer available on Apache's website.

        Rubber-stamped by Michael Catanzaro.

        * flatpak/org.webkit.WebKit.yaml:

2018-09-25  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279
        <rdar://problem/44116792>

        Reviewed by Chris Dumez.

        Besides the functionality to set the WebAuthenticationMockConfiguration. Three operations are
        added to manipulate Keychain: addTestKeyToKeychain, cleanUpKeychain and keyExistedInKeychain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/LocalAuthenticator.mm: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::addTestKeyToKeychain):
        (WTR::TestRunner::cleanUpKeychain):
        (WTR::TestRunner::isKeyExisted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::isKeyExisted):
        (WTR::TestController::setWebAuthenticationMockConfiguration):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistedInKeychain):

2018-09-25  Sihui Liu  <sihui_liu@apple.com>

        Move Service Worker Management from Storage Process to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189422

        Reviewed by Youenn Fablet.

        Change a check in ServiceWorkers.HasServiceWorkerRegistrationBit as storage process is not
        launched during service worker operations now.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-09-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Update constraints supported by getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=189930
        <rdar://problem/44740305>

        Unreviewed, fix test broken by r236465.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):

2018-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHSL] Implement semantics
        https://bugs.webkit.org/show_bug.cgi?id=189134

        Reviewed by Filip Pizlo.

        This patch adds parsing support and adds the checks required to support HLSL-style semantics.

        There are 3 places where semantics are allowed:

        1. In a field in a struct. E.g.

        struct R {
            float4 position : SV_Position;
        }
        vertex R foo() {
            ...
        }

        2. In a parameter of a function. If the function is not an entry point, the semantic is ignored.

        compute void foo(device float[] data : buffer(u0)) {
            ...
        }

        3. On a function. This is so you don't have to create structs for the return types of simple vertex shaders.

        vertex float4 foo() : SV_Position {
            ...
        }

        The semantics are partitioned into 4 types:

        1. Built-in variables. For example, : SV_Position.
        2. Resources. For example, : register(u0).
        3. Stage-in / stage-out variables. For example, : attribute(0).
        4. Specialization constants. For example, : specialized.

        The semantics are validated according to a collection of rules:

        - The same entry point can't list the same semantic twice
        - Each built-in type has an appropriate type that is listed in the spec. 
        - Each built-in is appropriate as either an input or an output of a particular shader stage
        - Resource semantics have to have the appropriate type (e.g. can't use register(s0) on a buffer)
        - Resources can't be output from entry points
        - The resource semantic mode must match the address space of the resource
        - Stage-in and stage-out variables have to be POD
        - Specialization constants can't be output from entry points, and have to be numbers

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/BuiltInSemantic.js: Added.
        (BuiltInSemantic):
        (BuiltInSemantic.prototype.get name):
        (BuiltInSemantic.prototype.get extraArguments):
        (BuiltInSemantic.prototype.isAcceptableType):
        (BuiltInSemantic.prototype.isAcceptableForShaderType):
        (BuiltInSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype._resolveWithOperatorAnderIndexer):
        (CallExpression.prototype._resolveWithOperatorLength):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker):
        (Checker.prototype.visitProgram):
        (Checker.prototype._checkSemantics.Item):
        (Checker.prototype._checkSemantics.Item.prototype.get type):
        (Checker.prototype._checkSemantics.Item.prototype.get semantic):
        (Checker.prototype._checkSemantics.Gatherer):
        (Checker.prototype._checkSemantics.Gatherer.prototype.reset):
        (Checker.prototype._checkSemantics.Gatherer.prototype.set currentSemantic):
        (Checker.prototype._checkSemantics.Gatherer.prototype.get currentSemantic):
        (Checker.prototype._checkSemantics.Gatherer.prototype.get result):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitEnumType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitVectorType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitMatrixType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitNativeType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitStructType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitTypeRef):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitPtrType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitArrayRefType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitArrayType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitFuncParameter):
        (Checker.prototype._checkSemantics.checkDuplicateSemantics):
        (Checker.prototype._checkSemantics.checkSemanticTypes):
        (Checker.prototype._checkSemantics.checkSemanticForShaderType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitEnumType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitArrayType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitVectorType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitMatrixType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitNativeType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitPtrType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitArrayRefType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitStructType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitTypeRef):
        (Checker.prototype._checkSemantics.PODChecker):
        (Checker.prototype._checkSemantics.checkPODData):
        (Checker.prototype._checkSemantics):
        (Checker.prototype._checkShaderType):
        (Checker.prototype._checkOperatorOverload):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype.visitEnumType):
        (Checker.prototype.visitArrayType):
        (Checker.prototype.visitMakePtrExpression):
        (Checker.prototype.visitMakeArrayRefExpression):
        (Checker.prototype._finishVisitingPropertyAccess):
        (Checker.prototype.visitIndexExpression):
        (Checker.prototype.visitReturn):
        (Checker.prototype.visitSwitchStatement):
        (Checker.prototype.visitTernaryExpression):
        (Checker.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/Field.js:
        (Field):
        (Field.prototype.get semantic):
        (Field.prototype.toString):
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get semantic):
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncParameter.js:
        (FuncParameter):
        (FuncParameter.prototype.get semantic):
        (FuncParameter.prototype.toString):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype.visitReferenceType):
        (LateChecker):
        (LateChecker.prototype._checkShaderType): Deleted.
        (LateChecker.prototype.visitFuncDef): Deleted.
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseParameter):
        (parseFuncDecl):
        (parseFuncDef):
        (parseStageInOutSemantic):
        (parseResourceSemantic):
        (parseSpecializationConstantSemantic):
        (parseBuiltInSemantic):
        (parseField):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js:
        (programWithUnnecessaryThingsRemoved):
        * WebGPUShadingLanguageRI/ResourceSemantic.js: Added.
        (ResourceSemantic):
        (ResourceSemantic.prototype.get resourceMode):
        (ResourceSemantic.prototype.get index):
        (ResourceSemantic.prototype.get space):
        (ResourceSemantic.prototype.isAcceptableType):
        (ResourceSemantic.prototype.isAcceptableForShaderType):
        (ResourceSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFuncParameter):
        (Rewriter.prototype.visitField):
        (Rewriter.prototype.visitBuiltInSemantic):
        (Rewriter.prototype.visitResourceSemantic):
        (Rewriter.prototype.visitStageInOutSemantic):
        (Rewriter.prototype.visitSpecializationConstantSemantic):
        (Rewriter):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/Semantic.js: Added.
        (Semantic):
        (Semantic.prototype.get origin):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitBuiltInSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitResourceSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitStageInOutSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitSpecializationConstantSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer):
        (Semantic.prototype.equalToOtherSemantic):
        * WebGPUShadingLanguageRI/SpecializationConstantSemantic.js: Copied from Tools/WebGPUShadingLanguageRI/Field.js.
        (SpecializationConstantSemantic):
        (SpecializationConstantSemantic.prototype.isAcceptableType):
        (SpecializationConstantSemantic.prototype.isAcceptableForShaderType):
        (SpecializationConstantSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/StageInOutSemantic.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (StageInOutSemantic):
        (StageInOutSemantic.prototype.get index):
        (StageInOutSemantic.prototype.isAcceptableType):
        (StageInOutSemantic.prototype.isAcceptableForShaderType):
        (StageInOutSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeFunc):
        * WebGPUShadingLanguageRI/SynthesizeArrayOperatorLength.js:
        (synthesizeArrayOperatorLength):
        * WebGPUShadingLanguageRI/SynthesizeCopyConstructorOperator.js:
        (synthesizeCopyConstructorOperator):
        * WebGPUShadingLanguageRI/SynthesizeDefaultConstructorOperator.js:
        (synthesizeDefaultConstructorOperator):
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js:
        (synthesizeEnumFunctions):
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        (setupAnder):
        (synthesizeStructAccessorsForStructType):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderTypes):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncParameter):
        (Visitor.prototype.visitField):
        (Visitor.prototype.visitBuiltInSemantic):
        (Visitor.prototype.visitResourceSemantic):
        (Visitor.prototype.visitStageInOutSemantic):
        (Visitor.prototype.visitSpecializationConstantSemantic):
        (Visitor):
        * WebGPUShadingLanguageRI/index.html:

2018-09-25  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Test suite for Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=187738

        Reviewed by Myles C. Maxfield.

        This patch adds an Xcode project that contains a Cocoa app that can be
        used for running WHLSL shaders on the GPU. It also contains an Xcode
        test suite that runs all of the tests in Test.js on the GPU.

        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/.gitignore: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/AppIcon.appiconset/Contents.json: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/Contents.json: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Base.lproj/Main.storyboard: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Info.plist: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/WHLSL.entitlements: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/_SharedMetal.txt: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/main.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/Info.plist: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/WHLSL_ToyTests.m: Added.
        * WebGPUShadingLanguageRI/Test.js:
        (tests.lotsOfLocalVariables):

2018-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix after r236455
        https://bugs.webkit.org/show_bug.cgi?id=189121

        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderStages):

2018-09-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Not all functions should be able to run in all shader stages
        https://bugs.webkit.org/show_bug.cgi?id=189121

        Reviewed by Filip Pizlo.

        ddx() and ddy() can only run in fragment shaders, and the barrier functions can only run in compute shaders.
        ddx_coarse() & friends are currently implemented as just calling ddx(), so we only need to modify those functions
        if/when we make them native.

        The texture sampling functions that use implicit derivatives can run in any shader stage - they just use a LOD of
        0. Therefore, those functions are unchanged.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        (NativeFunc.prototype.get stage):
        (NativeFunc.prototype.toDeclString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseFuncDecl):
        (parseNativeFunc):
        (parseNative):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeFunc):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderStages):
        * WebGPUShadingLanguageRI/WSyntaxError.js:
        (WSyntaxError.prototype.toString):
        (WSyntaxError):
        * WebGPUShadingLanguageRI/index.html:

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Implement trap statements in Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=189615

        Reviewed by Myles C. Maxfield.

        Each function called by an entry point now receives an additional
        boolean pointer parameter, which is set to false if the function traps.
        After each function call (to a non-native function) this trap parameter
        is checked. The behavior of the interpreter has also been updated so
        that a function entry point catches the trap and instead returns zero,
        matching the behavior of compiled code.

        * WebGPUShadingLanguageRI/Evaluator.js: Adds a new flag to allow the
        test suite to check for traps and also returns zero from entry points
        whose invocation trapped.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Pass program to function
        declarations.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Update dependencies.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Add program
        property.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Ditto.
        * WebGPUShadingLanguageRI/Metal/MSLInsertTrapParameter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Conforms to the
        new trapping behavior.
        * WebGPUShadingLanguageRI/Test.js: Update tests that trap.

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] It shouldn’t be possible to use ternary expressions as l-values
        https://bugs.webkit.org/show_bug.cgi?id=189290

        Reviewed by Myles C. Maxfield.

        It is no longer possible for a ternary expression to be treated as an
        l-value. This patch adds several test cases to verify that this is the
        case.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitTernaryExpression): No longer check isLValue.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver:
        (NormalUsePropertyResolver.visitTernaryExpression): Deleted.
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitTernaryExpression): No longer copy isLValue.
        * WebGPUShadingLanguageRI/TernaryExpression.js:
        (TernaryExpression):
        (TernaryExpression.prototype.get elseExpression):
        (TernaryExpression.prototype.get isLValue): Deleted.
        (TernaryExpression.prototype.set isLValue): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (tests.ternaryExpression): Add checks for failure if a failure is used
        as an l-value.
        (ternaryExpressionIsLValue.node.TernaryExpressionVisitor.prototype.visitTernaryExpression): Deleted.
        (ternaryExpressionIsLValue.node.TernaryExpressionVisitor): Deleted.
        (tests.ternaryExpressionIsLValue): Deleted.

2018-09-24  Jer Noble  <jer.noble@apple.com>

        SharedBuffer should have an equality test
        https://bugs.webkit.org/show_bug.cgi?id=189919

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F):

2018-09-24  Alex Christensen  <achristensen@webkit.org>

        Prepare to replace WKBundleFileHandleCreateWithPath with a version that takes a WKBundlePageRef
        https://bugs.webkit.org/show_bug.cgi?id=189929

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle_Bundle.cpp:

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Casting user-created types to themselves should always work
        https://bugs.webkit.org/show_bug.cgi?id=189113

        Reviewed by Myles C. Maxfield.

        Casting user-defined types to themselves worked already, but we didn't
        test it anywhere.

        * WebGPUShadingLanguageRI/Test.js:
        (tests.selfCasts):

2018-09-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for Jhbuild-using ports.

        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch:
        Adjust the patch so it applies cleanly on the 1.14.3 version of the
        gst-plugins-good package.

2018-09-24  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for iOS 12 queues
        https://bugs.webkit.org/show_bug.cgi?id=189688

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Unreviewed build fix.

        A GStreamer patch was not applying cleanly on 1.14.3.

        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use no-more-pads event for noticing initialization segments
        https://bugs.webkit.org/show_bug.cgi?id=189868

        Reviewed by Xabier Rodriguez-Calvar.

        Added patch from https://bugzilla.gnome.org/show_bug.cgi?id=797187

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch: Added.

2018-09-24  Alicia Boya García  <aboya@igalia.com>
        [MSE][GStreamer] Add patch to jhbuild: matroskademux: Allow Matroska headers to be read more than once
        https://bugs.webkit.org/show_bug.cgi?id=185731

        Reviewed by Xabier Rodriguez-Calvar.

        Upstream bug in GStreamer: https://bugzilla.gnome.org/show_bug.cgi?id=793333

        This fixes YTTV 35. AppendMultipleInitOpusAudio (and any other use
        case where two WebM initialization segments are appended on a row).

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0007-matroskademux-Allow-Matroska-headers-to-be-read-more.patch: Added.
        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch: Added.
        * gstreamer/patches/gst-plugins-good-0009-matroskademux-Parse-successive-Tracks-elements.patch: Added.

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHSL] Need grammar to specify kernel group size
        https://bugs.webkit.org/show_bug.cgi?id=189108

        Reviewed by Dean Jackson.

        In HLSL, compute functions are annotated with their workgroup size.
        For example,

        [numthreads(3, 4, 5)] compute void foo(...) { ... }

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get attributeBlock):
        * WebGPUShadingLanguageRI/FuncAttribute.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (FuncAttribute):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncNumThreadsAttribute.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (FuncNumThreadsAttribute):
        (FuncNumThreadsAttribute.prototype.get x):
        (FuncNumThreadsAttribute.prototype.get y):
        (FuncNumThreadsAttribute.prototype.get z):
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseAttributeBlock):
        (parseFuncDecl):
        (parseFuncDef):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitFuncDef):
        (StatementCloner.prototype.visitFuncNumThreadsAttribute):
        (StatementCloner):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.numThreads):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncNumThreadsAttribute):
        (Visitor):
        * WebGPUShadingLanguageRI/index.html:

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Native functions which accept pointers need to do null checks
        https://bugs.webkit.org/show_bug.cgi?id=189883

        Reviewed by Dean Jackson.

        Simply guard all the places where we write through an author-provided pointer.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.textureDimensionsNull):

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement atomic operations and barriers
        https://bugs.webkit.org/show_bug.cgi?id=189025

        Reviewed by Dean Jackson.

        In the interpreter, atomic operations don't need to be atomic.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.atomics):

2018-09-22  Thibault Saunier  <tsaunier@igalia.com>

        [WPE] Be very permissive in the MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=189800

        This is just a test tool and we should make
        it just work, security and privacy is not really
        a primary focus here.

        Reviewed by Žan Doberšek.

        * MiniBrowser/wpe/main.cpp:
        (decidePermissionRequest):
        (main):

2018-09-21  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Local variables should be statically allocated
        https://bugs.webkit.org/show_bug.cgi?id=188402

        Reviewed by Myles C. Maxfield.

        An additional preparation stage is now performed so that all local
        variables and function parameters are allocated in a single struct at
        entry points. A pointer to this struct is then passed for function
        calls.

        * WebGPUShadingLanguageRI/All.js: Update dependencies.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js: Added new stage.
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype.set argumentList): Add setter because
        allocateAtEntryPoints needs to change this.
        * WebGPUShadingLanguageRI/EBufferBuilder.js: Remove a redundant
        constructor that wasn't used anywhere.
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.set parameters): Add setter.
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef.prototype.set body): Ditto.
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare): Add call to allocateAtEntryPoints. This call cannot
        happen any earlier because it depends on having types for call
        arguments.
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitReturn): Resolve issue where the return
        statement's function wasn't copied. A null check is required as the
        Rewriter might be used before this property is set.
        * WebGPUShadingLanguageRI/SPIRV.html: Update dependencies.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Abstracted logic
        into a separate function so that allocateAtEntryPoints can create the
        accessors for the struct type it introduces.
        * WebGPUShadingLanguageRI/Test.html: Update dependencies.
        * WebGPUShadingLanguageRI/Test.js: Add new tests to verify the static
        allocation transform works safely.
        * WebGPUShadingLanguageRI/index.html: Update dependencies.

2018-09-21  Jonathan Bedard  <jbedard@apple.com>

        Bring up queues for iOS 12 (Build fix)
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Unreviewed build fix.

        We should not build ImageDiff as x86 by default since 32 bit projects are
        deprecated in Xcode. ImageDiff should only be built once.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

2018-09-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Built RPM of WPE webkit fails to install with "nothing provides libWPEToolingBackends.so()"
        https://bugs.webkit.org/show_bug.cgi?id=189797

        Reviewed by Žan Doberšek.

        * wpe/backends/CMakeLists.txt: Make libWPEToolingBackends a static library to avoid
        the need for installing it. This works fine because the library only contains utility
        code intended to be reused from other various components (MiniBrowser, WebKitTestRunner).

2018-09-20  Daniel Bates  <dabates@apple.com>

        Move IOKitSPI.h from TestRunnerShared to PAL
        https://bugs.webkit.org/show_bug.cgi?id=189804

        Reviewed by Wenson Hsieh.

        Towards fixing <https://bugs.webkit.org/show_bug.cgi?id=189604> move the IOKit SPI forward
        declarations to PAL so that they can be shared by WebKit, DumpRenderTree and WebKitTestRunner.

        No functionality changed. So, no new tests.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm:
        * TestRunnerShared/spi/UIKitTestSPI.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:

2018-09-20  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=187735

        Reviewed by Myles C. Maxfield.

        Adds support for generating Metal Shading Language from WHLSL. Clients
        should include the file MetalCodegenAll.js and then call whlslToMsl
        with their program source code to compile to Metal.

        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType.prototype.get arrayRefType): Adds the arrayRefType method to
        all types to find the type of that expression when it is used in a
        MakeArrayRefExpression.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js:
        (MakeArrayRefExpression):
        (MakeArrayRefExpression.prototype.get type): Uses the new arrayRefType
        getter on all types to find the type of the expression.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLCompileResult.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLConstexprEmitter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionForwardDeclaration.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLNameMangler.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLNativeFunctionCall.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributes.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributesMap.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeUnifier.js: Added.
        * WebGPUShadingLanguageRI/Metal/TypeOf.js: Added.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.js: Added.
        * WebGPUShadingLanguageRI/PropertyResolver.js:
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        * WebGPUShadingLanguageRI/Test.js: Added awkward tests for the compiler
        to generate code for.
        (tests.incrementAndDecrement):
        (tests.returnIntLiteralUint):
        (tests.returnIntLiteralFloat):
        (tests.nestedSubscriptWithArraysInStructs):
        (tests.nestedSubscript):
        (tests.lotsOfLocalVariables):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get arrayRefType): See above.

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12@2x.png: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/iOS12@2x.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Move EWS bubbles to the iOS 12 section of the dashboard.

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/iOS12@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-12 img.logo):
        (table.queue-grid tr.platform.ios-12 img.logo):
        (table.queue-grid tr.platform.ios-simulator-11 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-11 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2018-09-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] TestRunner::queueLoad() fails to generate correct url for some urls.
        https://bugs.webkit.org/show_bug.cgi?id=189679

        Reviewed by Fujii Hironori.

        Replace the implementation with correct API call.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::queueLoad): Call UrlCombineW.

2018-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] fails to build on ARM arches complaining about undefined reference to `epoxy_eglMakeCurrent'
        https://bugs.webkit.org/show_bug.cgi?id=189556

        Reviewed by Konstantin Tokarev.

        This is only a speculative build fix as I didn't attempt to reproduce. Explicitly link to
        libepoxy.

        * wpe/backends/CMakeLists.txt:

2018-09-20  Daniel Bates  <dabates@apple.com>

        [iOS] Support testing more hardware special keys
        https://bugs.webkit.org/show_bug.cgi?id=189793

        Reviewed by Simon Fraser.

        * TestRunnerShared/spi/IOKitSPI.h: Add more SPI constants.
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey): Extracted out logic from hidUsageCodeForCharacter() to return the
        key code for the F1, F2, ..., F12 keys and extended the code to compute the key code for the
        F13, F14, ..., F24 keys.
        (hidUsageCodeForCharacter): Modified to call keyCodeForDOMFunctionKey().

2018-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove accidentally-committed debugging changes from flatpakutils script

        Aaaaaah maybe this is why changes are supposed to be reviewed.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):

2018-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, manually rollout our switch to master runtime

        Phil wants html5-codecs, which aren't available yet here. Let's switch back to 3.28 in the
        meantime, where we were already building GStreamer ourselves anyway. But use an updated
        SDK revision.

        * flatpak/files/httpd-autogen.sh: Added.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        * flatpak/org.webkit.GTK.yaml:
        * flatpak/org.webkit.WebKit.yaml:
        * flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch: Added.
        * flatpak/patches/libgcrypt-0001-Use-pkg-config-to-detect-gpg-error.patch: Added.

2018-09-20  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK] webkit-flatpak intercepts --help for other commands
        https://bugs.webkit.org/show_bug.cgi?id=189058

        The approach of run_in_sandbox_if_available is that we basically have the
        same set of arguments to setup the sandbox (ie. port name, build type, etc...)
        and we can pass those args first to setup the flatpak launcher object
        and then to the underlying script. That doesn't work well with the `--help` argument
        as once processed it 1. prints the help (which make no sense to the user of the calling script)
        2. exits the app - The solution is to just make sure that `--help` is not used when using
        flatpakutils from any script that is not `webkit-flatpak` itself.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (run_in_sandbox_if_available):

2018-09-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add W3C imported tests to the MSEEME watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2018-09-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fix the Streams API watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2018-09-19  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessProxy::suspendedPageWasDestroyed(WebKit::SuspendedPageProxy&)
        https://bugs.webkit.org/show_bug.cgi?id=189721
        <rdar://problem/44359788>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-19  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Improve test suite type safety
        https://bugs.webkit.org/show_bug.cgi?id=189502

        Reviewed by Myles C. Maxfield.

        Each of the 'makeT' functions now call the relevant cast function on the
        value before hand. The checkNumber function has also been removed and
        its uses have been replaced with functions that also check the type.
        Some of the arithmetic checks have been updated to reflect that the
        casts happen outside of WHLSL evaluation. Other tests have also been
        updated to reflect that some values cannot be precisely expressed in
        32-bit floating point.

        * WebGPUShadingLanguageRI/Casts.js:
        (castToBool): Added.
        (castAndCheckValue): Added.
        (isBitwiseEquivalent): Moved from Intrinsics.js.
        * WebGPUShadingLanguageRI/Intrinsics.js: Ditto.
        * WebGPUShadingLanguageRI/SPIRV.html: Update depdencies.
        * WebGPUShadingLanguageRI/Test.html: Ditto.
        * WebGPUShadingLanguageRI/Test.js: Update makeT functions to do a cast
        and check the result. Some tests were also updated to reflect the change
        in the behavior of these functions.
        * WebGPUShadingLanguageRI/index.html: Update dependencies.

2018-09-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add optional cap on partitioned cache max age
        https://bugs.webkit.org/show_bug.cgi?id=189711
        <rdar://problem/39246837>

        Reviewed by Antti Koivisto and Chris Dumez.

        This change adds infrastructure for layout tests of capped cache max age.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsCacheMaxAgeCap):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsCacheMaxAgeCap):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-09-19  Dawei Fenton  <realdawei@apple.com>

       Unreviewed. Update my email and alias in list of contributors.

        * Scripts/webkitpy/common/config/contributors.json:

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, try #3 to fix a typo

        I feel like Charlie Brown, how hard this has been for me....

        * Scripts/run-minibrowser:
        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailable):
        (runInFlatpakIfAvailible): Deleted.

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, fix that typo in more places

        It got copied into webkitdirs.pm!

        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailible):
        (runInFlatpakIfAvalaible): Deleted.

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, fix a pervasive typo in the webkit-flatpak script

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.run):

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, update to latest GNOME SDK

        * flatpak/org.webkit.WebKit.yaml:

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r235500.

        Time to switch back to master runtime

        Reverted changeset:

        "Unreviewed, rolling out r235114."
        https://bugs.webkit.org/show_bug.cgi?id=188731
        https://trac.webkit.org/changeset/235500

2018-09-19  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Add Pablo Saavedra to the list of contributors.

        * Scripts/webkitpy/common/config/contributors.json:

2018-09-19  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Add support for AV1 decoding
        https://bugs.webkit.org/show_bug.cgi?id=189647

        Reviewed by Žan Doberšek.

        Add patches required for AV1 decoding support. They're all
        upstream already and will be shipped in GStreamer 1.16. The aom
        GStreamer plugin depends on the aom library for which there's no
        official release yet.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-aomenc-Add-support-for-10-12bit-decoding.patch: Added.
        * gstreamer/patches/gst-plugins-bad-0002-aomenc-Handle-8-bit_depth-images-with-AOM_IMG_FMT_HI.patch: Added.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Detect-and-expose-CEA-608-708-Closed-Caption.patch: Added. This one is unrelated but an implicit dependency of the next one.
        * gstreamer/patches/gst-plugins-good-0004-qtdemux-Add-initial-support-for-AV1-demuxing.patch: Added.
        * gstreamer/patches/gst-plugins-good-0005-qtdemux-Extract-AV1-codec_data-and-put-it-in-the-cap.patch: Added.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-Recognize-more-AV1-atoms.patch: Added.

2018-09-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Clobbering and building occurs multiple times for iOS Simulator ports
        https://bugs.webkit.org/show_bug.cgi?id=189702
        <rdar://problem/44541704>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Move build check and clobbering to run, since set up is
        run multiple times for iOS simulator.
        (Manager.run):

2018-09-18  Chris Dumez  <cdumez@apple.com>

        "DidFirstVisuallyNonEmptyLayout" callback does not get called when restoring a page from PageCache
        https://bugs.webkit.org/show_bug.cgi?id=189681
        <rdar://problem/44526171>

        Reviewed by Alex Christensen and Zalan Bujtas.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):

2018-09-18  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Implement mouse event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=189697

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wkEventModifiersToWPE):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):

2018-09-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use Semaphore and BinarySemaphore instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=185339

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp:
        (TestWebKitAPI::ToUpperConverter::stopProducing):
        (TestWebKitAPI::ToUpperConverter::stopConsuming):

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Many modern media control tests leak documents in testing
        https://bugs.webkit.org/show_bug.cgi?id=189437

        Reviewed by Darin Adler.
        
        In order to accurately detect leaks in media controls tests which use lots of
        SVGImages, we have to:
        - Fire a zero-delay timer after the postTask, in order for ImagesLoader's m_derefElementTimer
          to clear references to elements.
        - Have releaseCriticalMemory() call CachedResourceLoader's garbageCollectDocumentResources()
          to drop the last handle to the CachedResource for an SVGImage.
        - Call WKBundleReleaseMemory() after the GC and timer, since we need garbageCollectDocumentResources()
          to run again after that timer has fired.
        
        This should fix most of the spurious leak reports involving SVGImage documents.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reportLiveDocuments):
        (WTR::InjectedBundle::didReceiveMessageToPage):

2018-09-17  Chris Dumez  <cdumez@apple.com>

        PSON: window.open() with 'noopener' should only process-swap cross-site, not cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=189602
        <rdar://problem/44430549>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-17  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update to GStreamer 1.14.3
        https://bugs.webkit.org/show_bug.cgi?id=189450

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Bump GStreamer modules from 1.14.1 to 1.14.3.

2018-09-17  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Doesn't check sha256 sums
        https://bugs.webkit.org/show_bug.cgi?id=189646

        Reviewed by Michael Catanzaro.

        * gstreamer/jhbuild.modules: Properly set the sha256: prefix on hashes.

2018-09-17  Sihui Liu  <sihui_liu@apple.com>

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415
        <rdar://problem/44396973>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2018-09-08  Darin Adler  <darin@apple.com>

        Streamline JSRetainPtr, fix leaks of JSString and JSGlobalContext
        https://bugs.webkit.org/show_bug.cgi?id=189455

        Reviewed by Keith Miller.

        There is a lot of copied and pasted code for WebKit vs. Legacy WebKit
        testing and even for macOS vs. iOS vs. Windows platform-specific code.
        For now, this patch just makes corresponding changes to the copied code.
        Later we might get better results by merging more code instead of having
        all these separate copies.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::makeWindowObject): Use the adopt function
        instead of the special Adopt constructor of JSRetainPtr.

        * DumpRenderTree/AccessibilityTextMarker.cpp: Removed unneeded include.

        * DumpRenderTree/AccessibilityUIElement.cpp: Ditto.
        (allAttributesCallback): Don't adopt at this level; changed the
        underlying function to return a JSRetainPtr so the adopt is right next
        to the call to the create or copy function.
        (attributesOfLinkedUIElementsCallback): Ditto.
        (attributesOfDocumentLinksCallback): Ditto.
        (attributesOfChildrenCallback): Ditto.
        (parameterizedAttributeNamesCallback): Ditto.
        (attributesOfColumnHeadersCallback): Ditto.
        (attributesOfRowHeadersCallback): Ditto.
        (attributesOfColumnsCallback): Ditto.
        (attributesOfRowsCallback): Ditto.
        (attributesOfVisibleCellsCallback): Ditto.
        (attributesOfHeaderCallback): Ditto.
        (rowIndexRangeCallback): Ditto.
        (columnIndexRangeCallback): Ditto.
        (rangeForLineCallback): Ditto.
        (boundsForRangeCallback): Ditto.
        (rangeForPositionCallback): Ditto.
        (stringForRangeCallback): Ditto.
        (attributedStringForRangeCallback): Ditto.
        (uiElementCountForSearchPredicateCallback): Use the free adopt
        function instead of the adopt member function.
        (uiElementForSearchPredicateCallback): Ditto.
        (selectTextWithCriteriaCallback): Don't adopt at this level.
        (attributedStringForElementCallback): Ditto.
        (setValueCallback): Use free adopt.
        (stringAttributeValueCallback): Don't adopt at this level.
        (uiElementArrayAttributeValueCallback): Ditto.
        (uiElementAttributeValueCallback): Ditto.
        (stringForTextMarkerRangeCallback): Ditto.
        (attributedStringForTextMarkerRangeCallback): Ditto.
        (attributedStringForTextMarkerRangeWithOptionsCallback): Ditto.
        (getARIADropEffectsCallback): Ditto.
        (getClassListCallback): Ditto.
        (getRoleCallback): Ditto.
        (getSubroleCallback): Ditto.
        (getRoleDescriptionCallback): Ditto.
        (getComputedRoleStringCallback): Ditto.
        (getTitleCallback): Ditto.
        (getDescriptionCallback): Ditto.
        (getStringValueCallback): Ditto.
        (getLanguageCallback): Ditto.
        (getHelpTextCallback): Ditto.
        (getOrientationCallback): Ditto.
        (getPathDescriptionCallback): Ditto.
        (getSelectedTextRangeCallback): Ditto.
        (speakAsCallback): Ditto.
        (getValueDescriptionCallback): Ditto.
        (getAccessibilityValueCallback): Ditto.
        (getDocumentEncodingCallback): Ditto.
        (getDocumentURICallback): Ditto.
        (getURLCallback): Ditto.
        (characterAtOffsetCallback): Ditto.
        (wordAtOffsetCallback): Ditto.
        (lineAtOffsetCallback): Ditto.
        (sentenceAtOffsetCallback): Ditto.
        (stringForSelectionCallback): Ditto.
        (getIdentifierCallback): Ditto.
        (getTraitsCallback): Ditto.
        (supportedActionsCallback): Ditto.
        (mathPostscriptsDescriptionCallback): Ditto.
        (mathPrescriptsDescriptionCallback): Ditto.
        (AccessibilityUIElement::rangeForLine): Updated to return JSRetainPtr.
        (AccessibilityUIElement::rangeForPosition): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.

        * DumpRenderTree/AccessibilityUIElement.h: Use JSRetainPtr instead of
        raw pointers for the results of the functions that create strings.
        The old way was difficult to get right; the functions didn't even follow
        the create/copy naming rule.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_platformTypeConstructor): Use the adopt function instead of the
        JSRetainPtr adopt constructor. Also nullptr instead of 0.

        * DumpRenderTree/GCController.cpp:
        (GCController::makeWindowObject): Use adopt function instead of constructor.

        * DumpRenderTree/TestRunner.cpp:
        (pathToLocalResourceCallback): Use adopt function instead of constructor.
        (addDisallowedURLCallback): Ditto.
        (addURLToRedirectCallback): Ditto.
        (clearApplicationCacheForOriginCallback): Ditto.
        (applicationCacheDiskUsageForOriginCallback): Ditto.
        (decodeHostNameCallback): Don't adopt at this level.
        (encodeHostNameCallback): Ditto.
        (execCommandCallback): Use adopt instead of JSRetainPtr::adopt.
        (findStringCallback): Use adopt function instead of constructor.
        (isCommandEnabledCallback): Ditto.
        (overridePreferenceCallback): Ditto.
        (queueLoadCallback): Ditto.
        (queueLoadHTMLStringCallback): Ditto.
        (queueLoadingScriptCallback): Ditto.
        (queueNonLoadingScriptCallback): Ditto.
        (setAuthenticationPasswordCallback): Ditto.
        (setAuthenticationUsernameCallback): Ditto.
        (setDomainRelaxationForbiddenForURLSchemeCallback): Ditto.
        (setMockGeolocationPositionUnavailableErrorCallback): Ditto.
        (setPOSIXLocaleCallback): Ditto.
        (setPersistentUserStyleSheetLocationCallback): Ditto.
        (setUserStyleSheetLocationCallback): Ditto.
        (setValueForUserCallback): Ditto.
        (setWillSendRequestClearHeaderCallback): Ditto.
        (setPageVisibilityCallback): Ditto.
        (evaluateInWebInspectorCallback): Ditto.
        (evaluateScriptInIsolatedWorldCallback): Ditto.
        (evaluateScriptInIsolatedWorldAndReturnValueCallback): Ditto.
        (addOriginAccessWhitelistEntryCallback): Ditto.
        (removeOriginAccessWhitelistEntryCallback): Ditto.
        (setScrollbarPolicyCallback): Ditto.
        (addUserScriptCallback): Ditto.
        (addUserStyleSheetCallback): Ditto.
        (apiTestNewWindowDataLoadBaseURLCallback): Ditto.
        (authenticateSessionCallback): Ditto.
        (getTitleTextDirectionCallback): Ditto.
        (getInspectorTestStubURLCallback): Ditto.
        (simulateLegacyWebNotificationClickCallback): Ditto.
        (setTextDirectionCallback): Ditto.
        (grantWebNotificationPermissionCallback): Ditto.
        (denyWebNotificationPermissionCallback): Ditto.
        (accummulateLogsForChannel): Ditto.
        (runUIScriptCallback): Ditto.
        (TestRunner::makeWindowObject): Ditto.
        (TestRunner::uiScriptDidComplete): Ditto.
        (TestRunner::setOpenPanelFiles): Ditto.

        * DumpRenderTree/TestRunner.h: Use JSRetainPtr instead of
        raw pointers for the results of the functions that create strings.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::platformName const): Use the adopt
        function instead of the adopt constructor.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (concatenateAttributeAndValue): Changed to return a JSRetainPtr.
        (AccessibilityUIElement::identifier): Ditto.
        (AccessibilityUIElement::traits): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::stringForSelection): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForElement): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::classList const): Ditto.

        * DumpRenderTree/mac/AccessibilityCommonMac.h: Changed the
        createJSStringRef method to return a JSRetainPtr.
        * DumpRenderTree/mac/AccessibilityCommonMac.mm:
        (-[NSString createJSStringRef]): Ditto.
        (searchPredicateParameterizedAttributeForSearchCriteria): Use the
        adopt function instead of the adopt constructor.
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::platformName const): Ditto.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        (makeValueRefForValue): Updated for the above, no adopt needed here now.
        (makeObjectRefForDictionary): Ditto.
        (-[AccessibilityNotificationHandler _notificationReceived:]): Ditto.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (concatenateAttributeAndValue): Changed to return a JSRetainPtr.
        (descriptionOfElements): Ditto.
        (selectTextParameterizedAttributeForCriteria): Ditto.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::classList const): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::rangeForLine): Ditto.
        (AccessibilityUIElement::rangeForPosition): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (createJSStringRef): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.
        (AccessibilityUIElement::supportedActions): Ditto.
        (AccessibilityUIElement::mathPostscriptsDescription const): Ditto.
        (AccessibilityUIElement::mathPrescriptsDescription const): Ditto.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectForFrame:inIsolatedWorld:]):
        Use the adopt function instead of the adopt constructor.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (originsArrayToJS): Ditto.
        (TestRunner::copyDecodedHostName): Return a JSRetainPtr.
        (TestRunner::copyEncodedHostName): Ditto.
        (TestRunner::pathToLocalResource): Ditto.
        (TestRunner::queueLoad): Use adopt function instead of constructor.
        (TestRunner::findString): Ditto.
        (TestRunner::inspectorTestStubURL): Return a JSRetainPtr.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::winNotificationReceived): Use adopt function
        instead of adopt constructor.
        (AccessibilityController::platformName const): Ditto.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (AccessibilityUIElement::allAttributes): Changed to return a JSRetainPtr.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::classList const): Ditto.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::copyDecodedHostName): Changed to return a JSRetainPtr.
        (TestRunner::copyEncodedHostName): Ditto.
        (TestRunner::pathToLocalResource): Ditto.
        (TestRunner::queueLoad): Ditto.
        (TestRunner::findString): Ditto.
        (TestRunner::inspectorTestStubURL): Ditto.

        * TestRunnerShared/Bindings/JSWrapper.h:
        (WTR::setProperty): Use adopt function instead of constructor.
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext): Ditto.
        (UIScriptContext::runUIScript): Ditto.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::toDeviceOrientation): Ditto.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (nsTextCheckingType): Changed this function to not take an rvalue
        reference to a JSRetainPtr since it doesn't take ownership.
        (-[LayoutTestSpellChecker setResultsFromJSObject:inContext:]): Updated
        for the above change.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::javaScriptCallback): Use adopt function instead of
        adopt member function.

        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp: Removed unneeded include.
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm: Ditto.
        * TestWebKitAPI/Tests/mac/DOMNodeFromJSObject.mm: Use adopt function instead of
        adopt constructor.
        * TestWebKitAPI/Tests/mac/JSWrapperForNodeInWebFrame.mm: Ditto.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        Removed unneeded includes.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: Ditto.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_platformTypeConstructor): Use the adopt function instead of the
        JSRetainPtr adopt constructor. Also nullptr instead of 0.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::arrayLength): Use adopt function instead of constructor.
        (WTR::parseModifierArray): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue): Ditto.
        (WTR::dumpPath): Ditto.
        (WTR::toJS): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::findString): Ditto.
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Ditto.
        (WTR::TestRunner::callDidReceiveAllStorageAccessEntriesCallback): Ditto.
        (WTR::TestRunner::setOpenPanelFiles): Ditto.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::platformName): Ditto.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        This fixes storage leaks in many functions below, which were using
        the create function and putting the value right into a JSRetainPtr
        without adoption.
        (WTR::createEmptyJSString): Added. This helper function reduces the
        repetitive code to create empty strings.
        (WTR::concatenateAttributeAndValue): Return a JSRetainPtr.
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (WTR::AccessibilityUIElement::attributesOfChildren): Ditto.
        (WTR::AccessibilityUIElement::allAttributes): Ditto.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (WTR::AccessibilityUIElement::role): Ditto.
        (WTR::AccessibilityUIElement::subrole): Ditto.
        (WTR::AccessibilityUIElement::roleDescription): Ditto.
        (WTR::AccessibilityUIElement::computedRoleString): Ditto.
        (WTR::AccessibilityUIElement::title): Ditto.
        (WTR::AccessibilityUIElement::orientation const): Ditto.
        (WTR::AccessibilityUIElement::language): Ditto.
        (WTR::AccessibilityUIElement::valueDescription): Ditto.
        (WTR::AccessibilityUIElement::ariaDropEffects const): Ditto.
        (WTR::AccessibilityUIElement::boundsForRange): Ditto.
        (WTR::AccessibilityUIElement::stringForRange): Removed unneeded null check.
        (WTR::AccessibilityUIElement::attributedStringForRange): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumns): Ditto.
        (WTR::AccessibilityUIElement::attributesOfRows): Ditto.
        (WTR::AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (WTR::AccessibilityUIElement::attributesOfHeader): Ditto.
        (WTR::AccessibilityUIElement::selectedTextRange): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Ditto.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::AccessibilityUIElement::stringForSelection): Removed unneeded
        null check.
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:
        Use JSRetainPtr for the return value of createJSStringRef.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (-[NSString createJSStringRef]): Ditto.
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria): Use the
        adopt function instead of the adopt constructor.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::platformName): Ditto

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        (makeValueRefForValue): Updated for above by removing adopt.
        (makeObjectRefForDictionary): Ditto.
        (-[AccessibilityNotificationHandler _notificationReceived:]): Ditto.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (WTR::concatenateAttributeAndValue): Return a JSRetainPtr.
        (WTR::descriptionOfElements): Ditto.
        (WTR::selectTextParameterizedAttributeForCriteria): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Use createEmptyJSString,
        fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::createJSStringRef): Return a JSRetainPtr.

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK): Take a const& to eliminate a little bit of reference count churn.
        (WTR::toJS): Use the adopt function instead of the constructor.

2018-09-14  Dean Jackson  <dino@grorg.org>

        Add Justin Michaud.

        * Scripts/webkitpy/common/config/contributors.json:

2018-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        bots should pass --clobber-old-results to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=189623

        Reviewed by Aakash Jain.

        In order to ensure that bots to not produce confusing results due to transient execptions,
        or run out of space if they continually hit an exception, old layout test results should be clobbered.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests):

2018-09-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235954.

        Breaks the watchOS build.

        Reverted changeset:

        "Move IndexedDB to Network Process"
        https://bugs.webkit.org/show_bug.cgi?id=189415
        https://trac.webkit.org/changeset/235954

2018-09-13  Daniel Bates  <dabates@apple.com>

        Add Copy WebKit Permalink plugin for Sublime Text
        https://bugs.webkit.org/show_bug.cgi?id=189589

        Rubber-stamped by Joseph Pecoraro.

        Port the Copy WebKit Permalink Automator service to a Sublime Text plugin. Once installed you can
        use the plugin to copy to the Clipboard a trac.webkit.org hyperlink to the selected line in the
        active document with or without blame annotations.

        Once installed, you can Control-click (on Mac) or right-click (on Windows and Linux) on a line and
        choose Copy WebKit Permalink or Copy WebKit Permalink to Blame from the context menu to copy to the
        Clipboard a permanent hyperlink to the selected line without or with blame annotations, respectively.
        On Mac you can also invoke the same functionality using the keyboard shortcuts Command + Shift + Control + C
        and Command + Shift + Control + Option + C, respectively.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-menu: Added.
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py: Added.
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Default (OSX).sublime-keymap: Added.
        * CopyPermalink/Sublime Text/INSTALL: Added.
        * CopyPermalink/Xcode/Copy WebKit Permalink.workflow/Contents/Info.plist: Renamed from Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/Info.plist.
        * CopyPermalink/Xcode/Copy WebKit Permalink.workflow/Contents/document.wflow: Renamed from Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow.
        * CopyPermalink/Xcode/INSTALL: Renamed from Tools/CopyPermalink/README.

2018-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebDriver tests after r235225.

        Use wpt serve command to run the http server.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer.__init__):
        (WebDriverW3CWebServer.start):
        (WebDriverW3CWebServer.stop):

2018-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Allow to run script dialogs asynchronously in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189544

        Reviewed by Michael Catanzaro.

        Add test cases for the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][ImageDiff] Fix compilation error and warning of PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189496
        <rdar://problem/44370981>

        Unreviewed warning fix.

        r235929 has introduced a new compilation warning:
        > Tools/ImageDiff/cairo/PlatformImageCairo.cpp:34:70: warning: unused parameter ‘imageSize’ [-Wunused-parameter]

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin): Removed the variable name.

2018-09-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Complete support for Paste as Quotation
        https://bugs.webkit.org/show_bug.cgi?id=189504

        Reviewed by Wenson Hsieh.

        * MiniBrowser/mac/MainMenu.xib: Added a Paste as Quotation command in the Edit menu.

2018-09-12  Sihui Liu  <sihui_liu@apple.com>

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2018-09-12  Chris Dumez  <cdumez@apple.com>

        PSON: No process swap on back navigation after URL bar navigation
        https://bugs.webkit.org/show_bug.cgi?id=189557
        <rdar://problem/44353108>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-11  Dean Jackson  <dino@apple.com>

        Header parsing for experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189486
        <rdar://problem/44320618>

        Reviewed by Tim Horton.

        Keep track of experimental and internal debug features in TestOptions, and
        allow webkit-test-runner headers to toggle them by name.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][DumpRenderTree] 0 and nullptr can't be implicitly converted to AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=189492

        Reviewed by Alex Christensen.

        0 and nullptr can't be implicitly converted to
        AccessibilityUIElement because only Windows port typedefs
        PlatformUIElement as COMPtr<IAccessible> not a pointer.

        Replaced "return 0" and "return nullptr" with "return { nullptr }".

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::horizontalScrollbar const):
        (AccessibilityUIElement::verticalScrollbar const):
        (AccessibilityUIElement::uiElementAttributeValue const):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::accessibleElementById):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::selectedChildAtIndex const):

2018-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        FontManagerTests.ChangeFontColorWithColorPanel fails on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=189382

        Reviewed by Ryosuke Niwa.

        Fix the test by specifying colors in RGB colorspace.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (TestWebKitAPI::TEST):

2018-09-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][ImageDiff] Fix compilation error and warning of PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189496

        Reviewed by Alex Christensen.

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin): Removed unnecessary ReadContext struct.
        (ImageDiff::PlatformImage::writeAsPNGToStdout): Use '%lu' format type specifier for unsigned long.

2018-09-07  Dean Jackson  <dino@apple.com>

        Add and expose Internal features from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189442
        <rdar://problem/44243404>

        Reviewed by Simon Fraser.

        Update MiniBrowser to expose an Internal feature menu.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleExperimentalFeature:]):
        (-[SettingsController toggleInternalDebugFeature:]):

2018-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Support changing foreground colors via color panel
        https://bugs.webkit.org/show_bug.cgi?id=189382
        <rdar://problem/44227311>

        Reviewed by Ryosuke Niwa.

        Add an API test that uses NSColorPanel to change the color of selected text, and also apply typing styles when
        the selection is collapsed. The test also exercises switching between opaque colors (alpha = 1) and transparent
        colors, as well as making different parts of a word different colors.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (-[TestWKWebView collapseToEnd]):
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

== Rolled over to ChangeLog-2018-09-11 ==
