2019-10-17  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net.buildbot 
        https://bugs.webkit.org/show_bug.cgi?id=202466

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.buildbot to the test list.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.url_encoded_name): Call compatible urllib quote.
        (Builder.revision_build_pairs_with_results): Convert iterator to list before returning.
        (Build.results_url): Call compatible urllib quote.
        (BuildBot._parse_last_build_cell):renderContents needs to be decoded in Python 3.
        (BuildBot._parse_current_build_cell): BeautifulSoup and bs4 render breaks differently.
        (BuildBot._fetch_build_dictionary): Call compatible urllib quote.
        * Scripts/webkitpy/common/net/regressionwindow.py:
        (RegressionWindow.revisions): Convert range(...) to list.

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

        [ews] status bubbles should show details from all the builds in case build is retried
        https://bugs.webkit.org/show_bug.cgi?id=203117

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Display messages from all the builds (including retried builds) for a patch on a queue.
        (StatusBubble._steps_messages_from_multiple_builds): Method to generate status using information from all the retried builds. 
        (StatusBubble.get_all_builds_for_queue): Method to get all the builds instead of just the latest one.
        (StatusBubble.get_latest_build_for_queue): Modified to use the new get_all_builds_for_queue() method.

2019-10-17  Emilio Cobos Álvarez  <emilio@crisal.io>

        [GTK] Explicitly use Python 2 in jhbuild-wrapper
        https://bugs.webkit.org/show_bug.cgi?id=202790

        Reviewed by Adrian Perez de Castro.

        jhbuildutils.py requires Python 2 for the moment, so using just
        `python` fails in distros where Python 3 is the default.

        * jhbuild/jhbuild-wrapper:

2019-10-17  Paulo Matos  <pmatos@igalia.com>

        Check values of variables before extracting index in perl
        https://bugs.webkit.org/show_bug.cgi?id=202333

        Reviewed by Jonathan Bedard.

        If compiler doesn't properly report the host and target it was
        compiled for, lacking better information we just go ahead and assume
        there is no cross compilation involved.
        
        * Scripts/webkitdirs.pm:
        (isCrossCompilation):

2019-10-17  Pablo Saavedra  <psaavedra@igalia.com>

        Add a driver for MiniBrowser running with WPE for
        benchmark_runner
        https://bugs.webkit.org/show_bug.cgi?id=202994

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowserwpe_driver.py: Added.
        (WPEMiniBrowserDriver):
        (WPEMiniBrowserDriver.launch_url):
        (WPEMiniBrowserDriver.launch_driver):

2019-10-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        run-buildbot-test: sqlalchemy exception when upgrading the database
        https://bugs.webkit.org/show_bug.cgi?id=202927

        Reviewed by Adrian Perez de Castro.

        Update the version of sqlalchemy-migrate for pip used for the test.
        That fixes the exception when upgrading the database.

        * BuildSlaveSupport/build.webkit.org-config/run-buildbot-test.py:

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

        [Quick Look] Test that legacy web views load previews before deciding content policy
        https://bugs.webkit.org/show_bug.cgi?id=202971

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookLegacyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        (TEST):
        (-[QuickLookFrameLoadDelegate webView:didFinishLoadForFrame:]): Deleted.

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

        Rename PageCache to BackForwardCache
        https://bugs.webkit.org/show_bug.cgi?id=203048

        Reviewed by Alex Christensen.

        Rename PageCache to BackForwardCache for clarity and consistency with the UIProcess's WebBackForwardCache.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestRunner.cpp:
        (overridePreferenceCallback):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::willDisconnectDOMWindowExtensionFromGlobalObject):
        (TestWebKitAPI::DOMWindowExtensionNoCache::didReconnectDOMWindowExtensionToGlobalObject):
        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::DidRemoveFrameFromHiearchyInBackForwardCacheTest::DidRemoveFrameFromHiearchyInBackForwardCacheTest):
        (TestWebKitAPI::DidRemoveFrameFromHiearchyInBackForwardCacheTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::overridePreference):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * lldb/lldb_webkit.py:
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):
        (WebCoreDocumentProvider.page_cache_state):

2019-10-16  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net.bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=202468

        Reviewed by Stephanie Lewis.

        Make the irc library we use Python 3 compatible.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.bugzilla to the test list.
        * Scripts/webkitpy/thirdparty/irc/ircbot.py: Use full import paths.
        * Scripts/webkitpy/thirdparty/irc/irclib.py: Fix exceptions, printing for Python 3.
        (Connection._get_socket): 
        (ServerConnection.connect):
        (ServerConnection.process_data):
        (ServerConnection.disconnect):
        (ServerConnection.send_raw):
        (DCCConnection.connect):
        (DCCConnection.listen):
        (DCCConnection.disconnect):
        (DCCConnection.process_data):
        (DCCConnection.privmsg):

2019-10-16  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Block all third-party cookies on websites without prior user interaction
        https://bugs.webkit.org/show_bug.cgi?id=203017
        <rdar://problem/56262708>

        Reviewed by Alex Christensen.

        These changes are test infrastructure to be able to toggle the function
        through testRunner.setStatisticsShouldBlockThirdPartyCookies().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsShouldBlockThirdPartyCookies):
        (WTR::TestRunner::statisticsCallDidSetShouldBlockThirdPartyCookiesCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsShouldBlockThirdPartyCookies):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetShouldBlockThirdPartyCookies):
        * WebKitTestRunner/TestInvocation.h:

2019-10-16  Kate Cheney  <katherine_cheney@apple.com>

        WKWebsiteDataStoreStatisticsResetToConsistentState() should call store.setUseITPDatabase(false)
        https://bugs.webkit.org/show_bug.cgi?id=203020
        <rdar://problem/56314484>

        Reviewed by Chris Dumez.

        Added a completion handler to setUseITPDatabase() to avoid race
        conditions.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUseITPDatabase):

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

        DumpRenderTree should clear WTFLogChannelState::OnWithAccumulation state set by testRunner.accummulateLogsForChannel
        https://bugs.webkit.org/show_bug.cgi?id=203024

        Reviewed by Alex Christensen.

        If a test case calls testRunner.accummulateLogsForChannel("IndexedDB"),
        all subsequent IndexedDB tests also dump the log.
        This is unnecessarily bloating DumpRenderTree log because
        DumpRenderTree is run with --debug-rwt-logging switch on Buildbot.

        Add a function to clear WTFLogChannelState::OnWithAccumulation
        state, and call it for every test execution.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):
        Call WebCoreTestSupport::clearAllLogChannelsToAccumulate.

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

        Remove an API test workaround that is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=203037

        Reviewed by Tim Horton.

        This worked around <rdar://problem/51510554> by avoiding codepaths that resulted in failure to read dropped
        content from NSItemProviders on iOS. <rdar://problem/51510554> is fixed in iOS 13, so we can remove this hack.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        (applyWorkaroundToAllowWritingAttributedStringsToItemProviders): Deleted.

2019-10-16  Pablo Saavedra  <psaavedra@igalia.com>

        [Tools] Add a driver for cog for benchmark_runner.py
        https://bugs.webkit.org/show_bug.cgi?id=202995

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_cog_driver.py: Added.
        (CogBrowserDriver):
        (CogBrowserDriver.launch_url):
        (CogBrowserDriver.launch_driver):
        (CogFdoBrowserDriver):
        (CogFdoBrowserDriver.launch_url):

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

        WebAudioSourceProviderAVFObjC::provideInput should set its WebAudioBufferList parameters correctly
        https://bugs.webkit.org/show_bug.cgi?id=202930
        <rdar://problem/56006776>

        Reviewed by Eric Carlson.

        Add a test that has an audio track that goes from 1 to 2 channels while being piped to a WebAudio pipeline.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (-[GUMMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia-webaudio.html: Added.

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add user messages API
        https://bugs.webkit.org/show_bug.cgi?id=202847

        Reviewed by Adrian Perez de Castro.

        Add a test to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (UserMessageTest::webViewUserMessageReceivedCallback):
        (UserMessageTest::webContextUserMessageReceivedCallback):
        (UserMessageTest::UserMessageTest):
        (UserMessageTest::~UserMessageTest):
        (UserMessageTest::sendMessage):
        (UserMessageTest::sendMedssageToAllExtensions):
        (UserMessageTest::viewUserMessageReceived):
        (UserMessageTest::contextUserMessageReceived):
        (UserMessageTest::waitUntilViewMessageReceived):
        (UserMessageTest::waitUntilContextMessageReceived):
        (readFileDescritpor):
        (testWebExtensionUserMessages):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (documentLoadedCallback):
        (pageMessageReceivedCallback):
        (pageCreatedCallback):
        (extensionMessageReceivedCallback):
        (webkit_web_extension_initialize_with_user_data):

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

        Improve summary for WebKitPerl Tests build step
        https://bugs.webkit.org/show_bug.cgi?id=203006

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPerlTests.getResultSummary): Override method to customize summary.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-10-15  Zhifei Fang  <zhifei_fang@apple.com>

        Tool to mark jsc test skip/enable
        https://bugs.webkit.org/show_bug.cgi?id=202063

        Reviewed by Keith Miller.

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

2019-10-15  Peng Liu  <peng.liu6@apple.com>

        [Picture-in-Picture Web API] Implement HTMLVideoElement.requestPictureInPicture() / Document.exitPictureInPicture()
        https://bugs.webkit.org/show_bug.cgi?id=201024

        Reviewed by Eric Carlson.

        Add configurations for Picture-in-Picture API and enable it in the test runner.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPictureInPictureAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-10-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Rename -[WKUIDelegatePrivate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:] to -[WKUIDelegatePrivate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=202564
        <rdar://problem/55974027>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]): Deleted.

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

        [ews] Use python 3 compatible way to represent octal in buildbot code
        https://bugs.webkit.org/show_bug.cgi?id=202999

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/buildbot.tac:
        * BuildSlaveSupport/ews-build/steps.py:

2019-10-15  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Add os version to various unix ports
        https://bugs.webkit.org/show_bug.cgi?id=202955

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Use platform.release() to defined the os_version.

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

        REGRESSION: editing/async-clipboard/clipboard-interfaces.html is failing in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=202940
        <rdar://problem/56262298>

        Reviewed by Ryosuke Niwa.

        Add some plumbing to support the async clipboard API experimental test option in Windows.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):

2019-10-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Write more tests for _WKWebAuthenticationPanel
        https://bugs.webkit.org/show_bug.cgi?id=202565
        <rdar://problem/55974128>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:]):
        (-[TestWebAuthenticationPanelUIDelegate init]):
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc.html: Added.

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

        Pass CORS-enabled schemes through WebProcess instead of having them NetworkProcess-global
        https://bugs.webkit.org/show_bug.cgi?id=202891

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerWithExpectedMessage userContentController:didReceiveScriptMessage:]):
        Use EXPECT_WK_STREQ so I can see what is going on on EWS.

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix several GTK tests in /WebKit2Gtk/TestUIClient crashing since r241988

        This was not caused by r241988, but revealed the existing bug. We were not creating the new WebKitWebView in
        UIClientTest with the related WebKitWebView. Since r241988, the new WebPageProxy drawing area is passed to
        creationParameters(), but it's nullptr because the WebPageProxy hasn't been initialized yet. When using related
        views, the new WebPageProxy is already initialized because it has running processes on creation.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /WebKit2Gtk/TestWebViewEditor

        It's failing since we delay the web process launch until the first load. Load about:blank in the test
        constructor to fix it.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /webkit/Authentication/authentication-storage after r249962

        The test was still using the legacy private browsing API that is a no-op since r249962. This partch updates the
        test to use a ephemeral WebView instead.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (EphemeralAuthenticationTest::setup):
        (EphemeralAuthenticationTest::teardown):
        (testWebViewAuthenticationEphemeral):
        (testWebViewAuthenticationStorage):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2019-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK test /webkit/WebKitSettings/webkit-settings after r249962.

        Stop testing WebKitSettings:enable-private-browsing.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2019-10-15  Alicia Boya García  <aboya@igalia.com>

        gdb webkit.py: Fix iterator error in Python3
        https://bugs.webkit.org/show_bug.cgi?id=202926

        Reviewed by Jonathan Bedard.

        Some distros use Python3 for gdb, so the script needs to be compatible with both versions for it to work.

        * gdb/webkit.py:
        (WTFVectorPrinter.Iterator.__next__):

2019-10-14  Zhifei FANG  <zhifei_fang@apple.com>

        results.webkit.org: TypeError when evaluating empty commits
        https://bugs.webkit.org/show_bug.cgi?id=202936

        Reviewed by Jonathan Bedard.

        *resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js: Draw empty line when invaild scales or dots state pass in

2019-10-14  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.common.net.bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=202465

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.bugzilla to the test list.
        * Scripts/webkitpy/common/net/bugzilla/__init__.py: Use full import paths.
        * Scripts/webkitpy/common/net/bugzilla/attachment_unittest.py: Ditto.
        * Scripts/webkitpy/common/net/bugzilla/bug.py: Ditto.
        (Bug.commit_revision): Dictionary sorting is no longer well defined in Python 3.
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Ditto.
        (EditUsersParser.login_userid_pairs_from_edit_user_results): Return list, not an iterator.
        (EditUsersParser.user_dict_from_edit_user_page): HTML_ENTITIES is logically connected to BeautifulSoup, not
        BeautifulStoneSoup. 
        (BugzillaQueries._parse_attachment_ids_request_query): Explicitly cast date_tag to unicode.
        (Bugzilla._parse_attachment_element): Legacy BeautifulSoup and bs4 Elements have different function calls.
        (Bugzilla._file_object_for_upload): Use BytesIO instead of StringIO.
        (Bugzilla.create_bug):
        (reopen_bug): Access map as list, not iterator.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py: Use full import paths.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Ditto.
        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater.py:
        (TestExpectationUpdater._update_from_generic_attachment): Use items over iteritems().
        (TestExpectationUpdater._update_from_platform_specific_attachment): Ditto.
        (TestExpectationUpdater.do_update): Ditto.
        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Use Python 2/3 compatible urllib.
        * Scripts/webkitpy/common/net/credentials.py: Use import statement to force autoinstall logic.
        * Scripts/webkitpy/common/net/file_uploader.py: Use Python 2/3 compatible urllib.
        (FileUploader._upload_data.callback):
        (FileUploader):
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (JSONTestResult._tokenize): Force map() call to return a list.
        * Scripts/webkitpy/common/net/web_mock.py: Use Python 2/3 compatible urllib.
        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller.install): Return True if install was required, otherwise, return False.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.__init__): Encode strings before writing them to the filesystem.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: Use Python 2/3 compatible urllib.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser): Use items over iteritems().
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Use Python 3 compatible Pickle library.
        * Scripts/webkitpy/layout_tests/models/test_results.py: Ditto.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_crashlog_path): Use dictionary for files.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Update directories excluded from testing.
        * Scripts/webkitpy/thirdparty/BeautifulSoup.py: Replaced.
        (BeautifulSoup):Wrapper class making bs4 BeautifulSoup compatible with legacy BeautifulSoup calls.
        (BeautifulStoneSoup): Ditto.
        * Scripts/webkitpy/thirdparty/BeautifulSoup_legacy.py: Copied from Tools/Scripts/webkitpy/thirdparty/BeautifulSoup.py.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.__init__): Accept executive.
        (AutoinstallImportHook.find_module): Add beautifulsoup.
        (AutoinstallImportHook._install_beautifulsoup): bs4 must be converted via 2to3 before use in Python 3.
        (AutoinstallImportHook._install): Return result from installer.
        * Scripts/webkitpy/thirdparty/mock.py:
        (Mock.reset_mock): Use values() instead of itervalues().

2019-10-14  Matt Mokary  <mmokary@apple.com>

        FindController::findString always updates foundStringMatchIndex even if match is the same as before
        https://bugs.webkit.org/show_bug.cgi?id=201775
        <rdar://problem/55352425>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        (TestWebKitAPI::TEST):
        _WKFindOptionsNoIndexChange test

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

        REGRESSION (r243682): Quick Look previews loaded from the memory cache render with the wrong content type
        https://bugs.webkit.org/show_bug.cgi?id=202935
        <rdar://problem/54318133>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView synchronouslyGoBack]):
        (-[WKWebView synchronouslyGoForward]):

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

        REGRESSION: [iOS 13?] TestWebKitAPI.SharedBufferTest.tryCreateArrayBufferLargeSegments is failing
        https://bugs.webkit.org/show_bug.cgi?id=201902

        Reviewed by Ryosuke Niwa.

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

2019-10-14  Saam Barati  <sbarati@apple.com>

        Canonicalize how we prepare the prototype chain for inline caching
        https://bugs.webkit.org/show_bug.cgi?id=202827
        <rdar://problem/56193919>

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2019-10-14  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Update my nickname.

        Unreviewed.

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

2019-10-14  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Fix Tools/Scripts/update-webkitgtk-libs build failure in 'gst-plugins-bad'
        https://bugs.webkit.org/show_bug.cgi?id=202931

        Reviewed by Philippe Normand.

        OpenEXR dependency is not required and causes a build failure on Ubuntu
        19.04 with OpenEXR 2.2.1, as described here:
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1089

        * gstreamer/jhbuild.modules: Disable openexr in meson build options.

2019-10-14  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Make recent=False more usable
        https://bugs.webkit.org/show_bug.cgi?id=202873

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/configuration_context.py:
        (ConfigurationContext.search_for_configuration): If no configuration is specified,
        use a set of configurations defined by recent platform.
        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py:
        (ConfigurationContextTest.test_expired_configurations): Test that recent=False works.

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

        Unreviewed, set Adrian Perez de Castro as WebKit Reviewer

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

2019-10-14  youenn fablet  <youenn@apple.com>

        Reuse existing web processes for running service workers
        https://bugs.webkit.org/show_bug.cgi?id=202195

        Reviewed by Chris Dumez.

        Add support for enforcing a separate process for service workers.
        This is useful for tests trying to crash the service worker process.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Update test to use serviceWorkerProcessCount.
        Add test to check for in process and out of process service workers.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseSeparateServiceWorkerProcess):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        Back/Forward cache does not work after doing a favorite navigation
        https://bugs.webkit.org/show_bug.cgi?id=202762
        <rdar://problem/56126911>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        requestIdleCallback cannot be enabled in DumpRenderTree on Windows
        https://bugs.webkit.org/show_bug.cgi?id=202876

        Reviewed by Wenson Hsieh.

        Added the missing plumbing for Windows port.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):

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

        Update build.webkit.org basedir
        https://bugs.webkit.org/show_bug.cgi?id=202856

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/buildbot.tac: Updated basedir. Also increased the
        size of twistd.log files and reduced number of files for easier maintenance.

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

        [ews] Services EWS should also run build.webkit.org unit tests
        https://bugs.webkit.org/show_bug.cgi?id=202864

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (ServicesFactory.__init__): Added new RunBuildWebKitUnitTests step.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Added paths for build.webkit.org code.
        (RunBuildWebKitUnitTests): Build step to run build.webkit.org unit tests.
        (RunBuildWebKitUnitTests.__init__): Set workdir, timeout and logEnviron.
        (RunBuildWebKitUnitTests.getResultSummary): Customize Buildbot messages for this build step.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

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

        Move SuspendedPage logic from WebProcessPool to new WebBackForwardCache class
        https://bugs.webkit.org/show_bug.cgi?id=202660

        Reviewed by Antti Koivisto.

        Drop test that relied on reusing a SuspendedPage's process from a loadHTMLStringLoad (optimization).
        This no longer works now that SuspendedPages are owned by their associated back/forward item because
        we currently do not create a back/forward item for loadHTMLString requests. Suspending a page for a
        loadHTMLString was also wasteful since there was no way to restore that page (given that there was
        no WebBackForwardListItem to go back to).

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-10-11  Brian Burg  <bburg@apple.com>

        Remove some dead code in webkitpy's mac.py
        https://bugs.webkit.org/show_bug.cgi?id=202853

        Reviewed by Alexey Proskuryakov.

        - Remove _build_java_test_support as it no longer does anything.
        - Remove _check_port_build as it's only used to build Java test support.
        - Remove unused is_mavericks() function.
        - Remove a log stripping pattern that was fixed several releases ago.

        * Scripts/webkitpy/port/base.py:
        (Port.check_build):
        (Port.check_api_test_build):
        (Port._check_driver):
        (Port._check_port_build): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.operating_system):
        (MacPort.default_child_processes):
        (MacPort.logging_patterns_to_strip):
        (MacPort.is_mavericks): Deleted.
        (MacPort._build_java_test_support): Deleted.
        (MacPort._check_port_build): Deleted.

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

        [build.webkit.org] API tests should output result summary in json format
        https://bugs.webkit.org/show_bug.cgi?id=202854

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunAPITests): Output results in json format as well.

2019-10-11  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r250945.

        Broke 18 Debug API tests

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250945

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

        [WinCairo] auto-installing raises exception "Inner message: global name 'urllib2' is not defined" since r250869
        https://bugs.webkit.org/show_bug.cgi?id=202839

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download_to_stream): Replaced urllib2.urlopen with urlopen.

2019-10-10  Kenneth Russell  <kbr@chromium.org>

        New html5lib requires newer version of six.py than that shipped in macOS 10.14.6
        https://bugs.webkit.org/show_bug.cgi?id=202830

        Autoinstall six along with html5lib.

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize):
        (AutoinstallImportHook._install_pytest):

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Sort out certificates on Catalina
        https://bugs.webkit.org/show_bug.cgi?id=202837

        Unreviewed infrastructure repair.

        This is a temporary strategy until we sort out our certificates on the newly
        deployed Catalina bots.

        * Scripts/webkitpy/results/upload.py:
        (Upload.upload):
        (Upload.upload_archive):
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.test_upload):
        (UploadTest.test_archive_upload):

2019-10-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        W3C test importer breaks svg files.
        https://bugs.webkit.org/show_bug.cgi?id=202806

        Reviewed by Jonathan Bedard.

        The WebKit W3C importer tries to rewrite the xml/html/css files
        when importing the tests to rewrite paths and such.

        The issue is that to decide if rewrite the file or not uses the
        mimetype and the current code was comparing for something like
        if "xml" in str(mimetype[0])

        But svg files have mimetype "image/svg+xml" so the previous code
        was trying to rewrite svg files, breaking them.

        This patches changes that code to only rewrite if the mimetype
        also contains the "application/" or "text/" string.

        It also adds an info log (printed when verbose enabled) to tell
        that a file has been rewritten.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.import_tests):

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Serve correct exit codes when aborting
        https://bugs.webkit.org/show_bug.cgi?id=202817

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.error): Return exit code along with html string.

2019-10-10  Matt Lewis  <jlewis3@apple.com>

        Emergency unittest fix for wkbuild.

        Unreviewed test fix.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):

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

        Updated new Catalina queues names as per new Buildbot naming scheme
        https://bugs.webkit.org/show_bug.cgi?id=202816

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Renamed builder name and removed spaces.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

2019-10-10  Matt Lewis  <jlewis3@apple.com>

        Fixing build scheduling for Catalina queues.
        https://bugs.webkit.org/show_bug.cgi?id=202814

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Drive By fix of Trigger.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):

2019-10-10  Sihui Liu  <sihui_liu@apple.com>

        Add a unit test for StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=202755

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp: Added.
        (TestWebKitAPI::TEST):

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

        Support programmatic paste requests on macOS
        https://bugs.webkit.org/show_bug.cgi?id=202773
        <rdar://problem/48957166>

        Reviewed by Tim Horton.

        Adds new testing support to enable us to test programmatic paste requests on macOS.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:

        Add a few new UIScriptController methods:
        - activateAtPoint(x, y, callback): used to activate content underneath at (x, y), in root view coordinates
          (WKWebView on macOS, and WKContentView on iOS). On macOS, this moves the mouse to the given location and
          clicks.
        - chooseMenuAction(action, callback): used to select a menu item with the given title.
        - dismissMenu(): dismisses the platform menu.

        Note that dismissMenu and chooseMenuAction currently only work for the DOM paste menu, but could be extended in
        the future to handle the system context menu.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dismissMenu):
        (WTR::UIScriptController::chooseMenuAction):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::activateAtPoint):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView _didShowMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):

        Make these present across both macOS and iOS. On macOS, we listen for NSMenuDidBeginTrackingNotification and
        NSMenuDidEndTrackingNotification to know when a menu has been shown or dismissed.

        (-[TestRunnerWKWebView dismissActiveMenu]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):

        Make these available on both iOS and macOS. The only interaction callbacks on macOS are currently
        didShowMenuCallback and didHideMenuCallback.

        (-[TestRunnerWKWebView _willHideMenu]):
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setDidShowMenuCallback):
        (WTR::UIScriptControllerCocoa::setDidHideMenuCallback):
        (WTR::UIScriptControllerCocoa::dismissMenu):
        (WTR::UIScriptControllerCocoa::isShowingMenu const):

        Move these implementations into UIScriptControllerCocoa, from UIScriptControllerIOS.

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

        Instead of clearing all interaction callbacks in TestControllerIOS, do it in TestControllerCocoa where it
        affects both macOS and iOS.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateAtPoint):
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::chooseMenuAction):
        (WTR::UIScriptControllerIOS::rectForMenuAction const):
        (WTR::UIScriptControllerIOS::setDidShowMenuCallback): Deleted.
        (WTR::UIScriptControllerIOS::setDidHideMenuCallback): Deleted.
        (WTR::UIScriptControllerIOS::isShowingMenu const): Deleted.

        Abstract rectForMenuAction and singleTapAtPointWithModifiers out into private helper methods, such that they can
        be used from within other script controller methods.

        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:

        Implement the new script controller hooks on macOS.

        (WTR::UIScriptControllerMac::clearAllCallbacks):
        (WTR::UIScriptControllerMac::chooseMenuAction):
        (WTR::UIScriptControllerMac::activateAtPoint):

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Increase default limit for test results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=202757

        Unreviewed follow-up fix.

        * resultsdbpy/resultsdbpy/view/templates/commits.html: Switch default and maximum limits.

2019-10-10  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Start reporting results
        https://bugs.webkit.org/show_bug.cgi?id=202639

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig): Load API key for results.webkit.org.
        * BuildSlaveSupport/build.webkit.org-config/make_passwords_json.py:
        (create_mock_slave_passwords_dict): Add mock for API key.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests): Start reporting to results.webkit.org.
        (RunWebKitTests.__init__): Do not print the environment to hide the API key.
        (RunWebKitTests.start): Add the API key to the environment.
        (RunAPITests): Start reporting to results.webkit.org.
        (RunAPITests.__init__): Do not print the environment to hide the API key.
        (RunAPITests.start): Add the API key to the environment.
        (RunPythonTests): Start reporting to results.webkit.org.
        (RunPythonTests.__init__): Do not print the environment to hide the API key.
        (RunPythonTests.start): Add the API key to the environment.
        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.upload): Add API_KEY, if it exists, to the request.
        (Upload.upload_archive): Ditto.

2019-10-09  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r250930.

        Broke watchOS Builds

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250930

2019-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Move the mock testing entrance to Internals
        https://bugs.webkit.org/show_bug.cgi?id=202560
        <rdar://problem/55973793>

        Reviewed by Chris Dumez.

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

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

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Add a test to ensure we encode and decode a compact pointer tuple correctly when an uint8_t and
        a OptionSet<> as the byte value portion of the tuple.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CompactPointerTuple.cpp: Added.
        (TestWebKitAPI::TEST):

2019-10-09  Simon Fraser  <simon.fraser@apple.com>

        Rename WheelEventTestTrigger and improve naming in related code
        https://bugs.webkit.org/show_bug.cgi?id=202772

        Reviewed by Tim Horton.

        Change the "test trigger" terminology to "monitor wheel events"; after all, tests
        call monitorWheelEvents() and callAfterScrollingCompletes(), and this is not triggering
        a test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

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

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Add a test to ensure we encode and decode a compact pointer tuple correctly when an uint8_t and
        a OptionSet<> as the byte value portion of the tuple.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CompactPointerTuple.cpp: Added.
        (TestWebKitAPI::TEST):

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

        results.webkit.org: Increase default limit for test results
        https://bugs.webkit.org/show_bug.cgi?id=202757

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/suite_controller.py:
        (SuiteController): Increase DEFAULT_LIMIT.
        * resultsdbpy/resultsdbpy/controller/test_controller.py:
        (TestController): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (_CommitBank.prototype._load): Make commit shards larger.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Increase default slider size.
        * resultsdbpy/resultsdbpy/view/templates/commits.html: Keep smaller slider size.

2019-10-09  Dean Jackson  <dino@apple.com>

        Provide an alternate command-line flag for timeout in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=202758
        <rdar://problem/56124032>

        Reviewed by Tim Horton.

        I always get the flag "--time-out-ms" wrong.
        Everywhere else we use the single-word version of "timeout", including
        the documentation for --time-out-ms!

        Add an alternate that is just "--timeout", and update the documentation
        to mention it is measured in milliseconds.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2019-10-09  youenn fablet  <youenn@apple.com>

        Remove testRunner.setWebRTCUnifiedPlanEnabled
        https://bugs.webkit.org/show_bug.cgi?id=202700

        Reviewed by Eric Carlson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        REGRESSION(r250597): [GTK][WPE] 2.27.1 shows HTML content as text/plain in custom protocols when passing a charset in content type
        https://bugs.webkit.org/show_bug.cgi?id=202633

        Reviewed by Žan Doberšek.

        Add a test case.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):

2019-10-08  Jiewen Tan  <jiewen_tan@apple.com>

        Partially undo r250811
        https://bugs.webkit.org/show_bug.cgi?id=202715
        <rdar://problem/56084287>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKit/navigation-client-default-crypto.html:
        Modified to crash if SerializedScriptValue doesn't wrap CryptoKey objects.

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

        REGRESSION (r250375): [old EWS] JSC EWS is always marking Patches as success
        https://bugs.webkit.org/show_bug.cgi?id=202419

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._run_command_with_teed_output): Return exit code.
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_with_bad_command): Test that exceptions are raised
        For non-zero exit codes.

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

        Python 3: Add support to auto-importer
        https://bugs.webkit.org/show_bug.cgi?id=201955

        Reviewed by Aakash Jain.

        * Scripts/test-webkitpy-python3: Auto-install everything.
        * Scripts/webkitpy/common/system/autoinstall.py: Import urlopen and urlparse for Python3.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Update function definition for Python3.
        (AutoinstallImportHook._install_mechanize): Use Python 2/3 compatible version of mechanize.
        (AutoinstallImportHook._install_requests): Update urllib3 and requests version.
        (AutoinstallImportHook._install_coverage): Use Python 2/3 compatible version of coverage.
        (AutoinstallImportHook.greater_than_equal_to_version): Use range instead of xrange.
        (AutoinstallImportHook._install_selenium): Update urllib3 version.
        (AutoinstallImportHook.install_chromedriver): 
        (AutoinstallImportHook.install_geckodriver):
        (AutoinstallImportHook.get_latest_pypi_url):
        (AutoinstallImportHook.install_binary):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest):
        (ThirdpartyTest.test_import_hook): Deleted.

2019-10-08  Yury Semikhatsky  <yurys@chromium.org>

        Restore my committer status.

        Uneviewed.

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

2019-10-08  Kate Cheney  <katherine_cheney@apple.com>

        Implement Telemetry and Dumping Routines for SQLite backend (195088)
        https://bugs.webkit.org/show_bug.cgi?id=195088
        <rdar://problem/54213407>

        Reviewed by John Wilander.

        Updated the current testing for telemetry which only tested 3
        statistics. With this patch it now tests 10 statistics.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsDidRunTelemetryCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-10-08  Timothy Hatcher  <timothy@apple.com>

        Copying white text from dark mode WebKit apps and pasting in a light mode app results in white (invisible) text.
        https://bugs.webkit.org/show_bug.cgi?id=202662
        rdar://problem/48677354

        Reviewed by Megan Gardner.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyRTF.mm: Added.
        (readRTFDataFromPasteboard):
        (copyAttributedStringFromHTML):
        (checkColor):
        (TEST):

2019-10-08  Brady Eidson  <beidson@apple.com>

        Service Worker Fetch events should time out.
        https://bugs.webkit.org/show_bug.cgi?id=202188

        Reviewed by Alex Christensen.

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

2019-10-08  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r250784.

        Broke running layout tests.

        Reverted changeset:

        "results.webkit.org: Start reporting results"
        https://bugs.webkit.org/show_bug.cgi?id=202639
        https://trac.webkit.org/changeset/250784

2019-10-08  Matt Lewis  <jlewis3@apple.com>

        Make iPhone simulators pass --iPhone-simulator instead of --iOS
        https://bugs.webkit.org/show_bug.cgi?id=202701

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (appendCustomTestingFlags):

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

        [ews-build] Do not print worker environment variables in each build step [part 3]
        https://bugs.webkit.org/show_bug.cgi?id=202698

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.__init__): Disabled logging of environment variables.
        (ExtractTestResults.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-10-08  Matt Lewis  <jlewis3@apple.com>

        Fixing the triggerable templates in the config for catalina.
        https://bugs.webkit.org/show_bug.cgi?id=202652

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2019-10-07  Ryosuke Niwa  <rniwa@webkit.org>

        Add IDL for requestIdleCallback
        https://bugs.webkit.org/show_bug.cgi?id=202653

        Reviewed by Geoffrey Garen.

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

2019-10-07  Jiewen Tan  <jiewen_tan@apple.com>

        Only wrapping CryptoKeys for IDB during serialization
        https://bugs.webkit.org/show_bug.cgi?id=202500
        <rdar://problem/52445927>

        Reviewed by Chris Dumez.

        Modifies IndexedDB.StructuredCloneBackwardCompatibility test to include CryptoKeys.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:
        (-[StructuredCloneBackwardCompatibilityNavigationDelegate _webCryptoMasterKeyForWebView:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-shm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-wal:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibilityRead.html:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibilityWrite.html:

2019-10-07  Dean Jackson  <dino@apple.com>

        Various filter-build-webkit updates
        https://bugs.webkit.org/show_bug.cgi?id=202558

        Reviewed by Tim Horton.

        Add rules for:
        - RuleScriptExecution
        - tapi
        - plutil
        - A postprocessing ANGLE script
        - "Prepare build"
        - Signing Identity

        * Scripts/filter-build-webkit:

2019-10-07  Saam Barati  <sbarati@apple.com>

        Allow OSR exit to the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=197993

        Reviewed by Tadeu Zagallo.

        * Scripts/run-jsc-stress-tests:

2019-10-07  Kate Cheney  <katherine_cheney@apple.com>

        Domain relationships in the ITP Database should be inserted in a single query and ignore repeat insert attempts. (202604)
        https://bugs.webkit.org/show_bug.cgi?id=202604
        <rdar://problem/55995831>

        Reviewed by Chris Dumez. 

        Updates to testing infrastructure to test successful list-merging of
        top domains into the ITP SQLite database and test against repeat
        inserts.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsMergeStatistic):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsOnlyInDatabaseOnce):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsMergeStatistic):
        (WTR::TestController::isStatisticsOnlyInDatabaseOnce):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-10-07  Matt Lewis  <jlewis3@apple.com>

        Bring up queues for Catalina
        https://bugs.webkit.org/show_bug.cgi?id=202652

        Reviewed by Jonathan Bedard.

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

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

        Crash in WebKitTestRunnerApp: invocation function for block in WTR::UIScriptControllerIOS::sendEventStream
        https://bugs.webkit.org/show_bug.cgi?id=202646
        <rdar://problem/54576522>

        Reviewed by Tim Horton.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::sendEventStream):

2019-10-07  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Start reporting results
        https://bugs.webkit.org/show_bug.cgi?id=202639

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig): Load API key for results.webkit.org.
        * BuildSlaveSupport/build.webkit.org-config/make_passwords_json.py:
        (create_mock_slave_passwords_dict): Add mock for API key.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests): Start reporting to results.webkit.org.
        (RunWebKitTests.__init__): Do not print the environment to hide the API key.
        (RunWebKitTests.start): Add the API key to the environment.
        (RunAPITests): Start reporting to results.webkit.org.
        (RunAPITests.__init__): Do not print the environment to hide the API key.
        (RunAPITests.start): Add the API key to the environment.
        (RunPythonTests): Start reporting to results.webkit.org.
        (RunPythonTests.__init__): Do not print the environment to hide the API key.
        (RunPythonTests.start): Add the API key to the environment.
        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.upload): Add API_KEY, if it exists, to the request.
        (Upload.upload_archive): Ditto.

2019-10-07  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r250750.

        Reverting change as this broke interal test over the weekend.

        Reverted changeset:

        "Allow OSR exit to the LLInt"
        https://bugs.webkit.org/show_bug.cgi?id=197993
        https://trac.webkit.org/changeset/250750

2019-10-07  youenn fablet  <youenn@apple.com>

        [iOS] Unmuting capture of a page is not working
        https://bugs.webkit.org/show_bug.cgi?id=202627

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm: Added.
        (-[GetUserMediaCaptureUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (-[GetUserMediaCaptureUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[GetUserMediaTestView haveStream:]):
        (TestWebKitAPI::waitUntilCaptureState):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

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

        [GStreamer][JHBuild] Update to 1.16.1
        https://bugs.webkit.org/show_bug.cgi?id=202619

        Reviewed by Žan Doberšek.

        * flatpak/org.webkit.CommonModules.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-do-not-retry-downloads-during-shutdown.patch: Removed.
        * gstreamer/patches/gst-plugins-good-glibc-2.30-compat.patch: Removed.
        * gstreamer/patches/gst-plugins-good-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch: Removed.

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

        Allow OSR exit to the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=197993

        Reviewed by Tadeu Zagallo.

        * Scripts/run-jsc-stress-tests:

2019-10-04  Matt Lewis  <jlewis3@apple.com>

        Fix iPad testers platform for downloading build product and fixing tests to run
        https://bugs.webkit.org/show_bug.cgi?id=202365

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added device_model.
        * BuildSlaveSupport/build.webkit.org-config/factories.py: Added device_model property.
        (Factory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (BuildAndTestLLINTCLoopFactory.__init__):
        (BuildAndTest32bitJSCFactory.__init__):
        (BuildAndRemoteJSCTestsFactory.__init__):
        (TestWebKit1LeaksFactory.__init__):
        (TestJSCFactory.__init__):
        (Test262Factory.__init__):
        (BuildAndPerfTestFactory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Added device_model to loaded properties.
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Added ability to run based on device_model to
        WebKit Tests and API tests for iPad and iPhone simulators.
        (ConfigureBuild.__init__):
        (ConfigureBuild.start):
        (appendCustomTestingFlags):
        (RunWebKitTests.start):
        (RunAPITests.start):

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

        results.webkit.org: Remove percentages from bubbles
        https://bugs.webkit.org/show_bug.cgi?id=202591

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (inPlaceCombine): Add 'worst' key to combined results.
        (TimelineFromEndpoint.constructor): Use the 'worst' key to populate the tag
        instead of a percentage.

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

        [EWS] Assign webkit-misc to various queues
        https://bugs.webkit.org/show_bug.cgi?id=202584

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        [ews] wincairo queue should use del instead of rm command (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=202477

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanUpGitIndexLock.start): Use regular 'rm' command on windows as it use cygwin.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCleanUpGitIndexLock.test_success_windows): Added unit-test for windows.

2019-10-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement _WKWebAuthenticationPanel SPI
        https://bugs.webkit.org/show_bug.cgi?id=202559
        <rdar://problem/55932094>

        Reviewed by Brent Fulgham.

        This patch adds a very limited test case to _WKWebAuthenticationPanel.
        Bug 202560 and Bug 202565 will follow up to write more tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm: Added.
        (-[TestWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:]):
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion.html: Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::runWebAuthenticationPanel):
        (WTR::TestController::createWebViewWithOptions):

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

        Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202553

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:

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

        Simplify sandbox enabling macros
        https://bugs.webkit.org/show_bug.cgi?id=202536

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-10-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Print the revision number on command "--version" of the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=202581

        Reviewed by Carlos Garcia Campos.

        When WebKit its build from source repository instead of a tarball
        we can print the SVN revision to be more precise about the version
        of WebKit when the option --version is passed to the MiniBrowser.

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

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

        Unreviewed. Fix GTK distcheck

        * gtk/manifest.txt.in: Add Source/WebKit/Resources/gtk to the tarball.

2019-10-03  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(249649): Unable to open local files in MiniBrowser on macOS
        https://bugs.webkit.org/show_bug.cgi?id=201798

        Reviewed by Brent Fulgham.

        Added API test WKWebView.LoadFileWithLoadRequest.

        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm:

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

        Add myself to various tools watchlists
        https://bugs.webkit.org/show_bug.cgi?id=202532

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/watchlist: Add myself to the watchlist of
        PerformanceTests, SVNScripts, webkitperl and webkitpy.

2019-10-03  Jiewen Tan  <jiewen_tan@apple.com>

        Support googleLegacyAppidSupport extension
        https://bugs.webkit.org/show_bug.cgi?id=202427
        <rdar://problem/55887473>

        Reviewed by Brent Fulgham.

        Adds an API test for googleLegacyAppidSupport extension.

        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp:
        (TestWebKitAPI::constructMakeCredentialRequest):
        (TestWebKitAPI::constructMakeCredentialRequestWithGoogleLegacyAppidSupport):
        (TestWebKitAPI::TEST):

2019-10-03  Thibault Saunier  <tsaunier@igalia.com>

        REGRESSION(r249428): [GStreamer] VP9 video rendered green
        https://bugs.webkit.org/show_bug.cgi?id=201422

        Adding patches in -base to fix the issue.

        Reviewed by Philippe Normand.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/base-0001-glupload-Add-VideoMetas-and-GLSyncMeta-to-the-raw-up.patch: Added.

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make PSON optional
        https://bugs.webkit.org/show_bug.cgi?id=200967

        Reviewed by Michael Catanzaro.

        Enable PSON in MiniBrowser and unit tests. Also add more tests to page-id to check that we can still talk to the
        right web process after cross-site history navigation.

        * MiniBrowser/gtk/main.c:
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionPageID):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):

2019-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add WebKitWebView:page-id property
        https://bugs.webkit.org/show_bug.cgi?id=201642

        Reviewed by Michael Catanzaro.

        Add a test case to check the new property.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (checkTitle):
        (testWebExtensionGetTitle):
        (webViewPageIDChanged):
        (testWebExtensionPageID):
        (beforeAll):

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

        results.webkit.org: Only automatically search when multiple lines are pasted
        https://bugs.webkit.org/show_bug.cgi?id=202496

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/search.js:
        (SearchBar): If only a single line has been pasted, do not automatically dispatch
        the search.

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

        Python 3: Add test-webkitpy for Python 3 (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=201954

        Unreviewed follow-up fix.

        * Scripts/test-webkitpy-python3: Add copyright.

2019-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [GSTreamer] Let playbin handle redirects for us when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=195326

        Added required patche in GStreamer

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/patches/base-0001-playbin-Handle-error-message-with-redirection-indica.patch: Added.
        * gstreamer/patches/good-0001-qtdemux-Specify-REDIRECT-information-in-error-messag.patch: Added.

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

        [ews] Add API endpoint to retry failed builds for a patch
        https://bugs.webkit.org/show_bug.cgi?id=202424

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/urls.py: Added url mapping for /retry.
        * BuildSlaveSupport/ews-app/ews/views/retrypatch.py: Added.
        (RetryPatch.get): Display the web-form to retry the patch. Retry button which will be added soon will 
        use this form.
        (RetryPatch.post): Handle the post request and retry the patch.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.find_failed_builds_for_patch): Method to find failed builds for a patch.
        * BuildSlaveSupport/ews-app/ews/templates/retry.html: Added, similar to submittoews.html. This
        allows to retry a patch through a web-form as well.

2019-10-02  Kate Cheney  <katherine_cheney@apple.com>

        Updated resource load statistics are never merged into the SQLite Database backend (202372).
        https://bugs.webkit.org/show_bug.cgi?id=202372
        <rdar://problem/55854542>

        Reviewed by Brent Fulgham. 

        Added testing functionality to the mergeStatistics() function of the 
        SQLite backend.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsMergeStatistic):
        (WTR::TestRunner::statisticsCallDidSetMergeStatisticCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsMergeStatistic):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didMergeStatistic):
        * WebKitTestRunner/TestInvocation.h:

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

        [ews] windows or wincairo queue should use del instead of rm command
        https://bugs.webkit.org/show_bug.cgi?id=202477

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanUpGitIndexLock.start): Use 'del' command instead of rm for windows and wincairo.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCleanUpGitIndexLock.test_success_wincairo): Added unit-test.

2019-10-02  youenn fablet  <youenn@apple.com>

        Add a test to check the case of launching two service worker processes shortly one after the other
        https://bugs.webkit.org/show_bug.cgi?id=202450

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [ews] Dedicate a bot for macOS-High-Sierra-Debug-Build-EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=202469

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Dedicate ews112 to macOS debug builder queue.

2019-10-01  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add test-webkitpy for Python 3
        https://bugs.webkit.org/show_bug.cgi?id=201954

        Reviewed by Aakash Jain.

        * Scripts/test-webkitpy-python3: Added.

2019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Stop using legacy custom protocol implementation
        https://bugs.webkit.org/show_bug.cgi?id=202407

        Reviewed by Žan Doberšek.

        Remove the tests to check failure after committed, because it's not possible to test it with current code.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextURIScheme):

2019-10-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        [win-ews] No such file or directory: u'/cygdrive/C/cygwin/home/buildbot/WebKit/WebKitBuild/Release/bin32/layout-test-results/pywebsocket.ws.log-out.txt'
        https://bugs.webkit.org/show_bug.cgi?id=188640

        Reviewed by Alex Christensen.

        1. Properly shutdown WebSocket server so that port 8880 is released.
        2. Prevent failure of WebSocket tests when launched in freshly cloned repository.

        * Scripts/new-run-webkit-websocketserver:
        (main): Tweak import and use class constants of PyWebSocket directly.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket._prepare_config): Create test output directory if it doesn't exist.

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

        Progress towards a functioning CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=202443

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.mm:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2019-10-01  John Wilander  <wilander@apple.com>

        Storage Access API: document.hasStorageAccess() should return true when the cookie policy allows access
        https://bugs.webkit.org/show_bug.cgi?id=202435
        <rdar://problem/55718526>

        Reviewed by Brent Fulgham.

        This change makes sure topPrivatelyControlledDomain() correctly handles domains
        with leading dots, as often used in cookie domains.

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

2019-10-01  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Standardize styles in the drawer
        https://bugs.webkit.org/show_bug.cgi?id=202428

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/css/search.css: Rename boldInverseColor.
        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css: Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Move style specifications into webkit.css.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Ditto.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.input>label): Use the boldInverseColor instead of grey.
        (.input>input[type="text"][required], .input>input[type="number"][required],): Darken the border,
        decrease the font weight.
        (.input>input[type="text"][required]~label, .input>input[type="number"][required]~label,): Use the inverseColor instead of grey.

2019-10-01  Antti Koivisto  <antti@apple.com>

        [CSS Shadow Parts] Parse 'part' attribute
        https://bugs.webkit.org/show_bug.cgi?id=202409

        Reviewed by Ryosuke Niwa.

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

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

        Follow-up fix to r250572 to fix a typo.
        [ews] Add method to retry a build using Buildbot API
        https://bugs.webkit.org/show_bug.cgi?id=202408

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:

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

        [ews] Add method to retry a build using Buildbot API
        https://bugs.webkit.org/show_bug.cgi?id=202408

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.retry_build): Method to retry given build using Buildbot API.

2019-10-01  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copying/ref churn of for loop variables in Tools
        <https://webkit.org/b/202387>

        Reviewed by Darin Adler.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::setAllowedMenuActions): Make loop variable
        a reference to fix unnecessary copying/ref churn.

2019-10-01  Nikolas Zimmermann  <nzimmermann@igalia.com>

        Update my affiliation - since today I work for Igalia.

        Unreviewed.

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

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

        Add support for the Wasm multi-value proposal
        https://bugs.webkit.org/show_bug.cgi?id=202250

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2019-10-01  youenn fablet  <youenn@apple.com>

        Remove races condition when validating capture sandbox extension revocation
        https://bugs.webkit.org/show_bug.cgi?id=202133
        <rdar://problem/55660905>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Updated test to not use page cache so that on going back, the page is reloaded and will call getUserMedia again.

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

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=202384

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:
        * TestWebKitAPI/PlatformMac.cmake:

2019-09-30  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] New axis style
        https://bugs.webkit.org/show_bug.cgi?id=202292

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:

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

        Move DownloadMonitor test speed multiplier from WebProcessPool to WebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202339

        Reviewed by Youenn Fablet.

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

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

        [GTK] IconDatabase is not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=201303

        Reviewed by Žan Doberšek.

        Rewrite the WebKitFaviconDatabase tests, splitting tests cases again and making them independent to each other.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testFaviconDatabaseInitialization):
        (testFaviconDatabaseGetFavicon):
        (ephemeralViewFaviconChanged):
        (testFaviconDatabaseEphemeral):
        (testFaviconDatabaseClear):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/TestExpectations.json: TestWebKitFaviconDatabase shouls always pass now.

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

        [GTK][WPE] Add about:gpu
        https://bugs.webkit.org/show_bug.cgi?id=202305

        Reviewed by Žan Doberšek.

        Allow to use about:gpu in MiniBrowser. Add a script to get the current svn revision.

        * MiniBrowser/gtk/BrowserTab.c:
        (getInternalURI):
        * MiniBrowser/gtk/main.c:
        (argumentToURL):
        * MiniBrowser/wpe/main.cpp:
        (main):
        * glib/svn-revision: Added.

2019-09-27  Andres Gonzalez  <andresg_22@apple.com>

        Support accessibility for <figure> element on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=202272
        <rdar://problem/54789907>

        Reviewed by Chris Fleizach.

        Implemented titleUIElement and roleDescription properties for <figure> elements on iOS.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::roleDescription):

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

        Move shouldUseTestingNetworkSession from NetworkProcessCreationParameters to NetworkSessionCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=202327

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):

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

        Move service worker process termination delay disabling from process pool to website data store
        https://bugs.webkit.org/show_bug.cgi?id=202308

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        Remove unused WebProcessPool::setCanHandleHTTPSServerTrustEvaluation
        https://bugs.webkit.org/show_bug.cgi?id=202285

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (-[ServerTrustDelegate webView:didFinishNavigation:]):
        (-[ServerTrustDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[ServerTrustDelegate waitForDidFinishNavigation]):
        (-[ServerTrustDelegate waitForDidFailProvisionalNavigationError]):
        (-[ServerTrustDelegate authenticationChallengeCount]):
        (-[ServerTrustDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation): Deleted.
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess): Deleted.
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const): Deleted.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::serverTrustEvaluationCallbackCallsCount const): Deleted.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const): Deleted.

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

        Remove unused APIProcessPoolConfiguration::diskCacheSpeculativeValidationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=202290

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):

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

        Make IsNSURLSessionWebSocketEnabled an experimental flag
        https://bugs.webkit.org/show_bug.cgi?id=202135
        <rdar://problem/55694721>

        Reviewed by Geoff Garen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Set preference to false by default.

2019-09-27  Jiewen Tan  <jiewen_tan@apple.com>

        SubFrameSOAuthorizationSession should ensure messages are posted in the right order to the parent frame
        https://bugs.webkit.org/show_bug.cgi?id=202061
        <rdar://problem/55485666>

        Reviewed by Youenn Fablet.

        Adds tests that check the order of messages posted by SubFrameSOAuthorizationSession.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (resetState):
        (TestWebKitAPI::TEST):

2019-09-26 Kate Cheney <katherine_cheney@apple.com>

        Resource Load Statistics: Downgrade all third-party referrer headers
        https://bugs.webkit.org/show_bug.cgi?id=201353
        <rdar://problem/54895650>

        Majority of this patch was written by John Wilander <wilander@apple.com>.

        Reviewed by Brent Fulgham. 

        The changes to the TestRunner facilitates an opt-out for test cases
        that either test the referrer mechanism explicitly or tests that
        rely on the full referrer to be sent. 

        The new boolean variable and early return in 
        TestRunner::setStatisticsShouldDowngradeReferrer() prevent the same
        event from trying to set multiple TestRunner callbacks.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsShouldDowngradeReferrer):
        (WTR::TestRunner::statisticsCallDidSetShouldDowngradeReferrerCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsShouldDowngradeReferrer):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetShouldDowngradeReferrer):
        * WebKitTestRunner/TestInvocation.h:

2019-09-26  Dean Jackson  <dino@apple.com>

        Build fix.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]): Deleted.
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuWillPresentForElement:]): Deleted.
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]): Deleted.
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuDidEndForElement:]): Deleted.

2019-09-26  Dean Jackson  <dino@apple.com>

        ContextMenu on a link in an email no longer shows web preview
        https://bugs.webkit.org/show_bug.cgi?id=201120
        <rdar://54353617>

        Reviewed by Wenson Hsieh.

        Test context menus on a link that is also an image.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (contextMenuWebViewDriver):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuImageWithoutConfigurationUIDelegate webView:contextMenuDidEndForElement:]):
        (TEST):

2019-09-26  Frederic Wang  <fwang@igalia.com>

        run-safari --ios-simulator is no longer working with Xcode 11
        https://bugs.webkit.org/show_bug.cgi?id=199852

        Path of MobileSafari.app has changed in Xcode 11. This patch updates
        the run-safari script to use the new path. This removes support for
        running Safari on iOS < 13, see discussions on bug 177595.

        Reviewed by Jonathan Bedard.

        * Scripts/webkitdirs.pm:
        (iosSimulatorApplicationsPath):

2019-09-26  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] Timeline support Image inner label
        https://bugs.webkit.org/show_bug.cgi?id=202180

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/expectations.js:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.lengend>.item .dot img): support img symbol for lengend and dot
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Support user pass a Image object or a image url as inner label

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

        Stop using testRunner.overridePreference() to turn on Page Cache
        https://bugs.webkit.org/show_bug.cgi?id=202274

        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.cpp:
        (overridePreferenceCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::overridePreference):

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

        results.webkit.org: Use cursor: pointer for clickable elements
        https://bugs.webkit.org/show_bug.cgi?id=202268

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Give collapse button a pointer for cursor.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Make 'X' to close test timeline a link-button.

2019-09-26  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420) 
        https://bugs.webkit.org/show_bug.cgi?id=195420                          
        <rdar://problem/54213551>                                               

        Reviewed by Brent Fulgham.                                             

        Added in logic to send a message from the UIProcess to the Network      
        Process which will initalize the ITP Database backend to allow for      
        layout testing.                                                         
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseITPDatabase):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUseITPDatabase):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        TestWebKitAPI.WebKit.ReloadWithDifferingInitialScale is failing consistently
        https://bugs.webkit.org/show_bug.cgi?id=202273

        Reviewed by Aakash Jain.

        The content width scaling limits added in r250361 prevent this test from scaling down the content width (2000px
        wide) to fit the viewport (375px). To avoid this issue, change the content width from 2000px to 1500px, which is
        still a very wide content width for a web page.

        * TestWebKitAPI/Tests/WebKitCocoa/ReloadWithDifferingInitialScale.mm:

2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        toExponential, toFixed, and toPrecision should allow arguments up to 100
        https://bugs.webkit.org/show_bug.cgi?id=199163

        Reviewed by Ross Kirsling.

        Adjust StringNumberFixedWidth test due to lowering kMaxFixedDigitsBeforePoint.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:

2019-09-26  Jiewen Tan  <jiewen_tan@apple.com>

        TestWebKitAPI.SOAuthorizationSubFrame.AuthorizationOptions is failing consistently on iOS API tests EWS
        https://bugs.webkit.org/show_bug.cgi?id=202249

        Reviewed by Alex Christensen.

        Swizzles +[AKAuthorizationController isURLFromAppleOwnedDomain:] following other tests.

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

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

        Add replacement SPI on _WKWebsiteDataStoreConfiguration for enabling speculative cache validation and IPC-free server trust evaluation
        https://bugs.webkit.org/show_bug.cgi?id=202251

        Reviewed by Tim Horton.

        Adopt new SPI instead of deprecated SPI.

        * MiniBrowser/mac/AppDelegate.m:
        (persistentDataStore):
        (defaultConfiguration):
        (-[BrowserAppDelegate fetchDefaultStoreWebsiteData:]):
        (-[BrowserAppDelegate fetchAndClearDefaultStoreWebsiteData:]):
        (-[BrowserAppDelegate clearDefaultStoreWebsiteData:]):

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

        Python 3: Add support in webkitpy.common.system
        https://bugs.webkit.org/show_bug.cgi?id=201826
        <rdar://problem/55452671>

        Reviewed by Stephanie Lewis.

        Tested compatibility by running 'python3 -m unittest webkitpy.common.system.<_unittest>' on
        each of the effected files.

        * Scripts/webkitpy/common/checkout/changelog.py: Import StringIO from io module.
        (set_reviewer):
        (set_short_description_and_bug_url):
        * Scripts/webkitpy/common/checkout/checkout.py:  Import StringIO from io module.
        (Checkout._latest_entry_for_changelog_at_revision):
        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList.load_json): iteritems -> items.
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run): urllib2 is urllib in Python3. 
        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive._stringify_args):
        (AbstractExecutive.command_for_printing): The str type is unicode in Python3.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py: Explicitly encode and decode binary crashlogs.
        * Scripts/webkitpy/common/system/environment_unittest.py: Use absolute imports.
        * Scripts/webkitpy/common/system/executive.py:
        (ScriptError.message_with_output): The str type is unicode in Python3.
        (Executive.WrappedPopen): Python3's Popen object is a context manager. To allow us to use it as one,
        our Python2 Popen needs to be one as well.
        (Executive.WrappedPopen.__init__):
        (Executive.WrappedPopen.__enter__):
        (Executive.WrappedPopen.__exit__):
        (Executive._run_command_with_teed_output): Simplify loop, decode unicode strings.
        (Executive.run_and_throw_if_fail): The child output file should not be unicode strings.
        (Executive.running_pids): Use the Popen context manager to guarantee clean-up.
        (Executive._compute_stdin):
        (Executive.run_command): Use the Popen context manager to guarantee clean-up.
        (Executive._stringify_args): The str type is unicode in Python3.
        (Executive.popen): Return a context manager if the Popen object is not one.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__): StringIO -> BytesIO.
        (MockProcess.__enter__):
        (MockProcess):
        (MockProcess.__exit__):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_auto_stringify_args): Use the Popen context manager to guarantee clean-up.
        (ExecutiveTest.test_popen_args): Ditto.
        (ExecutiveTest.serial_test_kill_process): Ditto.
        (ExecutiveTest.serial_test_kill_all): Ditto.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.read_binary_file): Use 'open' instead of 'file'.
        (FileSystem.write_binary_file): Ditto.
        (FileSystem.write_text_file): The str type is unicode in Python3. 
        (FileSystem.relpath):
        (FileSystem.remove): The WindowsError is just anther OSError in Python3.
        (FileSystem._WindowsError): Deleted.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.glob): filter returns a generator instead of a list.
        (WritableBinaryFileObject.__init__): Binary files are comprised of bytes, not string in Python3.
        (WritableBinaryFileObject.write): Ditto.
        (ReadableTextFileObject.__init__): Ditto.
        * Scripts/webkitpy/common/system/filesystem_mock_unittest.py:
        (MockFileSystemTest.test_normpath):
        (MockFileSystemTest.test_dirs_under): assertEquals -> assertEqual.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_and_write_file): Explicitly define byte arrays instead of strings.
        (RealFileSystemTest.test_remove_file_with_retry.remove_with_exception): The WindowsError is just
        anther OSError in Python3.
        * Scripts/webkitpy/common/system/outputcapture.py:
        * Scripts/webkitpy/common/system/outputtee_unittest.py:
        (SimpleTeeTest.test_simple_tee):
        * Scripts/webkitpy/common/system/path.py:
        (_escape): urllib library has been broken into parts.
        * Scripts/webkitpy/common/system/pemfile.py:
        (_parse_pem_format.find_end): Python3 does not define a maxint.
        * Scripts/webkitpy/common/system/pemfile_unittest.py:
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.total_bytes_memory): Not 'long' type in Python3.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_real_code): assertNotEquals -> assertNotEqual.
        (TestPlatformInfo.test_display_name): Ditto.
        * Scripts/webkitpy/common/system/profiler.py:
        (ProfilerFactory.create_profiler): Manually implement ifilter.
        * Scripts/webkitpy/common/system/profiler_unittest.py: Use absolute imports.
        * Scripts/webkitpy/common/system/stack_utils_unittest.py:
        (current_thread_id): items() returns a generator in Python3.
        * Scripts/webkitpy/common/system/systemhost.py: Use absolute imports.
        * Scripts/webkitpy/common/system/urlfetcher.py: Removed.
        * Scripts/webkitpy/common/system/urlfetcher_mock.py: Removed.
        * Scripts/webkitpy/common/system/user.py:
        (User.prompt): Use absolute imports, raw_input -> input.
        (User.prompt_with_multiple_lists):
        (User.prompt_with_list):
        (User.confirm):
        * Scripts/webkitpy/common/unicode.py: Tooling to manage compatibility between Python 2
        and Python 3 unicode handling.
        * Scripts/webkitpy/common/system/user_mock.py:
        (MockUser.prompt): raw_input -> input.
        (MockUser.prompt_with_list): Ditto.
        * Scripts/webkitpy/common/version.py:
        (Version.from_iterable): xrange -> range.
        (Version.from_name): Use absolute import path.
        (Version.__contains__): xrange -> range.
        (Version.__str__): xrange -> range.
        (Version.__cmp__): amp is no longer an operator in Python3, but versions are comprised
        Of integers, so subtraction has the same effect.
        (Version):
        (Version.__eq__): __cmp__ operator is no longer respected, so we need to implement
        each comparison.
        (Version.__ne__): Ditto.
        (Version.__lt__): Ditto.
        (Version.__le__): Ditto.
        (Version.__gt__): Ditto.
        (Version.__ge__): Ditto.
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap._automap_to_major_version):
        (VersionNameMap.to_name): xrange -> range.
        (VersionNameMap.from_name): iteritems -> items.
        * Scripts/webkitpy/common/version_name_map_unittest.py: Use absolute imports.
        * Scripts/webkitpy/common/version_unittest.py: Ditto.
        * Scripts/webkitpy/common/wavediff.py:
        (WaveDiff.__init__): StringIO -> BytesIO.
        * Scripts/webkitpy/port/__init__.py:
        (outside):

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

        [EWS] RunJavaScriptCoreTestsToT should use the same command as RunJavaScriptCoreTests
        https://bugs.webkit.org/show_bug.cgi?id=202216

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTestsToT): Removed the command so as to use the command from base class.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updatd unit-tests.

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

        [ews] JSC queues should run or skip tests based on runTests key from config.json
        https://bugs.webkit.org/show_bug.cgi?id=202223

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Added the runTests key.
        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Add RunJavaScriptCoreTests step based on runTests key.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Pass the runTests key to the factory.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_builder_keys): Added the runTests key.

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

        results.webkit.org: Add investigation drawer
        https://bugs.webkit.org/show_bug.cgi?id=202106

        Reviewed by Dewei Zhu.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Support multiple 'main' classes.
        * resultsdbpy/resultsdbpy/view/static/js/expectations.js: Added.
        (Expectations.colorMap): Return a dictionary mapping type strings to colors.
        (Expectations.stringToStateId): Map a string to a state ID for sorting.
        (Expectations.typeForId): Return a type string given an ID.
        (Expectations.symbolForId): Return a symbol for a type given an ID.
        (Expectations.colorForId): Return a color given an ID.
        (Expectations.unexpectedResults): Given a list of actual results and expected results,
        return a state.
        (Expectations):
        * resultsdbpy/resultsdbpy/view/static/js/investigate.js: Added.
        (commitsForUuid):
        (testRunLink):
        (elapsed):
        (percentage):
        (contentForAgregateData):
        (contentForData):
        (_InvestigateDrawer):
        (_InvestigateDrawer.prototype.isRendered):
        (_InvestigateDrawer.prototype.expand): Expand the investigation drawer.
        (_InvestigateDrawer.prototype.collapse): Collapse the investigation drawer.
        (_InvestigateDrawer.prototype.select): Select an element to investigate.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (statsForSingleResult): Move Expectation constants.
        (TimelineFromEndpoint.prototype.render): Investigate specific data points instead
        of jumping to the build.
        (Expectations.stringToStateId): Deleted.
        (Expectations.unexpectedResults): Deleted.
        (Expectations): Deleted.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.drawer.display): Make minimum height.
        (@media screen and (min-width: 600px)): Move main and sidebar so they override drawer.
        (@media screen and (min-width: 768px)): Ditto.
        * resultsdbpy/resultsdbpy/view/templates/commits.html:
        * resultsdbpy/resultsdbpy/view/templates/search.html:
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

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

        Remove duplicate WebsiteDataStoreConfiguration copying code
        https://bugs.webkit.org/show_bug.cgi?id=202215

        Reviewed by Tim Horton.

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

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

        Replace WebsiteDataStoreParameters::privateSessionParameters with re-initializing all sessions immediately upon NetworkProcess resumption
        https://bugs.webkit.org/show_bug.cgi?id=202211

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm:
        (checkRecoveryAfterCrash):
        (TEST):

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

        [EWS] JSC queues should dynamically add required build steps for re-testing the patch
        https://bugs.webkit.org/show_bug.cgi?id=202170

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Do not add ReRunJavaScriptCoreTests and related steps here, as
        these are dynamically added (if required) in steps.py.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileJSCToT): Remove doStepIf() and hideStepIf() method, these are no longer required as we add
        this step dynamically only if required. We don't need an extra property ('patchFailedToBuild') to be set.
        (RunJavaScriptCoreTests.evaluateCommand): Dynamically add ReRunJavaScriptCoreTests step if required.
        (ReRunJavaScriptCoreTests): Removed doStepIf() and hideStepIf() method.
        (ReRunJavaScriptCoreTests.evaluateCommand): Dynamically add UnApplyPatchIfRequired(), CompileJSCToT() and RunJavaScriptCoreTestsToT steps.
        (RunJavaScriptCoreTestsToT.evaluateCommand): Overriden to avoid caling the base-class method which dynamically adds
        more steps.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

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

        [iPadOS] [DataActivation] Focus moves away after focusing input fields on www.att.com
        https://bugs.webkit.org/show_bug.cgi?id=202167
        <rdar://problem/55185021>

        Reviewed by Tim Horton.

        Rebaseline an API test.

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

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

        Unreviewed, rolling out r250324.

        Tools/ChangeLog

        Reverted changeset:

        "Enable LayoutTests using ResourceLoadStatistics SQLite
        backend (195420)"
        https://bugs.webkit.org/show_bug.cgi?id=195420
        https://trac.webkit.org/changeset/250324

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

        [Windows][webkitpy] _apache_config_file_name_for_platform should take the system PHP version into account
        https://bugs.webkit.org/show_bug.cgi?id=202134

        Reviewed by Jonathan Bedard.

        _apache_config_file_name_for_platform always returns a config file
        name for PHP5 on Cygwin Python, one for PHP7 on Win32 Python. It
        should detect the system PHP version as Linux ports do.

        Both AppleWin and WinCairo are using XAMPP Apache. Unify the code
        paths for them. And, remove a stale conf file.

        This change makes it possible to use Cygwin Python with PHP7.

        * Scripts/webkitpy/port/base.py:
        (Port._win_php_version): Added.
        (Port._apache_config_file_name_for_platform): Unified cygwin and
        win32 code path by using _win_php_version.
        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform): Updated cygwin and
        win32 test cases.

2019-09-24  Matt Lewis  <jlewis3@apple.com>

        Bring up queues for iPadOS Simulator Tests
        https://bugs.webkit.org/show_bug.cgi?id=202151

        Reviewed by Jonathan Bedard.

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

2019-09-24  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420) 
        https://bugs.webkit.org/show_bug.cgi?id=195420                          
        <rdar://problem/54213551>                                               

        Reviewed by Brent Fulgham.                                             

        Added in logic to send a message from the UIProcess to the Network      
        Process which will initalize the ITP Database backend to allow for      
        layout testing.                                                         
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseITPDatabase):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUseITPDatabase):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-09-24  Patrick Griffis  <pgriffis@igalia.com>

        Add Patrick Griffis to contributors.json

        Unreviewed.

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

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

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

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Remove the redundant message saying:
        'Some messages were logged while the patch was still eligible'.
        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch.skip_build): Updated the descritionDone with the reason to skip the patch.
        (ValidatePatch.getResultSummary): Overrode this method so as to prevent buildbot from automatically
        appending '(failure)' at the end of the summary string.

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

        Coalesce or remove PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=202119
        <rdar://problem/55638792>

        Reviewed by Alex Christensen.

        After refactoring and other code evolution, some platform checks have
        ended up looking like PLATFORM(MAC) || PLATFORM(IOS_FAMILY) (or
        vice-versa). These can be converted into the equivalent
        PLATFORM(COCOA). Where the instance occurs in a Cocoa-only file, the
        check can be removed altogether (along with any "#else" branches).

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::setValue):

2019-09-24  Zhifei Fang  <zhifei_fang@apple.com>

        Add tests for Ref.js.
        https://bugs.webkit.org/show_bug.cgi?id=201778.

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js:
        (applyStateDiff): null, 0, false are all valid state
        (Ref.prototype.setState): We should do nothing for undefined stateDiff
        * resultsdbpy/resultsdbpy/view/static/library/js/Test.js: Added.
        (AssertFailedError):
        (Expect): Perform assertions during unit tests.
        (Expect.prototype.isType):
        (Expect.prototype.equalToValue):
        (Expect.prototype.equalToHtmlWithoutRef):
        (Expect.prototype.notEqualToValue):
        (Expect.prototype.greaterThan):
        (Expect.prototype.greaterThanOrEqualTo):
        (Expect.prototype.lessThan):
        (Expect.prototype.lessThanOrEqualTo):
        (TestSuite): Common TestSuite class for user to extend. 
        (TestSuite.prototype.expect):
        (TestSuite.prototype.sleep): Test will sleep for certain ms
        (TestSuite.prototype.waitForSignal): Wait until we receive a certain signal with timeout
        (TestSuite.prototype.waitForRefMounted): Wait until we receive ref object's onElementMount signal with timeout
        (TestSuite.prototype.waitForRefUnmounted): Wait until we receive ref object's onElementUnmount signal with timeout
        (TestSuite.prototype.waitForStateUpdated):Wait until we receive ref object's onStateUpdate signal with timeout
        (TestSuite.prototype.async.setup): Common interface for setup a test suite
        (TestSuite.prototype.async.clearUp): Common interface for clear up a test suite
        (getTestFucntionNames): Collect all the test method of a test instance.
        (TestResult):
        (TestResult.prototype.catchException):
        (async.getTestResult): Run the test and generate a TestResult object
        (TestController):
        (TestController.prototype.addResultHandler): Test controller will send notification of a test result to result handler
        (TestController.prototype.addSetupArgs): This gives some additional args for the common setup method for each test class, 
        it is the best place to setup something like a root element, a fake data source, etc
        (TestController.prototype.collect): This method used for collect the test classes.
        (TestController.prototype.async.collectFile): It will import the file as a module dynamicly and collect all the test classes that module export
        (TestController.prototype.async.runTest): It will run a test method of a test class
        (TestController.prototype.async.run): It will run all test or a test class or a test method
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TestComponents.js: components for test app.
        * resultsdbpy/resultsdbpy/view/static/library/js/test/RefTest.js: Ref.js test cases.
        * resultsdbpy/resultsdbpy/view/static/library/js/test/index.html: Test app entry.

2019-09-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState triggers a debug assertion
        https://bugs.webkit.org/show_bug.cgi?id=202145
        <rdar://problem/51273128>

        Reviewed by Tim Horton.

        Fixes this API test to work on iPad as well as iPhone. Importantly, we show a popover when focusing
        select elements on iPad, which means that there is no -inputView present on WKContentView, and upon
        dismissing the form accessory view, the select element is still focused.

        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:

2019-09-25  Cathie Chen  <cathiechen@igalia.com>

        Add Cathie Chen as WebKit committer

        Unreviewed.

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

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

        Require a WebsiteDataStore when creating or resuming downloads
        https://bugs.webkit.org/show_bug.cgi?id=202081

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):

2019-09-23  Zan Dobersek  <zdobersek@igalia.com>

        run-web-platform-tests: remove support for in-repository manifest, expectation management
        https://bugs.webkit.org/show_bug.cgi?id=202037

        Reviewed by Carlos Alberto Lopez Perez.

        Instead of keeping wpt metadata inside the WebKit repository or have it
        generated on-the-fly, provide additional option flags for the
        run-web-platform-tests script that allows detailed specification of the
        metadata, manifest and include manifest locations, if necessary.

        If the metadata location is not provided, the wptrunner tool will simply
        not rely on any metadata to adjust expected results. With no manifest
        path specified, the manifest will be generated inside the wpt checkout.
        If no include manifest is specified, all the tests will be initially
        selected for running (until they're possibly filtered through additional
        command line arguments).

        * Scripts/webkitpy/common/config/ports_mock.py:
        (MockPort.run_bindings_tests_command):
        (MockPort.wpt_metadata_directory): Deleted.
        (MockPort.wpt_manifest_file): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.default_results_directory):
        (Port.wpt_metadata_directory): Deleted.
        (Port.wpt_manifest_file): Deleted.
        * Scripts/webkitpy/w3c/wpt_runner.py:
        (parse_args):
        (WPTRunner.prepare_wpt_checkout):
        (WPTRunner.run):
        (WPTRunner._generate_metadata_directory): Deleted.
        (WPTRunner._wpt_run_paths): Deleted.
        * Scripts/webkitpy/w3c/wpt_runner_unittest.py:
        (WPTRunnerTest.TestInstance.__init__):
        (WPTRunnerTest.test_prepare_wpt_checkout_specified_path):
        (WPTRunnerTest.test_run):
        (WPTRunnerTest.test_run_with_specified_options):
        (WPTRunnerTest.test_run_with_args):
        (WPTRunnerTest.TestInstance.prepare_mock_files_for_run): Deleted.
        (WPTRunnerTest.test_generate_metadata_directory): Deleted.

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

        [Win][WebKitTestRunner] Implement EventSenderProxy::keyDown
        https://bugs.webkit.org/show_bug.cgi?id=201913

        Reviewed by Ross Kirsling.

        Implemented eventSender.keyDown for Windows WebKitTestRunner based
        on DumpRenderTree implementation.

        There is a difference between them. Only WTR truns KF_UP and
        KF_REPEAT flags on for WM_KEYUP event.
        EventSenderProxy::dispatchMessage is used in WTR. It calls
        TranslateMessage, this introduces the difference. If I didn't turn
        those bits, TranslateMessage posts WM_CHAR even for WM_KEYUP.
        According the spec, WM_KEYUP needs those bits.
        <https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-keyup>
        DRT doesn't need the those bits becasuse it doesn't use
        TranslateMessage for WM_KEYUP.

        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::makeKeyDataForScanCode): Added.
        (WTR::pumpMessageQueue): Added.
        (WTR::EventSenderProxy::keyDown): Implemented by using DRT code.

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

        [EWS] Rename CompileJSCOnly to CompileJSC
        https://bugs.webkit.org/show_bug.cgi?id=202118

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Renamed CompileJSCOnly to CompileJSC.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Ditto.
        (AnalyzeCompileWebKitResults.start): Ditto.
        (CompileJSC): Changed step-name to 'compile-jsc' to better match with similar steps like 'compile-webkit'. 
        (CompileJSCToT): Ditto for 'compile-jsc-tot'.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Renamed CompileJSCOnly to CompileJSC and CompileJSCOnlyToT to CompileJSCToT.

2019-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Drop animation when dragging images from Photos to WebKit2 Mail compose is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=201674
        <rdar://problem/51250952>

        Reviewed by Tim Horton.

        Add a couple of new API tests to exercise the new image placeholder drop codepath, in addition to testing
        infrastructure to simulate the timing of drop animation delegate calls.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[NSArray _attachmentWithName:]):
        (-[TestWKWebView allBoundingClientRects:]):

        Add some new API testing helper methods.

        (TestWebKitAPI::targetedImageDragPreview):
        (TestWebKitAPI::TEST):

        Add two new tests, to:
        (1) verify that images are dropped as attachment-backed placeholder image elements when the web view is editable
            and enables attachment elements, and
        (2) verify that when dropping an image taller than the web view, the bottom portion of the drop preview is
            clipped using the targeted preview parameter's visiblePath.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]): Deleted.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/NSItemProviderAdditions.h: Added.
        * TestWebKitAPI/cocoa/NSItemProviderAdditions.mm: Added.

        Move some common helpers for registering data on a NSItemProvider to a separate file, so that it can be used in
        both WKAttachmentTests and DragAndDropTests.

        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]):
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:loadingDelay:]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator clearExternalDragInformation]):
        (-[DragAndDropSimulator setExternalItemProviders:defaultDropPreviews:]):

        Add a new method to allow tests to specify both a list of externally dragged item providers, as well as default
        targeted previews for each of the corresponding items. These default previews are used when invoking the drop
        interaction delegate's preview generation methods.

        (-[DragAndDropSimulator addAnimations:]):

        Not implemented yet; for now, this simply asserts.

        (-[DragAndDropSimulator addCompletion:]):

        Queues a completion handler, which is invoked when the drop animation for each item completes. Depending on the
        value of DragAndDropSimulator's -dropAnimationTiming, this may occur either before or after handling the drop.
        By default, these will be invoked after the drop completes, which represents the common case where data can be
        loaded quickly relative to the drop animation.

        (-[DragAndDropSimulator _invokeDropAnimationCompletionBlocksAndConcludeDrop]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):

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

        results.webkit.org: Collapse results with the same version name (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=201779

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.compare): Correctly compare constructed version names.

2019-09-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] LocalAuthenticator tests are failing on internal bots
        https://bugs.webkit.org/show_bug.cgi?id=201844
        <rdar://problem/54278693>

        Reviewed by Brent Fulgham.

        LocalAuthenticator tests utilize Keychain for mock testing. Unlike iOS simulator tests which
        each test runner is running in different simulator containers, all test runners are running
        in the same macOS container in macOS. Therefore, Keychain is shared among all test runners
        in macOS while it is not in iOS simulators. And therefore, race conditions would happen in
        macOS which make the current tests flaky given they don't consider race conditions.

        This patch then makes each test generate a random credential, and thus no other tests would
        be able to access it, and therefore eliminate any race condition. To support this, a few new
        functionalities are introduced to the mock test infrastructure as well:
        1) TestRunner.cleanUpKeychain accepts a new parameter to more precisely identify an item.
        2) WebAuthenticationMockConfiguration.Local has a new member to uniquely select a credential
        for getAssertion ceremony when multiple presents.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::cleanUpKeychain):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::cleanUpKeychain):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cleanUpKeychain):

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

        [EWS] JSC queues should re-build ToT and compare results on build failure
        https://bugs.webkit.org/show_bug.cgi?id=201999

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Do not add the UnApplyPatchIfRequired and CompileJSCOnlyToT step here, as
        these are dynamically added (if required) in steps.py in CompileWebKit.evaluateCommand() using addStepsAfterCurrentStep().
        Also setting skipUpload=False since we don't need to upload the archive for this queue. Building and testing is done in same build.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Add CompileJSCOnlyToT or CompileWebKitToT build-step based on 'group' property.
        (AnalyzeCompileWebKitResults.start): Ditto.
        (CompileJSCOnly.start): Set the 'group' property to 'jsc'.
        (CompileJSCOnlyToT.evaluateCommand): Over-ride evaluateCommand, so that base-class' (CompileWebKit) evaluateCommand is 
        not used, base class evaluateCommand adds build-steps dynamically.

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

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201967
        <rdar://problem/55504738>

        Reviewed by Andy Estes.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        After version checks have been removed, there are some cases where the
        preprocessor conditional looks like "#if PLATFORM(MAC) ||
        PLATFORM(IOS_FAMILY)". These can be collapsed into "#if
        PLATFORM(COCOA)". This additional cleanup will be performed in a
        subsequent patch.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Andy Estes was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm: Removed.

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

        Begin moving WebsiteDataStore setters to WebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202025

        Reviewed by Chris Dumez.

        One expected change in behavior is that the resource load statistics directory is not created on startup with an ephemeral session any more
        because we call the constructor of WebsiteDataStoreConfiguration inside _WKWebsiteDataStoreConfiguration and set the default directory like we do the other directories.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):

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

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201973
        <rdar://problem/55506966>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Chris Dumez was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-09-19  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Enable WebKitTestRunner build
        https://bugs.webkit.org/show_bug.cgi?id=201996

        Reviewed by Fujii Hironori.

        It's time to start getting the test system up and running for FTW.

        This patch does the following:

        1. Adds relevant CMake changes to get things building.
        2. Adds a "--ftw" flag to the build scripts that will trigger a relevant build.
        3. Updates 'webkitpy' to recognize the 'ftw' port.

        Note: Pixel tests are not yet supported.

        * PlatformFTW.cmake: Build the WK2 test runner.
        * Scripts/build-webkit: Update to recognize the FTW port.
        * Scripts/webkitdirs.pm: Ditto.
        * Scripts/webkitperl/webkitdirs_unittest/extractNonMacOSHostConfiguration.pl: Ditto.
        * Scripts/webkitpy/common/config/ports.py: Ditto.
        * Scripts/webkitpy/common/config/ports_unittest.py: Ditto.
        * Scripts/webkitpy/common/version_name_map.py: Ditto.
        * Scripts/webkitpy/port/factory.py: Ditto.
        * Scripts/webkitpy/port/win.py: Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive): Don't build or run this method
        on Windows.
        * WebKitTestRunner/PlatformFTW.cmake: Added.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        * WebKitTestRunner/win/TestInvocationDirect2D.cpp: Added.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Add stub implementation.

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

        [Win][MiniBrowser] Use _com_ptr_t methods instead of calling QueryInterface explictly
        https://bugs.webkit.org/show_bug.cgi?id=201976

        Reviewed by Don Olmstead.

        This change consists of three refactorings:
        1. Replaced explicit QueryInterface with _com_ptr_t methods
        2. Replaced typedef with _COM_SMARTPTR_TYPEDEF macro
        3. Replaced WebCore's COMPtr with _com_ptr_t because it is not a public WebKit API

        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFirstLayoutInFrame): Deleted.
        * MiniBrowser/win/MiniBrowserWebHost.h:
        (MiniBrowserWebHost::didFirstLayoutInFrame):
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (getHandleFromWebView):
        (PrintWebUIDelegate::webViewPrintingMarginRect):
        (PrintWebUIDelegate::runModal):
        (PrintWebUIDelegate::createModalDialog):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::init):
        (WebKitLegacyBrowserWindow::setToDefaultPreferences):
        (WebKitLegacyBrowserWindow::showLastVisitedSites):
        (WebKitLegacyBrowserWindow::reload):
        (WebKitLegacyBrowserWindow::resetZoom):
        (WebKitLegacyBrowserWindow::zoomIn):
        (WebKitLegacyBrowserWindow::zoomOut):
        (WebKitLegacyBrowserWindow::showLayerTree):
        (WebKitLegacyBrowserWindow::print):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:
        (WebKitLegacyBrowserWindow::privatePreferences):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * MiniBrowser/win/stdafx.h:

2019-09-19  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Dependency hunspell-en-gb cannot be found on Fedora 30
        https://bugs.webkit.org/show_bug.cgi?id=202009

        Update package name to hunspell-en-GB.

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/install-dependencies:

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

        results.webkit.org: Collapse results with the same version name
        https://bugs.webkit.org/show_bug.cgi?id=201779

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.const.ending.this.version_name.substring):
        (Configuration.prototype.toKey): Prefer version_name over version number in key.
        (Configuration.prototype.compare): version_name comparison should always override version comparison.
        (Configuration.prototype.compareSDKs): Make SDK regex global.
        (Configuration.prototype.toParams): Remove E tag on version_name.
        (Configuration): Append E tag on the version_name based on the SDK.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.prototype.toString): Print version number with SDK.

2019-09-19  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION: [iOS 13?] TestWebKitAPI.SharedBufferTest.tryCreateArrayBufferLargeSegments is failing
        https://bugs.webkit.org/show_bug.cgi?id=201902

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp: Disable the test on iOS.

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

        [ews] Fix platform for JSC EWS
        https://bugs.webkit.org/show_bug.cgi?id=201997

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-09-19  Brent Fulgham  <bfulgham@apple.com>

        Create InjectedBundle SPI to better support NSSecureCoding
        https://bugs.webkit.org/show_bug.cgi?id=201810
        <rdar://problem/55265713>

        The encoding/decoding routines used by WebKit’s InjectedBundles are based on NSCoding.
        While we have changed WebKit internals to use NSSecureCoding, there are a number of
        injected bundles that need to serialize custom classes between the InjectedBundle and
        the relevant WebKit UIProcess.

        We need to lock down this communications channel by enforcing NSSecureCoding.

        This patch creates new SPI to allow the UIProcess to specify classes that it will accept
        in messages from the WebContet Process (and Injected Bundle).

        It adds the following property to the WKProcessPoolConfiguration:

            @property (nonatomic, copy) NSSet<Class> *customClassesForParameterCoder;

        If no custom classes are specified, the standard serialization primitives are supported:
            NSArray, NSData, NSDate, NSDictionary, NSNull, NSNumber, NSSet, NSString,
            NSTimeZone, NSURL, and NSUUID.

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegate.mm: Added.
        (-[BundleFormDelegateRemoteObject didGetFocus]):
        (-[FormInputDelegate _webView:decidePolicyForFocusedElement:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegatePlugIn.mm: Added.
        (-[BundleFormDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleFormDelegatePlugIn _webProcessPlugInBrowserContextController:willBeginInputSessionForElement:inFrame:userIsInteracting:]):
        (-[BundleFormDelegatePlugIn _webProcessPlugInBrowserContextController:didFocusTextField:inFrame:]):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleFormDelegateProtocol.h: Copied from Tools/TestWebKitAPI/WKWebViewConfigurationExtras.h.
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        * TestWebKitAPI/WKWebViewConfigurationExtras.h:
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm:
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:configureJSCForTesting:]):
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:configureJSCForTesting:andCustomParameterClasses:]):

2019-09-18  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] fix missing col classes
        https://bugs.webkit.org/show_bug.cgi?id=201949

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (@media screen and (min-width: 768px)):
        (.row):
        (.col-1):
        (.col-2):
        (.col-3):
        (.col-4):
        (.col-5):
        (.col-6):
        (.col-7):
        (.col-8):
        (.col-9):
        (.col-10):
        (.col-11):
        (.col-12):
        (@media screen and (min-width: 600px)):

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

        Update flakiness dashboard configuration for iOS 13 queues
        https://bugs.webkit.org/show_bug.cgi?id=201711

        Reviewed by Jonathan Bedard.

        * TestResultServer/static-dashboards/builders.jsonp:

2019-09-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Update build environments to use libwpe+WPEBackend-fdo 1.4.0
        https://bugs.webkit.org/show_bug.cgi?id=201915

        Reviewed by Michael Catanzaro.

        * flatpak/org.webkit.WPEModules.yaml: Bump versions of libwpe and WPEBackend-fdo to 1.4.0
        * gtk/jhbuild.modules: Ditto.
        * wpe/jhbuild.modules: Ditto.

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

        [Win][MiniBrowser] Remove unused DOMDefaultImpl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=201867

        Reviewed by Darin Adler.

        * MiniBrowser/win/CMakeLists.txt: Removed DOMDefaultImpl.cpp.
        * MiniBrowser/win/DOMDefaultImpl.cpp: Removed.
        * MiniBrowser/win/DOMDefaultImpl.h: Removed.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:

2019-09-17  Dean Jackson  <dino@apple.com>

        Remove the "Show Link Previews" and "Hide Link Previews" action menus in the preview platter
        https://bugs.webkit.org/show_bug.cgi?id=201864
        <rdar://55190038>

        Reviewed by Simon Fraser.

        Test for the suggested actions.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuWillPresentForElement:]):
        (TEST):

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

        results.webkit.org results bubbles' tooltips should include SDK information
        https://bugs.webkit.org/show_bug.cgi?id=201823

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.compare): Like the Python instance of this class,
        support using null as a wildcard.
        (Configuration.prototype.compareSDKs): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Construct a configuration
        object from all bits of data used to construct a given bubble.
        (TimelineFromEndpoint.prototype.render):

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

        Remove some support for < iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=201851
        <rdar://problem/55422044>

        Reviewed by Jiewen Tan and Alexey Proskuryakov.

        Remove some support for iOS versions less than 12.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 120000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101200" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101200" are always True.

        This removal is part of a series of patches effecting such removal.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::installFakeHelvetica):

2019-09-17  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: Driver.do_post_tests_work() is never called when `stop_when_done` is true in Driver.run_test()
        <https://webkit.org/b/201873>

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test): Call self.do_post_tests_work() when a test
        shard has completed, but didn't crash or time out.

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

        REGRESSION (r249923): ASSERTION FAILED: sessionID == WebProcess::singleton().sessionID() in WebCore::SWClientConnection *WebKit::WebServiceWorkerProvider::existingServiceWorkerConnectionForSession(PAL::SessionID)
        https://bugs.webkit.org/show_bug.cgi?id=201859
        <rdar://problem/55426742>

        Reviewed by Alex Christensen.

        Update API test to use WKWebsiteDataStoreRef C API to do private browsing instead of using
        the legacy WKPreferencesSetPrivateBrowsingEnabled() C API.

        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):

2019-09-17  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201710

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Move iOS 12 queues to iOS 13.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-12 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-12 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update unit tests.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):
        * BuildSlaveSupport/ews-build/config.json: Move iOS 12 queues to iOS 13.

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

        Unreviewed, rolling out r249950.

        Broke the iOS build.

        Reverted changeset:

        "Remove the "Show Link Previews" and "Hide Link Previews"
        action menus in the preview platter"
        https://bugs.webkit.org/show_bug.cgi?id=201864
        https://trac.webkit.org/changeset/249950

2019-09-17  Dean Jackson  <dino@apple.com>

        Remove the "Show Link Previews" and "Hide Link Previews" action menus in the preview platter
        https://bugs.webkit.org/show_bug.cgi?id=201864
        <rdar://55190038>

        Reviewed by Simon Fraser.

        Test for the suggested actions.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuSuggestedActionsUIDelegate webView:contextMenuWillPresentForElement:]):
        (TEST):

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

        Remove "gopher" from list of special schemes in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=201852

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

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

        results.webkit.org: Shard result archives
        https://bugs.webkit.org/show_bug.cgi?id=201734

        Reviewed by Dewei Zhu.

        Cassandra advertises being able to store up to 2 GB in a single blob-storage row.
        In practice, this usually doesn't work according to the Cassandra developers,
        large blobs should be broken up into shards of, at most, 10 MB.

        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext):
        (ArchiveContext.ArchiveMetaDataByCommit): Point to the archive shards by hash.
        (ArchiveContext.ArchiveMetaDataByCommit.unpack):
        (ArchiveContext.ArchiveChunks): Store archive shards, indexed by hash.
        (ArchiveContext.__init__):
        (ArchiveContext.register): When saving archives, save a reference hash and then
        shard the actual archive data before saving.
        (ArchiveContext.find_archive): Search for archive by meta-data, then reconstruct
        the archive. Raise an exception if we determine that memory usage is a problem.
        (ArchiveContext.ArchivesByCommit): Deleted.
        (ArchiveContext.ArchivesByCommit.unpack): Deleted.
        * resultsdbpy/resultsdbpy/model/archive_context_unittest.py:
        (ArchiveContextTest.init_database): Allow configuration and archive to be specified.
        (ArchiveContextTest):
        (ArchiveContextTest.test_large_archive): Test archive sharding.

2019-09-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support more than two FIDO protocol versions
        https://bugs.webkit.org/show_bug.cgi?id=198408
        <rdar://problem/51292176>

        Reviewed by Chris Dumez.

        Adds a new test case that includes a FIDO_2_1_PRE version string.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:

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

        results.webkit.org: Configurations should be branch specific
        https://bugs.webkit.org/show_bug.cgi?id=201561

        Reviewed by Dewei Zhu.

        Partition configurations by branch in both Redis and Cassandra.

        * resultsdbpy/resultsdbpy/controller/upload_controller.py:
        (UploadController.suites): Allow the user to specify branches while listing suites.
        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext.register): Register each configuration with a branch.
        * resultsdbpy/resultsdbpy/model/configuration_context.py:
        (ConfigurationContext.ByPlatform): Index by branch.
        (ConfigurationContext.ByPlatformAndVersion): Ditto.
        (ConfigurationContext.ByArchitecture): Ditto.
        (ConfigurationContext.ByModel): Ditto.
        (ConfigurationContext.__init__): Populate Redis cache with branch.
        (ConfigurationContext._convert_to_redis_key): Accept branch in Redis key.
        (ConfigurationContext._register_in_redis): Register configuration with branch.
        (ConfigurationContext.register_configuration): Ditto.
        (ConfigurationContext.search_for_configuration): Search for configuration with branch.
        (ConfigurationContext.search_for_recent_configuration): Ditto.
        (ConfigurationContext.select_from_table_with_configurations): Ditto.
        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py:
        (ConfigurationContextTest.register_configurations): Register with branch.
        (ConfigurationContextTest.test_repopulate_recent): Construct ConfigurationContext with
        CommitContext object.
        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext.SuitesByConfiguration): Index by branch.
        (UploadContext.upload_test_results): Register each configuration with a branch.
        (UploadContext.find_suites): Pass branch to search for configurations.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Check for new configurations when the branch is changed.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Add branch to suites query.

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

        check-webkit-style: Fix warning message for std::make_unique<typename[]>
        <https://webkit.org/b/201818>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_make_unique): Emit different error message when using
        std::make_unique<>() to create an array.  Personalize the error
        message by including the original type name, which also
        demonstrates that WTF::makeUniqueArray<>() does not need square
        brackets for its typename.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_make_unique): Add test.
        (WebKitStyleTest.test_wtf_make_unique_array): Ditto.

2019-09-16  Andres Gonzalez  <andresg_22@apple.com>

        Rename [WebAccessibilityObjectWrapper _accessibilityInsertText] to accessibilityInsertText to match accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=201820

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::insertText):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::insertText):

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

        Fix leaks in DumpRenderTree and WebKitTestRunner
        <https://webkit.org/b/201814>

        Reviewed by Darin Adler.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        (createCoreAnimationLayer): Fix signature to return CFTypeRef.
        Add CF_RETURNS_RETAINED to document behavior.
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        (createCoreAnimationLayer): Fix signature to return CFTypeRef.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (takeWindowSnapshot): Add CF_RETURNS_RETAINED to document
        behavior.
        (createBitmapContextFromWebView): Fix leak of CGImageRef when
        generating a replacement image.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm: Add @dynamic
        declaration for _stableStateOverride so compiler wouldn't try to
        create another instance variable for it.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        Release `cgEvent` to fix leak.

2019-09-16  Andres Gonzalez  <andresg_22@apple.com>

        Expose misspelling ranges for editable content to accessibility clients.
        https://bugs.webkit.org/show_bug.cgi?id=201752
        <rdar://problem/49556828>

        Reviewed by Chris Fleizach.

        Test code needed for LayoutTests/accessibility/misspelling-range.html.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::misspellingTextMarkerRange):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::misspellingSearchParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::misspellingTextMarkerRange):

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

        REGRESSION(r249142): [GTK] Epiphany delayed page loads continue indefinitely
        https://bugs.webkit.org/show_bug.cgi?id=201544

        Reviewed by Michael Catanzaro.

        Add new test cases.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testWebViewActiveURI):
        (testWebViewIsLoading):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (LoadTrackingTest::loadAlternateHTML):
        (LoadTrackingTest::reset):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.h:

2019-09-15  David Kilzer  <ddkilzer@apple.com>

        block-spammers should obtain credentials the same way as webkit-patch
        <https://webkit.org/b/201733>

        Reviewed by Lucas Forschler.

        * Scripts/block-spammers: Import Credentials from webkitpy.
        Remove unused imports.  Enable logging at info level to match
        webkit-patch.
        (get_bugzilla_token): Use Credentials module to get
        bugs.webkit.org credentials.
        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._run_security_tool): Change logging level from
        error to info since multiple attempts are made at reading the
        keychain.  Fix typos in comment.
        (Credentials._credentials_from_security_command): Extract common
        logic from Credentials._credentials_from_keychain into new
        method.
        (Credentials._credentials_from_keychain): Make fallback logic
        for checking for credentials in the keychain more consistent and
        easier to read.  Add error logging if no credentials are found.

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

        WPT importer should check META global tag in .any.js files to generate the valid .html stub files
        https://bugs.webkit.org/show_bug.cgi?id=201718

        Reviewed by Chris Dumez.

        Read meta tag information to select the environments where the any.js template tests will be run.
        Added support to run service worker tests from any.js template tests.

        Covered by unit test.
        Since we import only a single repository nowadays, use a test config file with just one repository
        to simplify the new test.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__):
        (TestImporter.readEnvironmentsForTemplateTest):
        (TestImporter.write_html_files_for_templated_js_tests):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):
        (TestImporterTest.test_import_dir_with_empty_init_py):
        (TestImporterTest.test_harnesslinks_conversion):
        (TestImporterTest.test_submodules_generation):
        (test_checkout_directory):
        (test_clean_directory_option):
        (test_git_ignore_generation):
        (test_initpy_generation):
        (test_remove_obsolete_content):
        (test_manual_slow_test):
        (test_webkit_test_runner_options):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_download):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_from_source_dir):
        (test_template_test):

2019-09-13  Dean Jackson  <dino@apple.com>

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371
        <rdar://54904781>

        Disable the test for the moment.

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

2019-09-11  Dean Jackson  <dino@apple.com>

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371
        <rdar://54904781>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tools/TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/system-preview-trigger.html: Added.

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

        Partition processes running service workers by session ID
        https://bugs.webkit.org/show_bug.cgi?id=201643

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-09-13  Nikolas Zimmermann  <zimmermann@kde.org>

        Re-add myself to the list of committers

        Unreviewed.

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

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

        [iOS] TestWebKitAPI.WebKit.TLSVersionWebSocket is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=201745

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        The exact message isn't important.  The fact that the TLS handshake failed is, which is checked by the TCPServer.

2019-09-13  Patrick Griffis  <pgriffis@igalia.com>

        [JHBuild] Fix building gst-plugins-good against glibc 2.30
        https://bugs.webkit.org/show_bug.cgi?id=201715

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/patches/gst-plugins-good-glibc-2.30-compat.patch: Added.

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

        [WKTR] Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED()
        https://bugs.webkit.org/show_bug.cgi?id=201546

        Reviewed by Alex Christensen.

        Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED() from WebKitTestRunner as it does not do
        the right thing for WebKit2 and tests have been rewritten to not use it.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateBrowsingEnabled_DEPRECATED): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-09-12  Brady Eidson  <beidson@apple.com>

        PDF exporting on iOS should include URL rects.
        <rdar://problem/54900133> and https://bugs.webkit.org/show_bug.cgi?id=201693

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        (TestWebKitAPI::TEST): Enable on iOS.

2019-09-12  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] webkit_settings_set_user_agent() allows content forbidden in HTTP headers
        https://bugs.webkit.org/show_bug.cgi?id=201077

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/CMakeLists.txt: Add missing HTTPParsers.cpp to be built into TestWebCore.
        * TestWebKitAPI/Tests/WebCore/HTTPParsers.cpp:
        (TestWebKitAPI::TEST): Add tests for WebCore::isValidUserAgentHeaderValue().

2019-09-12  Mark Lam  <mark.lam@apple.com>

        Harden JSC against the abuse of runtime options.
        https://bugs.webkit.org/show_bug.cgi?id=201597
        <rdar://problem/55167068>

        Reviewed by Filip Pizlo.

        Linux parts contributed by Carlos Garcia Campos <cgarcia@igalia.com>.
        Windows parts contributed by Fujii Hironori <Hironori.Fujii@sony.com>.

        Call JSC::Config::configureForTesting() in test harnesses or at the top of tests
        to disable the hardening on test runs.  Tests rely on setting options to enable
        test features.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::runActiveSessionTest):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDiagnosticLogging.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/WKWebViewConfigurationExtras.h:
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm:
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:]):
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:configureJSCForTesting:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):

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

        Fix PDFKit references in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=201700
        <rdar://problem/55279539>

        Reviewed by Youenn Fablet.

        These references fail in watchOS and tvOS, so remove them on those
        platforms.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        * TestWebKitAPI/cocoa/TestPDFDocument.h:
        * TestWebKitAPI/cocoa/TestPDFDocument.mm:
        * TestWebKitAPI/config.h:

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

        [Win][MiniBrowser] Select all text in the URL bar by clicking it
        https://bugs.webkit.org/show_bug.cgi?id=201677

        Reviewed by Don Olmstead.

        * MiniBrowser/win/MainWindow.cpp:
        (EditProc): Post EM_SETSEL in WM_SETFOCUS to select all text.

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

        [GTK][WPE] Stop using the session bus in the unit tests
        https://bugs.webkit.org/show_bug.cgi?id=201636

        Reviewed by Žan Doberšek.

        We are actually using GTestDBus, not the actual session bus of the user session, but it would still be better to
        use a private p2p DBus connection. This is also the way we encourage apps to implement the communication with
        the web process extension. This patch removes the WebKitTestBus class and starts a DBus server before every
        test. The server address is passed to the web extension as initialization parameter to connect directly to
        it. We keep a global list of connections to the server and a HashMap to get the current active connection for
        a WebKitWebView.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (testProcessPerWebView):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testWebExtensionInputElementIsUserEdited):
        (testDocumentLoadedSignal):
        (testWebKitWebViewProcessCrashed):
        (testWebExtensionIsolatedWorld):
        (testInstallMissingPluginsPermissionRequest):
        (testWebExtensionFormControlsAssociated):
        (FormSubmissionTest::FormSubmissionTest):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (DelayedSignal::DelayedSignal):
        (emitPageCreated):
        (pageCreatedCallback):
        (webkit_web_extension_initialize_with_user_data):
        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::AccessibilityTest):
        (AccessibilityTest::ensureProxy):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (dbusConnectionClosed):
        (dbusServerConnection):
        (startDBusServer):
        (stopDBusServer):
        (main):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::initializeWebExtensions):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp: Removed.
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.h: Removed.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::~WebViewTest):
        (WebViewTest::extensionProxy):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2019-09-10  Dean Jackson  <dino@apple.com>

        setup-git-clone is using http not https
        https://bugs.webkit.org/show_bug.cgi?id=201658

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute):

2019-09-10  Matt Lewis  <jlewis3@apple.com>

        run-webkit-test: Allow results to be uploaded without scm checkout
        https://bugs.webkit.org/show_bug.cgi?id=200787

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system): Added in detection of stub repository.
        * Scripts/webkitpy/common/checkout/scm/stub_repository.py: Added.
        (StubRepository):
        (StubRepository.__init__):
        (StubRepository._find_parent_path_matching_callback_condition): Checks up the path given to
        find the directory containing the checkout_information.json of the stub repository.
        (StubRepository.in_working_directory): Required functions to be implemented.
        (StubRepository.svn_revision): Required functions to be implemented.
        (StubRepository.native_revision): Required functions to be implemented.
        (StubRepository.native_branch): Required functions to be implemented.
        (StubRepository._decode_json): Decodes checkout_information.json.
        (StubRepository.find_checkout_root): Required functions to be implemented.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: Added.
        (StubRepositoryTest): Unit test for stub_repository SCM.
        (StubRepositoryTest.mock_host_for_stub_repository):
        (StubRepositoryTest.test_in_working_directory):
        (StubRepositoryTest.test_native_revision):
        (StubRepositoryTest.test_native_branch):
        (StubRepositoryTest.test_svn_revision):
        (StubRepositoryTest.test_find_checkout_root):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator._get_svn_revision): Removed unnecessary scm initialization.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Removed unnecessary scm initialization.

2019-09-10  Brady Eidson  <beidson@apple.com>

        Add SPI to save a PDF from the contents of a WKWebView.
        <rdar://problem/48955900> and https://bugs.webkit.org/show_bug.cgi?id=195765

        Reviewed by Tim Horton.

        -Add an "Export to PDF..." menu option to MiniBrowser.
        -Add API tests for the API itself.

        * MiniBrowser/MiniBrowser.entitlements:

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController forceRepaint:]):
        (-[BrowserWindowController saveAsPDF:]):

        * MiniBrowser/mac/MainMenu.xib:

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController saveAsPDF:]):

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestPDFDocument.h: Added.
        * TestWebKitAPI/cocoa/TestPDFDocument.mm: Added.
        (TestWebKitAPI::toCGRect):
        (TestWebKitAPI::toPlatformPoint):
        (TestWebKitAPI::TestPDFAnnotation::TestPDFAnnotation):
        (TestWebKitAPI::TestPDFAnnotation::isLink const):
        (TestWebKitAPI::TestPDFAnnotation::bounds const):
        (TestWebKitAPI::TestPDFAnnotation::linkURL const):
        (TestWebKitAPI::TestPDFPage::create):
        (TestWebKitAPI::TestPDFPage::TestPDFPage):
        (TestWebKitAPI::TestPDFPage::annotations):
        (TestWebKitAPI::TestPDFPage::characterCount const):
        (TestWebKitAPI::TestPDFPage::text const):
        (TestWebKitAPI::TestPDFPage::rectForCharacterAtIndex const):
        (TestWebKitAPI::TestPDFPage::characterIndexAtPoint const):
        (TestWebKitAPI::TestPDFPage::bounds const):
        (TestWebKitAPI::TestPDFPage::colorAtPoint const):
        (TestWebKitAPI::TestPDFDocument::createFromData):
        (TestWebKitAPI::TestPDFDocument::TestPDFDocument):
        (TestWebKitAPI::TestPDFDocument::pageCount const):
        (TestWebKitAPI::TestPDFDocument::page):

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

        Remove SSL-based TLSDeprecation.mm contents
        https://bugs.webkit.org/show_bug.cgi?id=201657
        <rdar://problem/55237678>

        Reviewed by Alex Christensen.

        This file does not build on watchOS due to references to SSL
        facilities. Conditionalize out the contents on HAVE_SSL.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:

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

        Unreviewed, remove myself from watchlists

        * Scripts/webkitpy/common/config/watchlist:

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

        Rebase API test after r249675
        https://bugs.webkit.org/show_bug.cgi?id=201596

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        We removed the restriction on WebsitePolicies with non-default persistent sessions.
        We needed to change the expectations of the test that exercised that code path.

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

        Fix iOS API tests after r249684
        https://bugs.webkit.org/show_bug.cgi?id=201573

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::getWebSocketEventWebKitLegacy):
        (TestWebKitAPI::TEST):
        The web thread still exists :(
        That makes iOS immediate failure results more like WK2, which is fine.
        The point is that the connection fails somehow and the server sees a TLS failure, which the test verifies.

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

        REGRESSION: http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations.html is frequently timing out on iOS EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=201550

        Reviewed by Alex Christensen.

        Update testRunner.statisticsNotifyObserver() to return a boolean indicating if it did
        anything or not.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::statisticsNotifyObserver):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsNotifyObserver):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-09-09  Timothy Hatcher  <timothy@apple.com>

        Tap and hold on Facebook sometimes creates a tall empty selection.
        https://bugs.webkit.org/show_bug.cgi?id=201618
        rdar://53630145

        Reviewed by Megan Gardner.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/SelectionByWord.mm: Added.

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

        [EWS] Watchlist doesn't work sometimes
        https://bugs.webkit.org/show_bug.cgi?id=201433

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/config/watchlist: Updated the email addresses to the one associated with
        corresponding Bugzilla accounts.

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

        Disable TLS 1.0 and 1.1 in WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=201573

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TCPServer.cpp:
        (sk_CRYPTO_BUFFER_num):
        (sk_CRYPTO_BUFFER_value):
        (TestWebKitAPI::deleter<CRYPTO_BUFFER>::operator()):
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::listenForConnections):
        (TestWebKitAPI::deleter<X509>::operator()): Deleted.
        (TestWebKitAPI::deleter<uint8_t::operator()): Deleted.
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm: Added.
        (-[WebSocketDelegate waitForMessage]):
        (-[WebSocketDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestNavigationDelegate waitForDidFailProvisionalNavigation]):

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

        [Win][MiniBrowser] WebKitLegacyBrowserWindow is leaked by circular references
        https://bugs.webkit.org/show_bug.cgi?id=201600

        Reviewed by Brent Fulgham.

        There were some circular references between
        WebKitLegacyBrowserWindow and its delegation classes. For
        example, WebKitLegacyBrowserWindow has a reference of
        WebDownloadDelegate, and WebDownloadDelegate shares the ref
        counter with WebKitLegacyBrowserWindow.

        WebNotificationObserver was leaked because it wasn't unregistered
        from the default notification center by using
        IWebNotificationCenter::removeObserver.

        If a new legacy window was created by mouse right click a link,
        WebView was released twice because
        PrintWebUIDelegate::createWebViewWithRequest didn't AddRef the
        WebView.

        This change does:
        1. Make delegation classes have own ref-counter to avoid circular references
        2. Do removeObserver notification observers
        3. AddRef WebView in PrintWebUIDelegate::createWebViewWithRequest

        * MiniBrowser/win/AccessibilityDelegate.cpp:
        (AccessibilityDelegate::AddRef):
        (AccessibilityDelegate::Release):
        * MiniBrowser/win/AccessibilityDelegate.h: Added m_refCount.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::QueryInterface):
        (MiniBrowserWebHost::AddRef):
        (MiniBrowserWebHost::Release):
        * MiniBrowser/win/MiniBrowserWebHost.h: Added m_refCount.
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest): Do AddRef for the returned IWebView.
        (PrintWebUIDelegate::AddRef):
        (PrintWebUIDelegate::Release):
        * MiniBrowser/win/PrintWebUIDelegate.h: Added m_refCount.
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::AddRef):
        (ResourceLoadDelegate::Release):
        * MiniBrowser/win/ResourceLoadDelegate.h: Added m_refCount.
        * MiniBrowser/win/WebDownloadDelegate.cpp:
        (WebDownloadDelegate::AddRef):
        (WebDownloadDelegate::Release):
        * MiniBrowser/win/WebDownloadDelegate.h: Added m_refCount.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::~WebKitLegacyBrowserWindow): Do removeObserver notification observers.
        (WebKitLegacyBrowserWindow::init):
        (WebKitLegacyBrowserWindow::setUIDelegate):
        (WebKitLegacyBrowserWindow::setAccessibilityDelegate):
        (WebKitLegacyBrowserWindow::setResourceLoadDelegate):
        (WebKitLegacyBrowserWindow::setDownloadDelegate):
        (WebKitLegacyBrowserWindow::AddRef): Deleted.
        (WebKitLegacyBrowserWindow::Release): Deleted.
        (WebKitLegacyBrowserWindow::setFrameLoadDelegate): Deleted.
        (WebKitLegacyBrowserWindow::setFrameLoadDelegatePrivate): Deleted.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

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

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in http/tests/adClickAttribution/conversion-disabled-in-ephemeral-session.html
        https://bugs.webkit.org/show_bug.cgi?id=201596

        Reviewed by Alex Christensen.

        Add new testRunner.setShouldSwapToEphemeralSessionOnNextNavigation() / testRunner.setShouldSwapToDefaultSessionOnNextNavigation()
        test functions to support dynamic switching between ephemeral and default/persistent session in layout tests. The new methods
        do the right thing for WebKit2 and truly switch session, unlike setPrivateBrowsingEnabled_DEPRECATED() which was merely making
        the WebCore::Document think it changed session.

        * DumpRenderTree/TestRunner.cpp:
        (setShouldSwapToEphemeralSessionOnNextNavigationCallback):
        (setShouldSwapToDefaultSessionOnNextNavigationCallback):
        (TestRunner::staticFunctions):
        (TestRunner::willNavigate):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::setShouldSwapToEphemeralSessionOnNextNavigation):
        (TestRunner::setShouldSwapToDefaultSessionOnNextNavigation):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldSwapToEphemeralSessionOnNextNavigation):
        (WTR::TestRunner::setShouldSwapToDefaultSessionOnNextNavigation):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldSwapToEphemeralSessionOnNextNavigation):
        (WTR::TestController::setShouldSwapToDefaultSessionOnNextNavigation):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        EWS testtube emoji doesn't exist on macOS Mojave
        https://bugs.webkit.org/show_bug.cgi?id=201532

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Change the emoji to microscope emoji.

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

        [EWS] API testers can go in an infinite RETRY loop when there is build failure in trunk
        https://bugs.webkit.org/show_bug.cgi?id=201607

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults): Do not RETRY when clean_tree_results are missing.
        (AnalyzeAPITestsResults.analyzeResults.getAPITestFailures): Gracefully handle None result.

2019-09-07  Keith Miller  <keith_miller@apple.com>

        OSR entry into wasm misses some contexts
        https://bugs.webkit.org/show_bug.cgi?id=201569

        Reviewed by Yusuke Suzuki.

        Add new test harness mode for tests created from wast files.

        * Scripts/run-jsc-stress-tests:

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

        Remove all selection view animations before dumping results
        https://bugs.webkit.org/show_bug.cgi?id=199241

        Reviewed by Wenson Hsieh.

        On iOS the selection UI uses a few animations, including fading in the grabbers. We have many
        historical tests that were written for Mac and expect Mac's lack of animations that we run on
        iOS and are flaky. Let's try to remove all selection view animations before dumping results and
        see if this makes tests on iOS less flaky. A future enhancement to this is to expose a uiController
        API for a test to remove selection animations at any time during the run.

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

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

        run-webkit-tests: Report results archive to results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=201321

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): After all tests are finish, upload the results archive for each
        configuration.
        * Scripts/webkitpy/results/upload.py:
        (Upload):
        (Upload.__init__): Automatically define timestamp.
        (Upload.upload_archive): Upload an archive associated with the test run.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.test_buildbot):
        (UploadTest):
        (UploadTest.test_archive_upload):

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

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in http/tests/workers/service/basic-register.html
        https://bugs.webkit.org/show_bug.cgi?id=201590

        Reviewed by Youenn Fablet.

        Add a new API test to check that if the default session registers a service worker, the
        hasServiceWorkerRegistration flag is still false in an ephemeral session.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        results.webkit.org: mobile-sidebar-control should override button
        https://bugs.webkit.org/show_bug.cgi?id=201566

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (@media screen and (min-width: 600px)):
        (.mobile-sidebar-control):
        (.mobile-sidebar-control.display):

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

        Rewrite http/tests/workers/service/serviceworker-private-browsing.https.html as an API test
        https://bugs.webkit.org/show_bug.cgi?id=201574

        Reviewed by Alex Christensen.

        Rewrite http/tests/workers/service/serviceworker-private-browsing.https.html as an API test so that
        we truly test private browsing. testRunner.setPrivateBrowsingEnabled_DEPRECATED() is a hack which
        does not work well for WK2.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        Rewrite storage/domstorage/localstorage/private-browsing-affects-storage.html as an API test
        https://bugs.webkit.org/show_bug.cgi?id=201547

        Reviewed by Alex Christensen.

        Rewrite storage/domstorage/localstorage/private-browsing-affects-storage.html as an API test so
        it can use a true ephemeral session instead of the testRunner.setPrivateBrowsingEnabled_DEPRECATED()
        hack.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (-[LocalStorageNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[LocalStorageNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

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

        Remove WebsiteDataStore::legacyDefaultDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=200054

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        This test relied on the default data store having been instantiated.

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

        Remove calls to WKContextGetWebsiteDataStore missed in r249614
        https://bugs.webkit.org/show_bug.cgi?id=200050

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):

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

        Remove invalid assertion added in r249614
        https://bugs.webkit.org/show_bug.cgi?id=200050

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        Something is instantiating the default data store, which is no problem right now.

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

        Unreviewed, rolling out r249353.

        The test for this change is a flaky failure.

        Reverted changeset:

        "Add support for postMessage buffering between the service
        worker and window"
        https://bugs.webkit.org/show_bug.cgi?id=201169
        https://trac.webkit.org/changeset/249353

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

        Deprecate WKContextGetWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=200050

        Reviewed by Geoff Garen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::updateProxySettings):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::platformAdjustContext):
        (WTR::TestController::clearServiceWorkerRegistrations):
        (WTR::TestController::clearDOMCache):
        (WTR::TestController::clearDOMCaches):
        (WTR::TestController::ClearIndexedDatabases):
        (WTR::TestController::hasDOMCache):
        (WTR::TestController::domCacheSize):
        (WTR::TestController::setStatisticsDebugMode):
        (WTR::TestController::setStatisticsPrevalentResourceForDebugMode):
        (WTR::TestController::setStatisticsLastSeen):
        (WTR::TestController::setStatisticsPrevalentResource):
        (WTR::TestController::setStatisticsVeryPrevalentResource):
        (WTR::TestController::dumpResourceLoadStatistics):
        (WTR::TestController::isStatisticsPrevalentResource):
        (WTR::TestController::isStatisticsVeryPrevalentResource):
        (WTR::TestController::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestController::setStatisticsHasHadUserInteraction):
        (WTR::TestController::isStatisticsHasHadUserInteraction):
        (WTR::TestController::setStatisticsGrandfathered):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::setStatisticsSubframeUnderTopFrameOrigin):
        (WTR::TestController::setStatisticsSubresourceUnderTopFrameOrigin):
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectTo):
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectFrom):
        (WTR::TestController::setStatisticsTopFrameUniqueRedirectTo):
        (WTR::TestController::setStatisticsTopFrameUniqueRedirectFrom):
        (WTR::TestController::setStatisticsCrossSiteLoadWithLinkDecoration):
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestController::statisticsUpdateCookieBlocking):
        (WTR::TestController::statisticsSubmitTelemetry):
        (WTR::TestController::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestController::setStatisticsIsRunningTest):
        (WTR::TestController::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestController::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WTR::TestController::setStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WTR::TestController::setStatisticsGrandfatheringTime):
        (WTR::TestController::setStatisticsMaxStatisticsEntries):
        (WTR::TestController::setStatisticsPruneEntriesDownTo):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestController::statisticsDeleteCookiesForHost):
        (WTR::TestController::isStatisticsHasLocalStorage):
        (WTR::TestController::setStatisticsCacheMaxAgeCap):
        (WTR::TestController::statisticsResetToConsistentState):
        (WTR::TestController::setWebAuthenticationMockConfiguration):
        (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

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

        Incorrect selection rect revealed after pasting images in a contenteditable element
        https://bugs.webkit.org/show_bug.cgi?id=201549
        <rdar://problem/50956429>

        Reviewed by Simon Fraser.

        Add an API test to exercise the scenario where we scroll to reveal the selection after pasting an image that was
        directly written to the pasteboard.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

2019-09-06  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r249582.

        This caused results.html fail to be created on internal
        testers.

        Reverted changeset:

        "run-webkit-test: Allow results to be uploaded without scm
        checkout"
        https://bugs.webkit.org/show_bug.cgi?id=200787
        https://trac.webkit.org/changeset/249582

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

        [ews-app] Status bubble should only display important messages in pop-over - part 2
        https://bugs.webkit.org/show_bug.cgi?id=201557

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Add few more strings to STEPS_TO_HIDE.

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

        Deprecate all WKCookieManagerRef functions
        https://bugs.webkit.org/show_bug.cgi?id=201473

        Reviewed by Chris Dumez.

        Adopt replacement C API in WebKitTestRunner.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp: Removed, because the functions it tests were removed.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

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

        Marking up a note on iOS results in a PDF with no contents
        https://bugs.webkit.org/show_bug.cgi?id=201530
        <rdar://problem/53686019>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewPrintFormatter.mm:
        Add some tests for WKWebViewPrintFormatter; specifically that it is
        possible to _recalcPageCount twice in quick succession, and that
        we don't hang if we start painting the printed content immediately
        after a Web Content process crash.

2019-09-06  Matt Lewis  <jlewis3@apple.com>

        run-webkit-test: Allow results to be uploaded without scm checkout
        https://bugs.webkit.org/show_bug.cgi?id=200787

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/detection.py:
        (SCMDetector.detect_scm_system): Added in detection of stub repository.
        * Scripts/webkitpy/common/checkout/scm/stub_repository.py: Added.
        (StubRepository):
        (StubRepository.__init__):
        (StubRepository._find_parent_path_matching_callback_condition): Checks up the path given to
        find the directory containing the checkout_information.json of the stub repository.
        (StubRepository.in_working_directory): Required functions to be implemented.
        (StubRepository.svn_revision): Required functions to be implemented.
        (StubRepository.native_revision): Required functions to be implemented.
        (StubRepository.native_branch): Required functions to be implemented.
        (StubRepository._decode_json): Decodes checkout_information.json.
        (StubRepository.find_checkout_root): Required functions to be implemented.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: Added.
        (StubRepositoryTest): Unit test for stub_repository SCM.
        (StubRepositoryTest.mock_host_for_stub_repository):
        (StubRepositoryTest.test_in_working_directory):
        (StubRepositoryTest.test_native_revision):
        (StubRepositoryTest.test_native_branch):
        (StubRepositoryTest.test_svn_revision):
        (StubRepositoryTest.test_find_checkout_root):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator._get_svn_revision): Removed unnecessary scm initialization.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Removed unnecessary scm initialization.

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

        When disabling legacy private browsing for testing, change the SessionID back to what it was, not the defaultSessionID
        https://bugs.webkit.org/show_bug.cgi?id=201480

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateBrowsingEnabled):

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

        Add runtime flag for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=199794

        Reviewed by Frédéric Wang.

        Remove parts of r248409 that were meant for WK1 since
        lazy image loading is WK2 only.

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

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

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in imported/w3c/IndexedDB-private-browsing
        https://bugs.webkit.org/show_bug.cgi?id=201519

        Reviewed by Alex Christensen.

        Stop using testRunner.setPrivateBrowsingEnabled_DEPRECATED() in imported/w3c/IndexedDB-private-browsing
        as it does not truly enable private browsing for WebKit2. Instead, have WKTR / DRT set the
        TestOption::useEphemeralSession flag based on the test folder.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldUseEphemeralSession):
        (runTest):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::shouldUseEphemeralSession):
        (WTR::TestOptions::TestOptions):

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

        [Win] Support Per-Monitor (V2) DPI Awareness
        https://bugs.webkit.org/show_bug.cgi?id=201450

        Reviewed by Don Olmstead.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc): Set the window position suggested by WM_DPICHANGED.
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain): Call SetProcessDpiAwarenessContext by using soft linking.

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

        REGRESSION: http/tests/adClickAttribution/second-attribution-converted-with-higher-priority.html and http/tests/adClickAttribution/second-attribution-converted-with-lower-priority.html are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=201440
        <rdar://problem/54998427>

        Reviewed by Alex Christensen.

        Since r249350, it is now possible for a WebContent process to have a suspended WebPage for the current web view.
        This was confusing InjectedBundle::page() in WebKitTestRunner which was assuming that the WebPage that was first
        created in the WebContent process is the one that is currently running the test and that we want to talk to.
        Update InjectedBundle::page() to ignore suspended WebPages in order to address the issue.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::page const):

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

        results.webkit.org: Assign notifyRerender before calling
        https://bugs.webkit.org/show_bug.cgi?id=201510

        Reviewed by Aakash Jain.

        Timelines should define notifyRerender to an empty function,
        rename notifiyRerender to notifyRerender.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        * resultsdbpy/resultsdbpy/view/templates/search.html:
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

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

        results.webkit.org: Fix prepending search result on empty list 
        https://bugs.webkit.org/show_bug.cgi?id=201512

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/search.html:

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

        results.webkit.org: Retain certain parameters when following menu links
        https://bugs.webkit.org/show_bug.cgi?id=201463

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/site_menu.py:
        (SiteMenu.add_endpoint): Allow added endpoints to define parameters to be retained.
        * resultsdbpy/resultsdbpy/view/templates/base.html: When clicking on a site-menu link,
        retain the specified parameters
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__):

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

        [WK2] Add proper layout test support for ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=201475

        Reviewed by Antti Koivisto.

        Add proper layout test support for ephemeral sessions via:
        <!-- webkit-test-runner [ useEphemeralSession=true ] -->

        This actually creates a new WebView using an ephemeral data store to load the test which
        is *true* private browsing.

        testRunner.setPrivateBrowsingEnabled() merely overrides the Page's sessionID in the WebContent
        process, which is a hack and does not truly enable private browsing because the UIProcess and
        the NetworkProcess are not properly updated on WK2. This patch renames testRunner.setPrivateBrowsingEnabled()
        to testRunner.setPrivateBrowsingEnabled_DEPRECATED() to discourage its use since I am try to
        get rid of it.

        Note that WK2 does not support using a WebContent process for different sessions / data stores.
        Each WebContent process has a single associated data store and testRunner.setPrivateBrowsingEnabled()
        is currently the only exception to that. This leads to additional complexity in our code base (e.g. in ITP),
        simply to support testRunner.setPrivateBrowsingEnabled().

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPrivateBrowsingEnabled_DEPRECATED):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

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

        REGRESSION (iOS 13): Bulleted list copied from Notes to Mail results in Times New Roman
        https://bugs.webkit.org/show_bug.cgi?id=201490

        Reviewed by Daniel Bates.

        Added a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/cocoa-writer-markup-with-lists.html: Added.

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

        Remove unused SPI that accesses MemoryCache directly
        https://bugs.webkit.org/show_bug.cgi?id=201468

        Reviewed by Youenn Fablet.

        Removed the API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/MemoryCacheAddImageToCacheIOS.mm: Removed.

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

        Mail appears to be double inverting code copied from Notes, Xcode, or Terminal.
        https://bugs.webkit.org/show_bug.cgi?id=201368
        rdar://problem/40529867

        Reviewed by Ryosuke Niwa.

        Added Tests: PasteHTML.TransformColorsOfDarkContent, PasteHTML.DoesNotTransformColorsOfLightContent,
            PasteRTFD.TransformColorsOfDarkContent, PasteRTFD.DoesNotTransformColorsOfLightContent

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        (createWebViewWithCustomPasteboardDataSetting): Added argument to enable color filter.
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Added argument to enable color filter.
        * TestWebKitAPI/Tests/WebKitCocoa/rich-color-filtered.html: Added.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView forceDarkMode]):

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

        MobileSafari may crash when invoking the C++ lambda in -[WKContentView _shareForWebView:]
        https://bugs.webkit.org/show_bug.cgi?id=201479
        <rdar://problem/51511834>

        Reviewed by Tim Horton.

        Add a test to verify that the UI process doesn't crash when invoking `_share:` while there's no selection.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        -[WKContentView selectedText] returns an empty string when selecting more than 200 characters
        https://bugs.webkit.org/show_bug.cgi?id=201471
        <rdar://problem/55039227>

        Reviewed by Tim Horton.

        Add an API test to ensure that -selectedText is non-empty in the case where more than 200 characters are
        selected.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        results.webkit.org: Fix mobile vs desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=201441

        Rubber-stamped by Aakash Jain.

        We should unconditionally use desktop mode if the device screen-width
        is large enough.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:

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

        run-api-tests: Add support for specifying additional environment variables
        https://bugs.webkit.org/show_bug.cgi?id=201311
        <rdar://problem/54852698>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Add --additional-env-var flag.
        * Scripts/webkitpy/port/base.py:
        (Port._append_value_colon_separated): Use os.pathsep instead of ':'.
        (Port.environment_for_api_tests): Add the values from --additional-env-var to the
        environment.

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

        EWS bubbles should indicate builder vs tester
        https://bugs.webkit.org/show_bug.cgi?id=201253

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Add icons to the bubbles appropriately.
        (StatusBubble._is_tester_queue): Method to determine if the queue is tester queue.
        (StatusBubble._is_builder_queue): Method to determine if the queue is builder queue.
        (StatusBubble.get):
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.fetch_config): Method to fetch the config from Buildbot server.
        (Buildbot.update_icons_for_queues_mapping): Method to update the icons for queues mapping.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.run): Update the icons for queues mapping.
        * BuildSlaveSupport/ews-build/config.json: Add icon information for the queues.
        * BuildSlaveSupport/ews-build/loadConfig.py: Remove 'icon' key from builder before passing it to Buildbot.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: .
        (test_builder_keys): Update unit-test accordingly. Also minor drive-by fix to improve failure string formatting.

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

        [bmalloc] IsoTLSLayout and AllIsoHeaps registration is racy with derived class initialization with virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=201448

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (TEST):

2019-09-03  Dean Jackson  <dino@apple.com>

        Test for ContextMenus with images
        https://bugs.webkit.org/show_bug.cgi?id=201437

        Reviewed by Wenson Hsieh.

        Add a test for ContextMenus that trigger on images, and make
        sure that they ask for alternate URLs (added in r249171).

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (contextMenuWebViewDriver):
        (-[TestContextMenuImageUIDelegate _webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuImageUIDelegate _webView:alternateURLFromImage:userInfo:]):
        (-[TestContextMenuImageUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[TestContextMenuImageUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuImageUIDelegate webView:contextMenuDidEndForElement:]):
        (TEST):

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

        results.webkit.org: Move legend into sidebar
        https://bugs.webkit.org/show_bug.cgi?id=201258

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: 
        (Legend): Make the legend vertical instead of horizontal, add ToolTip to dots in the legend.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.css: Add left and right tooltip arrows.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (isPointInElement): Make bound check include borders.
        (_ToolTip.toString): Add left/right cases.
        (_ToolTip.prototype.setByElement): Set the tooltip location given an element.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Put the legend into the sidebar.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

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

        results.webkit.org: Increase default limit for LimitSlider
        https://bugs.webkit.org/show_bug.cgi?id=201424

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (LimitSlider): Increase the default limit, make limit slider linear instead of logarithmic.

2019-09-03  Antoine Quint  <graouts@apple.com>

        [iOS] Treat a two-finger single tap as if the user tapped with the Cmd key pressed
        https://bugs.webkit.org/show_bug.cgi?id=201420
        <rdar://problem/53207786>

        Reviewed by Simon Fraser.

        Add a new twoFingerSingleTapAtPoint() method to UIScriptController, which just calls into the existing (but unused)
        -[HIDEventGenerator twoFingerTap:completionBlock:].

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::twoFingerSingleTapAtPoint):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::twoFingerSingleTapAtPoint):

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

        [WPE] MiniBrowser should handle the WebKitWebView::create signal
        https://bugs.webkit.org/show_bug.cgi?id=201417

        Reviewed by Carlos Garcia Campos.

        WPE's MiniBrowser should connect to and handle the
        WebKitWebView::create signal, constructing a new bit related
        WebKitWebView object upon invocation.

        * MiniBrowser/wpe/main.cpp:
        (webViewClose):
        (createWebView):
        (main):

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

        [WPE] Make view backends multi-view-friendly
        https://bugs.webkit.org/show_bug.cgi?id=201415

        Reviewed by Carlos Garcia Campos.

        Have the Wayland EGL connection for WindowViewBackend instances managed
        through a per-process singleton, allowing multiple backend objects
        use it for different views. HeadlessViewBackend already does this, but
        the code there is refurbished into a singleton structure.

        The ViewBackend classes are adjusted to work with the backend-specific
        EGLDisplay objects (as constructed through the backend-specific EGL
        connection approach).

        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessEGLConnection::singleton):
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::~HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::createSnapshot):
        (WPEToolingBackends::getEGLDisplay): Deleted.
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::initialize):
        (WPEToolingBackends::ViewBackend::deinitialize):
        (WPEToolingBackends::ViewBackend::~ViewBackend): Deleted.
        * wpe/backends/ViewBackend.h:
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WaylandEGLConnection::singleton):
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
        (WPEToolingBackends::WindowViewBackend::~WindowViewBackend):
        (WPEToolingBackends::WindowViewBackend::displayBuffer):

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

        [WPE][GTK] Deprecate nonfunctional process limit APIs
        https://bugs.webkit.org/show_bug.cgi?id=193749

        Reviewed by Žan Doberšek.

        * MiniBrowser/gtk/main.c:
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (beforeAll):
        (testWebProcessLimit): Deleted.

2019-09-02  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] WindowBackend should do resizing properly
        https://bugs.webkit.org/show_bug.cgi?id=201386

        Reviewed by Carlos Garcia Campos.

        The WindowBackend implementation is resized via the XDG protocol. The
        initial size is stored for the object's lifetime and fallen back to when
        the XDG protocol reports (0,0) configuration size.

        Upon each resize, we have to recreate the texture. We also have to size
        the GL viewport accordingly.

        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
        (WPEToolingBackends::WindowViewBackend::createViewTexture):
        (WPEToolingBackends::WindowViewBackend::resize):
        (WPEToolingBackends::WindowViewBackend::displayBuffer):
        * wpe/backends/WindowViewBackend.h:

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

        Unreviewed, rolling out r249366.

        WinCairo WebKit2 crashes in some websites and the device scale
        factor is not correct in high DPI.

        Reverted changeset:

        "[WinCairo, FTW] Properly handle device scale factor"
        https://bugs.webkit.org/show_bug.cgi?id=201361
        https://trac.webkit.org/changeset/249366

2019-09-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Long presses that interrupt accelerated scrolling dispatch clicks on apps linked against iOS 12 or earlier
        https://bugs.webkit.org/show_bug.cgi?id=201346
        <rdar://problem/54885784>

        Reviewed by Dean Jackson.

        Add a new test option to allow tests to disable link previews.

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

        Drive-by fix: also check enableLazyImageLoading when determining whether two TestOptions are the same.

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

2019-08-30  Brent Fulgham  <bfulgham@apple.com>

        [WinCairo, FTW] Properly handle device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=201361

        Reviewed by Don Olmstead.

        Reset zoom to 1.0; device scale is handled elsewhere.

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

2019-08-30  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Add notify rerender API for timeline
        https://bugs.webkit.org/show_bug.cgi?id=201363

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Export notifyRerender API to timeline class
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (XScrollableCanvasProvider): Add an event stream to receive notification that it will need to render 
        (prototype.ExpandableSeriesComponent): Notify the rerender when expanded, because this may change the layout.
        (prototype.Timeline.CanvasContainer):

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

        [ews-build] 're-run-layout-tests' step on macOS-High-Sierra-Debug-WK1-Tests-EWS runs WK2 tests
        https://bugs.webkit.org/show_bug.cgi?id=201350

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKit1Tests.start): Set build property to use dump-render-tree.
        (RunWebKitTests.start): Use dump-render-tree whenever the corresponding build property is set.

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

        results.webkit.org: Add endpoints to upload and download archives
        https://bugs.webkit.org/show_bug.cgi?id=201100

        Reviewed by Aakash Jain.

        Add the endpoint to upload and download a zip archive associated with a test run.

        * resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.__init__): Add archive endpoint.
        * resultsdbpy/resultsdbpy/controller/archive_controller.py: Added.
        (ArchiveController):
        (ArchiveController.__init__):
        (ArchiveController.endpoint):
        (ArchiveController.download):
        (ArchiveController.upload):
        * resultsdbpy/resultsdbpy/controller/archive_controller_unittest.py: Added.
        (ArchiveControllerUnittest):
        * resultsdbpy/resultsdbpy/model/configuration_context.py:
        (ClusteredByConfiguration.register_configuration): Make error message more clear.

2019-08-30  Simon Fraser  <simon.fraser@apple.com>

        Add system tracing points for compositing updates, and touch-event dispatching
        https://bugs.webkit.org/show_bug.cgi?id=201327

        Reviewed by Alex Christensen.

        * Tracing/SystemTracePoints.plist:

2019-08-30  Keith Rollin  <krollin@apple.com>

        Simplify PLATFORM expression
        https://bugs.webkit.org/show_bug.cgi?id=201286
        <rdar://problem/54822347>

        Reviewed by Alexey Proskuryakov.

        The preprocessor expression conditionalizing the inclusion of the body
        of ExitFullscreenOnEnterPiP.mm evolved into:

            #if PLATFORM(MAC) || (PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR))

        Simplify this to just:

            #if !PLATFORM(IOS_FAMILY_SIMULATOR)

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:

2019-08-30  Keith Rollin  <krollin@apple.com>

        Remove AppKitCompatibilityDeclarations.h
        https://bugs.webkit.org/show_bug.cgi?id=201283
        <rdar://problem/54822042>

        Reviewed by Alexey Proskuryakov.

        The two copies of these files -- on in WTF, one in MiniBrowser -- are
        empty and can be removed.

        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/TextInputControllerMac.m:
        * MiniBrowser/AppKitCompatibilityDeclarations.h: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/SettingsController.m:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuImgWithVideo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenLayoutConstraints.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenTopContentInset.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserInitiatedActionInNavigationAction.mm:
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:
        * TestWebKitAPI/Tests/mac/ContextMenuDefaultItemsHaveTags.mm:
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.mm:
        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

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

        [WPE][GTK] New API to remove a filter from an user content manager given its identifier
        https://bugs.webkit.org/show_bug.cgi?id=200479

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testUserContentManagerContentFilter): Test also the new
        webkit_user_content_manager_remove_filter_by_id() public API function.

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

        [WPE][Qt] loadingChanged signal parameter is unusable
        https://bugs.webkit.org/show_bug.cgi?id=201301

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/wpe/qt/main.qml: Add a basic loadingChange signal handler.
        * Scripts/webkitpy/style/checker.py: White-list WPEQtView.h for
        readablity/parameter_name code styl checker rule.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/DebugRelease.xcconfig:

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove empty FontCache.cpp file in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=201277
        <rdar://problem/54820726>

        Reviewed by Alex Christensen.

        Bug 200694 emptied out the contents of FontCache.cpp. This patch
        removes the file from the project.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FontCache.cpp: Removed.

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

        [ews-app] Status bubble should only display important messages in pop-over
        https://bugs.webkit.org/show_bug.cgi?id=201308

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added various build-steps which are of low interest
        to end-users in STEPS_TO_HIDE. If any of these steps fail, it will not be hidden.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 3)
        https://bugs.webkit.org/show_bug.cgi?id=201224
        <rdar://problem/54795934>

        Reviewed by Darin Adler.

        Remove symbols in WebKitTargetConditionals.xcconfig related to macOS
        10.13, including WK_MACOS_1013 and WK_MACOS_BEFORE_1013, and suffixes
        like _MACOS_SINCE_1013.

        Also added some macOS target numbers.

        * TestWebKitAPI/Configurations/WebKitTargetConditionals.xcconfig:

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

        results.webkit.org: Remove border from tooltip
        https://bugs.webkit.org/show_bug.cgi?id=201239

        Reviewed by Alex Christensen.

        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css:
        (.tooltip-content): Remove border.

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

        [Win] MiniBrowser crashes in WKURLCopyString if WKPageCopyActiveURL returns null
        https://bugs.webkit.org/show_bug.cgi?id=201215

        Reviewed by Don Olmstead.

        MiniBrowser crashed if it was going to go to a unreachable page
        because WKPageCopyActiveURL returned a nullptr.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString): Added null checking of the argument.

2019-08-28  Tim Horton  <timothy_horton@apple.com>

        Reloading a web view with a fixed-width viewport and variable content width restores the previous page scale, shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=201256
        <rdar://problem/54809509>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/long-email-viewport.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ReloadWithDifferingInitialScale.mm: Added.
        (TestWebKitAPI::TEST):
        Add a test. I left many comments because I had a great deal of trouble
        writing this test and wanted to document my findings.

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

        results.webkit.org: Do not display branch selector if only one branches available
        https://bugs.webkit.org/show_bug.cgi?id=201244

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Hide the branch selector's
        container if there aren't multiple branches to choose from.

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

        WKAttachmentTests.DropFolderAsAttachmentAndMoveByDragging fails in some iOS simulator configurations
        https://bugs.webkit.org/show_bug.cgi?id=201241
        <rdar://problem/54317588>

        Reviewed by Tim Horton.

        For reasons that are still unknown, it's possible for iOS 13 simulators to get into a state where the IPC
        communication delay between the web and UI processes can become extraordinarily long. Under these circumstances,
        the drag and drop harness fails to simulate a drop, since it ends up firing all scheduled calls to
        -dropInteraction:sessionDidUpdate: before the first response from the web process arrives in the UI process, so
        it believes that the web view has rejected the drop from being handled.

        Instead, make the drag and drop simulator robust by ensuring a presentation update between drop session updates,
        to make sure that the web process has had time to send a response after each update.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _advanceProgress]):

2019-08-28  Megan Gardner  <megan_gardner@apple.com>

        Null check webFrame when creating a print preview to prevent a crash.
        https://bugs.webkit.org/show_bug.cgi?id=201237
        <rdar://problem/51618863>

        Reviewed by Tim Horton.

        Test to verify that if we don't have the WebPageProxy, we will not crash when making a print preview.

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

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

        results.webkit.org: Move drawer to the right, open by default
        https://bugs.webkit.org/show_bug.cgi?id=200977

        Rubber-stamped by Aakash Jain.

        The drawer was both unpopular and not discoverable. After feedback from bot watchers,
        moving the drawer to the right side of the screen, opening it by default and have it displace
        instead of hide the main content.

        * resultsdbpy/resultsdbpy/view/commit_view_unittest.py:
        (CommitViewUnittest.test_drawer): Support new drawer style.
        (CommitViewUnittest.test_range_slider): Ditto.
        (CommitViewUnittest.test_one_line_switch): Ditto.
        (CommitViewUnittest.test_branch_selection): Ditto.
        * resultsdbpy/resultsdbpy/view/static/css/drawer.css: Removed.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (setEnableRecursive): Disable all elements underneath this one 
        (Drawer): Make drawer a sidebar.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.header>.title, .topbar>.title): Overflow of titles should be hidden.
        (:root): Move boldInverseColor into webkit.css.
        (@media (prefers-color-scheme: dark)):
        (.sidebar): Sidebars on mobile should behave like drawers.
        (.sidebar.hidden): Add concept of hidden sidebar.
        (.mobile-sidebar-control): Add a control to collapse sidebar that only exists on mobile.
        (.mobile-sidebar-control.display):
        (.main.under-topbar-with-actions):
        (@media screen and (min-width: 600px) and (orientation: landscape)):
        (.sidebar.left.hidden):
        (.sidebar.right.hidden):
        (.main.right.hidden):
        (.main.left.hidden):
        (@media screen and (min-width: 768px) and (orientation: landscape)):
        (.sidebar.right):
        (a.disabled): Add ability to disable a link.
        (.desktop-control): Add a control which only exists on desktop.
        * resultsdbpy/resultsdbpy/view/templates/base.html: Add hamburger drawer-button for mobile.
        * resultsdbpy/resultsdbpy/view/templates/commits.html: Use main since Drawer is now a sidebar.
        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Ditto.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Ditto.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.
        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
        (WebSiteTestCase.toggle_drawer): Support new drawer style.
        (WebSiteTestCase.find_input_with_name): Ditto.

2019-08-28  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=201197
        <rdar://problem/54759985>

        Reviewed by Darin Adler.

        Update conditionals that reference WK_MACOS_1013 and suffixes like
        _MACOS_SINCE_1013, assuming that we're always building on 10.13 or
        later and that these conditionals are always True or False.

        See Bug 200694 for earlier changes in this area.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-08-28  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] WebKitMediaSrc rework
        https://bugs.webkit.org/show_bug.cgi?id=199719

        Reviewed by Xabier Rodriguez-Calvar.

        Added WebKitMediaSourceGStreamer.cpp to the GStreamer-style coding
        whitelist.

        * Scripts/webkitpy/style/checker.py:

2019-08-28  Alexey Proskuryakov  <ap@apple.com>

        Updating inactive contributors in contributors.json.

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

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

        results.webkit.org: Auto-expand single configurations
        https://bugs.webkit.org/show_bug.cgi?id=201218

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint.toString): Automatically expand timeline when only one
        configuration has been specified.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (prototype.ExpandableSeriesComponent): Add options so that the caller can set whether a timeline
        is expanded or collapsed by default.

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

        results.webkit.org: Sanitize all commit arguments on upload
        https://bugs.webkit.org/show_bug.cgi?id=201189
        <rdar://problem/54564837>

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/commit.py:
        (Commit.__init__): Only allow commits to be constructed with valid values.
        * resultsdbpy/resultsdbpy/controller/commit_controller.py:
        (CommitController.register): Strip potential API key.
        * resultsdbpy/resultsdbpy/controller/commit_unittest.py:
        (CommitUnittest.test_invalid): Test that commits which contain html inside the
        repository_id, branch or commit id are rejected.

2019-08-02  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Implement HSTS for the soup network backend
        https://bugs.webkit.org/show_bug.cgi?id=192074

        Reviewed by Carlos Garcia Campos.

        libsoup 2.67.1 introduced HSTS support via a SoupSessionFeature.
        Add support to the soup network backend by adding the feature to
        SoupNetworkSession and handling HSTS protocol upgrades, by
        propagating the scheme change further to clients. This patch adds
        the HSTS feature unconditionally, but it still possible to add
        a boolean property to the web context class if desired.

        Additionally, add API to the WebKitWebsiteDataManager to specify
        the directory where the HSTS database is saved. If the directory
        is not set or if the data manager is ephemeral, use a
        non-persistent, memory only HSTS enforcer.

        Implement as well the methods needed to clean-up and delete HSTS
        policies from the storage and expose the feature in GTK+
        MiniBrowser's about:data.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (prepopulateHstsData):
        (testWebsiteDataHsts):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        * gtk/jhbuild.modules: Bump libsoup to 2.67.91 for the new APIs
        * wpe/jhbuild.modules: Ditto
        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):

2019-08-27  James Darpinian  <jdarpinian@google.com>

        Fix applying diffs that only change file mode
        https://bugs.webkit.org/show_bug.cgi?id=201191

        Reviewed by Daniel Bates.

        * Scripts/svn-apply:
        (patch): Handle case of file mode change without content change

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

        [ews] Status bubble should be red for CANCELLED builds
        https://bugs.webkit.org/show_bug.cgi?id=201204

        Reviewed by Jonathan Bedard.

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

2019-08-27  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Webkit.css] Center the legend symbols
        https://bugs.webkit.org/show_bug.cgi?id=201187

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.lengend>.item .dot .text): center the dot symbol vertically

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

        run-webkit-tests: Use -noBulkSymbolication when calling spindump (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=201000
        <rdar://problem/53778938>

        Unreviewed follow-up fix.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Run spindump without -noBulkSymbolication if previous
        spindump call failed.
        * Scripts/webkitpy/port/darwin_testcase.py:
        * Scripts/webkitpy/port/ios_device_unittest.py:

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

        [ews-build] Use update-webkit script in Apply-WatchList EWS
        https://bugs.webkit.org/show_bug.cgi?id=201179

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (WatchListFactory): Updated to use CheckOutSource step as well.

2019-08-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        W3C test importer should be able to handle expected references with an absolute path.
        https://bugs.webkit.org/show_bug.cgi?id=200717

        Reviewed by Youenn Fablet.

        This patch implements the logic to resolve test references with absolute paths
        when importing w3c tests (like web-platform-tests).
        When an absolute path is found for a test reference, the parser now
        tries to find the right file by looking for a relative path inside
        the root directory of the source test repository.
        It works when the tool is run in download-mode as well as when the
        tool is run to import the tests from a local directory.

        This fixes the import of test references for tests like
        web-platform-tests/css/css-images/multiple-position-color-stop-linear-2.html

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter._source_root_directory_for_path):
        (TestImporter.find_importable_tests):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.import_directory):
        (test_webkit_test_runner_options):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_download):
        (test_webkit_test_runner_import_reftests_with_absolute_paths_from_source_dir):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.__init__):
        (TestParser.analyze_test):

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

        Remove UIHelper.activateElementAtHumanSpeed
        https://bugs.webkit.org/show_bug.cgi?id=201147

        Reviewed by Tim Horton.

        Add plumbing for a new script controller hook to wait for the double tap delay to pass. On non-iOS, this
        resolves immediately; on iOS, we inspect the content view for tap gestures that require more than one tap, and
        find the value of the maximum double tap delay. We then delay for this amount of time before resolving.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::doAfterDoubleTapDelay):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::doAfterDoubleTapDelay):

2019-08-26  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timline] Add symbols to the timeline dot
        https://bugs.webkit.org/show_bug.cgi?id=201105

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Modify the drawDot api to provide user ability to add symbol to the dots, it supports unicode symbol
        * resultsdbpy/resultsdbpy/view/templates/base.html: Add the encoding UTF-8 for the page, so that we can add unicode symbol to the dots

2019-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, remove useMaximalFlushInsertionPhase use
        https://bugs.webkit.org/show_bug.cgi?id=201036

        * Scripts/run-jsc-stress-tests:

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

        Don't compute upconverted characters twice in buildQuery() in DataDetection.mm
        <https://webkit.org/b/201144>
        <rdar://problem/54689399>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
        DataDetectorsTestIOS.mm to the project.
        * TestWebKitAPI/Tests/ios/DataDetectorsTestIOS.mm: Add a new
        test for Data Detectors for phone numbers.

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

        REGRESSION (iOS 13): Tests that simulate multiple back-to-back single taps fail or time out
        https://bugs.webkit.org/show_bug.cgi?id=201129
        <rdar://problem/51857277>

        Reviewed by Tim Horton.

        The tests in editing/pasteboard/ios were timing out on iOS 13 before this change. This is because they simulate
        back-to-back single taps; while this is recognized as two single taps on iOS 12 and prior, only the first single
        tap is recognized on iOS 13 (and the second is simply dropped on the floor). This occurs because the synthetic
        single tap gesture is reset slightly later on iOS 13 compared to iOS 12, so when the second tap is dispatched,
        the gesture recognizer is still in "ended" state after the first tap on iOS 13, which means the gesture isn't
        capable of recognizing further touches yet.

        In UIKit, a gesture recognizer is only reset once its UIGestureEnvironment's containing dependency subgraph no
        longer contains gestures that are active. In iOS 12, the synthetic click gesture is a part of a dependency
        subgraph that contains only itself and the normal (blocking) double tap gesture which requires the click to fail
        before it can be recognized; immediately after simulating the tap, both these gestures are inactive, which
        allows both of them to be reset.

        However, in iOS 13, the synthetic click gesture is part of a gesture dependency graph that contains the double
        tap for double click gesture, as well as the non-blocking double tap gesture, both of which are still active
        immediately after sending the first tap. This change in dependencies is caused by the introduction of
        UIUndoGestureInteraction's single and double three-finger tap gestures, which (in -[UIUndoGestureInteraction
        gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:]) explicitly add all other taps as failure
        requirements. This effectively links the synthetic single tap gesture to most of the other gestures in
        WKContentView's dependency graph by way of these tap gestures for the undo interaction.

        All this means that there is now a short (~50 ms) delay after the synthetic single tap gestures is recognized,
        before it can be recognized again. To account for this new delay in our test infrastructure, simply wait for
        single tap gestures that have ended to reset before attempting to send subsequent single taps. We do this by
        introducing WebKit testing SPI to invoke a completion handler after resetting the synthetic click gesture (only
        if necessary - i.e., if the gesture is in ended state when we are about to begin simulating the tap). This
        allows calls to `UIScriptController::singleTapAtPoint` to be reliably recognized as single taps without
        requiring arbitrary 120 ms "human speed" delays.

        This fixes a number of flaky or failing layout tests, including the tests in editing/pasteboard/ios.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::doubleTapAtPoint):

        Add a `delay` parameter to `doubleTapAtPoint`. A number of layout tests were actually simulating double click
        gestures by simulating two back-to-back single taps; this is done for the purposes of being able to add a "human
        speed" delay prior to the second single tap gesture. After the change to wait for the single tap gesture to
        reset before attempting to simulate the next tap, this strategy no longer works, since the second gesture is
        recognized only as a single tap instead of a double tap.

        Instead, we add a delay parameter to `UIScriptController::doubleTapAtPoint`, which the "human speed" double tap
        gestures use instead to wait after simulating the first tap.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _waitFor:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:delay:completionBlock:]):

        Plumb the tap gesture delay through to this helper method.

        (-[HIDEventGenerator tap:completionBlock:]):
        (-[HIDEventGenerator doubleTap:delay:completionBlock:]):
        (-[HIDEventGenerator twoFingerTap:completionBlock:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]): Deleted.
        (-[HIDEventGenerator doubleTap:completionBlock:]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::waitForSingleTapToReset const):

        Add a new helper to wait for the content view's single tap gesture to reset if needed; call this before
        attempting to simulate single taps (either using a stylus, or with a regular touch).

        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::doubleTapAtPoint):
        (WTR::UIScriptControllerIOS::stylusTapAtPointWithModifiers):

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

        results.webkit.org: Allow clicking on the tooltip arrow
        https://bugs.webkit.org/show_bug.cgi?id=201103

        Rubber-stamped by Aakash Jain.

        By design, the arrow sits above the canvas and intercepts mouse events from it.
        This will often make an element that has a tooltip unclickable.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale):
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory):
        (TimelineFromEndpoint.prototype.render):
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (_ToolTip):
        (_ToolTip.prototype.toString): Trigger onClick callback when the arrow is clicked.
        (_ToolTip.prototype.set): Set the onClick callback.

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

        [EWS] Do not append additional '(failure)' string at the end of custom failure message in EWS Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=201140

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (TestWithFailureCount.getResultSummary): Do not append (failure) when in case of custom status.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

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

        run-webkit-tests: Cap the number of automatically booted simulators at 12
        https://bugs.webkit.org/show_bug.cgi?id=201139

        Reviewed by Aakash Jain.

        To make local development with simulators more pleasant, machines should
        never automatically boot more than 12 simulators.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.max_supported_simulators):

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

        [ews] Add EWS queue for applying watchlist
        https://bugs.webkit.org/show_bug.cgi?id=201072

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyWatchList): Build step to apply watchlist.
        (ApplyWatchList.__init__): Set logEnviron to False.
        (ApplyWatchList.getResultSummary): Updated the description in case of failure.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-build/factories.py:
        (WatchListFactory): Build factory for WatchList.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/config.json:

2019-08-26  Youenn Fablet  <youenn@apple.com>

        Add a WebsiteDataStore delegate to handle AuthenticationChallenge that do not come from pages
        https://bugs.webkit.org/show_bug.cgi?id=196870

        Reviewed by Alex Christensen.

        Implement the new delegate by respecting the value set by testRunner.setAllowsAnySSLCertificate
        Accept any server certificate by default.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowsAnySSLCertificate):
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h:
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestWebsiteDataStoreDelegate setAllowAnySSLCertificate:]):

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

        Increase log level for watchlist result
        https://bugs.webkit.org/show_bug.cgi?id=201081

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/tool/steps/applywatchlist.py: Increased log level.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Updated unit-tests.
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Ditto.

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

        [geolocation] Rename interfaces and remove [NoInterfaceObject]
        https://bugs.webkit.org/show_bug.cgi?id=200885

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):

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

        Unreviewed, rolling out r249001.

        Caused one layout test to fail on all configurations and
        another to time out on Catalina / iOS 13.

        Reverted changeset:

        "Add a WebsiteDataStore delegate to handle
        AuthenticationChallenge that do not come from pages"
        https://bugs.webkit.org/show_bug.cgi?id=196870
        https://trac.webkit.org/changeset/249001

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

        results.webkit.org: Escape html in changelog
        https://bugs.webkit.org/show_bug.cgi?id=201025
        <rdar://problem/54564837>

        Reviewed by Darin Adler.

        * resultsdbpy/resultsdbpy/view/commit_view.py:
        (CommitView.commit): Output a dictionary instead of a JSON encoded string.
        * resultsdbpy/resultsdbpy/view/templates/commit.html: Unpack commits dictionary
        directly into a JavaScript dictionary.

2019-08-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support NFC authenticators for iOS
        https://bugs.webkit.org/show_bug.cgi?id=188624
        <rdar://problem/43354214>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        Setup NFC mock testing configuration.

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

        [ews] Enable Style queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=201071

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the scheduler for Style queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled style queue bubble on new EWS.
        * QueueStatusServer/config/queues.py: Removed style queue from old EWS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Removed style queue from bot-watcher's dashboard.

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

        [Win][MiniBrowser] URL bar should be updated for in-page navigations
        https://bugs.webkit.org/show_bug.cgi?id=201032

        Reviewed by Darin Adler.

        * MiniBrowser/win/BrowserWindow.h: Added activeURLChanged to BrowserWindowClient interface.
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::activeURLChanged): Added.
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didCommitLoadForFrame):
        (MiniBrowserWebHost::didChangeLocationWithinPageForFrame): Added.
        (MiniBrowserWebHost::updateAddressBar): Deleted.
        (MiniBrowserWebHost::loadURL): Deleted.
        * MiniBrowser/win/MiniBrowserWebHost.h:
        (MiniBrowserWebHost::MiniBrowserWebHost):
        (MiniBrowserWebHost::didCommitLoadForFrame): Deleted.
        (MiniBrowserWebHost::didChangeLocationWithinPageForFrame): Deleted.
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didChangeIsLoading): Removed an unused variable.
        (WebKitBrowserWindow::didChangeActiveURL): Added.
        (WebKitBrowserWindow::createNewPage):
        (WebKitBrowserWindow::didCommitNavigation): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h: Removed m_urlBarWnd.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::create):
        (WebKitLegacyBrowserWindow::WebKitLegacyBrowserWindow):
        (WebKitLegacyBrowserWindow::init):
        (WebKitLegacyBrowserWindow::navigateToHistory):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h: Removed m_urlBarWnd.

2019-08-22  Andy Estes  <aestes@apple.com>

        [watchOS] Disable Content Filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=201047

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Try to recover nicely when getting an unexpected schema in the service workers database
        https://bugs.webkit.org/show_bug.cgi?id=201002
        <rdar://problem/54574991>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        Remove support for tvOS < 13.0
        https://bugs.webkit.org/show_bug.cgi?id=200963
        <rdar://problem/54541355>

        Reviewed by Tim Horton.

        Update conditionals that reference __TV_OS_VERSION_MIN_REQUIRED and
        __TV_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        130000. This means that expressions like "__TV_OS_VERSION_MIN_REQUIRED
        < 130000" are always False and "__TV_OS_VERSION_MIN_REQUIRED >=
        130000" are always True.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2019-08-22  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] OptionSet summary shows size 0 sometimes for non-empty set
        https://bugs.webkit.org/show_bug.cgi?id=200742

        Reviewed by Simon Fraser.

        The OptionSet synthetic provider must respond to requests for the value of m_storage
        (i.e. GetChildMemberWithName('m_storage')) to avoid interfering with the computation
        of the type summary.

        Synthetic providers substitute alternative debug information (children) for the default
        information for a variable. The OptionSet type summary is implemented in terms of the
        OptionSet synthetic provider to maximize code reuse. If LLDB instantiates the provider
        before invoking the type summary handler then evaluating GetChildMemberWithName() on
        the SBValue passed to the type summary handler will access the substitute information
        instead of the original debug information. As a result OptionSet's synthetic provider's
        get_child_index('m_storage') returns None hence SBValue.GetChildMemberWithName('m_storage')
        returned an invalid value; => WTFOptionSetProvider._bitmask() returns 0; => the size
        reported in the type summary for the OptionSet is 0. Instead get_child_index('m_storage')
        should return a valid value.

        * lldb/lldb_webkit.py:
        (FlagEnumerationProvider.__init__):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._get_child_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider._get_child_at_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider.size): Added.
        (FlagEnumerationProvider.get_child_index): Modified to call _get_child_index().
        (FlagEnumerationProvider.get_child_at_index): Modified to call _get_child_at_index().
        (FlagEnumerationProvider.update): Moved initialization of self._elements to the constructor
        and removed self.size. For the latter we can just expose a getter that returns the size of
        the list self._elements.
        (WTFOptionSetProvider._get_child_index): Added. Return the index for LLDB to query for the
        value of m_storage.
        (WTFOptionSetProvider):
        (WTFOptionSetProvider._get_child_at_index): Added. Return the value for m_storage if it
        matches the specified index.
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_empty): Update expected result now
        that we return the value of m_storage as the last synthetic child.

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

        results.webkit.org: Remove branch and repository information from commit tooltip
        https://bugs.webkit.org/show_bug.cgi?id=201035

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Remove branch and repository information from tooltip.

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

        run-webkit-tests: Use -noBulkSymbolication when calling spindump
        https://bugs.webkit.org/show_bug.cgi?id=201000
        <rdar://problem/53778938>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Attempt to symbolicate with -noBulkSymbolication first.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_tailspin):
        (DarwinTest.test_get_crash_log): Deleted.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_tailspin):

2019-08-22  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Webkit.css] Change input's disable style
        The disable input style will always show the label like it has a value 
        https://bugs.webkit.org/show_bug.cgi?id=200998

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml: Adding a new example for disabled input that already has a value
        *resultsdbpy/resultsdbpy/view/static/library/css/generate-webkit-css-docs:
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.input>input[type="text"][required][disabled],.input>input[type="number"][required][disabled],):When disabling a text input element even without a value, the style should match the style of a text input element with a value
        (.input>input[type="text"][required][disabled]~label, .input>input[type="number"][required][disabled]~label,):
        (@media (prefers-color-scheme: dark)):

2019-08-17  Darin Adler  <darin@apple.com>

        Use makeString and multi-argument StringBuilder::append instead of less efficient multiple appends
        https://bugs.webkit.org/show_bug.cgi?id=200862

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers): Ditto.
        (WTR::TestController::downloadDidReceiveServerRedirectToURL): Ditto.
        (WTR::TestController::downloadDidFail): Ditto.

2019-08-22  clopez@igalia.com  <clopez@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>

        [GTK][WPE] Support for command "--version" on the MiniBrowser (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=200978

        Unreviewed follow-up fix.

        Update the string format specifier for unsigned it.

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

2019-08-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Support for command "--version" on the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=200978

        Reviewed by Žan Doberšek.

        Printing the engine version used from the MiniBrowser is useful.
        For example, the test scripts on WPT can use this info to better
        tag the generated results.

        * MiniBrowser/gtk/main.c: Print the engine version when called with --version or -v.
        (main):
        * MiniBrowser/wpe/main.cpp: Ditto.
        (main):

2019-08-22  Youenn Fablet  <youenn@apple.com>

        Add a WebsiteDataStore delegate to handle AuthenticationChallenge that do not come from pages
        https://bugs.webkit.org/show_bug.cgi?id=196870

        Reviewed by Alex Christensen.

        Implement the new delegate by respecting the value set by testRunner.setAllowsAnySSLCertificate
        Accept any server certificate by default.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowsAnySSLCertificate):
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.h:
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TestWebsiteDataStoreDelegate setAllowAnySSLCertificate:]):

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

        results.webkit.org: Fix drawer style
        https://bugs.webkit.org/show_bug.cgi?id=200988

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        (Drawer): Nothing in the drawer should be selectable.
        (ConfigurationSelectors): Standardize text size, remove underscore from expanders.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.action:hover): Disable underline on 'links' which are actually actions
        (.unselectable): Make a div unselectable.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.ExpandableSeriesWithHeaderExpanderComponent): Remove underscore from expanders.

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

        [Win][MiniBrowser] Add a progress indicator to the main window
        https://bugs.webkit.org/show_bug.cgi?id=200970

        Reviewed by Alex Christensen.

        * MiniBrowser/win/BrowserWindow.h: Added BrowserWindowClient class.
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::resizeSubViews):
        (MainWindow::progressChanged):
        (MainWindow::progressFinished):
        * MiniBrowser/win/MainWindow.h: Inherited BrowserWindowClient.
        Added m_hProgressIndicator.
        (MainWindow::hwnd const): Deleted.
        (MainWindow::browserWindow const): Deleted.
        (): Deleted.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::onNotify):
        * MiniBrowser/win/MiniBrowserWebHost.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didChangeIsLoading):
        (WebKitBrowserWindow::didChangeEstimatedProgress):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::create):
        (WebKitLegacyBrowserWindow::WebKitLegacyBrowserWindow):
        (WebKitLegacyBrowserWindow::init):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

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

        Unreviewed, rolling out r248970.

        Caused
        lldb_webkit_unittest.TestSummaryProviders.serial_test_WTFOptionSetProvider_empty
        to fail.

        Reverted changeset:

        "[lldb-webkit] OptionSet summary shows size 0 sometimes for
        non-empty set"
        https://bugs.webkit.org/show_bug.cgi?id=200742
        https://trac.webkit.org/changeset/248970

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

        results.webkit.org: Add database table to save zip archives to
        https://bugs.webkit.org/show_bug.cgi?id=200718

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/archive_context.py: Added.
        (ArchiveContext):
        (ArchiveContext.ArchivesByCommit): Store archives to be retrieved by commit and configuration.
        (ArchiveContext.ArchivesByCommit.unpack):
        (ArchiveContext.assert_zipfile):
        (ArchiveContext.open_zipfile):
        (ArchiveContext.__init__):
        (ArchiveContext.__enter__):
        (ArchiveContext.__exit__):
        (ArchiveContext.register): Save the provided archive to Cassandra.
        (ArchiveContext.find_archive): Find all archives matching the specified criteria.
        (ArchiveContext._files_for_archive):
        (ArchiveContext.ls): List all files in the matching archives.
        (ArchiveContext.file): Extract a file from the matching archives.
        * resultsdbpy/resultsdbpy/model/archive_context_unittest.py: Added.
        (ArchiveContextTest):
        * resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory):
        (MockModelFactory.process_results):
        (MockModelFactory.add_mock_archives):
        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__): Add an ArchiveContext to the model.

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

        [ews-build] view layout test results option should be displayed next to layout-test build step
        https://bugs.webkit.org/show_bug.cgi?id=200048

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ExtractTestResults.getLastBuildStepByName): Method to return the last build-step matching the step name.
        (ExtractTestResults.addCustomURLs): Add urls to corresponding layout-test step.

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

        [ews] Fix capitalization in Found x new Test failure message
        https://bugs.webkit.org/show_bug.cgi?id=201004

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeAPITestsResults.analyzeResults):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

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

        Assign ews117 to EWS High-Sierra Debug queues
        https://bugs.webkit.org/show_bug.cgi?id=200993

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

2019-08-21  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] OptionSet summary shows size 0 sometimes for non-empty set
        https://bugs.webkit.org/show_bug.cgi?id=200742

        Reviewed by Simon Fraser.

        The OptionSet synthetic provider must respond to requests for the value of m_storage
        (i.e. GetChildMemberWithName('m_storage')) to avoid interfering with the computation
        of the type summary.

        Synthetic providers substitute alternative debug information (children) for the default
        information for a variable. The OptionSet type summary is implemented in terms of the
        OptionSet synthetic provider to maximize code reuse. If LLDB instantiates the provider
        before invoking the type summary handler then evaluating GetChildMemberWithName() on
        the SBValue passed to the type summary handler will access the substitute information
        instead of the original debug information. As a result OptionSet's synthetic provider's
        get_child_index('m_storage') returns None hence SBValue.GetChildMemberWithName('m_storage')
        returned an invalid value; => WTFOptionSetProvider._bitmask() returns 0; => the size
        reported in the type summary for the OptionSet is 0. Instead get_child_index('m_storage')
        should return a valid value.

        * lldb/lldb_webkit.py:
        (FlagEnumerationProvider.__init__):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._get_child_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider._get_child_at_index): Added. WTFOptionSetProvider will override.
        (FlagEnumerationProvider.size): Added.
        (FlagEnumerationProvider.get_child_index): Modified to call _get_child_index().
        (FlagEnumerationProvider.get_child_at_index): Modified to call _get_child_at_index().
        (FlagEnumerationProvider.update): Moved initialization of self._elements to the constructor
        and removed self.size. For the latter we can just expose a getter that returns the size of
        the list self._elements.
        (WTFOptionSetProvider._get_child_index): Added. Return the index for LLDB to query for the
        value of m_storage.
        (WTFOptionSetProvider):
        (WTFOptionSetProvider._get_child_at_index): Added. Return the value for m_storage if it
        matches the specified index.

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

        Disabling text autosizing should prevent text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=200955
        <rdar://problem/48095374>

        Reviewed by Simon Fraser.

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

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

        [GTK][WPE] Make debug-test-runner work
        https://bugs.webkit.org/show_bug.cgi?id=193576

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (wrapperPrefixIfNeeded): Only add the wrapper prefix when not running inside a Flatpak sandbox.
        (setupUnixWebKitEnvironment): Added, sets TEST_RUNNER_INJECTED_BUNDLE_FILENAME and
        TEST_RUNNER_TEST_PLUGIN_PATH in the environment.
        (execUnixAppForDebugging): Added.
        (debugWebKitTestRunner): Alternatively, use execUnixAppForDebugging() for the WPE and GTK+ ports.

2019-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Put keygen element behind a runtime flag and disable it by default
        https://bugs.webkit.org/show_bug.cgi?id=200850

        Reviewed by Antti Koivisto.

        Added the support for enableKeygenElement test runner option, which enables keygen element in layout tests.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

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

        Add internal setting to disable SecureContext checks
        https://bugs.webkit.org/show_bug.cgi?id=200980
        <rdar://problem/54438512>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (log):
        (requestPermission):

2019-08-21  Keith Rollin  <krollin@apple.com>

        Remove support for watchOS < 6.0
        https://bugs.webkit.org/show_bug.cgi?id=200937
        <rdar://problem/54524009>

        Reviewed by Darin Adler.

        Update conditionals that reference __WATCH_OS_VERSION_MIN_REQUIRED and
        __WATCH_OS_VERSION_MAX_ALLOWED, assuming that they both have values >=
        60000. This means that expressions like
        "__WATCH_OS_VERSION_MIN_REQUIRED < 60000" are always False and
        "__WATCH_OS_VERSION_MIN_REQUIRED >= 60000" are always True.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2019-08-20  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Webkit.css] Add right sidebar
        https://bugs.webkit.org/show_bug.cgi?id=200946

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (@media screen and (min-width: 600px) and (orientation: landscape)):
        (.main.left):
        (@media screen and (min-width: 768px) and (orientation: landscape)):
        (.sidebar.right):

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

        results.webkit.org: Add ToolTips
        https://bugs.webkit.org/show_bug.cgi?id=200801

        Rubber-stamped by Aakash Jain.

        When dots or scale labels are hovered over, we should display a tool tip with additional information about
        The specific element.

        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css: Added.
        (.tooltip): Add class for ToolTip text box.
        (.tooltip-arrow-up): Add class for ToolTip arrow pointing up.
        (.tooltip-arrow-down): Add class for ToolTip arrow pointing down.
        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (_CommitBank.prototype.commitsDuringUuid): Return a list of commits which were the trunk of their respective
        repositories at a given time.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Add callbacks triggered when the mouse enters or leaves elements in the scale canvas.
        (TimelineFromEndpoint.render): Add callbacks triggered when the mouse enters or leaves dot elements.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js: Added.
        (isPointInElement): Given an element and a point, return true if that point is within the bounds of the element.
        (_ToolTip):
        (_ToolTip.prototype.set): Set the content and location of the ToolTip.
        (_ToolTip.prototype.toString): Return the html needed to render the ToolTip.
        (_ToolTip.prototype.unset): Clear and hide the ToolTip.
        (_ToolTip.prototype.isIn): Check if a given point is contained within the ToolTip.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Convert onHover events to onEnter/onLeave events. Add toolTips points to both
        dot and scale elements.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Add ToolTip.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

2019-08-20  Justin Michaud  <justin_michaud@apple.com>

        Fix InBounds speculation of typed array PutByVal and add extra step to integer range optimization to search for equality relationships on the RHS value
        https://bugs.webkit.org/show_bug.cgi?id=200782

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2019-08-20  Darin Adler  <darin@apple.com>

        Variadic StringBuilder::append does not handle upconverting from 8-bit to 16-bit correctly
        https://bugs.webkit.org/show_bug.cgi?id=200921

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Changed tests to use EXPECT macros instead of ASSERT macros since we don't
        need to abort after the first failure. Added three new tests to the VariadicAppend
        test to cover various cases of upconverting from 8-bit to 16-bit strings.

2019-08-20  Dean Jackson  <dino@apple.com>

        REGRESSION: Open in New Tab is missing from context menu
        https://bugs.webkit.org/show_bug.cgi?id=200909
        <rdar://problem/54476169>

        Reviewed by Simon Fraser.

        Add a new test that runs through the legacy context menu
        flow, and verifies that it will be called if there aren't
        appropriate delegates for the new API.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (contextMenuWebViewDriver):
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (TEST):
        (-[LegacyPreviewViewController previewActionItems]):
        (-[LegacyContextMenuUIDelegate webView:shouldPreviewElement:]):
        (-[LegacyContextMenuUIDelegate webView:previewingViewControllerForElement:defaultActions:]):
        (-[LegacyContextMenuUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[LegacyContextMenuUIDelegate _webView:contextMenuDidEndForElement:]):
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h:

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] OSR entry to Wasm OMG
        https://bugs.webkit.org/show_bug.cgi?id=200362

        Reviewed by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2019-08-19  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Disable back gesture
        https://bugs.webkit.org/show_bug.cgi?id=200839

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/Utils.js:
        * resultsdbpy/resultsdbpy/view/templates/base.html:

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

        results-webkit.org: Add timeout to Redis locks
        https://bugs.webkit.org/show_bug.cgi?id=200890

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext._find_job_with_attempts): Add timeout to Redis lock.

2019-08-19  Sihui Liu  <sihui_liu@apple.com>

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545
        <rdar://problem/54201783>

        Reviewed by Youenn Fablet.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setIDBPerOriginQuotaCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Style checker should tell errors when it finds std::make_unique
        https://bugs.webkit.org/show_bug.cgi?id=200878

        Reviewed by Ross Kirsling.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_make_unique):
        (check_style):
        (CppChecker):

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

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWithoutFastMallocCheck part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestRunner.cpp:
        (addURLToRedirectCallback):
        (setWillSendRequestClearHeaderCallback):
        (TestRunner::setAccummulateLogsForChannel):
        (TestRunner::runUIScript):
        (TestRunner::setOpenPanelFiles):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText):
        * DumpRenderTree/mac/EventSendingController.mm:
        (eventPressedMouseButtonsSwizzlerForViewAndEvent):
        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::SetData):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::FrameLoadDelegate):
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoManager::DRTUndoManager):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::runJSTest):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testMovingUsingEnsure):
        (TestWebKitAPI::testMovingUsingAdd):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest):
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp:
        (TestWebKitAPI::CARingBufferTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::createNewPage):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::createNewPage):
        * TestWebKitAPI/Tests/WebKit/TextFieldDidBeginAndEndEditing.cpp:
        * TestWebKitAPI/Tests/WebKit/UserMessage.cpp:
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::SetUp):
        * TestWebKitAPI/Tests/WebKit/WillLoad.cpp:
        (TestWebKitAPI::WebKit2WillLoadTest::SetUp):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm:
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (serverCallback):
        (testWebViewAuthenticationProxyHTTPS):
        * TestWebKitAPI/Tests/WebKitGtk/DOMDOMWindowTest.cpp:
        (WebKitDOMDOMWindowTest::create):
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        (TestWebKitAPI::Util::toSTD):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (applyWorkaroundToAllowWritingAttributedStringsToItemProviders):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        * TestWebKitAPI/mac/TestFontOptions.mm:
        (-[TestFontOptions initWithFontOptions:]):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::callAfterScrollingCompletes):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFiles):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/StringFunctions.h:
        (WTR::toSTD):
        (WTR::toWTFString):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::createTestURL):
        (WTR::TestController::runTest):
        (WTR::TestController::platformCreateWebView):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::runUISideScript):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::setDefaultCalendarType):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::setKeyboardInputModeIdentifier):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wpeKeySymForKeyRef):

2019-08-17  Ross Kirsling  <ross.kirsling@sony.com>

        [ESNext] Implement optional chaining
        https://bugs.webkit.org/show_bug.cgi?id=200199

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

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

        Layout tests that call resizeTo() crash when run on iOS with IOSurface support enabled
        https://bugs.webkit.org/show_bug.cgi?id=200866
        <rdar://problem/50254021>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):
        Replace some logging with release assertions that we are snapshotting a reasonable
        view and get a reasonable snapshot back. Failing to snapshot is a big deal, and
        "silently" failing with just a log that will be ignored is not helpful.

2019-08-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] ThreadGroupRemove test is flaky
        https://bugs.webkit.org/show_bug.cgi?id=200763

        Reviewed by Mark Lam.

        ThreadGroup.ThreadGroupRemove test is flaky since its `threadRunning` modification and check in Thread are racy.
        It can lead to infinite wait on waitForCompletion. We should do more idiomatic to avoid race: When notifying condition
        variables, we should first take a lock, modify the condition shared and notify the condition change while taking a lock,
        and releasing the lock after that.

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

2019-08-17  Eric Liang  <ericliang@apple.com>

        Tested that accessibility WebProcessLoader bundle is loaded for the correct path.
        https://bugs.webkit.org/show_bug.cgi?id=200367

        Reviewed by Darin Adler.

        Added AccessibilityTestPlugin on the web process to report whether a bundle is loaded and its path, so that it can be tested on WKContentView. 

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AccessibilityTestPlugin.mm: Added.
        (-[AccessibilityTestPlugin webProcessPlugIn:didCreateBrowserContextController:]):
        (-[AccessibilityTestPlugin checkAccessibilityWebProcessLoaderBundleIsLoaded:]):
        * TestWebKitAPI/Tests/WebKitCocoa/AccessibilityTestSupportProtocol.h: Added.
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):

2019-08-17  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::flexibleAppend(...) to StringBuilder::append(...)
        https://bugs.webkit.org/show_bug.cgi?id=200756

        Reviewed by Darin Adler.

        Update call sites for rename from StringBuilder::flexibleAppend(...) to 
        StringBuilder::append(...).

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

2019-08-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Scroll indicators disappear sometimes
        https://bugs.webkit.org/show_bug.cgi?id=200791

        Reviewed by Tim Horton.

        Tests that test that scroll indicators survive subview replacement, and that
        a custom view also survives subview replacement.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/OverflowScrollViewTests.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView performAfterLoading:]):
        (-[UIView wkFirstSubviewWithClass:]):
        (-[UIView wkFirstSubviewWithBoundsSize:]):
        * TestWebKitAPI/ios/composited.html: Added.
        * TestWebKitAPI/ios/overflow-scroll.html: Added.

2019-08-16  John Wilander  <wilander@apple.com>

        Add John Wilander as WebKit Reviewer
        https://bugs.webkit.org/show_bug.cgi?id=200837

        Unreviewed update to contributors.json to change my status to reviewer.
        See email on reviewers mailing list for proof of granted privileges.

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

2019-08-16  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
        https://bugs.webkit.org/show_bug.cgi?id=200802
        rdar://problem/54357818

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added WKWebViewOpaque.mm.
        * TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Added.
        (-[OpaqueTestWKWebView isOpaque]): Added.
        (-[NonOpaqueTestWKWebView isOpaque]): Added.
        (isOpaque): Added.
        (TEST): Added WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
        WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
        WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.

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

        [ews] Add build steps for Windows Factory
        https://bugs.webkit.org/show_bug.cgi?id=200813

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (WindowsFactory.__init__):

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

        [ews] Report machine uptime in PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=200812

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Added uptime command.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-08-16  Chris Lord  <clord@igalia.com>

        Add shared-mime-info to WPE WebKit jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=200768

        Reviewed by Carlos Alberto Lopez Perez.

        * wpe/jhbuild.modules:

2019-08-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, WTF_MAKE_FAST_ALLOCATED annotation part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/DraggingInfo.h:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/HistoryDelegate.h:
        * DumpRenderTree/win/MD5.h:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/TextInputController.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.h:
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.h:
        * TestWebKitAPI/Counters.h:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::DerefObserver::ref):
        (TestWebKitAPI::DerefObserver::deref):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::DerefObserver::ref):
        (TestWebKitAPI::DerefObserver::deref):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/UniqueRef.cpp:
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.h:
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/GeolocationProviderMock.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.h:

2019-08-15  Sihui Liu  <sihui_liu@apple.com>

        Some improvements on web storage
        https://bugs.webkit.org/show_bug.cgi?id=200373

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST): update expectation for behavior change.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: new SPI to synchronously flush localStorage to 
        database file.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::syncLocalStorage):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        * WebKitTestRunner/TestController.cpp: clear local storage between test runs to make each test isolated.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::StorageVoidCallbackContext::StorageVoidCallbackContext):
        (WTR::StorageVoidCallback):
        (WTR::TestController::clearIndexedDatabases):
        (WTR::TestController::clearLocalStorage):
        (WTR::TestController::syncLocalStorage):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext): Deleted. Replaced
        with StorageVoidCallbackContext for general usage.
        (WTR::RemoveAllIndexedDatabasesCallback): Deleted. Replaced with StorageVoidCallback.
        (WTR::TestController::ClearIndexedDatabases): Deleted. Use lowercase for consistent style.
        * WebKitTestRunner/TestController.h:

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): add handler for new message 
        SyncLocalStorage.

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

        results.webkit.org: Add content hook to FlaskRequestsResponse
        https://bugs.webkit.org/show_bug.cgi?id=200721

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/flask_support/flask_testcase.py:
        (FlaskRequestsResponse):
        (FlaskRequestsResponse.content): Return the encoded raw bytes value of the
        Response, conforming to request's API.

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

        WKUIDelegate's webView:contextMenuDidEndForElement: should be called when context menus end
        https://bugs.webkit.org/show_bug.cgi?id=200750
        <rdar://problem/54232261> and <rdar://problem/52355829>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuUIDelegate webView:contextMenuDidEndForElement:]):
        (contextMenuWebViewDriver):
        (TEST):

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

        [iOS](REGRESSION: r200487): WebKit.RequestActivatedElementInfoForRotatedImage fails on iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=200726

        Reviewed by Simon Fraser.

        To get the pixels as an array of colors, draw the image into a memory
        context. The backing memory buffer can then be accessed to get the image
        pixels' colors.

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

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

        Unreviewed, rolling out r248526.

        Caused two IndexedDB perf tests to fail

        Reverted changeset:

        "Remove IDB-specific quota"
        https://bugs.webkit.org/show_bug.cgi?id=196545
        https://trac.webkit.org/changeset/248526

2019-08-14  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13
        https://bugs.webkit.org/show_bug.cgi?id=200694
        <rdar://problem/54278851>

        Reviewed by Youenn Fablet.

        Update conditionals that reference __MAC_OS_X_VERSION_MIN_REQUIRED and
        __MAC_OS_X_VERSION_MAX_ALLOWED, assuming that they both have values >=
        101300. This means that expressions like
        "__MAC_OS_X_VERSION_MIN_REQUIRED < 101300" are always False and
        "__MAC_OS_X_VERSION_MIN_REQUIRED >= 101300" are always True.

        * MiniBrowser/AppKitCompatibilityDeclarations.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController init]):
        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
        (TestWebKitAPI::FontCacheTest::SetUp): Deleted.
        (TestWebKitAPI::createPlatformFont): Deleted.
        (TestWebKitAPI::compareFonts): Deleted.
        (TestWebKitAPI::TEST_F): Deleted.
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        * TestWebKitAPI/mac/NSFontPanelTesting.mm:

2019-08-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Less contended MetaAllocator
        https://bugs.webkit.org/show_bug.cgi?id=200278

        Reviewed by Mark Lam.

        Update the interface.

        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:

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

        results.webkit.org: 500 errors on API endpoints don't return JSON
        https://bugs.webkit.org/show_bug.cgi?id=200722

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.response_500): We should return the response, instead of abort.

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

        results.webkit.org: Don't save configuration multiple times in upload
        https://bugs.webkit.org/show_bug.cgi?id=200719

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext.upload_test_results): Move registering of the configuration out
        of the branch loop.

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

        Reenable Update ContentFiltering.LazilyLoadPlatformFrameworks test for NetworkExtension
        https://bugs.webkit.org/show_bug.cgi?id=200706

        Reviewed by Alex Christensen.

        Libwebrtc is now soft-linked so we can reenable this test.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):

2019-08-13  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32) to avoid accidental change in behavior when replacing append with flexibleAppend
        https://bugs.webkit.org/show_bug.cgi?id=200675

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::TEST):
        Update for rename from StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32).

2019-08-13  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Performance improvement - Skip render offscreen canvas
        https://bugs.webkit.org/show_bug.cgi?id=200456

        Reviewed by Jonathan Bedard.

        This patch disable use the new batch draw method to render canvas directly without any caches, this will save a lot of memory, so that we won't go into the "low memory mode".

        This patch also change the axis label collision detact box from a rect to polygon, so that we can dectact click more accurate.

        * resultsdbpy/resultsdbpy/view/static/library/js/Utils.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (pointPolygonCollisionDetect): Detact
        (pointRightRayLineSegmentCollisionDetect):
        (ColorBatchRender):
        (ColorBatchRender.prototype.lazyCreateColorSeqs):
        (ColorBatchRender.prototype.addSeq):
        (ColorBatchRender.prototype.batchRender):
        (ColorBatchRender.prototype.clear):
        (xScrollStreamRenderFactory):
        (Timeline.CanvasSeriesComponent):
        (offscreenCachedRenderFactory): Deleted.

2019-08-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Switch NSURLSession on top navigation to prevalent resource with user interaction
        https://bugs.webkit.org/show_bug.cgi?id=200642
        <rdar://problem/53962073>

        Reviewed by Alex Christensen.

        This patch adds test infrastructure to query whether an origin has an
        isolated NSURLSession or not.

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

2019-08-13  Zhifei Fang  <zhifei_fang@apple.com>

        Update my status in contributors.json to committer.

        Reviewed by Unreviewed

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

2019-08-12  Jiewen Tan  <jiewen_tan@apple.com>

        Adds WebAuthn and AppSSO into watchlist
        https://bugs.webkit.org/show_bug.cgi?id=200647

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/common/config/watchlist:

2019-08-13  Chris Dumez  <cdumez@apple.com>

        Crash under IPC::Connection::markCurrentlyDispatchedMessageAsInvalid()
        https://bugs.webkit.org/show_bug.cgi?id=200674
        <rdar://problem/50692748>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-08-12  Takashi Komori  <Takashi.Komori@sony.com>

        [WTF] Thread::removeFromThreadGroup leaks weak pointers.
        https://bugs.webkit.org/show_bug.cgi?id=199857

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::countThreadGroups):
        (TestWebKitAPI::TEST):

2019-08-12  Alexey Shvayka  <shvaikalesh@gmail.com>

        AX: Homebrew is not allowed to run any script under sudo.
        https://bugs.webkit.org/show_bug.cgi?id=173801

        Reviewed by Carlos Alberto Lopez Perez.

        Latest versions of Homebrew throw an error when run as root.
        Dependencies are successfully installed w/o `sudo` on macOS, so skip it.

        * gtk/install-dependencies:

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

        [REGRESSION] run-webkit-tests: No PID defined when searching for simulator crashlogs
        https://bugs.webkit.org/show_bug.cgi?id=200644

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Define system PID after launching app.

2019-08-12  Sam Weinig  <weinig@apple.com>

        Replace multiparameter overloads of append() in StringBuilder as a first step toward standardizinging on the flexibleAppend() implementation
        https://bugs.webkit.org/show_bug.cgi?id=200614

        Reviewed by Darin Adler.

        Renames StringBuilder::append(const LChar*, unsigned), StringBuilder::append(const UChar*, unsigned) and 
        StringBuilder::append(const char*, unsigned) to StringBuilder::appendCharacters(...).
        
        Renames StringBuilder::append(const String& string, unsigned offset, unsigned length) to 
        StringBuilder::appendSubstring(...).

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

2019-08-12  Megan Gardner  <megan_gardner@apple.com>

        Fix Crash in Mail Search
        https://bugs.webkit.org/show_bug.cgi?id=200589

        Reviewed by Tim Horton.

        If you search backwards first in mail, we would crash,
        this tests that codepath.

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

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

        [iPadOS] Web pages sometimes load at half width in Safari
        https://bugs.webkit.org/show_bug.cgi?id=200624
        <rdar://problem/52694257>

        Reviewed by Simon Fraser.

        Add an API test to verify that after performing an animated resize and killing the web process, the subsequent
        web page is created using the post-animated-resize web view dimensions, rather than the original layout
        dimensions.

        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:

2019-08-12  Daniel Bates  <dabates@apple.com>

        Add a test to ensure that we dispatch keydown and keyup events when multiple keys are pressed at the same time
        https://bugs.webkit.org/show_bug.cgi?id=200548

        Reviewed by Darin Adler.

        Expose infrastructure to simulate a literal raw key down and a literal key up event.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::rawKeyDown):
        (WTR::UIScriptController::rawKeyUp):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::rawKeyDown):
        (WTR::UIScriptControllerIOS::rawKeyUp):

2019-08-12  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Handle broken data in the libwebrtc GStreamer decoders
        https://bugs.webkit.org/show_bug.cgi?id=200584

        Reviewed by Philippe Normand.

        Added a h264parse patch to post WARNING on the bus when a broken frame is detected.
        Ignore style libwebrtc optionnal 'style issue'

        * Scripts/webkitpy/style/checker.py:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-h264parse-Post-a-WARNING-when-data-is-broken.patch: Added.

2019-08-12  Youenn Fablet  <youenn@apple.com>

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545

        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setIDBPerOriginQuotaCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setIDBPerOriginQuota): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-08-10  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner's InjectedBundle has too aggressive stripping, resulting in non-symbolicated crash logs
        https://bugs.webkit.org/show_bug.cgi?id=200621

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:

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

        KeyboardInputTests.CaretSelectionRectAfterRestoringFirstResponder API tests time out on iPad
        https://bugs.webkit.org/show_bug.cgi?id=200604
        <rdar://problem/51273130>

        Reviewed by Megan Gardner.

        Tweak some API tests so that they work on iPad simulator. These tests checked that the final caret rect was
        {{16, 13}, {2, 15}}; however, this is only correct behavior on iPhone, where we will scale the page so that the
        focused element's font size is legible. Note that when the page is scaled, we scale the height but not the
        width of the caret, which is why the width of the caret (in content coordinates) decreases while the height
        remains the same.

        We don't have the same behavior on iPad, so the expected caret rect is {{16, 13}, {3, 15}}, which is equal to
        the caret rect at initial scale 1.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2019-08-09  Ali Juma  <ajuma@chromium.org>

        Don't allow cross-origin iframes to autofocus
        https://bugs.webkit.org/show_bug.cgi?id=200515
        <rdar://problem/54092988>

        Reviewed by Ryosuke Niwa.

        Make WebKit.FocusedFrameAfterCrash use same-origin iframes instead
        of cross-origin iframes, since it depends on focusing one of the
        frames.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/many-same-origin-iframes.html: Added.

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

        [iOS 13] Google Docs/Slides/Sheets: paste often doesn't work and sometimes produces an error
        https://bugs.webkit.org/show_bug.cgi?id=200591
        <rdar://problem/54102238>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Add a new API test to exercise -supportsImagePaste.

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

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

        Follow-up commit to r248474 as webkit-patch did not commit the svn property changes.
        [ews-build] Set svn:ignore to various EWS Buildbot files
        https://bugs.webkit.org/show_bug.cgi?id=200581

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build: Added property svn:ignore.

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

        [ews-build] Set svn:ignore to various EWS Buildbot files
        https://bugs.webkit.org/show_bug.cgi?id=200581

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build: Added property svn:ignore.

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

        [ews] Add buildbot.tac to repository
        https://bugs.webkit.org/show_bug.cgi?id=200580

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/buildbot.tac: Added.

2019-08-09  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Add missing spellchecking packages to dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=200574

        Reviewed by Philippe Normand.

        These are needed for the spellchecking test in WebContext API tests.

        * gtk/install-dependencies:

2019-08-08  Jon Lee  <jonlee@apple.com>

        Unreviewed. Get rid of extraneous whitespace in ChangeLog.

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

        webkitpy: Disable shared clipboard between Simulators
        https://bugs.webkit.org/show_bug.cgi?id=200546

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.initialize_devices): Disable PasteboardAutomaticSync in Simulator.app
        managed by run-webkit-tests.

2019-08-08  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Get WebKit, WebKit2, and MiniBrowser building and executing
        https://bugs.webkit.org/show_bug.cgi?id=200539
        <rdar://problem/54082550>

        Reviewed by Dean Jackson.

        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        * PlatformFTW.cmake: Added.

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

        [iOS] Position image information should respect the image orientation
        https://bugs.webkit.org/show_bug.cgi?id=200487

        Reviewed by Simon Fraser.

        Add an API test to verify the position image information is drawn rotated
        because of respecting its image orientation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/exif-orientation-8-llo.jpg: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/img-with-rotated-image.html: Added.

2019-08-08  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Fix WebContext languages test
        https://bugs.webkit.org/show_bug.cgi?id=200538

        Reviewed by Alex Christensen.

        This test broke after the format of Accepted-Languages
        was changed in r238236, update.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextLanguages):

2019-08-08  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Fix /webkit/WebKitWebsiteData/databases failure
        https://bugs.webkit.org/show_bug.cgi?id=200536

        Reviewed by Carlos Alberto Lopez Perez.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataDatabases): Databases take a moment to be written,
        wait before fetching the data as it's done in other tests.

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

        results.webkit.org: Use canvas for timeline
        https://bugs.webkit.org/show_bug.cgi?id=200172

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/commit.js:
        (Commit.constructor): Make uuid a member variable instead of a member function for efficiency.
        (Commit.compare): Ditto.
        (_CommitBank.commitByUuid): Ditto.
        (_CommitBank._loadSiblings): Ditto.
        (_CommitBank._load): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (tickForCommit): Deleted.
        (minimumUuidForResults): Given a dictionary of result lists, determine the minimum UUID
        which encompasses all results. Crucially, this function must exclude an UUIDs which may
        refer to results excluded because of the limit argument.
        (renderTimeline): Deleted.
        (commitsForResults): Given a dictionary of result lists, return a list of commits associated
        with those results.
        (scaleForCommits): Given a list of commits, generate a scale to be consumed by the canvas Timeline.
        (repositoriesForCommits): Given a list of commits, return a sorted list of associated repository ids.
        (xAxisFromScale): Create a canvas-based x-axis based on the provided scale and a repository id.
        (inPlaceCombine): Combine result objects together.
        (statsForSingleResult): Turn a single result into a stat object.
        (combineResults): Given lists of results, combine these lists while keeping the original lists unchanged.
        (Dot): Deleted.
        (TimelineFromEndpoint): Renamed from Timeline.
        (TimelineFromEndpoint.constructor): Canvas Timeline manages expansion and collapsing of nested timelines.
        (TimelineFromEndpoint.teardown): Detach callbacks from CommitBank.
        (TimelineFromEndpoint.update): Update with any new commit information, force a re-draw of the current
        cache contents.
        (TimelineFromEndpoint.reload): Remove management of nested timelines.
        (TimelineFromEndpoint.render): Use canvas Timeline instead of html timeline to visualize results.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Use TimelineFromEndpoint class.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

2019-08-08  Brady Eidson  <beidson@apple.com>

        Do not allow navigations of frames about to get replaced by the result of evaluating javascript: URLs
        <rdar://problem/53788893> and https://bugs.webkit.org/show_bug.cgi?id=198786

        Reviewed by Geoff Garen.

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

2019-08-08  Rob Buis  <rbuis@igalia.com>

        Add runtime flag for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=199794

        Reviewed by Darin Adler.

        Set lazyImageLoading preference as part of experimental features. Add
        TestOption for lazy image loading.

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

2019-08-08  Rob Buis  <rbuis@igalia.com>

        Import lazy loading WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=199795

        Reviewed by Darin Adler.

        Only do loading/ exception for WebKit specific, non WPT tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldLogFrameLoadDelegates):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):

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

        [Win][MiniBrowser] Add key accelerators for reload and close window
        https://bugs.webkit.org/show_bug.cgi?id=200497

        Reviewed by Brent Fulgham.

        Added short cuts Ctrl-W to close window, Ctrl-R to reload.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc): Added IDM_CLOSE_WINDOW case.
        * MiniBrowser/win/MiniBrowserLib.rc: Added "Close" menu item. Added accelerators.
        * MiniBrowser/win/MiniBrowserLibResource.h: Added IDM_CLOSE_WINDOW.

2019-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Add WHLSL and WebGPU to the watchlist file
        https://bugs.webkit.org/show_bug.cgi?id=200509

        Reviewed by Robin Morisset.

        * Scripts/webkitpy/common/config/watchlist:

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

        Unreviewed build fix after r248317 -- disable XCBuild because it
        breaks incremental builds.

        * Scripts/webkitdirs.pm:
        (canUseXCBuild):

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

        ASSERTION FAILED: m_observers.isEmpty() if WKPageSetPageStateClient is used
        https://bugs.webkit.org/show_bug.cgi?id=200465

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit/PageLoadState.cpp:
        (TestWebKitAPI::WebKit.PageLoadState): Set PageStateClient before
        finishing the test.
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::~PlatformWebView): Release m_view.

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248308

        Don't use WK_ENGINEERING_CODE_SIGN_IDENTITY for Production build.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248319

        Use HAVE(DATA_PROTECTION_KEYCHAIN) instead of HAVE_DATA_PROTECTION_KEYCHAIN.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r248308

        Use kSecUseDataProtectionKeychain for iOS 13 and macOS Catalina or newer.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):

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

        Enable XCBuild for `make` and `build-webkit` builds
        https://bugs.webkit.org/show_bug.cgi?id=200476
        <rdar://problem/50771065>

        Reviewed by Jonathan Bedard.

        All projects have now been tested under XCBuild and successfully
        build. Enable the use of XCBuild when performing builds with `make` or
        `build-webkit` and when using a sufficient version of Xcode. We set
        this version to Xcode 11 since Xcode 10 -- even though it supports
        XCBuild -- does not support a build facility needed to build WebKit
        (Bug 197072, Bug 197116, Bug 197340).

        Do not enable XCBuild in the Xcode projects themselves since these
        projects may need to be used under older versions of Xcode and there's
        no way to make those project changes sensitive to the version of Xcode
        being used. This means that builds performed in the Xcode IDE will not
        use XCBuild.

        * Scripts/webkitdirs.pm:
        (canUseXCBuild):

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

        Fix inefficiency in HTTPHeaderMap::set(CFStringRef, const String&)
        https://bugs.webkit.org/show_bug.cgi?id=200475

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::stringViewFromLiteral):
        (TestWebKitAPI::stringViewFromUTF8):

2019-08-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Update my status in contributors.json to reviewer.

        Regained the status after following the procedure for inactive contributors.
        See r247136 for further explanation.

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

2019-08-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Enable LocalAuthenticator for macOS
        https://bugs.webkit.org/show_bug.cgi?id=182772
        <rdar://problem/43347920>

        Reviewed by Brent Fulgham.

        Add an entitlement file to WebKitTestRunner such that it can access
        the modern macOS keychain.

        * WebKitTestRunner/Configurations/WebKitTestRunner.entitlements: Added.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):

2019-08-06  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Performance improvements
        https://bugs.webkit.org/show_bug.cgi?id=200406

        Reviewed by Jonathan Bedard.

        1. Unhook the scroll event when a series/axis have been removed from the container
        2. Fix the axis's cache data structure out of sync.
        3. Use position:sticky to reduce the scrolling blink when update the presenter's transform
        4. Use intersection observer to detect if the canvas on screen or not, if a canvas is not on the screen, we do nothing, this will eliminate render requests we send out.


        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js:
        (Signal.prototype.removeListener):
        (prototype.stopAction): Unregsiter an action handler
        (Ref):
        (Ref.prototype.apply):
        (Ref.prototype.destory):
        * resultsdbpy/resultsdbpy/view/static/library/js/components/BaseComponents.js:
        (ApplyNewChildren):
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent):

2019-08-06  Jer Noble  <jer.noble@apple.com>

        Add test for behavior introduced in r248174
        https://bugs.webkit.org/show_bug.cgi?id=200446

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/FullscreenTouchSecheuristicTests.cpp: Added.
        (WebKit::configureSecheuristic):
        (WebKit::TEST):

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

        [MiniBrowser][WK2] Unhandled key events should be bubbled up to the parent window
        https://bugs.webkit.org/show_bug.cgi?id=200464

        Reviewed by Ross Kirsling.

        When WK2 WebView is focused, short cut keys (e.g. Alt-F to open File
        menu, Alt-F4 to close window, and etc) don't work.

        WK1 WebView doesn't have this issue because it processes key events
        properly.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didNotHandleKeyEvent): Added. Send the
        unhandled key events to the main window.
        * MiniBrowser/win/WebKitBrowserWindow.h:

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

        iOS 13: Overflow:hidden on body prevents PDF scroll
        https://bugs.webkit.org/show_bug.cgi?id=200435
        rdar://problem/53942888

        Reviewed by Tim Horton.

        When we navigate from an overflow:hidden HTML page to a custom view (like PDF), we need
        to make sure that the scroll view is scrollable.

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

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

        New EWS:mac-wk2 status-bubble shows waiting to run tests for all recent bugs
        https://bugs.webkit.org/show_bug.cgi?id=200400

        Reviewed by Jonathan Bedard.

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

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

        run-webkit-tests asserts when the iPhone XR simulator is running
        https://bugs.webkit.org/show_bug.cgi?id=200404
        <rdar://problem/53878739>

        Reviewed by Dean Jackson.

        Support unicode in all logging statements tied to device model.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_baseline_search_path):
        * Scripts/webkitpy/port/device.py:
        (Device.__repr__):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._install):
        (DevicePort.setup_test_run):
        (DevicePort.clean_up_test_run):
        (DevicePort.configuration_for_upload):
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path):
        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__str__):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):
        (SimulatedDeviceManager._find_available_name):
        (SimulatedDeviceManager._get_device_identifier_for_type):
        (SimulatedDeviceManager._create_or_find_device_for_request):
        (SimulatedDeviceManager._does_fulfill_request):
        (SimulatedDeviceManager._wait_until_device_in_state):
        (SimulatedDeviceManager._wait_until_device_is_usable):
        (SimulatedDeviceManager._boot_device):
        (SimulatedDeviceManager.initialize_devices):
        (SimulatedDeviceManager.max_supported_simulators):
        (SimulatedDeviceManager.swap):
        (SimulatedDevice.is_usable):
        (SimulatedDevice._shut_down):
        (SimulatedDevice._delete):
        (SimulatedDevice.launch_app):
        (SimulatedDevice.__repr__):

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

        Ping loads should not prevent page caching
        https://bugs.webkit.org/show_bug.cgi?id=200418
        <rdar://problem/53901632>

        Reviewed by Darin Adler.

        Add TestOption to enable PageCache at UIProcess-level so that we can test
        page caching when navigating cross-origin with PSON enabled.

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

2019-08-02  Keith Rollin  <krollin@apple.com>

        Consistently use Obj-C boolean literals
        https://bugs.webkit.org/show_bug.cgi?id=200405
        <rdar://problem/53880043>

        Reviewed by Simon Fraser, Joseph Pecoraro.

        There are places where we use equivalent but different expressions for
        Obj-C boolean objects. For example, we use both [NSNumber
        numberWithBool:YES] and @YES. There are places where both are used in
        the same function, such as -[WebPreferences initialize]. The boolean
        literal is in greater use and is more succinct, so standardize on
        that. Also, change @(YES/NO) to @YES/NO.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController objectOfClass:]):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (overrideAddObserverForName):
        * TestWebKitAPI/ios/mainIOS.mm:
        (main):
        * TestWebKitAPI/mac/InjectedBundleControllerMac.mm:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/mac/mainMac.mm:
        (main):
        * WebKitLauncher/WebKitNightlyEnabler.m:
        (enableWebKitNightlyBehaviour):

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

        TextAutosizingBoost.ChangeAutosizingBoostAtRuntime fails on iPad Simulator
        https://bugs.webkit.org/show_bug.cgi?id=200402
        <rdar://problem/53823368>

        Reviewed by Tim Horton.

        Make it possible to run this test using the iPad simulator.

        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm:

        Two adjustments: (1) override the screen size to be 320 by 568 (so that the legacy text autosizing heuristic
        doesn't avoid boosting this text), and (2) force text autosizing on, but disable idempotent text autosizing,
        since this would result in differently sized text.

        (mainScreenReferenceBoundsOverride):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-08-02  Sihui Liu  <sihui_liu@apple.com>

        API tests using permanent credentials should clear credentials left by previous tests
        https://bugs.webkit.org/show_bug.cgi?id=199729

        Reviewed by Alex Christensen.

        We used to clear the permanent credentials created by API tests at the end of the API tests, to ensure those
        credentials will not affect tests running after. There is a case where permanent credentials were left on the
        system, so those API tests were timing out themselves before reaching to the cleanup, which caused cascading
        failure. To prevent this from happening again, add cleanup at the begining of the tests.

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

2019-08-02  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibility object method to determine whether an element is inside a table cell. Needed for iOS accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=200394
        <rdar://problem/52914964>

        Reviewed by Chris Fleizach.

        Glue code to exercise new method [WebAccessibilityObjectWrapper _accessibilityIsInTableCell].

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isInTableCell const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::isInTableCell const):

2019-08-02  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org Timeline] Using transform matrix to calculate the tag rotation position
        https://bugs.webkit.org/show_bug.cgi?id=200397

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:

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

        [macOS 10.15] Image dragged from Safari does not appear in Notes
        https://bugs.webkit.org/show_bug.cgi?id=188490
        <rdar://problem/39462717>

        Reviewed by Andy Estes.

        Add a test to verify that promised image data can be delivered to multiple pasteboards when performing a drop.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:

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

        Fix API test after r248139
        https://bugs.webkit.org/show_bug.cgi?id=200102

        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLsPlugin.mm:
        (-[AdditionalReadAccessAllowedURLsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        This was supposed to be removed as part of reverting r245322.

2019-08-01  Zhifei Fang  <zhifei_fang@apple.com>

        results.webkit.org: Force update cache when timeline updated
        https://bugs.webkit.org/show_bug.cgi?id=200363

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (offscreenCachedRenderFactory): Add ability to force the redraw.
        (Timeline.CanvasSeriesComponent): Force redraw when scales or dots are updated.
        (Timeline.CanvasXAxisComponent): Force redraw when scales are updated. Add missing exporter for export scales update API

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

        Do not send NetworkProcessProxy::LogTestingEvent message if we are not testing
        https://bugs.webkit.org/show_bug.cgi?id=200360

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (cleanupITPDatabase):
        (TEST):

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

        Move FormData zip file generation to NetworkProcess and enable it for all WebKit clients for uploading directories
        https://bugs.webkit.org/show_bug.cgi?id=200102
        <rdar://problem/53275114>

        Reviewed by Darin Adler.

        Add an API test that is Mac-only right now because runOpenPanelWithParameters is only supported on Mac for some reason
        and because clicking on a TestWKWebView only works on Mac.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/UploadDirectory.mm: Added.
        (-[UploadDelegate initWithDirectory:]):
        (-[UploadDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (-[UploadDelegate sentDirectory]):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView sendClickAtPoint:]):

2019-08-01  Zhifei Fang  <zhifei_fang@apple.com>

        [results.webkit.org] Timeline.CanvasXAxisComponent height should be defined by option
        https://bugs.webkit.org/show_bug.cgi?id=200321

        Reviewed by Jonathan Bedard.

        *resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        Let the axis' height be defined in the option. Timeine component will use this value as
        padding-top for headers which allows headers start in the right position, even with multiple
        top axises.
        (Timeline.CanvasSeriesComponent):
        (prototype.Timeline.CanvasContainer):

2019-08-01  Zhifei Fang  <zhifei_fang@apple.com>

        results.webkit.org: Collision detection for dots is off by 2 * dotMargin
        https://bugs.webkit.org/show_bug.cgi?id=200347

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Need to change it to dotMargin + radius other than use a fixed 3 * radius, which is for the old wide timeline

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

        Improve flakiness of SOAuthorizationRedirect tests
        https://bugs.webkit.org/show_bug.cgi?id=200320
        <rdar://problem/53767057>

        Reviewed by Alex Christensen.

        This patch replaces Util::sleep(0.5) in tests that expect a SOAuthorization session to wait when the corresponding WKWebView
        is out of the window with a more precise boolean indicator: navigationPolicyDecided. The new boolean indicator is working and
        better because the authorizationPerformed should be set in the same runloop when NavigationState::decidePolicyForNavigationAction
        is executed.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (resetState):
        (TestWebKitAPI::TEST):

2019-08-01  Keith Rollin  <krollin@apple.com>

        Update TestWebKitAPI for XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=200311
        <rdar://problem/53773804>

        Reviewed by Alex Christensen.

        Bug 199728 (svn 247402) updated TestWebKitAPI to use the unified-build
        technique. Now update WebKitLegacy to build under XCBuild after those
        changes. This work involves adding an "Apply Configuration to
        XCFileLists" build target, adding a check-xcfilelists.sh script,
        adding a "Check xcfilelists" build phase that calls that script,
        adding knowledge of the project to the generate-xcfilelists script,
        creating new .xcfilelist files, and adding those to the project.

        * Scripts/webkitpy/generate_xcfilelists_lib/application.py:
        (Application.__init__):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (WebKitTestRunnerGenerator._get_generate_derived_sources_script):
        (TestWebKitAPIGenerator):
        (TestWebKitAPIGenerator._get_project_file_path):
        (TestWebKitAPIGenerator._get_generate_unified_sources_script):
        * TestWebKitAPI/Scripts/check-xcfilelists.sh: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/UnifiedSources-output.xcfilelist: Added.

2019-08-01  Youenn Fablet  <youenn@apple.com>

        UserMediaPermissionRequestManagerProxy should not use audio+video denied requests to deny audio-only or video-only requests
        https://bugs.webkit.org/show_bug.cgi?id=200317

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/getUserMediaAudioVideoCapture.html: Added
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaOnlyAudioUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (-[GetUserMediaOnlyAudioUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (TestWebKitAPI::TEST):

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

        New EWS: Cannot see build status page when patch is waiting for tester
        https://bugs.webkit.org/show_bug.cgi?id=200333

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): While patch hasn't started processing on tester queue, display build information from builder queue.

2019-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Switch to use libsoup WebSockets API
        https://bugs.webkit.org/show_bug.cgi?id=200162

        Reviewed by Michael Catanzaro.

        Update libsoup version to 2.67.90.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

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

        REGRESSION (r240942): first visually non-empty layout milestone is not reached in media documents until after the video finishes loading
        https://bugs.webkit.org/show_bug.cgi?id=200293
        <rdar://problem/52937749>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FirstVisuallyNonEmptyMilestone.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm.
        (-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
        (-[RenderingProgressNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2019-07-31  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable all macOS queues on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199944

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for macOS queues.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enabled status-bubbles for mac queues, separated builders and testers bubbles in separate lines. Also
        removed mac-32bit and mac-32bit-wk2 bubbles, these queues were removed from Buildbot configuration previously.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js: Removed mac queues from bot-watcher's dashboard.
        * QueueStatusServer/config/queues.py: Removed mac queues from old EWS.

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

        Unreviewed test gardening, disable failing test for rdar://51752593.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2019-07-31  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.og: Timeline in canvas painting with wrong colors, cannot customize scale
        https://bugs.webkit.org/show_bug.cgi?id=200318

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent): Reset draw context between dots.
        (Timeline.CanvasXAxisComponent): Use getLabel function.

2019-07-31  Loïc Yhuel  <loic.yhuel@softathome.com>

        [GTK][WPE] Fix gtkdoc build with "build-webkit --32-bit" on 64-bit hosts
        https://bugs.webkit.org/show_bug.cgi?id=200306

        Reviewed by Michael Catanzaro.

        gtkdoc-scangobj calls scangobj.py, which only uses LDFLAGS on link (when producing
        jsc-glib-4.0-scan for example).

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

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

        Unreviewed test gardening, disable failing test for rdar://52355829.

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

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

        Update WebKitLegacy for XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=200310
        <rdar://problem/53773708>

        Reviewed by Alex Christensen.

        Bug 199771 (svn r247570) updated WebKitLegacy to use the unified-build
        technique. Now update WebKitLegacy to build under XCBuild after those
        changes. This work involves adding an "Apply Configuration to
        XCFileLists" build target, adding a check-xcfilelists.sh script,
        adding a "Check xcfilelists" build phase that calls that script,
        adding knowledge of the project to the generate-xcfilelists script,
        creating new .xcfilelist files, and adding those to the project.

        * Scripts/webkitpy/generate_xcfilelists_lib/application.py:
        (Application.__init__):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):
        (WebKitGenerator._get_generate_unified_sources_script):
        (WebKitLegacyGenerator):
        (WebKitLegacyGenerator._get_project_file_path):
        (WebKitLegacyGenerator._get_generate_unified_sources_script):

2019-07-31  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r247486?): Flaky API Test TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        https://bugs.webkit.org/show_bug.cgi?id=200086
        <rdar://problem/53501721>

        Reviewed by Alex Christensen.

        re-enable the API test.

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

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

        [iOS 13] Safari crashes when closing a tab with a focused element if the unified field has focus
        https://bugs.webkit.org/show_bug.cgi?id=200291
        <rdar://problem/53717946>

        Reviewed by Megan Gardner.

        Add an API test to exercise the scenario of synchronously requesting the autocorrection context immediately
        after closing the web view, while the web view's content view isn't the first responder.

        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        [GTK] Datalist element support for TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=98934

        Reviewed by Michael Catanzaro.

        Implement UIScriptControllerGtk::isShowingDataListSuggestions.

        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        (WTR::UIScriptControllerGtk::isShowingDataListSuggestions const):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.h:

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

        Remove some needless comments that snuck into the tree

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setHardwareKeyboardAttached):
        (WTR::UIScriptController::playBackEventStream):

2019-07-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WebKit] Add PageLoadState::Observer C API
        https://bugs.webkit.org/show_bug.cgi?id=199848

        Reviewed by Alex Christensen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didChangeTitle):
        (WebKitBrowserWindow::didFinishNavigation): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/PageLoadState.cpp: Added.
        (TestWebKitAPI::PageLoadTestState::PageLoadTestState):
        (TestWebKitAPI::didChangeActiveURL):
        (TestWebKitAPI::didChangeCanGoBack):
        (TestWebKitAPI::didChangeCanGoForward):
        (TestWebKitAPI::didChangeCertificateInfo):
        (TestWebKitAPI::didChangeEstimatedProgress):
        (TestWebKitAPI::didChangeHasOnlySecureContent):
        (TestWebKitAPI::didChangeIsLoading):
        (TestWebKitAPI::didChangeNetworkRequestsInProgress):
        (TestWebKitAPI::didChangeTitle):
        (TestWebKitAPI::didChangeWebProcessIsResponsive):
        (TestWebKitAPI::didSwapWebProcesses):
        (TestWebKitAPI::willChangeActiveURL):
        (TestWebKitAPI::willChangeCanGoBack):
        (TestWebKitAPI::willChangeCanGoForward):
        (TestWebKitAPI::willChangeCertificateInfo):
        (TestWebKitAPI::willChangeEstimatedProgress):
        (TestWebKitAPI::willChangeHasOnlySecureContent):
        (TestWebKitAPI::willChangeIsLoading):
        (TestWebKitAPI::willChangeNetworkRequestsInProgress):
        (TestWebKitAPI::willChangeTitle):
        (TestWebKitAPI::willChangeWebProcessIsResponsive):
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):

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

        DumpRenderTree.app: Add CFBundleShortVersionString
        https://bugs.webkit.org/show_bug.cgi?id=200269
        <rdar://problem/53412596>

        Rubber-stamped by Aakash Jain.

        * DumpRenderTree/ios/Info.plist:

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

        Add layout test coverage for <https://webkit.org/b/200215>
        https://bugs.webkit.org/show_bug.cgi?id=200245
        <rdar://problem/52976965>

        Reviewed by Tim Horton.

        Add new testing infrastructure. See below for more details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillCreateNewPageCallback):
        (WTR::UIScriptController::willCreateNewPageCallback const):

        Add platform-agnostic UIScriptController callback hooks to notify a test when a new page is being created. The
        new test in this patch uses this opportunity to remove and reinsert the web view into the window's hierarchy.

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::becomeFirstResponder):

        Add and implement a Cocoa platform hook to make the web view first responder.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::willCreateNewPage):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::becomeFirstResponder):

2019-07-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Add 'reload' menu item and 'reload' toolbar button
        https://bugs.webkit.org/show_bug.cgi?id=200217

        Reviewed by Alex Christensen.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::resizeSubViews):
        (MainWindow::WndProc):
        * MiniBrowser/win/MainWindow.h: Added m_hReloadButtonWnd.
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h: Added IDM_RELOAD.
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::reload):
        * MiniBrowser/win/WebKitBrowserWindow.h: Added reload() interface.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::reload):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2019-07-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser][WK2] Automatically supplement "file://" or "http://" for an input URL as well as WK1 browser window
        https://bugs.webkit.org/show_bug.cgi?id=200218

        Reviewed by Alex Christensen.

        Moved the scheme supplementing logic from
        WebKitLegacyBrowserWindow::loadURL to MainWindow::loadURL.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::loadURL):
        (MainWindow::onURLBarEnter):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::loadURL):

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

        Disable Flaky API Test TestWebKitAPI.WKWebView.LocalStorageProcessSuspends
        https://bugs.webkit.org/show_bug.cgi?id=200254

        Unreviewed infrastructure fix.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm: Disabled the test.

2019-07-29  Zhifei Fang  <zhifei_fang@apple.com>

        [Canvas Timeline] Compact canvas timeline
        https://bugs.webkit.org/show_bug.cgi?id=200177

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/BaseComponents.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent):

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

        Multiple context menu actions broken for YouTube videos
        https://bugs.webkit.org/show_bug.cgi?id=199999

        Reviewed by Eric Carlson.

        Add a test case to check copy link address, open in new window and download options are not included in the
        context menu for non-downloadable media.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (writeNextChunk):
        (serverCallback):
        (testContextMenuLiveStream):
        (beforeAll):
        (afterAll):

2019-07-28  Tim Horton  <timothy_horton@apple.com>

        Reorganize UIScriptController into platform-specific subclasses
        https://bugs.webkit.org/show_bug.cgi?id=200027

        Reviewed by Simon Fraser.

        Instead of a mishmash of #ifdefs and extraneous empty functions,
        reorganize UIScriptController so that we have a base class
        with functions that assert if called (to make it harder to
        accidentally write a test that depends on unimplemented
        functionality), and override them in platform specific subclasses
        as functionality is added.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ios/UIScriptControllerIOS.h: Added.
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        * DumpRenderTree/mac/UIScriptControllerMac.h: Added.
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h: Added.
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm: Added.
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        * WebKitTestRunner/gtk/UIScriptControllerGtk.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/mac/UIScriptControllerMac.h: Added.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:

2019-07-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Remove PageLoadTestClient
        https://bugs.webkit.org/show_bug.cgi?id=200155

        Reviewed by Brent Fulgham.

        It is not used nowadays.

        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::updateAddressBar):
        (MiniBrowserWebHost::didFinishLoadForFrame):
        (MiniBrowserWebHost::didStartProvisionalLoadForFrame):
        (MiniBrowserWebHost::didFailLoadWithError):
        (MiniBrowserWebHost::didHandleOnloadEventsForFrame):
        (MiniBrowserWebHost::didFirstLayoutInFrame):
        * MiniBrowser/win/PageLoadTestClient.cpp: Removed.
        * MiniBrowser/win/PageLoadTestClient.h: Removed.
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::identifierForInitialRequest):
        (ResourceLoadDelegate::willSendRequest):
        (ResourceLoadDelegate::didFinishLoadingFromDataSource):
        (ResourceLoadDelegate::didFailLoadingWithError):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::create):
        (WebKitLegacyBrowserWindow::WebKitLegacyBrowserWindow):
        (WebKitLegacyBrowserWindow::exitProgram): Deleted.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:
        (WebKitLegacyBrowserWindow::pageLoadTestClient): Deleted.
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2019-07-26  Jiewen Tan  <jiewen_tan@apple.com>

        NavigationSOAuthorizationSession should check the active URL of the responding page after waking up from waiting
        https://bugs.webkit.org/show_bug.cgi?id=200150
        <rdar://problem/53280170>

        Reviewed by Brent Fulgham.

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

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

        Follow-up fix: results.webkit.org: Suite results shouldn't be the landing page
        https://bugs.webkit.org/show_bug.cgi?id=200090

        Unreviewed follow-up fix.

        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Keep /search endpoint for existing links

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

        results.webkit.org: Add switch to filter results by expectation
        https://bugs.webkit.org/show_bug.cgi?id=200134

        Rubber-stamped by Aakash Jain.

        Users of the results database should be able to easily differentiate tests which are expected
        to fail verse tests which are unexpectedly failing.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Timeline.render): Respect the willFilterExpected variable.
        (LegendLabel): Generates html for label in the legend.
        (Legend): Add switch for filter results.
        * resultsdbpy/resultsdbpy/view/templates/search.html: GIve Legend callback to re-render timelines.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

2019-07-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use update-webkit script in Style EWS
        https://bugs.webkit.org/show_bug.cgi?id=193196

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (StyleFactory): Updated to use CheckOutSource step as well.
        * BuildSlaveSupport/ews-build/steps.py: Added build-step to UpdateWorkingDirectory.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

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

        results.webkit.org: Support buildbot 0.8 CI links
        https://bugs.webkit.org/show_bug.cgi?id=200146

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/ci_context.py:
        (BuildbotEightURLFactory): Buildbot 0.8 link factory.
        (BuildbotEightURLFactory.__init__):
        (BuildbotEightURLFactory.url):
        * resultsdbpy/resultsdbpy/model/ci_context_unittest.py:
        (URLFactoryTest.test_old_builder_url):
        (URLFactoryTest):
        (URLFactoryTest.test_old_worker_url):

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

        results.webkit.org: Suite results shouldn't be the landing page
        https://bugs.webkit.org/show_bug.cgi?id=200090

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Remove search bar.
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Make search the landing page instead of suite results.
        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py:
        (WebSiteUnittest.test_main):

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

        Follow-up fix: results.webkit.org: Color should be the worst result, count should include all results
        https://bugs.webkit.org/show_bug.cgi?id=200127

        Unreviewed follow-up fix.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Dot.toString): Use self instead of this in render callback.

2019-07-24  Jiewen Tan  <jiewen_tan@apple.com>

        WebPageProxy::receivedPolicyDecision should check navigation ID before clear pendingAPIRequest
        https://bugs.webkit.org/show_bug.cgi?id=200108
        <rdar://problem/53521238>

        Reviewed by Chris Dumez.

        Added an API test.

        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (-[DecidePolicyForNavigationActionController webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

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

        results.webkit.org: Color should be the worst result, count should include all results
        https://bugs.webkit.org/show_bug.cgi?id=200127

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Dot.prototype.toString): Do not differentiate the count based on the prevailing failure type.

2019-07-25  Zhifei Fang  <zhifei_fang@apple.com>

        [Timeline]: Make timeline header width automatic, instead of fixed width
        https://bugs.webkit.org/show_bug.cgi?id=200059

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/css/timeline.css:
        (.dot.crash):
        (.timeline>.header): Deleted.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.timeline>.content):
        (.timeline>.header):

2019-07-25  Ross Kirsling  <ross.kirsling@sony.com>

        [ESNext] Implement nullish coalescing
        https://bugs.webkit.org/show_bug.cgi?id=200072

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2019-07-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add Takashi Komori and Tomoki Imai as contributors

        Unreviewed.

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

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

        [bmalloc] Add IsoHeap test to ensure that IsoHeap pages are not allocating too large VA
        https://bugs.webkit.org/show_bug.cgi?id=200103

        Reviewed by Mark Lam.

        This patch adds tests to TestWTF IsoHeap tests to ensure that IsoHeap's component is not leaking pages or not allocating too large VAs for memory allocation.
        We use VMTag to get the system view of the allocated VAs and check whether it is not incredibly large.

        While the tests are white-box tests (it means that this is a bit flaky to the implementation changes of IsoHeap), I adjusted some threshold to make this less-flaky
        to the future implementation changes while it catches the severe issues we had.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (assertEmptyPointerSet):
        (assertHasOnlyObjects):
        (assertClean):
        (TEST):
        (allocateAndDeallocate):

2019-07-24  Fujii Hironori  <fujii.hironori@gmail.com>

        [CMake] CMAKE_SHARED_LINKER_FLAGS drops "-Wl,--no-undefined"
        https://bugs.webkit.org/show_bug.cgi?id=200074

        Reviewed by Michael Catanzaro.

        There was a latent issue. PluginTest::indicateTestFailure was
        using WTF::sleep without linking WTF.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        Added WebKit::WTF to WebKitTestNetscapePlugIn_LIBRARIES.

2019-07-24  Fujii Hironori  <fujii.hironori@gmail.com>

        [GTK][WPE][CMake] failing to build TestWebKitAPIInjectedBundle due to missing forwarding headers
        https://bugs.webkit.org/show_bug.cgi?id=200073

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        Added add_dependencies(TestWebKitAPIInjectedBundle TestWebKitAPI-forwarding-headers).

2019-07-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [webkitperl] runCommand doesn't work in Windows Perl
        https://bugs.webkit.org/show_bug.cgi?id=199900

        Reviewed by Don Olmstead.

        runCommand was always failing implicit fork by using 'open' with
        '-|' in Windows Perl. Explicitly specify the command to 'open' not
        to do the implicit fork.

        There is one more difference between Windows and Unix. 'open'
        successes on Windows even for non existent command while it fails
        on Unix. So, return the same error code on Unix as well as
        Windows.

        * Scripts/VCSUtils.pm: Specified the command to 'open'.
        * Scripts/webkitperl/VCSUtils_unittest/runCommand.pl: 'echo'
        command is not available on Windows. Use Perl ($^X) instead.

2019-07-24  Priyanka Agarwal  <pagarwal999@apple.com>

        Allow Clients to Add Fields to the AutoFillContext Dictionary.
        https://bugs.webkit.org/show_bug.cgi?id=199326
        rdar://problem/42816957

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST): Created a test to check that the auto fill context
        is being properly populated with additional context dictionary.

        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setWebViewAdditionalContextForStrongPasswordAssistanceHandler:]): Setting the handler for the function
        which will populate the additional autofill context dictionary.

        (-[TestInputDelegate webViewAdditionalContextForStrongPasswordAssistanceHandler]): Returns the handler for the function which
        populates the additional autofill context dictionary.

        (-[TestInputDelegate _webViewAdditionalContextForStrongPasswordAssistance:]): Function which populates the additional autofill
        context dictionary.

        (-[TestInputDelegate setFocusRequiresStrongPasswordAssistanceHandler:]): Setting the handler for the function which checks if the
        input field requires strong password work.

        (-[TestInputDelegate focusRequiresStrongPasswordAssistanceHandler]): Returns the handler for the function which checks if the
        input field requires strong password work.

        (-[TestInputDelegate _webView:focusRequiresStrongPasswordAssistance:]): Function which checks if the input field requires strong
        password work.

2019-07-24  Zhifei Fang  <zhifei_fang@apple.com>

        run-javascriptcore-tests won't report test results for testmasm, testair, testb3, testdfg and test api
        https://bugs.webkit.org/show_bug.cgi?id=199489

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.start): Skip run jsc test binaries for mips, armv7, aarch64.
        (RunJavaScriptCoreTests.countFailures): Pick up the test binaires failure to total failures count
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * Scripts/run-javascriptcore-tests: The script now failed wether the run-jsc-stress-tests failed or test binaries failed.
        (runTest): Record test binary failure
        (reportTestFailures): Report test binary failure
        (runJSCStressTests):
        * Scripts/webkitpy/common/config/ports.py: Skip run jsc test binaries for those need to run remotely
        (JscOnlyPort.build_jsc_command):
        (JscOnlyPort):
        (JscOnlyPort.run_javascriptcore_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_jsconly_port):

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

        ASSERTION FAILED: settings().textAutosizingEnabled() && settings().textAutosizingUsesIdempotentMode() in WebCore::Page::recomputeTextAutoSizingInAllFrames()
        https://bugs.webkit.org/show_bug.cgi?id=200079
        <rdar://problem/53474325>

        Reviewed by Wenson Hsieh.

        Reset textAutosizingUsesIdempotentMode when transitioning to a new test.

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

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

        [webkitperl] prepare-ChangeLog_unittest/parser_unittests.pl is failing on Windows Perl
        https://bugs.webkit.org/show_bug.cgi?id=199927

        Reviewed by Alex Christensen.

        convertAbsolutepathToWebKitPath was failing to convert paths on
        Windows Perl due to path separators mismatch.

        Renamed convertAbsolutepathToWebKitPath to
        convertAbsolutePathToRelativeUnixPath, and changed it to replace
        paths to relative Unix paths.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        (convertAbsolutePathToRelativeUnixPath): Added.
        (convertAbsolutepathToWebKitPath): Deleted.

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

        Fix iOS API test after r247759
        https://bugs.webkit.org/show_bug.cgi?id=200045

        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        In the iOS simulator, the WebProcess was being started before we were setting the value on the WKProcessPool.
        To fix this, set the value on the WKProcessPool before making the WKWebView.  This makes the test always pass on Mac and iOS.

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

        Remove rest of NavigatorContentUtils support
        https://bugs.webkit.org/show_bug.cgi?id=200052
        <rdar://problem/53467357>

        Reviewed by Alex Christensen.

        Bug 196070 removes most of the support for the never-used
        NavigatorContentUtils facility. However, there were still a couple of
        left-over references after that change. This patch sweeps those up.

        * Scripts/webkitperl/FeatureList.pm:

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

        Move javaScriptConfigurationDirectory SPI from _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it runtime switchable
        https://bugs.webkit.org/show_bug.cgi?id=200045

        Reviewed by Mark Lam.

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

2019-07-23  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r247745.

        This broke API test
        TestWebKitAPI.WKProcessPool.JavaScriptConfiguration as
        indicated by EWS

        Reverted changeset:

        "Move javaScriptConfigurationDirectory SPI from
        _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it
        runtime switchable"
        https://bugs.webkit.org/show_bug.cgi?id=200045
        https://trac.webkit.org/changeset/247745

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

        Move javaScriptConfigurationDirectory SPI from _WKProcessPoolConfiguration to WKProcessPoolPrivate to make it runtime switchable
        https://bugs.webkit.org/show_bug.cgi?id=200045

        Reviewed by Mark Lam.

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

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

        Add SPI for setting media cache and key location on _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=199972

        Reviewed by Jer Noble.

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

2019-07-23  Alicia Boya García  <aboya@igalia.com>

        [WTF] Add DataMutex and MainThreadData wrappers
        https://bugs.webkit.org/show_bug.cgi?id=199831

        Reviewed by Alex Christensen.

        Added a very simple test that checks that DataMutex<T> indeed takes
        the lock and indeed holds data.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Tests/WTF/DataMutex.cpp: Added.
        (TestWebKitAPI::TEST):

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

        [macOS 10.15] Web process crashes when attempting to show the font panel via Font > Show Fonts
        https://bugs.webkit.org/show_bug.cgi?id=200021
        <rdar://problem/53301325>

        Reviewed by Ryosuke Niwa.

        Add support for grabbing the child menu items of a context menu item.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::getMenuItemChildrenCallback):

2019-07-23  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit should strip away system font names from the pasted content
        https://bugs.webkit.org/show_bug.cgi?id=199975
        <rdar://problem/53336353>

        Reviewed by Darin Adler.

        Added a test to strip away system font names such as ".AppleSystemUIFont", ".SFUI-Regular", and ".SF UI Mono".

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/cocoa-writer-markup-with-system-fonts.html: Added.

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

        [ews-build] EWS fails to parse multi-line full_results.json
        https://bugs.webkit.org/show_bug.cgi?id=199992

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/layout_test_failures.py:
        (LayoutTestFailures.results_from_string): Concatenate content into single line.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_parse_results_json_with_newlines): Unit-test to cover this scenario.

2019-07-22  Jonathan Bedard  <jbedard@apple.com>

        resultsdbpy: Handle case where the previous commit doesn't have the changelog
        https://bugs.webkit.org/show_bug.cgi?id=200015

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/repository.py:
        (WebKitRepository.commit_for_id.diff_changelogs): Allow the previous_response to be None.

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

        [iOS] [WK1] UIWebView always jumps to the top left corner when scrolling to reveal the selection
        https://bugs.webkit.org/show_bug.cgi?id=200013
        <rdar://problem/52526901>

        Reviewed by Simon Fraser.

        Add a new API test to verify that inserting text in UIWebView causes the document to scroll.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollToRevealSelection.mm: Added.
        (-[LegacyLoadingDelegate webViewDidFinishLoad:]):
        (-[LegacyLoadingDelegate waitForDidFinishLoad]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-07-22  Jer Noble  <jer.noble@apple.com>

        REGRESSION(rUnknown): YouTube playback pauses when switching to a new tab
        https://bugs.webkit.org/show_bug.cgi?id=199971
        <rdar://problem/51951218>

        Reviewed by Alex Christensen.

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

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

        [ews-build] Add an EWS to run services tests
        https://bugs.webkit.org/show_bug.cgi?id=199994

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Added Services-EWS configuration.
        * BuildSlaveSupport/ews-build/factories.py: Added ServicesFactory.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): Run this EWS only for patches with changes in relevant files.
        (RunEWSUnitTests): Build step to run EWS unit-tests.
        (RunEWSBuildbotCheckConfig): Build step to run buildbot checkconfig command.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added services status-bubble.

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

        Disable MediaRecorder for legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=200001
        <rdar://problem/53400030>

        Reviewed by Eric Carlson.

        Enable MediaRecorder for testing purposes.

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

2019-07-22  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Timeline header is too small
        https://bugs.webkit.org/show_bug.cgi?id=199955

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/css/timeline.css:
        (.timeline>.header): Make timeline header larder to fit configuration names.

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

        Add SPI to _WKWebsiteDataStoreConfiguration for configuring application cache storage location
        https://bugs.webkit.org/show_bug.cgi?id=199954

        Reviewed by Geoff Garen.

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

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

        Add SPI _WKProcessPoolConfiguration.javaScriptConfigurationDirectory
        https://bugs.webkit.org/show_bug.cgi?id=199917

        Reviewed by Sam Weinig.

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

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

        [ews-build] ReRunWebKitTests should use similar logic for evaluateCommand as RunWebKitTests
        https://bugs.webkit.org/show_bug.cgi?id=199980

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand): Updatd to use similar logic as RunWebKitTests.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunWebKitTests): Modified to make it generic so as to re-use tests.
        (TestReRunWebKitTests): Run all TestRunWebKitTests unit-tests for ReRunWebKitTests as well.

2019-07-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] Add an unit test for setting up the driver environment without starting it.
        https://bugs.webkit.org/show_bug.cgi?id=199945

        Reviewed by Michael Catanzaro.

        This adds an unit test for the change implemented in r247663.

        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_setup_environ_base_vars):
        (DriverTest):
        (DriverTest.test_setup_environ_without_starting_driver):

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

        [iOS] [WebKit2] Add limited support for -isPosition:atBoundary:inDirection: in WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=199993
        <rdar://problem/49523528>

        Reviewed by Beth Dakin.

        Add a new API test to verify the behavior of -isPosition:atBoundary:inDirection:.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

2019-07-21  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibilityInsertText for text insertion in edit fields.
        https://bugs.webkit.org/show_bug.cgi?id=199973

        Reviewed by Chris Fleizach.

        Renamed accessibilityInsertText to _accessibilityInsertText.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::insertText):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::insertText):

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

        Speed up HashTable decoding by reserving capacity and avoiding rehashing
        https://bugs.webkit.org/show_bug.cgi?id=199982

        Reviewed by Saam Barati.

        Add API test coverage.

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

2019-07-20  Andres Gonzalez  <andresg_22@apple.com>

        Add accessibilityInsertText for text insertion in edit fields.
        https://bugs.webkit.org/show_bug.cgi?id=199973

        Reviewed by Chris Fleizach.

        Glue code to run new LayoutTests.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::insertText):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::insertText):

2019-07-19  Zhifei Fang  <zhifei_fang@apple.com>

        Move webkit.css to opensource to support resultsdbpy's frontend
        https://bugs.webkit.org/show_bug.cgi?id=199957

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml: Added.
        * resultsdbpy/resultsdbpy/view/static/library/css/generate-webkit-css-docs: Added.
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html: Added.
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css: Added.

2019-07-19  Zhifei Fang  <zhifei_fang@apple.com>

        Move Ref.js to WebKit to support resultsdbpy's frontend
        https://bugs.webkit.org/show_bug.cgi?id=199956

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/js/drawer.js:
        * resultsdbpy/resultsdbpy/view/static/js/search.js:
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js: Added.
        * resultsdbpy/resultsdbpy/view/static/library/js/Utils.js: Added.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/BaseComponents.js: Added.
        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js: Added.
        * resultsdbpy/resultsdbpy/view/templates/base.html:
        * resultsdbpy/resultsdbpy/view/templates/commits.html:
        * resultsdbpy/resultsdbpy/view/templates/documentation.html:
        * resultsdbpy/resultsdbpy/view/templates/search.html:
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:
        * resultsdbpy/resultsdbpy/view/view_routes.py:

2019-07-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] Allow the testrunner driver to setup the environment completely without needing to start the server process.
        https://bugs.webkit.org/show_bug.cgi?id=199945

        Reviewed by Michael Catanzaro.

        Refactor the code to create the Driver temporal directories inside Driver._setup_environ_for_driver().
        This allows external callers to setup the environment for running tests by calling that method without needing to start the server process.
        When this callers finish testing, it is enough with calling either Driver.stop() or Driver._delete_temporal_directories().

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        (Driver._create_temporal_directories):
        (Driver):
        (Driver._start):
        (Driver._delete_temporal_directories):
        (Driver.stop):
        * Scripts/webkitpy/w3c/wpt_runner.py: Not needed anymore to start the driver since this doesnt need the server process running.
        (main):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py: Ditto.
        (WebDriverTestRunner.__init__):
        * glib/api_test_runner.py:
        (TestRunner._setup_testing_environment): Ditto.

2019-07-19  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Display pre-existing Layout test failure names in the build summary
        https://bugs.webkit.org/show_bug.cgi?id=199941

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):

2019-07-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] run-webkit-tests should run with a temporal homedir
        https://bugs.webkit.org/show_bug.cgi?id=199738

        Reviewed by Michael Catanzaro.

        Run the tests with an empty homedir that is created inside the driver tmpdir.
        The driver tmpdir is a random directory created for each test runner that is purged after the run.

        This is done to ensure that the test results are not affected by the user settings of any library.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_setup_environ_base_vars):
        (DriverTest):
        (DriverTest.test_create_temporal_home_dir):

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

        Remove pywebsockets from thirdparty
        https://bugs.webkit.org/show_bug.cgi?id=199710

        Reviewed by Jonathan Bedard.

        We have a very old version of pywebsocket in webkitpy thirdparty, but we are also importing pywebsocket as part
        of wpt tools. We can simply use the wpt one for all websocket tests and remove the old copy from sources.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket._prepare_config): Use pywebsocket from imported w3c tools directory.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/COPYING: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/__init__.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_base.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hixie75.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/dispatch.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/__init__.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi00.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/headerparserhandler.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/http_header_util.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/memorizingfile.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/msgutil.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/mux.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/stream.py: Removed.
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py: Removed.

2019-07-18  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Move resultsdbpy to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=199837
        <rdar://problem/53172130>

        Rubber-stamped by Aakash Jain.

        Moving the entirety of the resultsdbpy library, which provides utilities to build
        a database designed to store, visualize and organize test results, into WebKit.

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker): resulltsdbpy is a Python 3 library.
        * resultsdbpy: Added.
        * resultsdbpy/MANIFEST.in: Added.
        * resultsdbpy/README.md: Added.
        * resultsdbpy/resultsdbpy: Added.
        * resultsdbpy/resultsdbpy/__init__.py: Added.
        * resultsdbpy/resultsdbpy/controller: Added.
        * resultsdbpy/resultsdbpy/controller/__init__.py: Added.
        * resultsdbpy/resultsdbpy/controller/api_routes.py: Added.
        * resultsdbpy/resultsdbpy/controller/ci_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/ci_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/commit_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/configuration_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/suite_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/suite_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/test_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/test_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/controller/upload_controller.py: Added.
        * resultsdbpy/resultsdbpy/controller/upload_controller_unittest.py: Added.
        * resultsdbpy/resultsdbpy/flask_support: Added.
        * resultsdbpy/resultsdbpy/flask_support/__init__.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/authed_blueprint.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/flask_test_context.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/flask_testcase.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/util.py: Added.
        * resultsdbpy/resultsdbpy/flask_support/util_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model: Added.
        * resultsdbpy/resultsdbpy/model/__init__.py: Added.
        * resultsdbpy/resultsdbpy/model/cassandra_context.py: Added.
        * resultsdbpy/resultsdbpy/model/cassandra_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/casserole.py: Added.
        * resultsdbpy/resultsdbpy/model/casserole_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/ci_context.py: Added.
        * resultsdbpy/resultsdbpy/model/ci_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/commit_context.py: Added.
        * resultsdbpy/resultsdbpy/model/commit_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/configuration_context.py: Added.
        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/docker-compose.yml: Added.
        * resultsdbpy/resultsdbpy/model/docker.py: Added.
        * resultsdbpy/resultsdbpy/model/docker_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/mock_cassandra_context.py: Added.
        * resultsdbpy/resultsdbpy/model/mock_model_factory.py: Added.
        * resultsdbpy/resultsdbpy/model/mock_repository.py: Added.
        * resultsdbpy/resultsdbpy/model/model.py: Added.
        * resultsdbpy/resultsdbpy/model/partitioned_redis.py: Added.
        * resultsdbpy/resultsdbpy/model/partitioned_redis_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/redis_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/repository.py: Added.
        * resultsdbpy/resultsdbpy/model/repository_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/suite_context.py: Added.
        * resultsdbpy/resultsdbpy/model/suite_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/test_context.py: Added.
        * resultsdbpy/resultsdbpy/model/test_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/upload_context.py: Added.
        * resultsdbpy/resultsdbpy/model/upload_context_unittest.py: Added.
        * resultsdbpy/resultsdbpy/model/wait_for_docker_test_case.py: Added.
        * resultsdbpy/resultsdbpy/run-tests: Added.
        * resultsdbpy/resultsdbpy/view: Added.
        * resultsdbpy/resultsdbpy/view/__init__.py: Added.
        * resultsdbpy/resultsdbpy/view/ci_view.py: Added.
        * resultsdbpy/resultsdbpy/view/commit_view.py: Added.
        * resultsdbpy/resultsdbpy/view/commit_view_unittest.py: Added.
        * resultsdbpy/resultsdbpy/view/site_menu.py: Added.
        * resultsdbpy/resultsdbpy/view/static: Added.
        * resultsdbpy/resultsdbpy/view/static/css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/commit.css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/drawer.css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/search.css: Added.
        * resultsdbpy/resultsdbpy/view/static/css/timeline.css: Added.
        * resultsdbpy/resultsdbpy/view/static/js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/commit.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/common.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/configuration.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/drawer.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/search.js: Added.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Added.
        * resultsdbpy/resultsdbpy/view/suite_view.py: Added.
        * resultsdbpy/resultsdbpy/view/templates: Added.
        * resultsdbpy/resultsdbpy/view/templates/base.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/commit.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/commits.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/error.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Added.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Added.
        * resultsdbpy/resultsdbpy/view/view_routes.py: Added.
        * resultsdbpy/resultsdbpy/view/view_routes_unittest.py: Added.
        * resultsdbpy/setup.py: Added.

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

        Add and test _WKWebsiteDataStoreConfiguration.deviceIdHashSaltsStorageDirectory SPI
        https://bugs.webkit.org/show_bug.cgi?id=199923

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (TestWebKitAPI::TEST):

2019-07-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable iOS WK2 tester queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199867

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for ios-wk2 queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled ios-sim (builder) and ios-wk2 (tester) bubbles.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js: Removed ios-sim queue from bot-watcher's dashboard.
        * QueueStatusServer/config/queues.py: Removed ios-sim queue from old EWS.

2019-07-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to AnalyzeLayoutTestsResults
        https://bugs.webkit.org/show_bug.cgi?id=199877

        Reviewed by Jonathan Bedard.

        Logic is ported from webkitpy/tool/bot/patchanalysistask.py::_retry_layout_tests()

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTestsWithoutPatch.evaluateCommand): invoke AnalyzeLayoutTestsResults step.
        (AnalyzeLayoutTestsResults): Build step to analyze layout-test results.
        (AnalyzeLayoutTestsResults.report_failure):
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):
        (AnalyzeLayoutTestsResults.retry_build):
        (AnalyzeLayoutTestsResults._results_failed_different_tests):
        (AnalyzeLayoutTestsResults._report_flaky_tests):
        (AnalyzeLayoutTestsResults.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

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

        Move NetworkCache ownership from NetworkProcess to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=199817

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView synchronouslyLoadRequest:]):

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

        Make sure to set kCTFontFallbackOptionAttribute to kCTFontFallbackOptionSystem for system fonts
        https://bugs.webkit.org/show_bug.cgi?id=199769
        <rdar://problem/49390297>

        Reviewed by Myles C. Maxfield.

        Add a font containing one extended character not found in system fonts.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/FakeHelvetica-SingleExtendedCharacter.ttf: Added.

2019-07-18  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, Add Olivier Blin as contributor

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

2019-07-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
        https://bugs.webkit.org/show_bug.cgi?id=199855

        Reviewed by Michael Catanzaro.

        The webkitpy drivers for GTK and WPE use their own versions for setting
        up the environment and starting/stopping the drivers.
        This refactors those drivers to use the base class driver functions.
        As a benefit we get some fixes like support for setting the profiler
        environment variables, and a simpler code.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
        Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
        * Scripts/webkitpy/port/headlessdriver.py:
        (HeadlessDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/waylanddriver.py:
        (WaylandDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        (WestonDriver.stop):
        * Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
        (WestonDriverTest.make_driver):
        * Scripts/webkitpy/port/xorgdriver.py:
        (XorgDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
        (XvfbDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        * Scripts/webkitpy/w3c/wpt_runner.py:
        (main): Start the driver before trying to get its environment to define all the environment variables.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__): Ditto.
        * glib/api_test_runner.py:
        (TestRunner._setup_testing_environment): Ditto.

2019-07-17  Antoine Quint  <graouts@apple.com>

        Disable Pointer Events prior to watchOS 6
        https://bugs.webkit.org/show_bug.cgi?id=199890
        <rdar://problem/53206113>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-07-17  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2019-07-17  Jonathan Bedard  <jbedard@apple.com>

        check-webkit-style: Add limited Python3 support
        https://bugs.webkit.org/show_bug.cgi?id=199870

        Rubber-stamped by Aakash Jain.

        Since new services will be added in the near future which are Python 3, we
        need to support Python 3 style checks. For now, assume all Python files are
        Python 2 unless otherwise specified.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Add pycodestyle to valid categories for testing.
        (CheckerDispatcher._create_checker): Check that the provided Python file is in
        one of the declared Python 3 directories.
        * Scripts/webkitpy/style/checkers/python.py:
        (Python3Checker): Add Python 3 checker, which doesn't lint and uses pycodestyle
        instead of pep8.
        (Python3Checker.__init__):
        (Python3Checker.check):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Support auto-installing pycodestyle.
        (AutoinstallImportHook._install_pycodestyle):

2019-07-17  Sam Weinig  <weinig@apple.com>

        Add StringBuilder member function which allows makeString() style variadic argument construction
        https://bugs.webkit.org/show_bug.cgi?id=198997

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Add basic test showing that StringBuilder::flexibleAppend can be used to
        append one or more string adaptable types.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add WTFStringUtilities.cpp

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Add basic test showing that StringBuilder::flexibleAppend can be used to
        append one or more string adaptable types.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        * TestWebKitAPI/WTFStringUtilities.cpp: Added.
        * TestWebKitAPI/WTFStringUtilities.h:
        Move WTF_STRINGTYPEADAPTER_COPIED_WTF_STRING() and wtfStringCopyCount to WTFStringUtilities.h/cpp
        to allow for a single definition of StringTypeAdapter<String, void> which is required for ODR.

2019-07-17  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the file superfluously added in r247535.

        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.h: Removed.
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.mm:

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

        Add a runtime-disabled dialog element skeleton
        https://bugs.webkit.org/show_bug.cgi?id=199839

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Enable the dialog element for layout tests.

2019-07-17  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Option + Up or Down Arrow key doesn’t move cursor past paragraph boundaries in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=199851

        Reviewed by Wenson Hsieh.

        Added a regression test for iOS. Unfortunately, event sender, etc... doesn't work because
        this code is getting directly triggered from UIKeyboard's code.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.h: Added.
        * TestWebKitAPI/Tests/ios/SelectionModifyByParagraphBoundary.mm: Added.
        * TestWebKitAPI/ios/UIKitSPI.h:

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

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

        "Caused failed ASSERT in stress test" (Requested by creid on
        #webkit).

        Reverted changeset:

        "Bytecode cache should use FileSystem"
        https://bugs.webkit.org/show_bug.cgi?id=199759
        https://trac.webkit.org/changeset/247505

2019-07-17  Russell Epstein  <russell_e@apple.com>

        Adding self to contributors.json

        Unreviewed.

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

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

        [ews-build] Parse full_results.json for layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=199804

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.start): Monitor json output.
        (RunWebKitTests.commandComplete): Read json output, parse the results and set Buildbot properties accordingly. These
        properties would be used in subsequent AnalyzeLayoutTests build step to determine whether the failures are introduced
        by the patch or are pre-existing.
        (ReRunWebKitTests.commandComplete): Ditto.
        (RunWebKitTestsWithoutPatch.commandComplete): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (BuildStepMixinAdditions.getProperty): Added.
        (TestRunWebKitTests.test_parse_results_json): Added unit-tests.
        * BuildSlaveSupport/ews-build/layout_test_failures.py: Parse full_results.json and generate list of failing tests.

2019-07-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r247512.

        Broke API test runners

        Reverted changeset:

        "[GTK][WPE][webkitpy] Refactor drivers to use the base driver
        for setting up the environment and start the drivers."
        https://bugs.webkit.org/show_bug.cgi?id=199855
        https://trac.webkit.org/changeset/247512

2019-07-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
        https://bugs.webkit.org/show_bug.cgi?id=199855

        Reviewed by Carlos Garcia Campos.

        The webkitpy drivers for GTK and WPE use their own versions for setting
        up the environment and starting/stopping the drivers.
        This refactors those drivers to use the base class driver functions.
        As a benefit we get some fixes like support for setting the profiler
        environment variables, and a simpler code.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
        Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
        * Scripts/webkitpy/port/headlessdriver.py:
        (HeadlessDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/waylanddriver.py:
        (WaylandDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test):
        (WestonDriver.stop):
        * Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
        (WestonDriverTest.make_driver):
        * Scripts/webkitpy/port/xorgdriver.py:
        (XorgDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
        (XvfbDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start):
        (XvfbDriverTest.test_start_arbitrary_worker_number):

2019-07-16  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2019-07-16  Jonathan Bedard  <jbedard@apple.com>

        svn-create-patch duplicates diffs when adding directories
        https://bugs.webkit.org/show_bug.cgi?id=199842

        Reviewed by Dewei Zhu.

        * Scripts/svn-create-patch:
        (findKind): Add function which returns what 'kind' of file the provided path is.
        (generateFileList): If the path is a directory and being added, don't add it.
        Instead, rely on the fact that its children will be added.

2019-07-16  Tim Horton  <timothy_horton@apple.com>

        NSTextFinder holes don't scroll with the page
        https://bugs.webkit.org/show_bug.cgi?id=199815
        <rdar://problem/52280514>

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[MiniBrowserNSTextFinder performAction:]):
        (-[WK2BrowserWindowController awakeFromNib]):
        Adopt the WebKit UI in MiniBrowser. Also, override NSTextFinder's
        -performAction: so that we can intercept the close action and
        hide our own find UI, since there is no delegate for that action yet.

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

2019-07-15  Keith Miller  <keith_miller@apple.com>

        JSGlobalObject type macros should support feature flags and WeakRef should have one
        https://bugs.webkit.org/show_bug.cgi?id=199601

        Reviewed by Mark Lam.

        JSC options need to be set before the window is created for the test.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setJSCOptions):
        (resetWebViewToConsistentStateBeforeTesting):

2019-07-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [ Mojave WK1 ] Some Image tests are flakey failures and are failing in tandem with zoomed in or blank image results
        https://bugs.webkit.org/show_bug.cgi?id=193108

        Reviewed by Simon Fraser.

        Add a workaround for <rdar://problem/17084993> in createBitmapContextFromWebView().
        Re-request the snapshot at kCGWindowImageNominalResolution if it was captured
        at the wrong scale.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (takeWindowSnapshot):
        (createBitmapContextFromWebView):

2019-07-15  Brady Eidson  <beidson@apple.com>

        Make WKURLSchemeTask thread safe.
        <rdar://problem/50471863> and https://bugs.webkit.org/show_bug.cgi?id=199764

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2019-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a build fix after r247437

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        Added platform guard towards -[WKUIDelegate _presentingViewControllerForWebView:].

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

        [macOS 10.15] Cannot unbold selected text when the system font is used
        https://bugs.webkit.org/show_bug.cgi?id=199788
        <rdar://problem/52142570>

        Reviewed by Tim Horton.

        Add a new API test to verify that bolding and unbolding updates the
        shared font manager's selected font.

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

2019-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        [iOS] SOAuthorizationSession should tell AppSSO whether the UIClient is capable of showing the extension UI
        https://bugs.webkit.org/show_bug.cgi?id=199790
        <rdar://problem/52790112>

        Reviewed by Brent Fulgham.

        Add tests to check SOAuthorization.enableEmbeddedAuthorizationViewController accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate _presentingViewControllerForWebView:]):
        (configureSOAuthorizationWebView):
        (TestWebKitAPI::TEST):
        (-[TestSOAuthorizationNavigationDelegate init]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]): Deleted.
        (-[TestSOAuthorizationNavigationDelegate _webView:decidePolicyForSOAuthorizationLoadWithCurrentPolicy:forExtension:completionHandler:]): Deleted.

2019-07-15  Sihui Liu  <sihui_liu@apple.com>

        window.openDatabase is not writable
        https://bugs.webkit.org/show_bug.cgi?id=199737
        <rdar://problem/52551332>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WebSQLBasics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/opendatabase-always-exists.html:

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

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

        Rubber-stamped by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.start): Initialize log_observer.
        (RunWebKitTests._strip_python_logging_prefix): Copied from similar code in build.webkit.org buildbot config.
        (RunWebKitTests._parseRunWebKitTestsOutput): Ditto.
        (RunWebKitTests.commandComplete): Gather and parse the stdout and stderr logs.
        (RunWebKitTests.evaluateResult): Analyze the results and decide build status.
        (RunWebKitTests.getResultSummary): Update build and step summary.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added and updated unit-tests.

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

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

        broke mips and arm EWS (Requested by guijemont on #webkit).

        Reverted changeset:

        "run-javascriptcore-tests won't report test results for
        testmasm, testair, testb3, testdfg and test api"
        https://bugs.webkit.org/show_bug.cgi?id=199489
        https://trac.webkit.org/changeset/247393

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

        [Cocoa] -loadFileURL:allowingReadAccessToURL: should fully resolve file URLs
        https://bugs.webkit.org/show_bug.cgi?id=199768
        <rdar://problem/52002206>

        Reviewed by Geoffrey Garen.

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

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Remove wincairo queue from old EWS and dashboard
        https://bugs.webkit.org/show_bug.cgi?id=199776

        Reviewed by Don Olmstead.

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

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

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

        Reviewed by Don Olmstead.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for wincairo builder.
        * BuildSlaveSupport/ews-build/factories.py: Added required build steps for wincairo factory.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enable wincairo status-bubble.

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Enable logging for clicking SubmitToEWS button
        https://bugs.webkit.org/show_bug.cgi?id=199757

        Unreviewed minor infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS.post): Change logging level from debug to info.

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

        Enable client certificate authentication unit test
        https://bugs.webkit.org/show_bug.cgi?id=199735

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TEST):
        I originally wrote this in https://bugs.webkit.org/show_bug.cgi?id=197800 but it was disabled because it crashed.
        I found what was crashing.  I was reading out of bounds on my vector of 2 strings :(

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

        Begin unifying TestWebKitAPI build
        https://bugs.webkit.org/show_bug.cgi?id=199728

        Reviewed by Keith Miller.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Scripts/generate-unified-sources.sh: Added.
        * TestWebKitAPI/Sources.txt: Added.
        * TestWebKitAPI/SourcesCocoa.txt: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2019-07-12  Zhifei Fang  <zhifei_fang@apple.com>

        run-javascriptcore-tests won't report test results for testmasm, testair, testb3, testdfg and test api
        https://bugs.webkit.org/show_bug.cgi?id=199489
        <rdar://problem/47891081>

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.countFailures):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * Scripts/run-javascriptcore-tests:
        (runTest):
        (reportTestFailures):
        (runJSCStressTests):

2019-07-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Make layout-tests' full_results.json accessible in Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=199743

        Reviewed by Jonathan Bedard.

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

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

        Unreviewed follow-up fix to r247364.
        [ews-build] Add build step to clean up .git/index.lock file
        https://bugs.webkit.org/show_bug.cgi?id=199722

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): CheckOutSource should not haltOnFailure since CleanUpGitIndexLock step needs
        to be run after this step.

2019-07-11  Yusuke Suzuki  <ysuzuki@apple.com>

        Flaky API Test TestWTF.bmalloc.ScavengedMemoryShouldBeReused
        https://bugs.webkit.org/show_bug.cgi?id=199524
        <rdar://problem/52783816>

        Reviewed by Saam Barati.

        This test is white-box one and it has strong assumption how IsoHeap allocates pages.
        But this test has several problems.

        1. IsoPage::numObjects is not the exact number of how many we allocate objects. This
           number is calculated by pageSize / sizeof(T), and this does not account the header
           size of IsoPage. So, # of objects per IsoPage is less than numObjects. Since sizeof(double)
           is very small, we can have many objects in one IsoPage. As a result, we need a large
           bitmap in IsoPage. This reduces # of objects in IsoPage largely. So, `ptrs.size()` becomes
           less than numObjects.

        2. We now have lower tier of allocation in IsoHeap. It means that we allocate 8 objects in
           shared page (page is shared, but memory is pinned for a specific type) before using IsoHeap's
           page. This also makes the intention of this test wrong.

        Due to (1), we access OoB of ptrs vector, passing a garbage to IsoHeap::deallocate, and crashing.

        We make this test robust while we still keep this test white-box one to test the critical feature
        of IsoHeap. We first exhaust lower tier of IsoHeap, and after that, start testing the memory. We
        allocate many pointers, deallocate them, allocate one pointer while keeping pointers in the lower
        tier live, and check whether the deallocated memory is reused.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (TEST):

2019-07-11  Pablo Saavedra  <psaavedra@igalia.com>

        [WPE][GTK] Build failure with ENABLE_ACCESSIBILITY=OFF
        https://bugs.webkit.org/show_bug.cgi?id=199625

        Added ENABLE(ACCESSIBILITY) and replaced HAVE(ACCESSIBILITY)
        with ENABLE(ACCESSIBILITY) in the code.

        Additionally, the TestRunner code generator now honors the
        Conditional IDL format.

        Reviewed by Konstantin Tokarev.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateImplementationFile):

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

        [ews-build] Add build step to clean up .git/index.lock file
        https://bugs.webkit.org/show_bug.cgi?id=199722

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource.getResultSummary): Run CleanUpGitIndexLock step when CheckOutSource fails.
        (CleanUpGitIndexLock.__init__): Configure timeout and logEnviron.
        (CleanUpGitIndexLock.evaluateCommand): Always RETRY the build after this step is run.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-11  Jonathan Bedard  <jbedard@apple.com>

        [iOS 13] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199481
        <rdar://problem/52619048>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Add iOS framework stubs.

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

        Add test expectations and baselines for iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=199329

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Increment current version to 13.
        * Scripts/webkitpy/port/ios_device_unittest.py: Update unit tests.
        (IOSDeviceTest.test_layout_test_searchpath_with_apple_additions):
        (IOSDeviceTest.test_layout_test_searchpath_without_apple_additions):
        (IOSDeviceTest.test_layout_searchpath_wih_device_type):
        * Scripts/webkitpy/port/ios_simulator_unittest.py: Ditto.
        (IOSSimulatorTest.make_port):
        (IOSSimulatorTest.test_layout_test_searchpath_with_apple_additions):
        (IOSSimulatorTest.test_layout_test_searchpath_without_apple_additions):
        (IOSSimulatorTest.test_layout_searchpath_wih_device_type):
        * Scripts/webkitpy/port/ios_testcase.py: Ditto.
        (IOSTest.make_port):

2019-07-11  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for ARIA roles insertion, deletion, subscript, superscript, and time
        https://bugs.webkit.org/show_bug.cgi?id=199692

        Reviewed by Chris Fleizach.

        Add support for output of AXDeletion and AXInsertion roles for tests.
        Update GTK and WPE jhbuild modules to use version of ATK and AT-SPI2
        which include ROLE_CONTENT_DELETION and ROLE_CONTENT_INSERTION.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

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

        [ews-build] Remove workers {ltilve,tanty}-gtk-wk2-ews from configuration
        https://bugs.webkit.org/show_bug.cgi?id=199707

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json: Remove old unused workers.

2019-07-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] With modal overlay and body overflow:hidden, can't access all the content
        https://bugs.webkit.org/show_bug.cgi?id=199693
        rdar://problem/51930364

        Reviewed by Tim Horton.

        New API tests that test scrollability with various combinations of content, insets,
        input accessory bars etc.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ScrollViewScrollabilityTests.mm: Added.
        (TestWebKitAPI::webViewWithAutofocusedInput):
        (TestWebKitAPI::TEST):

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

        Long pressing on attachments will crash the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=199696
        <rdar://problem/52920241>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        Add a test that previously crashed.

2019-07-10  Dean Jackson  <dino@apple.com>

        Support MacCatalyst in run-webkit-app
        https://bugs.webkit.org/show_bug.cgi?id=199690

        Reviewed by Tim Horton.

        Add a --maccatalyst option to run-webkit-app that
        can launch MacCatalyst applications with a built WebKit.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineXcodeSDK):
        (xcodeSDKPlatformName):
        (determineConfigurationProductDir):
        (determinePortName):
        (isCatalystWebKit):
        (isAppleCocoaWebKit):
        (willUseCatalystSDK):

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

        [MacOS] Filter VPA info logged to stdout
        https://bugs.webkit.org/show_bug.cgi?id=199673

        Reviewed by Eric Carlson.

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

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

        Unreviewed, rolling out r247286.

        Caused TestWTF.WTF.StringOperators to fail on debug bots

        Reverted changeset:

        "Add StringBuilder member function which allows makeString()
        style variadic argument construction"
        https://bugs.webkit.org/show_bug.cgi?id=198997
        https://trac.webkit.org/changeset/247286

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

        [ews-build] Explicitly use perl or python while invoking scripts
        https://bugs.webkit.org/show_bug.cgi?id=199669

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py: Explicitly added perl or python while invoking scripts.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-07-10  Guillaume Emont  <guijemont@igalia.com>

        Run tests on mips EWS
        https://bugs.webkit.org/show_bug.cgi?id=196854

        Reviewed by Carlos Garcia Campos.

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

2019-07-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] GUniqueOutPtr::release should return a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=199579

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WTF/glib/GUniquePtr.cpp:
        (TestWebKitAPI::TEST):

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

        Fix integer type encoding / decoding in WKRemoteObjectCoder
        https://bugs.webkit.org/show_bug.cgi?id=199643
        <rdar://problem/52732342>

        Reviewed by Anders Carlsson.

        Update API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn takeUnsignedLongLong:completionHandler:]):
        (-[RemoteObjectRegistryPlugIn takeLongLong:completionHandler:]):
        (-[RemoteObjectRegistryPlugIn takeUnsignedLong:completionHandler:]):
        (-[RemoteObjectRegistryPlugIn takeLong:completionHandler:]):

2019-07-09  Sam Weinig  <weinig@apple.com>

        Add StringBuilder member function which allows makeString() style variadic argument construction
        https://bugs.webkit.org/show_bug.cgi?id=198997

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        Add basic test showing that StringBuilder::flexibleAppend can be used to
        append one or more string adaptable types.

2019-07-09  Sihui Liu  <sihui_liu@apple.com>

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385
        <rdar://problem/52622080>

        Reviewed by Alex Christensen.

        removeDataOfTypes will no longer remove persistent credentials. We should clear persistent credentials using
        the new SPI after each test that creates persistent credentials, otherwise the later tests may use credentials
        left by previous tests and didReceiveAuthenticationChallenge will not be invoked.

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

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

        When parsing an IPv4 address, wait until after deciding it is indeed an IPv4 address before reporting syntax violations
        https://bugs.webkit.org/show_bug.cgi?id=199628

        Reviewed by Brady Eidson.

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

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

        Remove invalid assertion in URLParser::domainToASCII
        https://bugs.webkit.org/show_bug.cgi?id=199624

        Reviewed by Brady Eidson.

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

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

        URLParser should reserialize IPv6 addresses that end with a colon
        https://bugs.webkit.org/show_bug.cgi?id=199627

        Reviewed by Brady Eidson.

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

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

        [ews-build] Do not run unix commands for windows in PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=199605

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

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

        JSTestGlobalObject.cpp of bindings-generation-tests is failing for Windows Python
        https://bugs.webkit.org/show_bug.cgi?id=199487

        Reviewed by Ross Kirsling.

        In Windows Python, preprocessor.pm is using cl.exe. cl.exe was
        failing to open testglobalscope_constructors_file which was
        created by using tempfile.mkstemp() because it keeps the file
        open. Use tempfile.mkdtemp() to create temporary files in the
        temporary directory instead of tempfile.mkstemp().

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.run_tests):
        (BindingsTests.main):
        (BindingsTests.close_and_remove): Deleted.

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

        [ews-build] Add KillOldProcesses step before running API or Layout tests
        https://bugs.webkit.org/show_bug.cgi?id=199592

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

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

        test-webkitpy: Explicitly use Python 2.7 lldb library
        https://bugs.webkit.org/show_bug.cgi?id=199578
        <rdar://problem/51853557>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.path_to_lldb_python_directory): Explicitly use Python 2.7 lldb libary.
        * Scripts/webkitpy/test/main.py:
        (_supports_building_and_running_lldb_tests): Run lldb tests on Catalina again.

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

        Add test expectations and baselines for Catalina
        https://bugs.webkit.org/show_bug.cgi?id=199328

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/port/mac.py:
        (MacPort): Increment current version to 10.15 so that baseline search paths are correctly constructed for High Sierra.

2019-07-08  Christopher Reid  <chris.reid@sony.com>

        Implement MappedFileData for Windows
        https://bugs.webkit.org/show_bug.cgi?id=198269

        Reviewed by Darin Adler.

        * TestWebKitAPI/PlatformWin.cmake:

2019-07-08  Charlie Turner  <cturner@igalia.com>

        REGRESSION(r243197): [GStreamer] Web process hangs when scrolling twitter timeline which contains HLS videos
        https://bugs.webkit.org/show_bug.cgi?id=197558

        Reviewed by Xabier Rodriguez-Calvar.

        On shutdown we can easily deadlock the web process if we don't
        ensure all network operations are completed before comitting state
        changes. In HLS, make sure the network operations are cancelled,
        and also prevent hlsdemux's retry logic from scuppering our
        efforts.

        * gstreamer/jhbuild.modules: Include the patch.
        * gstreamer/patches/gst-plugins-bad-do-not-retry-downloads-during-shutdown.patch: Added.

2019-07-08  Antoine Quint  <graouts@apple.com>

        [Pointer Events] Enable only on the most recent version of the supported iOS family
        https://bugs.webkit.org/show_bug.cgi?id=199562
        <rdar://problem/52766511>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-07-06  Simon Fraser  <simon.fraser@apple.com>

        Long hang when loading a cnn.com page on iOS
        https://bugs.webkit.org/show_bug.cgi?id=199556

        Reviewed by Zalan Bujtas.

        Add code to load a page by default in MobileMiniBrowser so it's easy to hack it
        to load a test page of your choice.

        * MobileMiniBrowser/MobileMiniBrowserFramework/WebViewController.m:
        (-[WebViewController viewDidLoad]):

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

        [iOS] Crash in WebKit::WebPage::positionInformation via Range::startPosition
        https://bugs.webkit.org/show_bug.cgi?id=199503

        Reviewed by Wenson Hsieh.

        Added UIScriptController.ensurePositionInformationIsUpToDateAt using the existing WKWebView SPI:
        _requestActivatedElementAtPosition

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):
        * WebKitTestRunner/ios/UIScriptControllerMac.mm:
        (WTR::UIScriptController::ensurePositionInformationIsUpToDateAt):

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

        Unreviewed, rolling out r247115.

        Breaks lldbWebKitTester (and by extension, test-webkitpy)

        Reverted changeset:

        "[WHLSL] Standard library is too big to directly include in
        WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=198186
        https://trac.webkit.org/changeset/247115

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

        Unreviewed, rolling out r247123.

        Caused TestWebKitAPI.Challenge.BasicProposedCredential to
        fail.

        Reverted changeset:

        "Only allow fetching and removing session credentials from
        WebsiteDataStore"
        https://bugs.webkit.org/show_bug.cgi?id=199385
        https://trac.webkit.org/changeset/247123

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

        Touching media controls sometimes shows software keyboard
        https://bugs.webkit.org/show_bug.cgi?id=199490
        <rdar://problem/52076270>

        Reviewed by Eric Carlson.

        Adds plumbing for a new testing hook to check whether or not there is an active input session. See other
        ChangeLog entries for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::hasInputSession const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::hasInputSession const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::hasInputSession const):

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

        [ews-build] Remove GTK and WPE queue from old EWS and dashboard
        https://bugs.webkit.org/show_bug.cgi?id=199458

        Reviewed by Michael Catanzaro.

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

2019-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix browserperfdash script after r239522
        https://bugs.webkit.org/show_bug.cgi?id=199496

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:
        (BrowserPerfDashRunner.run): Pass None for the new required BenchmarkRunner constructor.

2019-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [webkitpy] test-webkitpy is broken on Linux since r246662
        https://bugs.webkit.org/show_bug.cgi?id=199493

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/test/main.py:
        (_supports_building_and_running_lldb_tests): Add a check for None before calling startswith().

2019-07-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Not longer needed to build woff2 on the JHBuild
        https://bugs.webkit.org/show_bug.cgi?id=199406

        Reviewed by Michael Catanzaro.

        Install the Woff2 libraries and headers from the system package
        and stop building them on the JHBuild.

        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

2019-07-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE][CMake] The CMake cache should be clean when the JHBuild is rebuilt
        https://bugs.webkit.org/show_bug.cgi?id=199449

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): Clean the CMake cache if we detect that the JHBuild has been rebuilt.

2019-07-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK a11y tests fix after r247071

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

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

        [ews-build] Enable WPE and GTK queues on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199234

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the triggers for GTK and WPE builders.
        * BuildSlaveSupport/ews-build/factories.py: Added required build steps for GTKFactory and WPEFactory.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Added InstallGtkDependencies/InstallWpeDependencies step before Compiling WebKit without patch.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enable gtk and wpe status-bubbles.

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

        Only allow fetching and removing session credentials from WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=199385

        Reviewed by Alex Christensen.

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

2019-07-03  Tim Horton  <timothy_horton@apple.com>

        UI process exception when dragging an <attachment> with no content type
        https://bugs.webkit.org/show_bug.cgi?id=199480
        <rdar://problem/44351353>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        Add a test; before the change, it crashes.

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

        [Catalina] Enable WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=199209

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig: Add Mac framework stubs.

2019-07-03  Sam Weinig  <weinig@apple.com>

        Adopt simple structured bindings in more places
        https://bugs.webkit.org/show_bug.cgi?id=199247

        Reviewed by Alex Christensen.

        Replaces simple uses of std::tie() with structured bindings. Does not touch
        uses of std::tie() that are not initial declarations, use std::ignore or in
        case where the binding is captured by a lambda, as structured bindings don't
        work for those cases yet.

        * TestWebKitAPI/ios/PreferredContentMode.mm:
        (TestWebKitAPI::TEST):

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

        Unreviewed follow-up fix to r247049, default the platform to '*' when platform property is not set.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration.run):

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build steps to Install Wpe and Gtk dependencies
        https://bugs.webkit.org/show_bug.cgi?id=199408

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/ews-build/steps.py:
        (InstallGtkDependencies): Build step to install dependencies for GTK. Set haltOnFailure=False so that in case of failure, build isn't
        marked as failed (which would indicated patch failed EWS), instead subsequent steps would be run and the build would be marked as RETRY.
        (InstallWpeDependencies): Ditto for WPE.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Allow skipping uploading built product for few builders
        https://bugs.webkit.org/show_bug.cgi?id=199422

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.__init__): Added optional skipUpload parameter.
        (CompileWebKit.evaluateCommand): Allow to skip upload if there are no triggers and skipUpload is True.

2019-07-02  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r243240): Unable to swipe back in Safari
        https://bugs.webkit.org/show_bug.cgi?id=199394
        <rdar://problem/51137447>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Make sure that we actually end up with swipe gesture recognizers installed
        after process swap and crash.

2019-07-02  Andres Gonzalez  <andresg_22@apple.com>

        Enhance support of aria-haspopup per ARIA 1.1 specification.
        https://bugs.webkit.org/show_bug.cgi?id=199216
        <rdar://problem/46221342>

        Reviewed by Chris Fleizach.

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

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not print worker environment variables in each build step [part 2]
        https://bugs.webkit.org/show_bug.cgi?id=199405

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSpecificRevision.__init__): Disabled logging of environment variables.
        (CleanWorkingDirectory.__init__): Ditto.
        (RunBindingsTests.__init__): Ditto.
        (RunWebKitPerlTests.__init__): Ditto.
        (RunWebKitPyTests.__init__): Ditto.
        (CompileWebKit.__init__): Ditto.
        (ArchiveTestResults.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-07-02  Jer Noble  <jer.noble@apple.com>

        Pipe suport for 'cenc' init data type into CDMFairPlayStreaming
        https://bugs.webkit.org/show_bug.cgi?id=199381
        <rdar://problem/52483103>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp:

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update bot configuration for WPE and GTK
        https://bugs.webkit.org/show_bug.cgi?id=199238

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/ews-build/config.json:

2019-07-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Make PrintConfiguration platform aware
        https://bugs.webkit.org/show_bug.cgi?id=196657

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Specified platform-specific command lists.
        (PrintConfiguration.run): Override run method and specify platform specific commands.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-07-01  Justin Michaud  <justin_michaud@apple.com>

        [Wasm-References] Disable references by default
        https://bugs.webkit.org/show_bug.cgi?id=199390

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

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

        Unreviewed. Revert r246965 to fix build break
        since r247019 reverted its related changes.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::popupValue const): Deleted.

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

        Add new decidePolicyForNavigationAction SPI with preferences and userInfo
        https://bugs.webkit.org/show_bug.cgi?id=199371
        <rdar://problem/52352905>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[NavigationActionSPIDelegate webView:didFinishNavigation:]):
        (-[NavigationActionSPIDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[NavigationActionSPIDelegate spiCalled]):
        (TEST):

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

        Deprecate _webView:showCustomSheetForElement: after transition to UIContextMenuInteraction
        https://bugs.webkit.org/show_bug.cgi?id=199296
        <rdar://problem/51041960>

        Reviewed by Darin Adler.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _webView:showCustomSheetForElement:]):

2019-07-01  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r246958.

        Broke inspector/dom/getAccessibilityPropertiesForNode.html

        Reverted changeset:

        "Enhance support of aria-haspopup per ARIA 1.1 specification."
        https://bugs.webkit.org/show_bug.cgi?id=199216
        https://trac.webkit.org/changeset/246958

2019-07-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK a11y tests fix after r246958

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

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

        Enhance support of aria-haspopup per ARIA 1.1 specification.
        https://bugs.webkit.org/show_bug.cgi?id=199216
        <rdar://problem/46221342>

        Reviewed by Chris Fleizach.

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

2019-06-28  Robin Morisset  <rmorisset@apple.com>

        Adding myself as a reviewer to contributors.json.

        Unreviewed.

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

2019-06-28  Jer Noble  <jer.noble@apple.com>

        Add new -[WKWebView _closeAllMediaPresentations] SPI
        https://bugs.webkit.org/show_bug.cgi?id=199294
        <rdar://problem/51965958>

        Reviewed by Alex Christensen.

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

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

        Add a regression test for change r246901
        https://bugs.webkit.org/show_bug.cgi?id=199290

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (-[LocalStorageNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/localstorage-open-window-private.html: Added.

2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
        https://bugs.webkit.org/show_bug.cgi?id=199317

        Reviewed by Michael Catanzaro.

        While IconDatabase and all code using it was removed,
        ENABLE_ICONDATABASE still exists as build option and C++ macro.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * gtk/manifest.txt.in: Remove reference to unused urlIcon.png file.
        * wpe/manifest.txt.in: Remove reference to unused urlIcon.png file.

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

        -[WKContentView _selectionClipRects] returns a bogus value in -reloadInputViews when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=199310
        <rdar://problem/52292137>

        Reviewed by Megan Gardner.

        Add a new API test to verify that _selectionClipRects returns the correct value when invoked under the scope of
        _elementDidFocus.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setDidStartInputSessionHandler:]):
        (-[TestInputDelegate didStartInputSessionHandler]):

        Add plumbing for a handler block in TestInputDelegate.

        (-[TestInputDelegate setWillStartInputSessionHandler:]):

        Drive-by style fixes to add a space between id and < for Objective-C protocols.

        (-[TestInputDelegate willStartInputSessionHandler]):
        (-[TestInputDelegate _webView:willStartInputSession:]):
        (-[TestInputDelegate _webView:didStartInputSession:]):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/ios/UIKitSPI.h:

        Add a declaration for _selectionClipRects.

2019-06-27  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r244633): e-mail with "height: 100%" causes unstable layout.
        https://bugs.webkit.org/show_bug.cgi?id=199303
        <rdar://problem/51340927>

        Reviewed by Tim Horton.

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

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * ContentExtensionTester/Configurations/SDKVariant.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig:
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        * WebEditingTester/Configurations/SDKVariant.xcconfig:
        * WebKitLauncher/Configurations/SDKVariant.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig:

2019-06-27  Saam Barati  <sbarati@apple.com>

        Make WEBGPU enabled only on Mojave and later.

        Rubber-stamped by Myles C. Maxfield.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [ews-build] Do not print worker environment variables in each build step
        https://bugs.webkit.org/show_bug.cgi?id=197319

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource.__init__): Disabled logging of environment variables.
        (ApplyPatch.__init__): Ditto.
        (KillOldProcesses.__init__): Ditto.
        (ArchiveBuiltProduct.__init__): Ditto.
        (DownloadBuiltProduct.__init__): Ditto.
        (ExtractBuiltProduct.__init__): Ditto.
        (RunAPITests.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests accordingly.

2019-06-26  Jiewen Tan  <jiewen_tan@apple.com>

        SubFrameSOAuthorizationSession should preserve the referrer header when fall back to web path
        https://bugs.webkit.org/show_bug.cgi?id=199232
        <rdar://problem/51718328>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (TestWebKitAPI::TEST):
        Add a test that utilizes TCPServer as local files always omit referrer.

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

        [ews-build] Add configuration and architecture for WPE and GTK builders
        https://bugs.webkit.org/show_bug.cgi?id=199249

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        [ews-build] Add check for duplicate workers in config.json
        https://bugs.webkit.org/show_bug.cgi?id=199240

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (checkWorkersAndBuildersForConsistency._find_worker_with_name): Check for duplicate worker entry.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (TestcheckWorkersAndBuildersForConsistency.test_duplicate_worker): Added unit-test.

2019-06-26  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] MiniBrowser should make better font choices
        https://bugs.webkit.org/show_bug.cgi?id=199244

        Reviewed by Brent Fulgham.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::updateDeviceScaleFactor):
        * MiniBrowser/win/MiniBrowserLib.rc:

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

        testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set
        https://bugs.webkit.org/show_bug.cgi?id=199230
        <rdar://51757107>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp:
        (TestWebKitAPI::didGetTestHTTPCookieAcceptPolicy):
        (TestWebKitAPI::didGetUserHTTPCookieAcceptPolicy):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundleWithListener):
        (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundleWithListener):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundle): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-06-26  Ross Kirsling  <ross.kirsling@sony.com>

        [Win][MiniBrowser] Remove obsolete code after r246814.
        https://bugs.webkit.org/show_bug.cgi?id=199233

        Reviewed by Fujii Hironori.

        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFinishLoadForFrame):
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.

2019-06-25  Jiewen Tan  <jiewen_tan@apple.com>

        Implement a new SPI to inform clients about AppSSO
        https://bugs.webkit.org/show_bug.cgi?id=199085
        <rdar://problem/50028246>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationBasicDelegate webView:didFinishNavigation:]):
        (-[TestSOAuthorizationNavigationDelegate init]):
        (-[TestSOAuthorizationNavigationDelegate _webView:decidePolicyForSOAuthorizationLoadWithCurrentPolicy:forExtension:completionHandler:]):
        (TestWebKitAPI::TEST):

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

        [ews-build] Retry Layout test in case of failures
        https://bugs.webkit.org/show_bug.cgi?id=199194

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.evaluateCommand): Check if tests failed and retry them if required.
        (ReRunWebKitTests): Build step to re-run layout tests.
        (ReRunWebKitTests.evaluateCommand): Check if tests failed and retry on clean build if required.
        (RunWebKitTestsWithoutPatch): Build step to run tests without patch.
        (RunWebKitTestsWithoutPatch.evaluateCommand):

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

        [ews-build] Combine various patchFailed*Tests properties
        https://bugs.webkit.org/show_bug.cgi?id=199193

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py: Renamed patchFailedJSCTests and patchFailedAPITests to patchFailedTests. This property
        can also be used for layout-tests later on.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-06-25  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] MiniBrowser should default to webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=199201

        Reviewed by Don Olmstead.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/MiniBrowserReplace.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::loadHTMLString): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::loadHTMLString): Deleted.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

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

        [iOS] Occasional crash under -[UIPreviewTarget initWithContainer:center:transform:] when generating a drag preview
        https://bugs.webkit.org/show_bug.cgi?id=199192
        <rdar://problem/51554509>

        Reviewed by Tim Horton.

        Tweak the drag and drop simulator to ask for drag cancellation previews, and use this to write a couple tests to
        verify that we gracefully handle web process termination and web view unparenting mid-drag.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator liftPreviews]):
        (-[DragAndDropSimulator cancellationPreviews]):
        (-[DragAndDropSimulator setSessionWillBeginBlock:]):
        (-[DragAndDropSimulator sessionWillBeginBlock]):
        (-[DragAndDropSimulator _webView:dataInteraction:sessionWillBegin:]):

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

        [ews-build] UploadTestResults and ExtractTestResults clobber results in case of multiple layout test runs in a build
        https://bugs.webkit.org/show_bug.cgi?id=199178

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (UploadTestResults.__init__): Add an optional identifier and append the identifier to the file name.
        (ExtractTestResults.__init__): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit tests.

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

        Add user agent quirk for bankofamerica.com
        https://bugs.webkit.org/show_bug.cgi?id=199154

        Reviewed by Carlos Garcia Campos.

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

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

        Fully rename WebKitGTK+ -> WebKitGTK everywhere
        https://bugs.webkit.org/show_bug.cgi?id=199159

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/gtk/README:
        * MiniBrowser/gtk/BrowserWindow.c:
        * MiniBrowser/gtk/main.c:
        (aboutURISchemeRequestCallback):
        * Scripts/webkitpy/common/config/contributionareas.py:
        * Scripts/webkitpy/common/config/contributors.json:
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py:
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewResources):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewMouseTarget):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testDocumentLoadedSignal):
        (testWebExtensionFormControlsAssociated):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettingsUserAgent):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewRunJavaScript):
        * TestWebKitAPI/Tests/WebKitGtk/InspectorTestServer.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (prepareContextMenuTestView):
        (testContextMenuPopulateMenu):
        (testContextMenuCustomMenu):
        (testContextMenuDisableMenu):
        (testContextMenuSubMenu):
        (testContextMenuDismissed):
        (testContextMenuWebExtensionMenu):
        (testContextMenuWebExtensionNode):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        (testInspectorCustomContainerDestroyed):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        (testWebViewPrint):
        (testPrintOperationPrint):
        (testPrintOperationErrors):
        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * gtkdoc/generate-gtkdoc:
        * wpe/install-dependencies:

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

        contributors.json not canonicalized since r243297
        https://bugs.webkit.org/show_bug.cgi?id=199161

        Reviewed by Alexey Proskuryakov.

        Canonicalize it using 'validate-committer-lists --canonicalize'

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

2019-06-24  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Build style should be lower-case
        https://bugs.webkit.org/show_bug.cgi?id=199158

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Make all styles lower-case.

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

        [ews-build] Remove iOS queue from old EWS and dashboard
        https://bugs.webkit.org/show_bug.cgi?id=199150

        Reviewed by Jonathan Bedard.

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

2019-06-21  Ryan Haddad  <ryanhaddad@apple.com>

        API Test [Mojave+ WK2 Debug ] TestWebKitAPI.WKAttachmentTestsMac.InsertDroppedFilePromisesAsAttachments is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=198795

        Unreviewed test gardening.

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

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

        [ews-build] Enable iOS-12-Build queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199149

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enable iOS-12-Build-EWS trigger. Also temporarily share ews152 and ews154 with
        this queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Enable ios status-bubble. Also display the ios bubble first (left). Going forward
        will keep the builders to the left and testers to the right.

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

        [ews-build] Upload test results after running layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=199120

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.evaluateCommand):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

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

        [ews-build] EWS should provide option to download layout test results zip file
        https://bugs.webkit.org/show_bug.cgi?id=199121

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ExtractTestResults.resultsDownloadURL): Method to return layout test result zip file url.
        (ExtractTestResults.addCustomURLs): Add url to download layout test results zip file.

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

        Add user agent quirk for Google Drive
        https://bugs.webkit.org/show_bug.cgi?id=199153

        Reviewed by Carlos Garcia Campos.

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

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

        [LFC] Expand tests coverage (328 new tests -> 2652).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-22  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility objects contained in links should honor the aria-haspopup attribute in the ancestor link.
        https://bugs.webkit.org/show_bug.cgi?id=199107
        <rdar://problem/43663611>

        Reviewed by Chris Fleizach.

        iOS implementation for AccessibilityUIElement::hasPopup.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::hasPopup const):

2019-06-22  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, add myself to CMake watchlist

        * Scripts/webkitpy/common/config/watchlist:

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

        openDatabase should return an empty object when WebSQL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=198805

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebSQLBasics.mm: Added.
        (-[WebSQLBasicsMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/opendatabase-always-exists.html: Added.

2019-06-21  Jiewen Tan  <jiewen_tan@apple.com>

        WebPageProxy::loadData should accept ShouldOpenExternalURLsPolicy
        https://bugs.webkit.org/show_bug.cgi?id=199114
        <rdar://problem/51671674>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationNavigationDelegate init]):
        (-[TestSOAuthorizationNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (configureSOAuthorizationWebView):
        (TestWebKitAPI::TEST):

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

        WebPageProxy should use the right path for sandbox extension
        https://bugs.webkit.org/show_bug.cgi?id=198902
        <rdar://problem/50772810>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [WPE][GTK] Bump minimum versions of GLib, GTK, libsoup, ATK, GStreamer, and Cairo
        https://bugs.webkit.org/show_bug.cgi?id=199094

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserTab.c:
        (runColorChooserCallback):
        (browserTabConstructed):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewSyncRequestOnMaxConns):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testWebSocketTLSErrors):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::~WebKitTestServer):
        (WebKitTestServer::getWebSocketURIForPath const):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::stringAtOffset):

2019-06-20  Dean Johnson  <dean_johnson@apple.com>

        test-webkitpy is broken on macOS Catalina
        https://bugs.webkit.org/show_bug.cgi?id=199078

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/test/main.py: Check if lldb tests are supported before adding them
        to the runner.
        (main):
        (_supports_building_and_running_lldb_tests): Check if you are running macOS Catalina.

2019-06-20  Dean Johnson  <dean_johnson@apple.com>

        Change status to "committer" in contributors.json

        Unreviewed.

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

2019-06-20  Alex Christensen  <achristensen@webkit.org>

        Add unit test for UIContextMenuConfiguration API
        https://bugs.webkit.org/show_bug.cgi?id=199043

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm: Added.
        (-[TestContextMenuUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuUIDelegate webView:contextMenuWillPresentForElement:]):
        (-[TestContextMenuUIDelegate webView:contextMenuForElement:willCommitWithAnimator:]):
        (-[TestContextMenuUIDelegate webView:contextMenuDidEndForElement:]):
        (TEST):
        * TestWebKitAPI/cocoa/TestContextMenuDriver.h: Added.
        * TestWebKitAPI/cocoa/TestContextMenuDriver.mm: Added.
        (-[TestContextMenuDriver delegate]):
        (-[TestContextMenuDriver setDelegate:]):
        (-[TestContextMenuDriver view]):
        (-[TestContextMenuDriver setView:]):
        (-[TestContextMenuDriver allowableMovement]):
        (-[TestContextMenuDriver setAllowableMovement:]):
        (-[TestContextMenuDriver primaryGestureRecognizer]):
        (-[TestContextMenuDriver setPrimaryGestureRecognizer:]):
        (-[TestContextMenuDriver touchDuration]):
        (-[TestContextMenuDriver setTouchDuration:]):
        (-[TestContextMenuDriver locationInCoordinateSpace:]):
        (-[TestContextMenuDriver cancelInteraction]):
        (-[TestContextMenuDriver begin:]):
        (-[TestContextMenuDriver clickDown]):
        (-[TestContextMenuDriver clickUp]):
        (-[TestContextMenuDriver end]):
        * TestWebKitAPI/ios/UIKitSPI.h:

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

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

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-06-20  Alex Christensen  <achristensen@webkit.org>

        Fix an internal engineering build after r246605
       ​https://bugs.webkit.org/show_bug.cgi?id=197800

        * TestWebKitAPI/TCPServer.cpp:

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

        [ews-build] Triggered builds should use same revision as parent build
        https://bugs.webkit.org/show_bug.cgi?id=198289

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSpecificRevision): Build step to checkout specific revision.
        (CheckOutSpecificRevision.doStepIf): Run this step only if ews_revision property is set.
        (CheckOutSpecificRevision.hideStepIf): Hide this step when it is skipped.
        (CheckOutSpecificRevision.start): Run appropriate git command.
        (Trigger.propertiesToPassToTriggers): Pass ews_revision property to triggered builds, so that triggered
        builds use same revision as parent build.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Added CheckOutSpecificRevision step.

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

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

        Reviewed by Jonathan Bedard.

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

2019-06-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Enable navigation swipe layout tests
        https://bugs.webkit.org/show_bug.cgi?id=198995

        Reviewed by Michael Catanzaro.

        Add a way for tests to enable and then control swipe gesture on GTK.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp: Hide
        empty implementations of beginBackSwipe() and completeBackSwipe() for GTK.
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setNavigationGesturesEnabled): Implemented.
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp: Added.
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):

2019-06-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] HTTP layout tests don't run in flatpak
        https://bugs.webkit.org/show_bug.cgi?id=199067

        Reviewed by Michael Catanzaro.

        Stop bind mounting /app/lib/perl to /etc/perl because Perl doesn't actually
        check that path. Instead, add /app/lib/perl to Apache config directly.

        /usr/manifest.json file is not guaranteed to exist in sandbox, check for
        /.flatpak-info instead.

        * Scripts/webkitpy/port/base.py:
        (Port._is_flatpak):
        (Port._in_flatpak_sandbox):
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):
        (is_sandboxed):

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

        Tidy up the remaining bits of the AtomicString to AtomString rename
        https://bugs.webkit.org/show_bug.cgi?id=198990

        Reviewed by Michael Catanzaro.

        * Scripts/do-webcore-rename: Removed already-done renames.
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp: Rename one use of "atomic".

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

        [GTK] Remove support for GTK2 plugins
        https://bugs.webkit.org/show_bug.cgi?id=199065

        Reviewed by Sergio Villar Senin.

        * EWSTools/ubuntu-ews-packages:
        * TestWebKitAPI/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * flatpak/org.webkit.GTK.yaml:
        * gtk/install-dependencies:

2019-06-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] IsoHeap's initialization is racy with IsoHeap::isInitialized
        https://bugs.webkit.org/show_bug.cgi?id=199053

        Reviewed by Saam Barati.

        Added a test stressing IsoHeap with multiple threads.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (assertHasObjects):
        (assertHasOnlyObjects):
        (assertClean):
        (TEST):

2019-06-19  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (1126 new tests -> 2324).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        Add WTF::crossThreadCopy(T&&) to utilize String::isolatedCopy() &&
        https://bugs.webkit.org/show_bug.cgi?id=198957

        Reviewed by Alex Christensen.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/CrossThreadCopier.cpp: Added.

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

        Relocate some test tools in non-mac builds
        https://bugs.webkit.org/show_bug.cgi?id=198984
        <rdar://problem/51873261>

        Reviewed by Andy Estes.

        The tools DumpRenderTree, WebKitTestRunner, LayoutTestHelper, and
        TestNetscapePlugin get created in
        WebKit.framework/Versions/A/Resources on non-mac builds. This is
        incorrect, as those bundles are shallow bundles that don't use the
        Versions hierarchy. Instead, store these files directly in
        WebKit.framework.

        Note that getting rid of just the "Versions/A" path components and
        putting the files in WebKit.framework/Resources doesn't work as
        `codesign` treats the result as an invalid layout.

        The work in this patch involves changing the definition of the custom
        build variable WEBKIT_FRAMEWORK_RESOURCES_PATH. The standard build
        variable INSTALL_PATH is defined in terms of this variable. In order
        to increase visiblity into this relationship, move both of these
        variables into .xcconfig files if they weren't already. This
        refactoring was done in a way to be the least disruptive and most
        compatible with the previous definitions, even at the cost of being
        repetitive.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig:
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig:
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig:

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

        [ews-build] Patch link should open the pretty patch
        https://bugs.webkit.org/show_bug.cgi?id=199031

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.getPatchURL): Use the prettypatch url for patch.

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

        [ews-build] Add step to analyze Compile WebKit failures
        https://bugs.webkit.org/show_bug.cgi?id=199025

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Add AnalyzeCompileWebKitResults step.
        (CompileWebKitToT): set haltOnFailure to False since we need to run AnalyzeCompileWebKitResults step.
        (AnalyzeCompileWebKitResults): Class to analyze compile webkit steps results.
        (AnalyzeCompileWebKitResults.start): If ToT fails to build, retry the build, else marked the build as failed. Note that
        this step is run only when compile-webkit failed.

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

        [ews-build] Send email notifications for failures
        https://bugs.webkit.org/show_bug.cgi?id=198919

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-06-19  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Youenn Fablet.

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

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

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

        Unreviewed, fix build warnings in TestWebKitAPIInjectedBundle

        System headers are being included without SYSTEM again here.

        * TestWebKitAPI/PlatformGTK.cmake:

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

        [JSC] JSLock should be WebThread aware
        https://bugs.webkit.org/show_bug.cgi?id=198911

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/JSLockTakesWebThreadLock.mm: Added.
        (TestWebKitAPI::TEST):

2019-06-18  Keith Miller  <keith_miller@apple.com>

        webkit-patch should allow for a bugzilla url not just bugzilla id
        https://bugs.webkit.org/show_bug.cgi?id=198972

        Reviewed by Dewei Zhu.

        When prompting for a bugzilla id or a new title we should also
        allow for a bugzilla url.

        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        (PromptForBugOrTitle.run):

2019-06-18  David Quesada  <david_quesada@apple.com>

        REGRESSION: _WKDownload.OriginatingWebView and _WKDownload.CrashAfterDownloadDidFinishWhenDownloadProxyHoldsTheLastRefOnWebProcessPool failing
        https://bugs.webkit.org/show_bug.cgi?id=198954
        rdar://problem/51711556

        Reviewed by Alex Christensen.

        For these tests, kill the web process after the download starts. This makes the deallocation
        of the download-originating web views, which these tests depend on, more reliable.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
        (-[WaitUntilDownloadCanceledDelegate _downloadDidStart:]):

2019-06-18  Dan Bernstein  <mitz@apple.com>

        Revert workaround for bug 198904 from run-webkit-archive
        https://bugs.webkit.org/show_bug.cgi?id=198931

        Reviewed by Alexey Proskuryakov.

        Reverted r245965, now that the load commands in the XPC service binaries make them correctly
        pick up the built frameworks.

        * WebKitArchiveSupport/run-webkit-archive:
        (set_dyld_framework_path):

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

        -[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=198854
        <rdar://problem/51386058>

        Reviewed by Geoffrey Garen.

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

2019-06-17  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak][JHBuild] Update build environments to use WPEBackend-fdo 1.3.1
        https://bugs.webkit.org/show_bug.cgi?id=198831

        Reviewed by Žan Doberšek.

        * flatpak/org.webkit.WPEModules.yaml: Bump versions of libwpe and WPEBackend-fdo to 1.3.1
        * wpe/jhbuild.modules: Ditto.
        * wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Removed.
        * wpe/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Removed.

2019-06-17  Jiewen Tan  <jiewen_tan@apple.com>

        Move SOAuthorization from WebKitAdditions to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=198874
        <rdar://problem/47573431>

        Reviewed by Brent Fulgham.

        This patch moves all SOAuthorization tests from WebKitAdditions to WebKit.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm: Added.
        (-[TestSOAuthorizationNavigationDelegate init]):
        (-[TestSOAuthorizationNavigationDelegate webView:didFinishNavigation:]):
        (-[TestSOAuthorizationNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[TestSOAuthorizationNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[TestSOAuthorizationViewController viewDidAppear]):
        (-[TestSOAuthorizationViewController viewDidDisappear]):
        (overrideCanPerformAuthorizationWithURL):
        (overrideSetDelegate):
        (overrideBeginAuthorizationWithURL):
        (overrideCancelAuthorization):
        (overrideAddObserverForName):
        (overrideIsURLFromAppleOwnedDomain):
        (resetState):
        (configureSOAuthorizationWebView):
        (generateHtml):
        (checkAuthorizationOptions):
        (TestWebKitAPI::TEST):

2019-06-17  Brent Fulgham  <bfulgham@apple.com>

        Ensure ITP state is relayed to Network Process on restart
        https://bugs.webkit.org/show_bug.cgi?id=198797
        <rdar://problem/51646944>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (cleanupITPDatabase): Added.
        (TEST:EnableDisableITP): Update to use cleanup method.
        (TEST:NetworkProcessRestart): Added.

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

        New EWS can't process patches larger than 640kb
        https://bugs.webkit.org/show_bug.cgi?id=198851

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/master.cfg: Increase the patch size limit to 100 MB.

2019-06-17  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add macOS Catalina, iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=198492

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Catalina.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Catalina@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS13Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        * BuildSlaveSupport/ews-build/steps.py:
        * Scripts/webkitpy/common/version_name_map.py:
        * Scripts/webkitpy/common/version_name_map_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2019-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK] Bump WPEBackend-fdo requirement to 1.3.1

        * gtk/jhbuild.modules:
        * gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Removed.
        * gtk/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Removed.

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (325 new tests -> 1198).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        Rename AtomicString to AtomString
        https://bugs.webkit.org/show_bug.cgi?id=195276

        Reviewed by Michael Catanzaro.

        * many files: Let do-webcore-rename do the renaming.

        * Scripts/do-webcore-rename: Updated with a list of all the identifiers
        that mention "atomic string" and changed them to instead say "atom string".

2019-06-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Unreviewed test gardening.

        Unsupported alignments.

        fast/inline/absolute-positioned-inline-in-centred-block.html -align: center
        fast/borders/empty-outline-border-assert.html -vertical-align: super
        css2.1/20110323/vertical-align-boxes-001.htm - vertical-align: middle

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        WPT test importer WTR option reader should not throw if the file is not proper UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=198780

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter._webkit_test_runner_options):
        In case the test file cannot be read as text, consider that there is no WTR option.

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

        WebResourceLoadStatisticsStore should not use its network session if invalidated
        https://bugs.webkit.org/show_bug.cgi?id=198814

        Reviewed by Geoffrey Garen.

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

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

        import-w3c-tests should respect WEBKIT_OUTPUTDIR
        https://bugs.webkit.org/show_bug.cgi?id=198682
        <rdar://problem/51536931>

        Reviewed by Jonathan Bedard.

        Check for WEBKIT_OUTPUTDIR environment variable to compute the w3c-tests folder.
        Made some refactoring to also teach WPTPaths users about WEBKIT_OUTPUTDIR.

        * Scripts/webkitpy/common/webkit_finder.py:
        (WebKitFinder.path_from_webkit_outputdir):
        * Scripts/webkitpy/w3c/common.py:
        (WPTPaths):
        (WPTPaths.checkout_directory):
        (WPTPaths.wpt_checkout_path):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.__init__):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (test_checkout_directory):

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

        REGRESSION (r246103) [ Mojave+ WK1 ] Layout Test scrollbars/scrollbar-iframe-click-does-not-blur-content.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=198800
        <rdar://problem/51679634>

        Reviewed by Tim Horton.

        We didn't detect an NSScroller in a sub-frame due to WebHTMLView's implementation of -[NSView hitTest:]. We now use a private method
        which lets us use the default implementation and correctly returns an NSScroller in a sub-frame.

        * DumpRenderTree/mac/EventSendingController.mm:
        (eventPressedMouseButtonsSwizzlerForViewAndEvent):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):

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

        [WinCairo][WebKitTestRunner] pixel image dump outputs blank images
        https://bugs.webkit.org/show_bug.cgi?id=198820

        Reviewed by Ross Kirsling.

        WebView window paints nothing because it is moved out of the
        screen. Send WM_PRINT with memory DC instead of WM_PAINT as well
        as DumpRenderTree does.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Send WM_PRINT instead of BitBlt.

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

        Make it possible for validate-committer-lists to dump a mailmap file
        https://bugs.webkit.org/show_bug.cgi?id=198517

        Reviewed by Simon Fraser.

        Mailmaps wildly improve the output of various Git tools, including
        `git shortlog -sne`, mapping committers to our canonical name/email pair.

        * Scripts/validate-committer-lists:
        (CommitterListFromGit):
        (CommitterListBugzillaChecker.print_committers_with_invalid_bugzilla_emails):
        Add some missing legacy username mappings.

        (dump_mailmap):
        (dump_mailmap.format_email):
        (dump_mailmap.format_email_with_gitsvn_uuid):
        (dump_mailmap.map_emails_to_legacy_username):
        (main):
        Add `validate-committer-lists --dump-mailmap`, which generates
        one given committers.json and the existing mapping of legacy username
        to email addresses that exists in validate-committer-lists.

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

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

        Reviewed by Jonathan Bedard.

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

22019-06-11  Brent Fulgham  <bfulgham@apple.com>

        Add mechanism and test case to check if ITP is active
        https://bugs.webkit.org/show_bug.cgi?id=198694
        <rdar://problem/51557704>

        Reviewed by Youenn Fablet.

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

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

        [WPE][GTK] Deprecate WebSQL APIs
        https://bugs.webkit.org/show_bug.cgi?id=195011

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataDatabases):

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

        [WPE][GTK] Enable hyperlink auditing
        https://bugs.webkit.org/show_bug.cgi?id=197845

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

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

        Open up xcfilelist processing to more platforms
        https://bugs.webkit.org/show_bug.cgi?id=198675
        <rdar://problem/51533238>

        Reviewed by Jonathan Bedard.

        Now that it's been tested, add AppleTV{OS,Simulator} to the set of
        platforms on which to perform xcfilelist generation/updating.

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

2019-06-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Fix device ASan reporting, add testing for report configurations
        https://bugs.webkit.org/show_bug.cgi?id=198756

        Reviewed by Aakash Jain.

        ASan results were reporting an incorrect style. This indicates we need to be testing this upload
        configuration thoroughly in webkitpy.

        * Scripts/webkitpy/port/config.py:
        (clear_cached_configuration): Clearing configurations should clear the ASan cache as well.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.configuration_for_upload): Add ASan as style.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        (IOSDeviceTest.test_default_upload_configuration):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_default_upload_configuration):
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        (MockDRTPortTest.test_asan_upload_configuration):
        * Scripts/webkitpy/port/port_testcase.py:
        (test_default_upload_configuration):
        (test_debug_upload_configuration):
        (test_asan_upload_configuration):
        (test_guard_malloc_configuration):
        * Scripts/webkitpy/port/watch_simulator_unittest.py:
        (WatchSimulatorTest):
        (WatchSimulatorTest.test_default_upload_configuration):

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

        tu-berlin university email web interface (Outlook Web App) goes directly to the light version instead of the normal web app
        https://bugs.webkit.org/show_bug.cgi?id=198749

        Reviewed by Carlos Garcia Campos.

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

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

        Quotes are always inserted as smart quotes on stackblitz.com, causing compilation errors
        https://bugs.webkit.org/show_bug.cgi?id=198735
        <rdar://problem/51557159>

        Reviewed by Megan Gardner.

        Add a test to verify that spellcheck="false" disables smart quotes and dashes, but any other value defers to the
        user's preferences by using UITextSmartQuotesTypeDefault and UITextSmartDashesTypeDefault.

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

2019-06-11  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, add myself to the JavaScriptCore watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2019-06-11  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, change my status to be a WebKit reviewer

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

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

        [WPE] Use new exported image API from fdo backend
        https://bugs.webkit.org/show_bug.cgi?id=198558

        Reviewed by Philippe Normand.

        * WebKitTestRunner/PlatformWPE.cmake: Do not find fdo backend and libxkb again here, since WKTR depends on
        WPEToolingBackends that already depends on fdo backend and libxkb
        * wpe/backends/CMakeLists.txt: Bump fdo requirements to 1.3.0 version.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::createSnapshot):
        (WPEToolingBackends::HeadlessViewBackend::performUpdate):
        (WPEToolingBackends::HeadlessViewBackend::displayBuffer):
        * wpe/backends/HeadlessViewBackend.h:
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::initialize):
        * wpe/backends/ViewBackend.h:
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::displayBuffer):
        * wpe/backends/WindowViewBackend.h:

2019-06-10  Dewei Zhu  <dewei_zhu@apple.com>

        Extend run-benchmark to allow diagnosing before closing browser on test failure.
        https://bugs.webkit.org/show_bug.cgi?id=198729

        Reviewed by Ryosuke Niwa.

        Add '--diagnose-directory' option to store diagnose information when test failed.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.diagnose_test_failure): Add default no-op function to base class.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Added '--diagnose-directory' option.
        (parse_args):
        (run_benchmark_plan):
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        (WebDriverBenchmarkRunner._run_one_test): Added 'diagnose_test_failure' invocation on test failure.
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner.__init__):
        (WebServerBenchmarkRunner._run_one_test): Added 'diagnose_test_failure' invocation on test failure.

2019-06-10  Sam Weinig  <weinig@apple.com>

        Remove Dashboard support
        https://bugs.webkit.org/show_bug.cgi?id=198615

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setUseDashboardCompatibilityModeCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setUseDashboardCompatibilityMode): Deleted.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseDashboardCompatibilityMode): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-06-10  Alexey Proskuryakov  <ap@apple.com>

        Tool binaries like WebKitTestRunner have too aggressive stripping, resulting in non-symbolicated crash logs
        https://bugs.webkit.org/show_bug.cgi?id=198616
        rdar://problem/36386573

        Reviewed by David Kilzer.

        Adding an explicit STRIP_STYLE to appropriate xcconfigs.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig:
        * ImageDiff/cg/Configurations/ImageDiff.xcconfig:
        * MiniBrowser/Configurations/MiniBrowser.xcconfig:
        * MobileMiniBrowser/Configurations/MobileMiniBrowser.xcconfig:
        * TestWebKitAPI/Configurations/TestWTF.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

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

        [iOS] fast/xsl tests are flaky when run after certain viewport shrink-to-fit tests
        https://bugs.webkit.org/show_bug.cgi?id=198699
        <rdar://problem/50501718>

        Reviewed by Simon Fraser.

        Add logic to platformResetPreferencesToConsistentValues, to reset the "ShouldIgnoreMetaViewport" preference.
        While this is already being adjusted in platformConfigureViewForTest using the correct, TestOptions, this might
        happen too late, allowing the shrink-to-fit-content heuristic to unexpectedly kick in on tests where testing
        viewport parameters are used.

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

2019-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] UnlinkedCodeBlock should be eventually jettisoned in VM mini mode
        https://bugs.webkit.org/show_bug.cgi?id=198023

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

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

        Integrate dark mode support for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=198687
        rdar://problem/51545643

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-06-10  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: xcrun simctl spawn *** launchctl print system output is not utf-8
        https://bugs.webkit.org/show_bug.cgi?id=198723

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Do not decode 'print system' output, it's already ASCII.

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

        [WKHTTPCookieStore getAllCookies:] may return duplicate cookies
        https://bugs.webkit.org/show_bug.cgi?id=198635
        <rdar://problem/46010232>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (areCookiesEqual):
        (TEST):

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

        [JHBuild] Bump shared-mime-info to version ≥ 1.6
        https://bugs.webkit.org/show_bug.cgi?id=198714

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Bump shared-mime-info version to 1.10.
        * gtk/patches/shared-mime-info-xht-glob.patch: Removed.
        * gtk/patches/shared-mime-info-xhtml-magic.patch: Removed.

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

        [WPE][Qt] Port to new wpe_fdo_egl_exported_image API
        https://bugs.webkit.org/show_bug.cgi?id=198713

        Reviewed by Carlos Garcia Campos.

        * flatpak/org.webkit.WPEModules.yaml: Include wpebackend-fdo
        patches currently used in JHBuild.

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

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

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.GTK.yaml: Also include modules from
        org.webkit.WPEModules.yaml, which brings in libwpe and WPEBackend-fdo

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

        Unreviewed follow-up to r246148. Add another WPEBackend-fdo patch that
        avoids double-free condition that's causing bots to exit early.

        * gtk/jhbuild.modules:
        * gtk/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/wpebackend-fdo-view-backend-exportable-private-don-t-double-free-ca.patch: Added.

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

        [WinCairo][MiniBrowser] Disable MediaCapabilities until it's ready
        https://bugs.webkit.org/show_bug.cgi?id=198655

        Reviewed by Ross Kirsling.

        MediaCapabilities is enabled by default for WK2, but WinCairo
        doesn't implemented yet. Disable it in MiniBrowser.

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

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

        [iOS] The default application name for user agent when requesting desktop content is still "Mobile/15E148"
        https://bugs.webkit.org/show_bug.cgi?id=198693
        <rdar://problem/51555371>

        Reviewed by Tim Horton.

        Augment an existing API test to exercise three additional scenarios:
            -   The web view configuration's application name is never set; the default should not include
                "Mobile/15E148" in desktop mode.
            -   The application name is explicitly set to nil; the default application name should still not include
                "Mobile/15E148".
            -   The application name is explicitly set to the default value, "Mobile/15E148". WKWebView should honor
                this when generating the user agent, even in desktop mode.

        * TestWebKitAPI/ios/PreferredContentMode.mm:
        (TestWebKitAPI::setUpWebViewForPreferredContentModeTestingWithoutNavigationDelegate):
        (TestWebKitAPI::setUpWebViewForPreferredContentModeTesting):
        (TestWebKitAPI::TEST):

2019-06-08  Zalan Bujtas  <zalan@apple.com>

        [LFC] Unreviewed test gardening.

        Remove rtl tests. They were mistakenly marked as pass.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-06-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r244182) [WK1]: Page updates should always scheduleCompositingLayerFlush() immediately
        https://bugs.webkit.org/show_bug.cgi?id=198664

        Reviewed by Simon Fraser.

        Delete repeated entries which were submitted by mistake.

        * Tracing/SystemTracePoints.plist:

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

        Allow clients to vend custom -inputView and -inputAccessoryView by overriding WKWebView methods
        https://bugs.webkit.org/show_bug.cgi?id=198631
        <rdar://problem/51505431>

        Reviewed by Tim Horton.

        Add an API test that overrides -[WKWebView inputView] and -[WKWebView inputAccessoryView].

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[CustomInputWebView initWithFrame:configuration:inputView:inputAccessoryView:]):
        (-[CustomInputWebView inputView]):
        (-[CustomInputWebView inputAccessoryView]):
        (TestWebKitAPI::TEST):

2019-06-07  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Pretty-print all kinds of Documents
        https://bugs.webkit.org/show_bug.cgi?id=198620

        Reviewed by Simon Fraser.

        Register formatters for all classes derived from WebCore::Document so we get nice summaries
        without having to drill down in Xcode- or casting- to the base class, Document.

        Older LLDB versions use to do this automatically, but this functionality was removed in newer
        versions:
            [[
                Warning: previous versions of LLDB defined cascading to mean not only going through typedef
                chains, but also through inheritance chains. This feature has been removed since it
                significantly degrades performance. You need to set up your formatters for every type in
                inheritance chains to which you want the formatter to apply.
            ]]
            <https://lldb.llvm.org/use/variable.html> (as of 06/06/2019)

        * lldb/lldb_webkit.py:
        (__lldb_init_module):

2019-06-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support reporting results for uncommon test configurations
        https://bugs.webkit.org/show_bug.cgi?id=198662
        <rdar://problem/51524128>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Override wk1 and wk2 flavors with specified flavor.
        * Scripts/webkitpy/port/base.py:
        (Port.configuration_for_upload): Set flavor based on options.
        * Scripts/webkitpy/results/options.py:
        (upload_options): Add result-report-flavor option.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Set flavor based on options.

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

        [iOS] At least 6 API tests are failing due to an exception when writing NSAttributedString to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=198641
        <rdar://problem/51266310>

        Reviewed by Tim Horton.

        Work around a bug in a lower-level framework, which currently prevents NSAttributedStrings from being written to
        UIPasteboard by way of -[NSItemProvider registerObject:visibility:]. This is because, when saving a
        representation of "public.rtfd" to disk, the default suggested filename (determined using CoreServices APIs
        _UTTypeCreateSuggestedFilename and UTTypeCopyDescription) ends up being nil; UIKit then subsequently tries to
        append nil as a path component using -URLByAppendingPathComponent:, which throws an exception. This only
        reproduces on iOS simulator.

        To work around this for the time being, simply avoid writing a representation of "public.rtfd" to disk. This
        representation is actually ignored by most clients anyways (including WebKit), in favor of using
        "com.apple.flat-rtfd".

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (applyWorkaroundToAllowWritingAttributedStringsToItemProviders):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):

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

        REGRESSION(r244857): [GTK][WPE] Many tests are no longer run in the bots after r244857
        https://bugs.webkit.org/show_bug.cgi?id=198607

        Reviewed by Michael Catanzaro.

        Since r244857 several test executables are compiled in the base tests directory instead of using their own sub
        directory. Our scripts to run the tests rely on the tests location to decide whether to run them or not, or
        determine the type of the tests.

        * Scripts/run-gtk-tests:
        (GtkTestRunner): Rename TEST_DIRS as TEST_TARGETS and use the executable names for tests not in a subdirectory.
        (GtkTestRunner._setup_testing_environment): Fix TestWebKitAccessibility directory name.
        (GtkTestRunner.is_glib_test): Use the test name for the ones not using a subdirectory.
        (GtkTestRunner.is_google_test): Ditto.
        * Scripts/run-wpe-tests:
        (WPETestRunner): Rename TEST_DIRS as TEST_TARGETS and use the executable names for tests not in a subdirectory.
        (WPETestRunner.is_glib_test): Use the test name for the ones not using a subdirectory.
        (WPETestRunner.is_google_test): Ditto.
        * glib/api_test_runner.py:
        (TestRunner): Rename TEST_DIRS as TEST_TARGETS.
        (TestRunner._get_tests): Handle test targets which can now contain directories and executables.

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

        Remove SSL-based tests from TestWebKitAPI on some configurations
        https://bugs.webkit.org/show_bug.cgi?id=198551
        <rdar://problem/51424996>

        Reviewed by Jonathan Bedard.

        Not all platforms have SSL handy, so don't include SSL-based tests on
        those platforms.

        * TestWebKitAPI/TCPServer.cpp:
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        * TestWebKitAPI/config.h:

2019-06-06  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] TypeError: cannot concatenate 'str' and 'int' objects when prettify SecurityOrigin with
        non-default port number
        https://bugs.webkit.org/show_bug.cgi?id=198618

        Reviewed by Brent Fulgham.

        WebCoreSecurityOriginProvider.port() returns an int data type. We need to explicitly convert this to
        a string before we concatenate it with another string when building the string representation
        for the WebCore::SecurityOrigin object. Otherwise, Python complains that we are concatenating a str
        with an int and we don't get a pretty-printed representation for WebCore::SecurityOrigin.

        * lldb/lldb_webkit.py:
        (WebCoreSecurityOriginProvider.to_string): Call str() on the port before concatenting it.

2019-06-06  Jonathan Bedard  <jbedard@apple.com>

        Remove obsolete TOOLCHAINS overrides from as asan.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=198613

        Reviewed by Alexey Proskuryakov.

        * asan/asan.xcconfig: XCBuild doesn't support overriding toolchains.

2019-06-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpluginhost: Support ASan as a style
        https://bugs.webkit.org/show_bug.cgi?id=198586
        <rdar://problem/51459088>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/base.py:
        (Port.configuration_for_upload): Add ASan as a style.
        * Scripts/webkitpy/port/config.py:
        (Config._read_configuration):
        (Config):
        (Config.asan): Add property to check if the ASan configuration is active.
        * Scripts/webkitpy/port/config_unittest.py:
        (ConfigTest.test_default_configuration__scripterror):
        (ConfigTest):
        (ConfigTest.test_asan):
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Add Asan as a style.

2019-06-06  Alexey Proskuryakov  <ap@apple.com>

        block-spammers tool doesn't block e-mail
        https://bugs.webkit.org/show_bug.cgi?id=198570

        Reviewed by Jonathan Bedard.

        * Scripts/block-spammers: (disable_user): Corrected the parameters, Bugzilla doesn't
        recognize "false" here. Also, request body is unnecessary.

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

        [GTK][WPE] Enable PSON
        https://bugs.webkit.org/show_bug.cgi?id=194979

        Reviewed by Žan Doberšek.

        Add WPEBackend-fdo patch required for PSON to work. It can be removed once we have a new version to depend on.

        * gtk/jhbuild.modules:
        * gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Added.

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

        [macOS] Stop calling -[NSDraggingItem setItem:]
        https://bugs.webkit.org/show_bug.cgi?id=198588
        <rdar://problem/48297453>

        On macOS Catalina, use -[NSDraggingItem _initWithItem:] instead.

        Reviewed by Wenson Hsieh.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Fixed up file paths in the
        TestRunnerShared group.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        Changed to call -[NSDraggingItem _initWithItem:] when available.

        * TestRunnerShared/spi/AppKitTestSPI.h: Renamed from
        Tools/DumpRenderTree/mac/AppKitTestSPI.h and moved NSDraggingItem internal interface
        declarations here from DumpRenderTree.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Added TestRunnerShared/spi/AppKitTestSPI.h.

        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        Changed to call -[NSDraggingItem _initWithItem:] when available.

2019-06-05  Jer Noble  <jer.noble@apple.com>

        -[WKWebView _suspendAllMediaPlayback] does not persist across navigation.
        https://bugs.webkit.org/show_bug.cgi?id=198585

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSuspendAllMediaPlayback.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html:

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

        Re-enable safe browsing in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=196161
        <rdar://problem/49171413>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):

== Rolled over to ChangeLog-2019-06-05 ==
