2020-03-28  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r257963) UI process crashes when setting navigation delegate inside navigation delegate callbacks
        https://bugs.webkit.org/show_bug.cgi?id=209705
        <rdar://problem/60814765>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/AsyncPolicyForNavigationResponse.mm:
        (-[TestAsyncNavigationDelegate webView:didFailNavigation:withError:]):
        (-[TestAsyncNavigationDelegate webView:didFailProvisionalNavigation:withError:]):

2020-03-28  Alex Christensen  <achristensen@webkit.org>

        Deprecate injected bundle page group SPI
        https://bugs.webkit.org/show_bug.cgi?id=209687

        Reviewed by Timothy Hatcher.

        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::didCreatePage):
        (TestWebKitAPI::DOMWindowExtensionBasic::initialize): Deleted.
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::didCreatePage):
        (TestWebKitAPI::DOMWindowExtensionNoCache::initialize): Deleted.
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::didCreatePage):
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize): Deleted.
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleNoDisableOverrideBuiltinsBehaviorTest::initialize): Deleted.
        (TestWebKitAPI::InjectedBundleDisableOverrideBuiltinsBehaviorTest::initialize): Deleted.
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleMakeAllShadowRootOpenTest::didCreatePage):
        (TestWebKitAPI::InjectedBundleMakeAllShadowRootOpenTest::initialize): Deleted.

2020-03-28  ChangSeok Oh  <changseok@webkit.org>

        [GTK] No libsystemd-devel for DNF
        https://bugs.webkit.org/show_bug.cgi?id=209697

        Reviewed by Philippe Normand.

        Replace libsystemd-devel to systemd-devel for DNF.

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

2020-03-27  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Allow passing gst-build Meson options
        https://bugs.webkit.org/show_bug.cgi?id=209608

        Reviewed by Žan Doberšek.

        Add support for the GST_BUILD_ARGS env var storing gst-build Meson options.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.setup_gstbuild):

2020-03-27  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Warn when gst-build support was requested but GST_BUILD_PATH is not set
        https://bugs.webkit.org/show_bug.cgi?id=209599

        Reviewed by Žan Doberšek.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.setup_gstbuild):
        (WebkitFlatpak.setup_dev_env):

2020-03-26  Chris Dumez  <cdumez@apple.com>

        REGRESSION: Unable to show Web Inspector on empty tabs in Safari
        https://bugs.webkit.org/show_bug.cgi?id=209639
        <rdar://problem/60937524>

        Reviewed by Darin Adler.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2020-03-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] lld-link: error: /manifestdependency: is not allowed in .drectve
        https://bugs.webkit.org/show_bug.cgi?id=204831

        Reviewed by Ross Kirsling.

        * TestWebKitAPI/win/main.cpp:
        * win/DLLLauncher/DLLLauncherMain.cpp:

2020-03-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed test gardening for iOS API tests.

        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        (TestWebKitAPI::TEST):

2020-03-26  Daniel Bates  <dabates@apple.com>

        WebPage::selectPositionAtPoint() does not focus an element in a non-focused frame
        https://bugs.webkit.org/show_bug.cgi?id=209559
        <rdar://problem/60887055>

        Reviewed by Wenson Hsieh.

        Add a test.

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

2020-03-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        WebKitTestRunner should enable ResourceLoadStatistics also for non-Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=209410

        Reviewed by Youenn Fablet.

        Cocoa WebKitTestRunner always enables ResourceLoadStatistics.
        Other ports should do so.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformAdjustContext): Enable ResourceLoadStatistics
        by using WKWebsiteDataStoreSetResourceLoadStatisticsEnabled.

2020-03-26  Kate Cheney  <katherine_cheney@apple.com>

        Guard AppBound domain protections with PLATFORM(iOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=209615
        <rdar://problem/60931014>

        Reviewed by Darin Adler.

        Tests should only be run on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:

2020-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews] status-bubble for tester queues should point to tester queue while waiting in queue (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=209598

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Display the tester name in tester's status-bubble hover-over message.

2020-03-26  Aakash Jain  <aakash_jain@apple.com>

        [ews] status-bubble for tester queues should point to tester queue while waiting in queue
        https://bugs.webkit.org/show_bug.cgi?id=209598

        Reviewed by Jonathan Bedard.

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

2020-03-26  Chris Fleizach  <cfleizach@apple.com>

        AX: WKTR: Don't update isolated tree mode behavior if not required
        https://bugs.webkit.org/show_bug.cgi?id=209555
        <rdar://problem/60885094>

        Reviewed by Darin Adler.

        If the isolated tree mode has not changed, then we should not poke at the mechanisms for turning it on/off.
        This might have the side effect of turning on accessibility unexpectedly.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::setAccessibilityIsolatedTreeMode):

2020-03-26  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Pass all the arguments of build-webkit to webkit-flatpak
        https://bugs.webkit.org/show_bug.cgi?id=209558

        Reviewed by Žan Doberšek.

        When using flatpak some of the arguments we pass to build-webkit
        are not meant to be used by that script but by webkit-flatpak. However we are
        not passing all of them to webkit-flatpak but just the configuration ones
        (port, release/debug...). This means that all the arguments that configure the
        behaviour of webkit-flatpak are lost.

        * Scripts/webkitdirs.pm:
        (runInFlatpak): Filter-out Flatpak SDK-specific arguments to a
        separate array, passed to webkit-flatpak.

2020-03-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r259035.
        https://bugs.webkit.org/show_bug.cgi?id=209597

        broke windows layout-tests (Requested by aakashjain on
        #webkit).

        Reverted changeset:

        "[Win] lld-link: error: /manifestdependency: is not allowed in
        .drectve"
        https://bugs.webkit.org/show_bug.cgi?id=204831
        https://trac.webkit.org/changeset/259035

2020-03-26  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] update-webkitgtk-libs fails
        https://bugs.webkit.org/show_bug.cgi?id=209546

        Reviewed by Žan Doberšek.

        Simplify the code a bit, add a `--assumeyes` argument to the
        `flatpak update` command to make it non-interactive and improve
        error handling/reporting a bit as well.

        * flatpak/flatpakutils.py:
        (FlatpakObject.flatpak):
        (WebkitFlatpak.main):
        (WebkitFlatpak.run):
        (WebkitFlatpak.install_all):
        (WebkitFlatpak.update_all): Deleted.

2020-03-26  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Crash post-mortem debugging is broken
        https://bugs.webkit.org/show_bug.cgi?id=209537

        Reviewed by Žan Doberšek.

        webkit-flatpak --gdb now properly launches gdb to inspect the last
        crash reported to coredumpctl. The -m argument can be used to
        select another crash dump.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.run_gdb):

2020-03-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] lld-link: error: /manifestdependency: is not allowed in .drectve
        https://bugs.webkit.org/show_bug.cgi?id=204831

        Reviewed by Ross Kirsling.

        * TestWebKitAPI/win/main.cpp:
        * win/DLLLauncher/DLLLauncherMain.cpp:

2020-03-25  Alexey Shvayka  <shvaikalesh@gmail.com>

        Invalid numeric and named references should be early syntax errors
        https://bugs.webkit.org/show_bug.cgi?id=178175

        Reviewed by Ross Kirsling.

        Removes FIXME as YarrParser is correct not to throw errors as it is
        parsing in non-Unicode mode. Also adds a few named groups tests.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

2020-03-25  Zhifei Fang  <zhifei_fang@apple.com>

        [Timeline] A better default get label function, which fit the assumpation the label is always a string
        https://bugs.webkit.org/show_bug.cgi?id=209567

        Reviewed by Jonathan Bedard.

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

2020-03-25  Zhifei Fang  <zhifei_fang@apple.com>

        [Timeline] Fix the out of bound dot index
        https://bugs.webkit.org/show_bug.cgi?id=209492

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:
        (Timeline.CanvasSeriesComponent):

2020-03-25  Daniel Bates  <dabates@apple.com>

        Element context character rects may be in wrong coordinate system
        https://bugs.webkit.org/show_bug.cgi?id=209493
        <rdar://problem/60840261>

        Reviewed by Wenson Hsieh.

        Add some tests.

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

2020-03-25  Doug Kelly  <dougk@apple.com>

        Unreviewed, add new committer to contributors.json

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

2020-03-25  Frank Yang  <guowei_yang@apple.com>

        Unprefix -webkit-text-orientation
        https://bugs.webkit.org/show_bug.cgi?id=196139

        Reviewed by Myles C. Maxfield.

        This change is made to add the extra flag "related-property" in CSSProperty.json
        in the jsonchecker so that the jsonchecker would not complain about unrecognized key

        * Scripts/webkitpy/style/checkers/jsonchecker.py: added check for related-property
        (JSONCSSPropertiesChecker.check_codegen_properties): 

2020-03-25  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should comment on bug if it fails to find any modified ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=209550

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (FindModifiedChangeLogs): Set haltOnFailure to false.
        (FindModifiedChangeLogs.getResultSummary):
        (FindModifiedChangeLogs.evaluateCommand): Add build steps to comment on bug and set cq- on patch appropriately.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2020-03-25  Aakash Jain  <aakash_jain@apple.com>

        [ews] status-bubble should link to buildbot queue while waiting in queue
        https://bugs.webkit.org/show_bug.cgi?id=209543

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Link to buildbot queue whil patch is waiting in queue.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.update_icons_for_queues_mapping): Generate the mapping for shortname to full queue name.

2020-03-25  Ting-Wei Lan  <lantw44@gmail.com>

        [GTK] Add user agent quirk for auth.mayohr.com
        https://bugs.webkit.org/show_bug.cgi?id=209378

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasNoSafariVersionQuirk):
        (TestWebKitAPI::TEST):

2020-03-24  Daniel Bates  <dabates@apple.com>

        Unreviewed, reverting r258945.

        Revert change that broke API tests while I investigate
        offline.

        Reverted changeset:

        "Element context character rects may be in wrong coordinate
        system"
        https://bugs.webkit.org/show_bug.cgi?id=209493
        https://trac.webkit.org/changeset/258945

2020-03-24  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, skips a test for iOS

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:

2020-03-24  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Documentation for uncollapsed failure endpoints is wrong
        https://bugs.webkit.org/show_bug.cgi?id=209496

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/documentation.html:

2020-03-24  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Filter suite results by expectation by default
        https://bugs.webkit.org/show_bug.cgi?id=209500

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Allow the Legend constructor
        to set a willFilterExpected default.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html:

2020-03-24  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Fix launch time regression with CF prefs direct mode enabled
        https://bugs.webkit.org/show_bug.cgi?id=209244

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        (TEST):
        (sharedInstanceMethodOverride):

2020-03-24  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Correct UUID capitalization in documentation
        https://bugs.webkit.org/show_bug.cgi?id=209497

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/documentation.html:

2020-03-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should comment on bug if it fails to create git commit
        https://bugs.webkit.org/show_bug.cgi?id=209487

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CreateLocalGITCommit):
        (CreateLocalGITCommit.start):
        (CreateLocalGITCommit.evaluateCommand):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2020-03-24  Daniel Bates  <dabates@apple.com>

        Element context character rects may be in wrong coordinate system
        https://bugs.webkit.org/show_bug.cgi?id=209493
        <rdar://problem/60840261>

        Reviewed by Wenson Hsieh.

        Add some tests.

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

2020-03-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] position in queue shown in status-bubble is larger than actual position
        https://bugs.webkit.org/show_bug.cgi?id=209481

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._queue_position): Use created timestamp instead of modified.

2020-03-24  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] Set text trait isSingleLineDocument
        https://bugs.webkit.org/show_bug.cgi?id=209391
        <rdar://problem/60705870>

        Reviewed by Darin Adler.

        Add a test.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h: Expose more SPI.

2020-03-24  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r258862.

        SPI was not what was needed

        Reverted changeset:

        "Add SPI to move localStorage to a different domain"
        https://bugs.webkit.org/show_bug.cgi?id=209260
        https://trac.webkit.org/changeset/258862

2020-03-24  Chris Lord  <clord@igalia.com>

        [GTK][WPE] WEB_PROCESS_CMD_PREFIX and others have stopped working
        https://bugs.webkit.org/show_bug.cgi?id=209478

        Make sure *_PROCESS_CMD_PREFIX variables are whitelisted in the Flatpak sandbox.

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-03-23  Simon Fraser  <simon.fraser@apple.com>

        [mac-wk1] fast/scrolling/arrow-key-scroll-in-rtl-document.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=209427

        Reviewed by Wenson Hsieh.
        
        0 => NULL

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

2020-03-23  Dean Jackson  <dino@apple.com>

        webkitpy Git class must expose the repository URL
        https://bugs.webkit.org/show_bug.cgi?id=209439
        <rdar://problem/60792668>

        Reviewed by Simon Fraser.

        Some internal tools were relying on the svn_url() method
        that was changed/removed in r258164. Add a replacement.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.svn_repository_url):

2020-03-23  Alex Christensen  <achristensen@webkit.org>

        Fix memory leak introduced in r257726
        https://bugs.webkit.org/show_bug.cgi?id=208399

        Reviewed by John Wilander.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        We were leaking page configurations.

2020-03-23  John Wilander  <wilander@apple.com>

        Add the capability to change all of a website's cookies to SameSite=Strict
        https://bugs.webkit.org/show_bug.cgi?id=209369
        <rdar://problem/60710690>

        Reviewed by Alex Christensen and David Kilzer.

        These changes add TestRunner function statisticsSetToSameSiteStrictCookies().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsSetToSameSiteStrictCookies):
        (WTR::TestRunner::statisticsCallDidSetToSameSiteStrictCookiesCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsToSameSiteStrictCookies):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetToSameSiteStrictCookies):
        * WebKitTestRunner/TestInvocation.h:

2020-03-23  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Uneviewed, added myself to contributors.json.

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

2020-03-23  Daniel Bates  <dabates@apple.com>

        Support inserting text or dictation alternative by simulating keyboard input
        https://bugs.webkit.org/show_bug.cgi?id=209380
        <rdar://problem/59445102>

        Reviewed by Darin Adler.

        Add tests to ensure that DOM events are dispatched on insertion when shouldSimulateKeyboardInput
        is enabled.

        I also added a convenience assertion function, EXPECT_NS_EQUAL, that can
        compare NSObjects so long as they implement -isEqual and -description. I
        make use of this to compare the actual array of fired DOM events types to
        an expected array.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::shouldSimulateKeyboardInputOnTextInsertionOverride):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestCocoa.h:
        (TestWebKitAPI::Util::assertNSObjectsAreEqual): Added.
        (EXPECT_NS_EQUAL): Added.
        * TestWebKitAPI/ios/insert-text.html: Added.

2020-03-23  Kate Cheney  <katherine_cheney@apple.com>

        Add checks for app-bound navigations when evaluating user style sheets
        https://bugs.webkit.org/show_bug.cgi?id=209368
        <rdar://problem/60204230>

        Reviewed by Brent Fulgham.

        Tested cases based on those in UserContentController.mm.

        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
        (expectScriptEvaluatesToColor):
        (TEST):


2020-03-23  Alex Christensen  <achristensen@webkit.org>

        Add SPI to move localStorage to a different domain
        https://bugs.webkit.org/show_bug.cgi?id=209260
        <rdar://problem/60285683>

        Reviewed by Brady Eidson.

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

2020-03-23  youenn fablet  <youenn@apple.com>

        Disable TestWebKitAPI.ProcessSwap.GetUserMediaCaptureState if getUserMedia is not supported
        https://bugs.webkit.org/show_bug.cgi?id=209428

        Reviewed by Jonathan Bedard.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2020-03-23  Chris Lord  <clord@igalia.com>

        Add missing committer status to Chris Lord in contributors.json

        Unreviewed

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

2020-03-23  youenn fablet  <youenn@apple.com>

        StringView::startsWith and String::startsWith do not treat null strings the same
        https://bugs.webkit.org/show_bug.cgi?id=209273

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2020-03-22  Antoine Quint  <graouts@apple.com>

        DocumentTimeline / CSSTransition objects are leaking on CNN.com
        https://bugs.webkit.org/show_bug.cgi?id=208069
        <rdar://problem/59680143>

        Reviewed by Simon Fraser, Geoffrey Garen and Darin Adler.

        Add a test that checks that a ListHashSet containing RefPtr<> types correctly calls the destructor for those items when the assignment operator is used.

        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::ListHashSetReferencedItem::create):
        (TestWebKitAPI::ListHashSetReferencedItem::ListHashSetReferencedItem):
        (TestWebKitAPI::ListHashSetReferencedItem::~ListHashSetReferencedItem):
        (TestWebKitAPI::FakeElementAnimationRareData::FakeElementAnimationRareData):
        (TestWebKitAPI::FakeElementAnimationRareData::~FakeElementAnimationRareData):
        (TestWebKitAPI::FakeElementAnimationRareData::collection):
        (TestWebKitAPI::FakeElementAnimationRareData::setCollection):
        (TestWebKitAPI::TEST):

2020-03-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Use ${PYTHON_EXECUTABLE} to run generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=208970

        Reviewed by Konstantin Tokarev.

        We are allowed to use /usr/bin/env in this script because it's not installed (so not
        packaged). Therefore we can make the shebang compatible with FreeBSD in this particularl
        case.

        * gtkdoc/generate-gtkdoc:

2020-03-20  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Report MacCatalyst as a unique platform
        https://bugs.webkit.org/show_bug.cgi?id=209361

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/mac.py:
        (MacCatalystPort):
        (MacCatalystPort.configuration_for_upload): Treat MacCatalyst as a separate platform from Mac.

2020-03-20  Alex Christensen  <achristensen@webkit.org>

        CORS-disabling SPI introduced in r253978 should make responses non-opaque
        https://bugs.webkit.org/show_bug.cgi?id=209351
        <rdar://problem/60024850>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-03-20  Aakash Jain  <aakash_jain@apple.com>

        commit-queue should skip building and testing if patch already passed tests on mac-wk2 queue
        https://bugs.webkit.org/show_bug.cgi?id=208938

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.doStepIf): Skip testing if patch already passed mac-wk2 tests.
        (CheckPatchStatusOnEWSQueues): Build-step to check patch status on other queues.
        (CheckPatchStatusOnEWSQueues.get_patch_status):
        (CheckPatchStatusOnEWSQueues.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_skip_for_mac_wk2_passed_patch_on_commit_queue): Added unit-tests.
        * BuildSlaveSupport/ews-build/factories.py: Added build-step to check the patch status on other queues.
        * BuildSlaveSupport/ews-build/factories_unittest.py: Updated unit-test.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added the new step status to STEPS_TO_HIDE.

2020-03-20  Aakash Jain  <aakash_jain@apple.com>

        [ews] Better organize patch status api data
        https://bugs.webkit.org/show_bug.cgi?id=209342

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/status.py:
        (Status._build_status):
        (Status._build_statuses_for_patch): Updated to return dictionary instead of list.
        (Status.get): Remove safe=false now that we are returning a dictionary.

2020-03-20  Tim Horton  <timothy_horton@apple.com>

        Upstream a variety of Cocoa-platform HAVE and ENABLE macros
        https://bugs.webkit.org/show_bug.cgi?id=209307

        Reviewed by Andy Estes.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-03-20  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r258748.

        This commit broke the Catalina build

        Reverted changeset:

        "Upstream a variety of Cocoa-platform HAVE and ENABLE macros"
        https://bugs.webkit.org/show_bug.cgi?id=209307
        https://trac.webkit.org/changeset/258748

2020-03-20  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should comment on bug if patch fails to apply
        https://bugs.webkit.org/show_bug.cgi?id=209334

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch):
        (ApplyPatch.evaluateCommand): Overridden to check build status and queue name and comment on bug accordingly.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        (TestApplyPatch):
        (TestApplyPatch.setUp):
        (TestApplyPatch.setUp.mock_start):
        (TestApplyPatch.tearDown):
        (TestApplyPatch.test_success):
        (TestApplyPatch.test_failure):
        (TestApplyPatch.test_failure_on_commit_queue):

2020-03-20  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Limit number of builds to display in status-bubble hover over message in case of lot of retried builds
        https://bugs.webkit.org/show_bug.cgi?id=209122

        Reviewed by Jonathan Bedard.

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

2020-03-19  Tim Horton  <timothy_horton@apple.com>

        Upstream a variety of Cocoa-platform HAVE and ENABLE macros
        https://bugs.webkit.org/show_bug.cgi?id=209307

        Reviewed by Andy Estes.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-03-19  Alex Christensen  <achristensen@webkit.org>

        Remove test failing after r258734
        https://bugs.webkit.org/show_bug.cgi?id=209303

        We removed the functionality it was testing because it did nothing useful except call the callback.
        I'm about to remove the only user of WKContextGetStatistics.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/WebCoreStatisticsWithNoWebProcess.cpp: Removed.

2020-03-19  Aakash Jain  <aakash_jain@apple.com>

        commit-queue status-bubble shows incorrect position in queue
        https://bugs.webkit.org/show_bug.cgi?id=209313

        Reviewed by Jonathan Bedard.

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

2020-03-19  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Add an API returns description of verification errors.
        https://bugs.webkit.org/show_bug.cgi?id=208913

        Reviewed by Fujii Hironori.

        WKCertificateInfoCopyVerificationErrorDescription returns the description of SSL verification error as human readable string.
        Browser can display more precise error information with this API.

        API Test: Curl.CertificateAPI

        * MiniBrowser/win/Common.cpp:
        (askServerTrustEvaluation):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createPEMString):
        (WebKitBrowserWindow::canTrustServerCertificate):
        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp:
        (TestWebKitAPI::Curl::TEST):

2020-03-19  Aakash Jain  <aakash_jain@apple.com>

        Update build.webkit.org link for EWS
        https://bugs.webkit.org/show_bug.cgi?id=209280

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2020-03-19  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] extract-built-product fails after r258612
        https://bugs.webkit.org/show_bug.cgi?id=209285

        extractBuiltProduct also references the old name for the
        requirements on wincairo.

        Reviewed by Ross Kirsling.

        * BuildSlaveSupport/built-product-archive:

2020-03-19  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK] Release logs not sent to journald when running within the SDK runtime
        https://bugs.webkit.org/show_bug.cgi?id=209223

        Reviewed by Carlos Alberto Lopez Perez.

        flatpak build doesn't expose a --socket option for white-listing
        the systemd journal socket. So white-list everything in /run. 🤷

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox):

2020-03-19  Charlie Turner  <cturner@igalia.com>

        Fix many warnings with Clang 7.0 on GTK x86-64 in Debug.
        https://bugs.webkit.org/show_bug.cgi?id=209146

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/TransformationMatrix.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (testDownloadMIMEType):
        (testContextMenuDownloadActions):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:

2020-03-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] REGRESSION(r258626): flatpak is used even when WEBKIT_JHBUILD is set
        https://bugs.webkit.org/show_bug.cgi?id=209278

        Reviewed by Philippe Normand.

        This happens when using an external jhbuild, because shouldUseFlatpak() assumes that no command prefix always
        means flatpak.

        * Scripts/webkitdirs.pm:
        (shouldUseFlatpak): Return early if WEBKIT_JHBUILD is set.

2020-03-19  Philippe Normand  <pnormand@igalia.com>

        [CMake] cache not cleared when build-webkit options change
        https://bugs.webkit.org/show_bug.cgi?id=209277

        Reviewed by Adrian Perez de Castro.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): The expected function signature never
        included the cache file path. Remove it.

2020-03-18  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r258626): webkit-dirs warning
        https://bugs.webkit.org/show_bug.cgi?id=209221

        Reviewed by Adrian Perez de Castro.

        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit): Fix Perl Warning. 😎

2020-03-19  Chris Lord  <clord@igalia.com>

        Add Chris Lord (clord@igalia.com) to the list of contributors
        https://bugs.webkit.org/show_bug.cgi?id=209274

        Unreviewed

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

2020-03-19  Ryan Haddad  <ryanhaddad@apple.com>

        Remove commit queue bubble from bot watchers dashboard
        https://bugs.webkit.org/show_bug.cgi?id=209271

        Reviewed by Alexey Proskuryakov.

        Remove commit queue bubble from bot watchers dashboard now that it has moved to the new EWS.

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

2020-03-18  Simon Fraser  <simon.fraser@apple.com>

        eventSender.monitorWheelEvents() is very fragile
        https://bugs.webkit.org/show_bug.cgi?id=197819
        <rdar://problem/51319456>

        Reviewed by Tim Horton.

        Deflake tests using eventSender.monitorWheelEvents() by fixing several causes of flakiness,
        adding back changes from r257844 that were reverted in r258558.
        
        First, have EventSendingController keep track of whether it's seen then "end" event
        for the scrolling and momentum phases, and pass this down to WheelEventTestMonitor, which
        now waits until it sees these, which prevents premature triggering which was a common cause of
        failure before.
        
        Second, remove WheelEventTestMonitor's 1/60s timer and instead have WheelEventTestMonitor test
        for completion in a callout from the end of Page::updateRendering(), which makes it test
        and fire at a more consistent time.
        
        Third, push WheelEventTestMonitor to the ScrollingTree, so that reasons for deferral
        can be added on the scrolling thread. This fixes an issue where the RunLoop::main().dispatch()
        used to send the "ScrollingThreadSyncNeeded" reason to the main thread would get delayed,
        also resulting in a premature trigger.

        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        (-[EventSendingController monitorWheelEvents]):
        (-[EventSendingController callAfterScrollingCompletes:]):
        * DumpRenderTree/win/EventSender.cpp:
        (mouseScrollBy):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSendingController::monitorWheelEvents):
        (WTR::EventSendingController::callAfterScrollingCompletes):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:

2020-03-18  John Wilander  <wilander@apple.com>

        WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener() should call its ephemeral counterpart when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=209245
        <rdar://problem/60511121>

        Reviewed by Chris Dumez.

        These changes to the TestRunner makes sure that
        - statisticsClearInMemoryAndPersistentStore()
        - statisticsClearInMemoryAndPersistentStoreModifiedSinceHours()
        ... use their own StatisticsDidClearInMemoryAndPersistentStoreCallbackID
        and adds the infrastructure for that.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestRunner::statisticsCallClearInMemoryAndPersistentStoreCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didClearStatisticsInMemoryAndPersistentStore):
        * WebKitTestRunner/TestInvocation.h:

2020-03-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r257214): Targeted preview animates to the wrong place when dropping in editable content
        https://bugs.webkit.org/show_bug.cgi?id=209218
        <rdar://problem/60560831>

        Reviewed by Tim Horton.

        Augment the drag and drop test harness to verify that for all targeted previews, if they have container views,
        those views must be parented (i.e. they must be connected to a UIWindow).

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _expectNoDropPreviewsWithUnparentedContainerViews]):
        (-[DragAndDropSimulator _invokeDropAnimationCompletionBlocksAndConcludeDrop]):

2020-03-18  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should comment on bug in case of test failures
        https://bugs.webkit.org/show_bug.cgi?id=209226

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.report_failure): Comment on bug and set cq- in case of test failure on commit-queue.
        (BuildLogLineObserver.outLineReceived): Drive-by fix to use single quotes instead of double quotes.
        (SetBuildSummary): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-test.

2020-03-18  Philippe Normand  <pnormand@igalia.com>

        REGRESSION (r258626): test262 tests failing to run on macOS with error 'Undefined subroutine &Test262::Runner::setConfiguration'
        https://bugs.webkit.org/show_bug.cgi?id=209238

        Reviewed by Jonathan Bedard.

        * Scripts/test262-runner: Perform the flatpak check on Linux only.

2020-03-18  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] archive-built-product fails after r258612
        https://bugs.webkit.org/show_bug.cgi?id=209237

        Reviewed by Alex Christensen.

        * BuildSlaveSupport/built-product-archive:
        Update name of version file for requirements version
        file for wincairo.

2020-03-18  Aakash Jain  <aakash_jain@apple.com>

        commit-queue should allow patches which are reviewed by patch author
        https://bugs.webkit.org/show_bug.cgi?id=209231

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin._does_patch_have_acceptable_review_flag):

2020-03-18  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Flatpak used for run-minibrowser even when forcing jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=209222

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailable): If a command wrapper is required it
        means Flatpak shouldn't be used.

2020-03-18  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should comment on bug in case patch fails to build
        https://bugs.webkit.org/show_bug.cgi?id=209227

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeCompileWebKitResults.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-test.

2020-03-18  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Migrate to Flatpak-based dev SDK
        https://bugs.webkit.org/show_bug.cgi?id=205658

        Reviewed by Carlos Alberto Lopez Perez.

        JHBuild will now be used only if the WEBKIT_JHBUILD environment
        variable is set to 1, which is the case for the time being on the
        GTK and WPE EWS/build bots.

        By default the build dependencies are now locally installed from a
        Flatpak repository hosted at https://software.igalia.com. The
        repository can be regenerated with the scripts from the
        webkit-flatpak-sdk Github project
        (https://github.com/Igalia/webkit-flatpak-sdk). This is done
        transparently with the update-webkit{gtk,wpe}-libs scripts. As
        there is no need to rebuild the dependencies from scratch, the
        developer user-experience should now be much more friendly and
        overall build times reduced.

        As an additional commodity, the new environment supports the
        GStreamer gst-build-based workflow. Just set the GST_BUILD_PATH
        environment variable to your gst-build path. This feature was
        contributed by Thibault Saunier.

        The JHBuild infrastructure will be removed once all the bots have
        been switched over to Flatpak.

        * BuildSlaveSupport/ews-build/steps.py:
        (InstallGtkDependencies):
        (InstallWpeDependencies):
        (CompileWebKit.start):
        * BuildSlaveSupport/gtk/buildbot/run:
        * Scripts/build-webkit:
        * Scripts/run-bindings-tests:
        * Scripts/run-builtins-generator-tests:
        * Scripts/run-gtk-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-minibrowser:
        * Scripts/run-qt-wpe-minibrowser:
        * Scripts/run-webdriver-tests:
        * Scripts/run-wpe-tests:
        * Scripts/test-webkitperl:
        * Scripts/test-webkitpy:
        * Scripts/test262-runner:
        * Scripts/update-webkit-flatpak: Renamed from Tools/Scripts/update-webkitgtk-flatpak.
        * Scripts/update-webkitgtk-libs:
        * Scripts/update-webkitwpe-flatpak: Removed.
        * Scripts/update-webkitwpe-libs:
        * Scripts/webkitdirs.pm:
        (getUserFlatpakPath):
        (inFlatpakSandbox):
        (runInFlatpakIfAvailable):
        (wrapperPrefixIfNeeded):
        (shouldUseJhbuild):
        (shouldUseFlatpak):
        (shouldRemoveCMakeCache):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_all):
        * Scripts/webkitpy/port/base.py:
        (Port._path_to_apache):
        (Port._should_run_as_pixel_test):
        (Port._in_flatpak_sandbox):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        (GtkPort._get_crash_log):
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator):
        (GDBCrashLogGenerator.__init__):
        (GDBCrashLogGenerator.generate_crash_log):
        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py:
        (GDBCrashLogGeneratorTest.test_generate_crash_log):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server):
        (WPEPort._get_crash_log):
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._setup_environ_for_test):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getFontsPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::getFontsPath):
        * flatpak/files/default.xkm: Removed.
        * flatpak/files/httpd-autogen.sh: Removed.
        * flatpak/flatpakutils.py:
        (check_flatpak):
        (FlatpakRepos.update):
        (FlatpakPackage.__repr__):
        (FlatpakPackage.__str__):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.setup_builddir):
        (WebkitFlatpak):
        (WebkitFlatpak.setup_gstbuild):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.run):
        (WebkitFlatpak.has_environment):
        (WebkitFlatpak.save_config):
        (WebkitFlatpak.setup_dev_env):
        (WebkitFlatpak.install_all):
        (WebkitFlatpak.run_gdb):
        * flatpak/org.webkit.CommonModules.yaml: Removed.
        * flatpak/org.webkit.GTK.yaml: Removed.
        * flatpak/org.webkit.WPE.yaml: Removed.
        * flatpak/org.webkit.WPEModules.yaml: Removed.
        * flatpak/org.webkit.WPEQT.yaml: Removed.
        * flatpak/org.webkit.WebKit.yaml: Removed.
        * flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch: Removed.
        * flatpak/patches/libgcrypt-0001-Use-pkg-config-to-detect-gpg-error.patch: Removed.
        * flatpak/patches/xvfb-0001-HACK-Avoid-compiling-a-kbm-file.patch: Removed.

2020-03-17  Kate Cheney  <katherine_cheney@apple.com>

        Expand In-App-Browser-Privacy testing
        https://bugs.webkit.org/show_bug.cgi?id=209142
        <rdar://problem/60496618>

        Reviewed by Darin Adler.

        Expanded test coverage by adding new tests and creating a custom url
        scheme handler to get around the fact that local file loads are
        always classified as app-bound.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
        If the path indicates testing user scripts on load, notify the script message
        handler that the navigation has finished. If the path indicates
        testing user-agent scripts, set the window.wkUserScriptInjected
        variable to true. A user agent script will attempt to read this
        variable and should fail.

        (-[InAppBrowserSchemeHandler webView:stopURLSchemeTask:]):
        (initializeInAppBrowserPrivacyTestSettings):
        Basic test setup. Initialize the main run loop and make sure we are
        starting with a clean state.

        (TEST):
        Add tests for all protocols checked in shouldBeTreatedAsAppBound,
        except for blob files which must be generated within the web content.

        * TestWebKitAPI/Tests/WebKitCocoa/in-app-browser-privacy-local-file.html: Added.
        Basic html document to test local file loads are classified as
        app-bound.

        * TestWebKitAPI/Tests/WebKitCocoa/in-app-browser-privacy-test-user-agent-script.html: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/in-app-browser-privacy-test-user-script.html: Removed.
        These files are no longer needed as their content is directly copied
        into the URL scheme handler.

2020-03-17  Chris Dumez  <cdumez@apple.com>

        REGRESSION: [ macOS wk1 ] ASSERTION FAILED: _notifications.contains(notificationID) imported/w3c/web-platform-tests/notifications/constructor-basic.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=207307
        <rdar://problem/59206964>

        Reviewed by Alex Christensen.

        When [MockWebNotificationProvider reset] was called at the end of the test, it would remove all
        notifications from the map but not tell WebCore that the notification were discarded. As a result,
        WebCore would later tell the MockWebNotificationProvider to cancel the notification but this
        notification would no longer be in the map, causing us to hit an assertion in debug.

        To address the issue, we now call Notification::finalize() in [MockWebNotificationProvider reset]
        to let WebCore know the notification was discarded. This is similar to what is already done for
        WebKit2 in WebNotificationManager::clearNotifications().

        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        (-[MockWebNotificationProvider reset]):

2020-03-17  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo][FTW] Update path to requirements download
        https://bugs.webkit.org/show_bug.cgi?id=209202

        Reviewed by Ross Kirsling.

        Repository was renamed from WinCairoRequirements to WebKitRequirements in the
        WebKitForWindows org on GitHub. Additionally the .zip file was renamed to
        WebKitRequirementsWin64.zip.

        * Scripts/update-webkit-wincairo-libs.py:

2020-03-17  Aakash Jain  <aakash_jain@apple.com>

        [ews] Resubmit patches to commit-queue which were cq- by commit-queue and later cq+
        https://bugs.webkit.org/show_bug.cgi?id=208920

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.update_builder_name_to_id_mapping): Method to generate builder name to id mapping.
        (Buildbot.fetch_pending_and_inprogress_builds): Method to fetch pendign and in-progress builds from buildbot.
        (Buildbot.get_patches_in_queue): Method to fetch list of patches which are pending or are in-progress on buildbot.
        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla.get_cq_plus_timestamp): Get UTC timestamp when cq+ flag was set.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.run): Update builder name to id mapping. We just need to update it one-time, since we need the id only
        for commit-queue which isn't expected to change.
        (BugzillaPatchFetcher.fetch_commit_queue_patches):
        (BugzillaPatchFetcher.send_patches_to_buildbot): Allow sending the patch again to commit-queue.
        (BugzillaPatchFetcher.patches_to_send_to_commit_queue): Find patches which needs to be sent to commit-queue. Filter
        out patches which are already waiting or in-progress on commit-queue, or whose recent build was completed after
        setting cq+ flag on bugzilla.

2020-03-17  Chris Dumez  <cdumez@apple.com>

        [WKTR] testRunner API that takes in a completion handler should use async IPC
        https://bugs.webkit.org/show_bug.cgi?id=209187

        Reviewed by John Wilander.

        testRunner API that takes in a completion handler should use async IPC. This hangs
        the WebProcess for no reason and can cause deadlocks if the UIProcess then tries
        to IPC the WebProcess as a result of this testRunner call.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsHasHadUserInteraction):
        (WTR::TestRunner::statisticsUpdateCookieBlocking):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::setStatisticsShouldDowngradeReferrer):
        (WTR::TestRunner::setStatisticsFirstPartyWebsiteDataRemovalMode):
        (WTR::TestRunner::statisticsResetToConsistentState):
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::removeAllSessionCredentials):
        (WTR::TestRunner::getApplicationManifestThen):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-03-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Timestamp shown in status-bubble hover-over message is in future
        https://bugs.webkit.org/show_bug.cgi?id=196628

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/events.py:
        (JSONProducer.json_serialize_datetime): Keep the timestamp in UTC, instead of converting it to local time zone.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.get_all_builds_for_queue): Sort the queues based on build number instead of start time, since the 
        timestamps for new builds might be less than timestamps for old builds which completed immediately prior to this change.

2020-03-17  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate SPI _webView:printFrame:completionHandler:
        https://bugs.webkit.org/show_bug.cgi?id=209192
        <rdar://problem/51313336>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PrintDelegateWithCompletionHandler _webView:printFrame:completionHandler:]):
        (-[PrintDelegateWithCompletionHandler waitForPrintFrameCall]):
        (TEST):

2020-03-17  Chris Dumez  <cdumez@apple.com>

        Use less sync IPC for ITP testRunner methods
        https://bugs.webkit.org/show_bug.cgi?id=209184

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsDebugMode):
        (WTR::TestRunner::setStatisticsPrevalentResourceForDebugMode):
        (WTR::TestRunner::setStatisticsLastSeen):
        (WTR::TestRunner::setStatisticsMergeStatistic):
        (WTR::TestRunner::setStatisticsPrevalentResource):
        (WTR::TestRunner::setStatisticsVeryPrevalentResource):
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-03-17  Chris Dumez  <cdumez@apple.com>

        [WKTR] Crash when trying to open a new window in an ephemeral session test
        https://bugs.webkit.org/show_bug.cgi?id=209181

        Reviewed by Geoffrey Garen.

        Make sure that the new WKWebView is using the same data store as its related WKWebView.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateOtherPage):

2020-03-17  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r257844.

        this revision caused a test to start timing out

        Reverted changeset:

        "(r256513) [ Mac ] fast/scrolling/programmatic-scroll-to-zero-
        zero.html is a flaky failure"
        https://bugs.webkit.org/show_bug.cgi?id=207948
        https://trac.webkit.org/changeset/257844

2020-03-16  Justin Michaud  <justin_michaud@apple.com>

        Add personal email to Tools/Scripts/webkitpy/common/config/contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=209151

        Reviewed by Yusuke Suzuki.

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

2020-03-16  Chris Dumez  <cdumez@apple.com>

        Crash under WebCookieCache::clearForHost()
        https://bugs.webkit.org/show_bug.cgi?id=209149
        <rdar://problem/60453086>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2020-03-16  Keith Rollin  <krollin@apple.com>

        Remove support for WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=208894
        <rdar://problem/60297590>

        Reviewed by Brent Fulgham.

        This project provided support for facilities that are now handled
        elsewhere and is no longer needed.

        * Scripts/copy-webkitlibraries-to-product-directory:

2020-03-16  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Accessibility sandbox regressions
        https://bugs.webkit.org/show_bug.cgi?id=209065

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm:
        (TEST):

2020-03-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-build/config.json: Temporarily remove ews114
        while the hardware is out for repair.

2020-03-13  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] IDLs, stubs and build configuration for WPE
        https://bugs.webkit.org/show_bug.cgi?id=208702

        Reviewed by Dean Jackson.

        * Scripts/webkitperl/FeatureList.pm: Added WebXR.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added ENABLE_WEBXR, off by default.

2020-03-16  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Limit set of classes that can be decoded when a preference has changed
        https://bugs.webkit.org/show_bug.cgi?id=208012

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm:
        (TEST):

2020-03-16  youenn fablet  <youenn@apple.com>

        Unique origins should not be Potentially Trustworthy
        https://bugs.webkit.org/show_bug.cgi?id=209049

        Reviewed by Darin Adler.

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

2020-03-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        KeyedDecoderGeneric fails to allocate Vector while decoding broken data
        https://bugs.webkit.org/show_bug.cgi?id=207324

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/KeyedCoding.cpp:
        (TestWebKitAPI::generateRandomData): Added.
        (TestWebKitAPI::KeyedCoding.DecodeRandomData): Added a new test decoding random data.

2020-03-15  Yusuke Suzuki  <ysuzuki@apple.com>

        Should not use variable-length-array (VLA)
        https://bugs.webkit.org/show_bug.cgi?id=209043

        Reviewed by Mark Lam.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:

2020-03-13  Alex Christensen  <achristensen@webkit.org>

        WKWebView._negotiatedLegacyTLS should be correct after back/forward navigations
        https://bugs.webkit.org/show_bug.cgi?id=209011
        <rdar://problem/59370588>

        Reviewed by Youenn Fablet.

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

2020-03-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [watchOS] Don’t display empty text suggestions in Quickboard when editing input fields
        https://bugs.webkit.org/show_bug.cgi?id=209089

        Reviewed by Tim Horton.

        Add an API test for watchOS. Also rename a few occurrences of "Autofill" to "AutoFill", to reflect the official
        marketing name for the feature.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (runUntilReceivesAutoplayEvent):

        Additionally fix the watchOS engineering build for arm64_32, which was failing due to comparisons between 64-bit
        and 32-bit integers. This is because this function took a `WKAutoplayEvent` (a 32-bit integer), but compared
        against the `_WKAutoplayEvent` type (an NSInteger that is 64 bits on this architecture). There didn't seem to
        be any compelling reason to compare against different types here (especially since we only set
        `receivedAutoplayEvent` under the Objective-C delegate method that provides a `_WKAutoplayEvent`), so I changed
        these all to be `_WKAutoplayEvent`.

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (-[AutoFillTestView _autofillInputView]):
        (-[AutoFillTestView textInputHasAutoFillContext]):
        (TestWebKitAPI::TEST):
        (-[AutofillTestView initWithFrame:]): Deleted.
        (-[AutofillTestView _autofillInputView]): Deleted.
        (-[AutofillTestView textInputHasAutofillContext]): Deleted.
        * TestWebKitAPI/ios/UIKitSPI.h:

2020-03-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r256232.

        Caused ResizeObserver tests to become flaky

        Reverted changeset:

        "[DRT] InternalSettingsGenerated::resetToConsistentState() may
        override TestOptions"
        https://bugs.webkit.org/show_bug.cgi?id=207481
        https://trac.webkit.org/changeset/256232

2020-03-13  Kate Cheney  <katherine_cheney@apple.com>

        [ iOS and Mac wk2 ] http/tests/in-app-browser-privacy/ tests failing
        https://bugs.webkit.org/show_bug.cgi?id=209016
        <rdar://problem/60329530> 

        Reviewed by Chris Dumez.

        Re-initialize the app-bound domains when the correct
        TestOptions parameter is set.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::reinitializeAppBoundDomains):
        * WebKitTestRunner/TestController.h:

2020-03-13  Kate Cheney  <katherine_cheney@apple.com>

        Report all third party loads on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=209032
        <rdar://problem/60397323>

        Reviewed by Chris Dumez.

        Mostly naming updates to reflect the change in use for this SPI call.
        It now returns all loaded third party domains, not just prevalent ones.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::getLoadedThirdPartyDomains):
        (WTR::TestRunner::callDidReceiveLoadedThirdPartyDomainsCallback):
        (WTR::TestRunner::getPrevalentDomains): Deleted.
        (WTR::TestRunner::callDidReceivePrevalentDomainsCallback): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::getLoadedThirdPartyDomains):
        (WTR::TestController::clearLoadedThirdPartyDomains):
        (WTR::TestController::getPrevalentDomains): Deleted.
        (WTR::TestController::clearPrevalentDomains): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveLoadedThirdPartyDomains):
        (WTR::TestInvocation::didReceivePrevalentDomains): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::getLoadedThirdPartyDomains):
        (WTR::TestController::clearLoadedThirdPartyDomains):
        (WTR::TestController::getPrevalentDomains): Deleted.
        (WTR::TestController::clearPrevalentDomains): Deleted.

2020-03-13  Aakash Jain  <aakash_jain@apple.com>

        [ews] run FindModifiedChangeLogs early in the build
        https://bugs.webkit.org/show_bug.cgi?id=209060

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/factories_unittest.py: Updated unit-test.

2020-03-13  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Add EWS testers to run GTK layout tests
        https://bugs.webkit.org/show_bug.cgi?id=207648

        Reviewed by Carlos Alberto Lopez Perez and Aakash Jain.

        Queue 'GTK-Webkit2-EWS' was renamed to 'GTK-Build-EWS'.
        A new queue, named 'GTK-WK2-Tests-EWS', was added for WK2
        tests (layout tests).

        * BuildSlaveSupport/ews-build/config.json: Added new queue for
        WK2 tests.
        * BuildSlaveSupport/ews-build/factories.py:
        (GTKTestsFactory):
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestCommitQueueFactory.test_commit_queue_factory):
        (TestGTKFactory): Added unit-test.
        (TestGTKFactory.test_gtk_factory):
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (TagsForBuilderTest.test_getTagsForBuilder):

2020-03-13  Aakash Jain  <aakash_jain@apple.com>

        Add API endpoint in EWS django app to provide patch status in json format
        https://bugs.webkit.org/show_bug.cgi?id=208940

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/urls.py: Added url for new api endpoint.
        * BuildSlaveSupport/ews-app/ews/views/status.py: Added.

2020-03-13  Kate Cheney  <katherine_cheney@apple.com>

        WebKit2UseRemoteLayerTreeDrawingArea should be reset to NO between layout tests
        https://bugs.webkit.org/show_bug.cgi?id=209055
        <rdar://problem/60272692>

        Reviewed by Simon Fraser.

        Now that WebKitTestRunner has a bundleID, its' user default values
        persist between tests. This patch resets WebKit2UseRemoteLayerTreeDrawingArea
        to NO before running tests. It will be set to YES in PlatformWebView
        if specified by the test.

        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

2020-03-13  Konstantin Tokarev  <annulen@yandex.ru>

        [CMake] Eleminate mismatches between Find* module names and variables they set
        https://bugs.webkit.org/show_bug.cgi?id=208948

        Reviewed by Michael Catanzaro.

        * wpe/backends/CMakeLists.txt:

2020-03-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] reduce logging
        https://bugs.webkit.org/show_bug.cgi?id=209062

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (BugzillaBeautifulSoup.authenticate):
        (BugzillaBeautifulSoup._load_query):

2020-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in TextIterator::node via TextManipulationController::replace
        https://bugs.webkit.org/show_bug.cgi?id=209048

        Reviewed by Wenson Hsieh.

        Added a regression test.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TextManipulation.CompleteTextManipulationShouldReplaceContentsAroundParagraphWithJustImage):

2020-03-13  Saam Barati  <sbarati@apple.com>

        Pull in JS tests from "Internal" when there are "Internal" tests in an adjacent directory
        https://bugs.webkit.org/show_bug.cgi?id=209038

        Reviewed by Keith Miller.

        This allows us to automatically pull in some tests that are in non open sourced Apple
        checkouts.

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

2020-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in TextManipulationController::replace
        https://bugs.webkit.org/show_bug.cgi?id=209021

        Reviewed by Wenson Hsieh.

        Added a regression test.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TextManipulation.CompleteTextManipulationShouldReplaceContentFollowedAfterImageInCSSTable):

2020-03-12  Per Arne Vollan  <pvollan@apple.com>

        [macOS] _AXSApplicationAccessibilityEnabled should not be called
        https://bugs.webkit.org/show_bug.cgi?id=208953

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2020-03-12  Kate Cheney  <katherine_cheney@apple.com>

        Resource load statistics data summary should return all third party data
        https://bugs.webkit.org/show_bug.cgi?id=209000
        <rdar://problem/60348306>

        Reviewed by John Wilander.

        Marked only 2 of 3 domains prevalent in data summary tests to ensure
        the call returns all third parties, not just prevalent ones.
        Added a more aggressive check for the size of the array at the
        beginning of the test to ensure the array is still returning 3 values. 
        Also removed the ASSERT statements as they seem to cause timeouts (not
        clear crashes) when they are not true, which is hard to debug.
        If these values are nil, the test will fail in the EXPECT_WK_STREQ
        checks, we don't need ASSERT statements.

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

2020-03-12  Jonathan Bedard  <jbedard@apple.com>

        resultsdpy: Add script to run local instance
        https://bugs.webkit.org/show_bug.cgi?id=208746

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/example: Added.
        * resultsdbpy/resultsdbpy/example/__init__.py: Added.
        * resultsdbpy/resultsdbpy/example/environment.py: Added.
        (Environment): Organize environment variables used by results database.
        (ModelFromEnvironment): Construct the database model from the environment.
        (main): Create and drop tables, if required.
        * resultsdbpy/resultsdbpy/example/main.py: Added.
        (health): Web-server health check.
        (handle_errors):
        (main): Run results database web-server.
        * resultsdbpy/resultsdbpy/example/worker.py: Added.
        (main): Asynchronously process uploaded results.
        * resultsdbpy/resultsdbpy/run: Added.

2020-03-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        run-webkit-tests --use-gpu-process should enable GPU Process for canvas
        https://bugs.webkit.org/show_bug.cgi?id=209004

        Reviewed by Tim Horton.

        Add "RenderCanvasInGPUProcessEnabled" to the list of internal features that should be enabled when
        `use_gpu_process` is specified.

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

2020-03-12  Matt Lewis  <jlewis3@apple.com>

        Make flatpack import for run-webkit-tests only happen on linux systems
        https://bugs.webkit.org/show_bug.cgi?id=208954

        Reviewed by Philippe Normand.

        * Scripts/run-webkit-tests: Added an if statement to find the system platform
        to determine if we need the flatpackutils import. 

2020-03-12  Alex Christensen  <achristensen@webkit.org>

        WKWebView.hasOnlySecureContent should be correct after back/forward navigations
        https://bugs.webkit.org/show_bug.cgi?id=207609

        Reviewed by Ryosuke Niwa.

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

2020-03-12  Daniel Bates  <dabates@apple.com>

        FocusController::setFocusedElement() should tell client of refocused element
        https://bugs.webkit.org/show_bug.cgi?id=208880

        Reviewed by Wenson Hsieh.

        Adds a test to ensure that calling -selectPositionAtPoint on an already focused element tries
        to start an input session. Currently, it does not even try.

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

2020-03-12  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Use #!/usr/bin/python3 shebang to run generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=208970

        Reviewed by Daniel Bates.

        Fedora and Ubuntu are both patching generate-gtkdoc to use #!/usr/bin/python3 rather than
        #!/usr/bin/env python.

        #!/usr/bin/env and /usr/bin/python are both banned in Fedora packages. I guess Ubuntu
        probably has similar rules.

        Note this is the only script that attempts to use /usr/bin/python in tarball builds.
        Everything else that does so is probably only used by webkit-build.

        https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_multiple_python_runtimes

        * gtkdoc/generate-gtkdoc:

2020-03-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Formalize the Keychain schema
        https://bugs.webkit.org/show_bug.cgi?id=183533
        <rdar://problem/43347926>

        Reviewed by Brent Fulgham.

        Modifies the test infra to use Credential ID as the unique identifier for a credential instead of
        the original combination of RP ID and user handle.

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

2020-03-11  Keith Miller  <keith_miller@apple.com>

        Test262-runner should always consider crashes as new failures
        https://bugs.webkit.org/show_bug.cgi?id=208943

        Reviewed by Yusuke Suzuki.

        Right now the runner will consider crashes with no output as passes, which is obviously bad.
        Since we should never crash on a conformance test we should consider a crash as a new failure
        100% of the time.

        * Scripts/test262/Runner.pm:
        (processFile):
        (runTest):
        (processResult):

2020-03-11  Chris Dumez  <cdumez@apple.com>

        Assertion hit under WebPageProxy::suspendCurrentPageIfPossible() when bypassing certificate warning page
        https://bugs.webkit.org/show_bug.cgi?id=208927
        <rdar://problem/55448331>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2020-03-11  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Switch EWS api-gtk bot from buildAndTest to testOnly
        https://bugs.webkit.org/show_bug.cgi?id=208860

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added 'api-gtk'.
        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.__init__): Call InstallGTKDependencies() if platform is
        GTK.
        (TestFactory.__init__): Call InstallGTKDependencies() if platform is
        GTK.
        (GTKBuildFactory):
        (GTKBuildFactory.__init__): Deleted.
        (GTKBuildAndTestFactory): Deleted.
        (GTKBuildAndTestFactory.__init__): Deleted.
        (GTKAPIBuildAndTestFactory): Deleted.
        * BuildSlaveSupport/ews-build/loadConfig.py:

2020-03-11  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add unit test to prevent multiple schedulers for a builder.
        https://bugs.webkit.org/show_bug.cgi?id=208917

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_multiple_scheduers_for_builder): Added unit test.
        (TagsForBuilderTest): Fixed a typo.

2020-03-11 Philippe Normand  <pnormand@igalia.com>

        [GTK] Failing API tests under the Flatpak SDK environment
        https://bugs.webkit.org/show_bug.cgi?id=208871

        Reviewed by Michael Catanzaro.

        The load-failed signal callback should return a boolean result,
        otherwise we enter in unknown territory depending on how the
        toolchain compiles this, possibly triggering bad behavior (with
        GCC 9.2 from the Flatpak SDK) or not caring at all (with current
        GCC toolchain on buildbots).

        Patch suggested by Michael Catanzaro.

        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        (loadFailedCallback):

2020-03-10  Don Olmstead  <don.olmstead@sony.com>

        Sync FeatureList.pm with CMake definitions
        https://bugs.webkit.org/show_bug.cgi?id=208866

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

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

        [ews] Add unit tests for commit queue factory
        https://bugs.webkit.org/show_bug.cgi?id=208862

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestCommitQueueFactory):
        (TestCommitQueueFactory.test_commit_queue_factory): Added unit-test for commit-queue factory.

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

        [ews-app] Status bubble should only display important messages in pop-over - part 3
        https://bugs.webkit.org/show_bug.cgi?id=208865

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added more strings to STEPS_TO_HIDE.

2020-03-10  Lauro Moura  <lmoura@igalia.com>

        [WPE] MiniBrowser: Close child WebViews when exiting
        https://bugs.webkit.org/show_bug.cgi?id=208689

        Reviewed by Carlos Garcia Campos.

        Store created views so we can release them before exiting.

        * MiniBrowser/wpe/main.cpp:
        (webViewClose):
        (createWebView):
        (main):

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

        Add ValidateCommiterAndReviewer and ValidateChangeLogAndReviewer build steps in commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=208861

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Remove verifycqplus parameter.
        (CommitQueueFactory): Inherit from factory.BuildFactory base class instead of custom Factory class.
        (CommitQueueFactory.__init__): Add required build steps, especially ValidateCommiterAndReviewer, 
        UpdateWorkingDirectory and ValidateChangeLogAndReviewer.

2020-03-10  Philippe Normand  <pnormand@igalia.com>

        [GTK] API favicon test flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=208189

        Reviewed by Carlos Garcia Campos.

        Sometimes the favicon changes already during the load. Keeping
        track of it in the WebView favicon property notification handler
        gets us rid of the race.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testFaviconDatabaseGetFavicon):

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

        Generate commit-queue status bubble from new EWS
        https://bugs.webkit.org/show_bug.cgi?id=208811

        Reviewed by Jonathan Bedard.

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

2020-03-09  Don Olmstead  <don.olmstead@sony.com>

        Remove obsolete feature flags
        https://bugs.webkit.org/show_bug.cgi?id=208830

        Reviewed by Alex Christensen.

        Remove ENABLE_CUSTOM_SCHEME_HANDLER and ENABLE_MAC_VIDEO_TOOLBOX since they
        are no longer used.

        Also remove ENABLE_POINTER_EVENTS since the FeaturesDefines.xcconfig was not modified
        when the compilation flag was removed in r258148.

        Remove ENABLE_ACCELERATED_OVERFLOW_SCROLLING, ENABLE_CSS_IMAGE_ORIENTATION,
        ENABLE_CUSTOM_SCHEME_HANDLER, and ENABLE_FETCH_API from FeatureList.pm.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-03-09  Kate Cheney  <katherine_cheney@apple.com>

        WebKitTestRunner bundleID should not be cleared before every test
        https://bugs.webkit.org/show_bug.cgi?id=208823
        <rdar://problem/60204539>

        Reviewed by Per Arne Vollan.

        This is causing test failures for layout tests which rely on the Info.plist 
        bundle identifier (not the one set via the override method).

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:

2020-03-09  Per Arne Vollan  <pvollan@apple.com>

        [macOS] Notification observer is not removed
        https://bugs.webkit.org/show_bug.cgi?id=208834

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm: Added.
        (TEST):

2020-03-06  Brian Burg  <bburg@apple.com>

        upload.py gets confused by git-svn checkouts, unable to upload test results from my desk build
        https://bugs.webkit.org/show_bug.cgi?id=208729
        <rdar://problem/60105447>

        Reviewed by Jonathan Bedard.

        Improve upload.py to look for the svn branch and revision for the 'webkit'
        project and prefer those to the git equivalents (eg, prefer trunk/rNNNNN to master/<hash>).

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git):
        (Git.git_svn_id_regexp):
        (Git._field_from_git_svn_id):
        (Git.svn_revision):
        (Git.svn_branch):
        (Git.svn_url):
        (Git.native_branch):
        Refactor svn revision, branch, url to use the same regexp and helper code.

        * Scripts/webkitpy/common/checkout/scm/stub_repository.py:
        (StubRepository.svn_branch):
        Expose a stub since this is used unconditionally by Port.commits_for_upload.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.svn_branch):
        (SVN.native_revision):
        (SVN):
        (SVN.native_branch):
        Refactor so the actual implementation is contained in svn_revision / svn_branch.
        The native_* methods call out to the SVN equivalents since this is an SVN repository.

        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload):
        Add special git-svn handling for the WebKit repository so that SVN branch and revision
        is preferred over the git equivalents.

2020-03-09  Antoine Quint  <graouts@apple.com>

        TestWebKitAPI fails to build on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=208820

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:

2020-03-09  Jonathan Bedard  <jbedard@apple.com>

        resultsdbpy: Add tool to manage resultsdbpy container
        https://bugs.webkit.org/show_bug.cgi?id=208743

        Rubber-stamped by Aakash Jain.

        Add tool to start, stop and restart the resultsdbpy Docker container.

        * resultsdbpy/resultsdbpy/container: Added.

2020-03-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Surrounding text for input methods should not be limited to the current paragraph
        https://bugs.webkit.org/show_bug.cgi?id=208706

        Reviewed by Žan Doberšek.

        Add test case to check surrounding text in multiline context.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (testWebKitInputMethodContextSurrounding):

2020-03-08  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Mapping to UTI from tag and tag class should be performed in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=208783

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2020-03-07  Ross Kirsling  <ross.kirsling@sony.com>

        Replace the use of term "rollout" to "revert" in various tools
        https://bugs.webkit.org/show_bug.cgi?id=208775

        Reviewed by Ryosuke Niwa.

        See this webkit-dev thread for the originating discussion:
        https://lists.webkit.org/pipermail/webkit-dev/2020-March/031132.html

        'rollout' is a confusing term to anyone unacquainted with WebKit;
        consensus seems to be that 'revert' would be the best replacement (as opposed to 'rollback').

        Given the long legacy of this term within WebKit, it's important to deprecate and not remove 'rollout' commands.
        As such, this patch aims to make 'revert' the preferred term everywhere without making 'rollout' fail.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Trac.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/checkout.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/trac_unittests.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/actions_unittests.js:
        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        * Scripts/webkit-tools-completion.sh:
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        * Scripts/webkitpy/common/net/bugzilla/attachment.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        * Scripts/webkitpy/tool/bot/feeders.py:
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/sheriffbot_unittest.py:
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/postdiffforrevert.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        * Scripts/webkitpy/tool/steps/reopenbugafterrevert.py: Renamed from Tools/Scripts/webkitpy/tool/steps/reopenbugafterrollout.py.

2020-03-07  David Quesada  <david_quesada@apple.com>

        Crash in -[_WKRemoteObjectRegistry _invokeMethod:] block when calling a reply block after the web view has deallocated
        https://bugs.webkit.org/show_bug.cgi?id=208781
        rdar://problem/60061016

        Reviewed by Alex Christensen.

        Add a test that recreates the conditions of this crash:
        - Send a message from the injected bundle to the UI process that contains a reply block.
        - Hold a reference to the reply block.
        - Let the web view deallocate.
        - Call the block, and expect not to crash.

        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        (localObjectInterface):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (-[LocalObject doSomethingWithCompletionHandler:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn callUIProcessMethodWithReplyBlock]):

2020-03-07  Ryosuke Niwa  <rniwa@webkit.org>

        TextManipulationController should work with ARIA labels
        https://bugs.webkit.org/show_bug.cgi?id=208759

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TextManipulation.StartTextManipulationFindAttributeContent): Added.
        (TextManipulation.CompleteTextManipulationShouldPreserveOrderOfBlockImage): Updated
        the expected number of tokens for the first item as the very first image is correctly
        detected per the code change. 
        (TextManipulation.CompleteTextManipulationShouldReplaceAttributeContent): Added.

2020-03-07  Alex Christensen  <achristensen@webkit.org>

        Regression r258042: Failing API test TestWebKitAPI.URLSchemeHandler.Frames
        https://bugs.webkit.org/show_bug.cgi?id=208767

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        The frameID of the main frame before loading is only 0 on Mac right now.
        The test is still good because it validates that execution works in the main frame before loading.

2020-03-06  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit queue is not skipping layout tests for rollout patches
        https://bugs.webkit.org/show_bug.cgi?id=208716

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.doStepIf):
        (RunWebKit1Tests.doStepIf): Moved to base class RunWebKitTests.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-test.

2020-03-05  Sam Weinig  <weinig@apple.com>

        Move JavaScriptCore related feature defines from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=207436
        <rdar://problem/59296762>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Remove JSC related defines.

2020-03-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Provide a way to run tests in isolated tree mode
        https://bugs.webkit.org/show_bug.cgi?id=208629
        <rdar://problem/60075583>

        Reviewed by Ryosuke Niwa.

        Provide the ability to run tests for accessibility in the isolated tree mode.
        This sends a flag over to the injected bundle which calls the right HIServices override so that
        the system thinks it is in isolated mode.

        * Scripts/compare-webkit-configurations:
        (flag_for_comparison):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (parse_args):
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::AccessibilityController):
        (WTR::AccessibilityController::setAccessibilityIsolatedTreeMode):
        (WTR::AccessibilityController::updateIsolatedTreeMode):
        (WTR::AccessibilityController::executeOnAXThreadIfPossible):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionAccessibilityIsolatedTreeMode):
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::accessibilityIsolatedTreeMode const):

2020-03-06  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Re-enable CFPrefs direct mode
        https://bugs.webkit.org/show_bug.cgi?id=208690

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GrantAccessToPreferencesService.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):

2020-03-06  Kate Cheney  <katherine_cheney@apple.com>

        UIProcess needs mechanism to specify AppBound domains
        https://bugs.webkit.org/show_bug.cgi?id=208528
        <rdar://problem/59980340>

        Reviewed by Brent Fulgham.

        Added test app-bound domains to the plist and tested that the domains
        are properly stored in the website data store after a navigation.

        * TestWebKitAPI/Info.plist:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
        (TEST):

2020-03-06  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable cross origin access control checks
        https://bugs.webkit.org/show_bug.cgi?id=208748

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        Add a test that verifies this SPI allows Access-Control-Allow-Origin: * with credentials.

2020-03-06  Basuke Suzuki  <basuke.suzuki@sony.com>

        [webkitpy] Fix executive on Windows to run wpt server correctly
        https://bugs.webkit.org/show_bug.cgi?id=208693

        Reviewed by Jonathan Bedard.

        Bug fix for Windows environment a) fixing a typo. b) fixing path
        c) fix how to kill subprocesses.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._windows_kill_command):
        (Executive.interrupt):
        (Executive.kill_all):
        * Scripts/webkitpy/port/base.py:
        (Port.web_platform_test_server_doc_root):

2020-03-06  Alex Christensen  <achristensen@webkit.org>

        Evaluating JavaScript in main frame before loading should succeed
        https://bugs.webkit.org/show_bug.cgi?id=208733

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-03-06  Ryosuke Niwa  <rniwa@webkit.org>

        TextManipulationController should preserve images
        https://bugs.webkit.org/show_bug.cgi?id=208692

        Reviewed by Wenson Hsieh.

        Added tests for preserving images and their ordering.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TextManipulation.CompleteTextManipulationShouldPreserveImagesAsExcludedTokens):
        (TextManipulation.CompleteTextManipulationShouldPreserveSVGAsExcludedTokens):
        (TextManipulation.CompleteTextManipulationShouldPreserveOrderOfBlockImage):

2020-03-06  David Quesada  <david_quesada@apple.com>

        Add _WKResourceLoadInfo.resourceType SPI
        https://bugs.webkit.org/show_bug.cgi?id=208723

        Reviewed by Alex Christensen.

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

2020-03-06  Jonathan Bedard  <jbedard@apple.com>

        Stop reporting to webkit-test-results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=207218

        Reviewed by Alexey Proskuryakov.

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

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

        UIProcess crash after using _prepareForMoveToWindow, then deallocating the WKWebView before moving to the window
        https://bugs.webkit.org/show_bug.cgi?id=208365
        <rdar://problem/59877296>

        Reviewed by Geoffrey Garen.

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

2020-03-06  Aakash Jain  <aakash_jain@apple.com>

        EWS should be able to fetch patch status for security bugs while processing them
        https://bugs.webkit.org/show_bug.cgi?id=206511

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin.fetch_data_from_url_with_authentication): Method to fetch data from bugzilla using api key.
        (BugzillaMixin.get_patch_json): 
        (BugzillaMixin.get_bug_json):
        (BugzillaMixin._is_bug_closed):
        (ApplyPatch.hideStepIf): Use 'sensitive' build property instead of 'validated'.
        (TransferToS3.hideStepIf): Ditto.

2020-03-06  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should show the trac url for the commit on the build page
        https://bugs.webkit.org/show_bug.cgi?id=208715

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (PushCommitToWebKitRepo.evaluateCommand):

2020-03-06  Alex Christensen  <achristensen@webkit.org>

        Fix ResourceLoadDelegate.LoadInfo API test after r257816
        https://bugs.webkit.org/show_bug.cgi?id=208550

        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::respondToRequests):
        Sometimes we need a separate read to read the HTTP body after a request header, sometimes it comes in the same read.
        If it comes in the same read, send the response immediately.  Otherwise read the HTTP body then send the response.

2020-03-06  Lauro Moura <lmoura@igalia.com>

        [WPE][WebDriver] MiniBrowser should react to close session commands
        https://bugs.webkit.org/show_bug.cgi?id=207529

        Reviewed by Carlos Garcia Campos.

        Do not call g_object_unref on the first created view if it has already
        been disposed in the "close" signal handler.

        Based on original patch by Yury Semikhatsky.

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

2020-03-06  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Use Firefox user agent quirk more aggressively on Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=208647

        Reviewed by Carlos Garcia Campos.

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

2020-03-05  Alex Christensen  <achristensen@webkit.org>

        Add WKNavigationDelegatePrivate SPI to inform application of subframe navigations
        https://bugs.webkit.org/show_bug.cgi?id=208670

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[FrameNavigationDelegate waitForNavigations:]):
        (-[FrameNavigationDelegate requests]):
        (-[FrameNavigationDelegate frames]):
        (-[FrameNavigationDelegate callbacks]):
        (-[FrameNavigationDelegate _webView:didStartProvisionalLoadWithRequest:inFrame:]):
        (-[FrameNavigationDelegate _webView:didFailProvisionalLoadWithRequest:inFrame:withError:]):
        (-[FrameNavigationDelegate _webView:didCommitLoadWithRequest:inFrame:]):
        (-[FrameNavigationDelegate _webView:didFailLoadWithRequest:inFrame:withError:]):
        (-[FrameNavigationDelegate _webView:didFinishLoadWithRequest:inFrame:]):
        (TEST):

2020-03-05  Alex Christensen  <achristensen@webkit.org>

        Add WKFrameInfo._parentFrameHandle SPI
        https://bugs.webkit.org/show_bug.cgi?id=208674

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-03-05  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement SPI -[_WKWebAuthenticationPanelDelegate panel:selectAssertionResponse:source:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=208626
        <rdar://problem/60074148>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponse:source:completionHandler:]):
        (TestWebKitAPI::TEST):
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponse:completionHandler:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-multiple-accounts.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-la.html: Added.

2020-03-05  Antoine Quint  <graouts@apple.com>

        Page-specific UserStyleSheets should wait until the initial empty document has been removed to be injected
        https://bugs.webkit.org/show_bug.cgi?id=208644
        <rdar://problem/60042429>

        Reviewed by Brady Eidson.

        Add new tests for -[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:userContentWorld:]) that check:
        
        1. that a _WKUserStyleSheet can be added immediately after a WKWebView's creation and will be injected once the initial
           empty document has been removed in favor of the document for the requested URL,
        2. that removing a _WKUserStyleSheet immediately after it was added but before the initial empty document was removed
           correctly does not injected the style sheet.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:

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

        [ews] Add build step to push commit to WebKit repository
        https://bugs.webkit.org/show_bug.cgi?id=208589

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (PushCommitToWebKitRepo): Build step to push the local commit to WebKit repository.
        (PushCommitToWebKitRepo.start): Initialize log observer.
        (PushCommitToWebKitRepo.evaluateCommand): Check command return status and comment on bug accordingly.
        (PushCommitToWebKitRepo.comment_text_for_bug): Generate comment text for commenting on bug.
        (PushCommitToWebKitRepo.svn_revision_from_commit_text): Extract the svn revision from commit text.
        (PushCommitToWebKitRepo.getResultSummary): Set custom failure message.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.
        * BuildSlaveSupport/ews-build/factories.py:

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

        [ews] Add unit tests for ValidateCommiterAndReviewer build step
        https://bugs.webkit.org/show_bug.cgi?id=208262

        Reviewed by Jonathan Bedard.

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

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

        commit-queue should run WK2 tests instead of WK1 tests
        https://bugs.webkit.org/show_bug.cgi?id=208544

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

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

        [ews] ValidateCommiterAndReviewer should validate emails in case insensitive manner
        https://bugs.webkit.org/show_bug.cgi?id=208645

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer.load_contributors):
        (ValidateCommiterAndReviewer.start):

2020-03-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        style-checker: Add UAF to the list of security words to warn about.
        https://bugs.webkit.org/show_bug.cgi?id=208643

        Reviewed by Jonathan Bedard.

        UAF is a common acronym used for use after free.

        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_for_unwanted_security_phrases):

2020-03-04  Basuke Suzuki  <basuke.suzuki@sony.com>

        [MSVC] Add .natvis support of WebKit types
        https://bugs.webkit.org/show_bug.cgi?id=193119

        Reviewed by Don Olmstead.

        To help the WebKit developer while debugging, this file defines how
        WebKit types are displayed in debugger of Visual Studio.
        Very limited set of WebKit types, but it changes the world.

        * VisualStudio/WebKit.natvis: Added.

2020-03-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add system trace points around display list replay
        https://bugs.webkit.org/show_bug.cgi?id=208616

        Reviewed by Simon Fraser.

        Add a new "Display list replay" trace point.

        * Tracing/SystemTracePoints.plist:

2020-03-04  Alex Christensen  <achristensen@webkit.org>

        Call globalObjectIsAvailableForFrame before evaluating JavaScript in newly created worlds
        https://bugs.webkit.org/show_bug.cgi?id=208615
        <rdar://problem/59406743>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ContentWorldPlugIn.mm: Added.
        (-[ContentWorldPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[ContentWorldPlugIn webProcessPlugInBrowserContextController:globalObjectIsAvailableForFrame:inScriptWorld:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        Also make a test written in bug 206310 actually run code.

2020-03-04  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Remove leaks queue
        https://bugs.webkit.org/show_bug.cgi?id=208580

        Reviewed by Jonathan Bedard.

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

2020-03-04  Alex Christensen  <achristensen@webkit.org>

        Add SPI to evaluate JavaScript in an iframe
        https://bugs.webkit.org/show_bug.cgi?id=208605

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-03-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement -[_WKWebAuthenticationPanelDelegate panel:decidePolicyForLocalAuthenticatorWithCompletionHandler:] SPI
        https://bugs.webkit.org/show_bug.cgi?id=208533
        <rdar://problem/60010184>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:decidePolicyForLocalAuthenticatorWithCompletionHandler:]):
        (TestWebKitAPI::TEST):
        (-[TestWebAuthenticationPanelDelegate panel:verifyUserWithAccessControl:completionHandler:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-la.html: Removed.

2020-03-04  Alex Christensen  <achristensen@webkit.org>

        callAsyncJavaScript with an invalid parameter and no completionHandler should not crash
        https://bugs.webkit.org/show_bug.cgi?id=208593

        Reviewed by Brady Eidson.

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

2020-03-04  Alex Christensen  <achristensen@webkit.org>

        WKWebView's frames accessor should return a traversable type
        https://bugs.webkit.org/show_bug.cgi?id=208591

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-03-04  Antoine Quint  <graouts@apple.com>

        Add an SPI to allow UserStyleSheet injection to target a specific WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=208575
        <rdar://problem/59773690>

        Reviewed by Brady Eidson.

        Add new tests for the new SPI which check:
        
        1. that specifying forWKWebView: when initializing a _WKUserStyleSheet will inject the provided CSS source in the
           specified WKWebView alone,
        2. that the same test works with two WKWebViews with a shared WKWebKitConfiguration,
        3. that a WKWebView-specific _WKUserStyleSheet can be removed,
        4. that a WKWebView-specific _WKUserStyleSheet can be added twice and removed once and be removed as expected,
        5. and that a WKWebView-specific _WKUserStyleSheet is automatically removed when navigating to a new page,
        6. and that the same test also works with PSON enabled.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:

2020-03-04  Ryan Haddad  <ryanhaddad@apple.com>

        [macOS] test-lldb-webkit failing on debug bots
        https://bugs.webkit.org/show_bug.cgi?id=208545

        Reviewed by Jonathan Bedard.

        The lldb-webkit-test step must pass in the build configuration as an
        argument to the test-lldb-webkit script so that it uses the lldbWebKitTester
        binary that is downloaded with the rest of the build products. Without this
        argument, the bots expect to find the binary in the 'WebKitBuild/Release' directory
        regardless of their actual build configuration.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunLLDBWebKitTests): Pass in the build configuration to the test-lldb-webkit script.
        * Scripts/test-lldb-webkit:
        (LldbTester.parse_args): Capitalize the constants for Debug / Release since that is what webkitpy expects.

2020-03-04  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to create local git commit for commit-queue (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=208539

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-build/steps.py:

2020-03-04  Daniel Bates  <dabates@apple.com>

        Should use -bounds instead of -frame in RequestTextInputContext.mm tests
        https://bugs.webkit.org/show_bug.cgi?id=208565

        Reviewed by Wenson Hsieh.

        Pass the bounds of the web view to -synchronouslyRequestTextInputContextsInRect: instead
        of its frame as a means to find all the editable elements in the visible content area
        of the web view.

        Coincidentally this makes no difference to the test results right now because the web view
        happens to be located at the origin (0, 0) in the window. However if in the future the
        web view would be located at some other point then the tests may fail because the rectangle
        passed to -synchronouslyRequestTextInputContextsInRect: would no longer represent the
        rectangle for the visible content area.

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

2020-03-04  Daniel Bates  <dabates@apple.com>

        Organize tests in RequestTextInputContext.mm tests under test name RequestTextInputContext
        https://bugs.webkit.org/show_bug.cgi?id=208564

        Reviewed by Alex Christensen.

        Group the tests in RequestTextInputContext.mm under the test case name RequestTextInputContext
        to make it easy to run just these tests.

        Currently, the tests are organized under the test case name WebKit. This means you need to
        pass run-api-tests the name of each sub-test as there is no easy way to run them all without
        also running all the TestWebKitAPI.WebKit sub-tests. Instead organize them under RequestTextInputContext
        so that a person can run just these test using:
        
                run-api-tests --debug TestWebKitAPI.RequestTextInputContext

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

2020-03-04  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to create local git commit for commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=208539

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CreateLocalGITCommit): Build step to create local git commit.
        (CreateLocalGITCommit.start):
        (CreateLocalGITCommit.getResultSummary): Set custom failure message.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests and restructured imports.
        * BuildSlaveSupport/ews-build/factories.py:

2020-03-04  Simon Fraser  <simon.fraser@apple.com>

        (r256513) [ Mac ] fast/scrolling/programmatic-scroll-to-zero-zero.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=207948

        Reviewed by Zalan Bujtas.

        EventSendingController needs to trigger layout so that the WebHTMLView is not 0x0,
        so that it receives the wheel events.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * DumpRenderTree/win/EventSender.cpp:
        (mouseScrollBy):

2020-03-04  Andres Gonzalez  <andresg_22@apple.com>

        REGRESSION (r257739): two fast/events/autoscroll test have started to fail
        https://bugs.webkit.org/show_bug.cgi?id=208520
        <rdar://problem/60000214>

        Reviewed by Chris Fleizach.

        Calling InjectedBundle::singleton().page()->page() in the constructor
        of the AccessibilityController is having this side effect on iOS.
        So #if to MAC where it's actually being used.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::AccessibilityController):

2020-03-03  Alex Christensen  <achristensen@webkit.org>

        Add SPI _WKResourceLoadInfo.loadedFromCache
        https://bugs.webkit.org/show_bug.cgi?id=208554

        Reviewed by Wenson Hsieh.

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

2020-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Batch observations and completions of text manipulations
        https://bugs.webkit.org/show_bug.cgi?id=208406

        Reviewed by Wenson Hsieh.

        Updated the existing tests to use new APIs, and added new tests for batching finding & replacing
        multiple paragraphs at once.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (-[TextManipulationDelegate _webView:didFindTextManipulationItems:]):
        (-[TextManipulationDelegate items]):
        (-[LegacyTextManipulationDelegate init]):
        (-[LegacyTextManipulationDelegate _webView:didFindTextManipulationItem:]):
        (TextManipulation.StartTextManipulationSupportsLegacyDelegateCallback): Added.
        (TextManipulation.LegacyCompleteTextManipulationReplaceSimpleSingleParagraph): Added.
        (TextManipulation.CompleteTextManipulationReplaceMultipleSimpleParagraphsAtOnce): Added.
        (TextManipulation.CompleteTextManipulationShouldBatchItemCallback): Added.
        (TextManipulation.CompleteTextManipulationFailWhenItemIdentifierIsDuplicated): Added.
        (TextManipulation.CompleteTextManipulationCanHandleSubsetOfItemsToFail): Added.

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

        [Cocoa] Mapping from MIME type to UTI type should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=208415

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UTIFromMIMEType.mm: Added.
        (TEST):

2020-03-03  Alex Christensen  <achristensen@webkit.org>

        Add response to _WKResourceLoadDelegate didCompleteWithError callback
        https://bugs.webkit.org/show_bug.cgi?id=208553

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        (-[TestResourceLoadDelegate webView:resourceLoad:didCompleteWithError:response:]):
        (TEST):
        (-[TestResourceLoadDelegate webView:resourceLoad:didCompleteWithError:]): Deleted.

2020-03-03  Brady Eidson  <beidson@apple.com>

        API Test [Mojave+ WK2 Debug ] TestWebKitAPI.WKAttachmentTestsMac.InsertDroppedFilePromisesAsAttachments is a flaky crash.
        https://bugs.webkit.org/show_bug.cgi?id=198795

        Reviewed by Chris Dumez.

        This test appears to no longer be flaky.
        
        Let's re-enable it.
        
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):

2020-03-03  Alex Christensen  <achristensen@webkit.org>

        Requests sent to _WKResourceLoadDelegate should include HTTPBody
        https://bugs.webkit.org/show_bug.cgi?id=208550

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::respondToRequests):
        HTTPServer now looks for Content-Length in its request.
        If it finds this header, that means that the HTTP body is going to be received in another read, then the response should be sent after receiving that.

2020-03-03  Alex Christensen  <achristensen@webkit.org>

        Expose originalURL and originalHTTPMethod on _WKResourceLoadInfo
        https://bugs.webkit.org/show_bug.cgi?id=208522

        Reviewed by Brian Weinstein.

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

2020-03-03  Aakash Jain  <aakash_jain@apple.com>

        commit-queue should update working directory and reapply patch just before commiting
        https://bugs.webkit.org/show_bug.cgi?id=208521

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

2020-03-03  Matt Lewis  <jlewis3@apple.com>

        Add Unittest to commits_for_upload() and fix multiple unittests for several test suites.
        https://bugs.webkit.org/show_bug.cgi?id=208485

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/stub_repository.py:
        (StubRepository.__init__): Fixing the constructor to call upon the parent class as we were not doing this before. It also means
        that we don't have to recreate the variables that are already created.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: High level changed the imports to better reflect what we are using
        from each module, rather than making extra imports that we don't need.
        (StubRepositoryTest.mock_host_for_stub_repository): Since we are calling both an executive and a filesystem mock for most of the
        tests. it makes more sense to create a mock host with the files needed, than it does to instantiate each of these as separate objects
        and not part of the host.
        (StubRepositoryTest.test_in_working_directory): Changed the filesystem call to the host call.
        (StubRepositoryTest.test_native_revision): Changed the filesystem call to the host call.
        (StubRepositoryTest.test_native_branch): Changed the filesystem call to the host call.
        (StubRepositoryTest.test_svn_revision): Changed the filesystem call to the host call.
        (StubRepositoryTest.test_find_checkout_root): Changed the filesystem call to the host call.
        (StubRepositoryTest.test_find_checkout_root_failure): Changed the filesystem call to the host call.
        (StubRepositoryTest.test_find_parent_path_matching_callback_condition_with_file_system): Changed the filesystem call to the host call.
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py: 
        (SummarizedResultsTest.test_svn_revision_exists): Changed the name to original test to better reflect that it was just looking to see
        if we were geting any value at all
        (SummarizedResultsTest.test_svn_revision): Added a test to make sure that the revision we are getting is what we expect to get and make
        sure we aren't gabking the wrong key:value pair
        * Scripts/webkitpy/port/base_unittest.py: Changed from MockSystemHost to MockHost as we want the extras that
        come with the MockHosts and MockHost inherits from MockSystemHost.
        (PortTest.make_port): Changed the port to call MockHost that will creat the required stub_repository files.
        (test_commits_for_upload): Added amissing test for commits_for_upload as this has been an issue when trying to make changes
        to the various upload steps.

2020-03-03  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to find list of modified changelogs
        https://bugs.webkit.org/show_bug.cgi?id=208514

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/steps.py:
        (FindModifiedChangeLogs): Build step to find modified ChangeLogs.
        (FindModifiedChangeLogs.start): Initialize log observer.
        (FindModifiedChangeLogs.getResultSummary): Set custom failure message.
        (FindModifiedChangeLogs.evaluateCommand):
        (FindModifiedChangeLogs.is_path_to_changelog): Check if the file is a ChangeLog.
        (FindModifiedChangeLogs._status_regexp): Regex to match files from git output.
        (FindModifiedChangeLogs.extract_changelogs): Method to get list of ChangeLogs from git output.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2020-03-03  Ryan Haddad  <ryanhaddad@apple.com>

        [iOS EWS] TestWebKitAPI.WKWebsiteDataStore.RemoveAndFetchData is failing
        https://bugs.webkit.org/show_bug.cgi?id=208451

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm: Disable the test for iOS since it is slowing down EWS.

2020-03-03  Jiten Mehta  <jmehta@apple.com>

        Adopt HTTP Alternative Services Storage
        https://bugs.webkit.org/show_bug.cgi?id=208387

        Reviewed by Alex Christensen.

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

2020-03-03  Kate Cheney  <katherine_cheney@apple.com>

        Check for navigation to app-bound domain during script evaluation
        https://bugs.webkit.org/show_bug.cgi?id=208319
        <rdar://problem/57569321>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm: Added.
        (-[TestInAppBrowserScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/in-app-browser-privacy-test-user-agent-script.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/in-app-browser-privacy-test-user-script.html: Added.

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

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

        Introduced API test failure (Requested by perarne on #webkit).

        Reverted changeset:

        "[Cocoa] Mapping from MIME type to UTI type should be done in
        the UI process"
        https://bugs.webkit.org/show_bug.cgi?id=208415
        https://trac.webkit.org/changeset/257754

2020-03-03  Diego Pino Garcia  <dpino@igalia.com>

        REGRESSION(r257726): [GTK] LayoutTests crashing after r257726
        https://bugs.webkit.org/show_bug.cgi?id=208506

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformAdjustContext): Remove unnecessary code.

2020-03-02  Ben Nham  <nham@apple.com>

        Add performance probes for HTML parsing
        https://bugs.webkit.org/show_bug.cgi?id=208271

        Reviewed by Daniel Bates.

        This adds probes that show which lines of HTML are have been parsed.

        * Tracing/SystemTracePoints.plist:

2020-03-02  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Mapping from MIME type to UTI type should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=208415

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UTIFromMIMEType.mm: Added.
        (TEST):

2020-03-02  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, rolling out r257725.

        This commit caused 10 API tests to fail

        Reverted changeset:

        "[Cocoa] Mapping from MIME type to UTI type should be done in
        the UI process"
        https://bugs.webkit.org/show_bug.cgi?id=208415
        https://trac.webkit.org/changeset/257725

2020-03-02  Saam Barati  <sbarati@apple.com>

        Don't skip tests unnecessarily on arm64
        https://bugs.webkit.org/show_bug.cgi?id=208470
        <rdar://problem/59968869>

        Reviewed by Tadeu Zagallo.

        * Scripts/run-jsc-stress-tests:

2020-03-02  Andres Gonzalez  <andresg_22@apple.com>

        Fix for LayoutTests/accessibility/mac/search-text/search-text.html in IsolatedTree mode.
        https://bugs.webkit.org/show_bug.cgi?id=208434

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::AccessibilityController): Initializes m_useAXThread.
        (WTR::AccessibilityController::rootElement): No need to set m_useAXThread here since it is initialize in the constructor.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::accessibleElementById): Same as above.

2020-03-02  John Wilander  <wilander@apple.com>

        ResourceLoadStatistics: Enable cookie blocking and the Storage Access API in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=208399
        <rdar://problem/24731650>

        Reviewed by Brent Fulgham.

        The majority of the changes in WTR::TestController is (partially) fixing a bug
        where the TestRunner would statically use the default website datastore instead
        of the website data store configure for the page. This worked for persistent
        storage testing but not for ephemeral sessions which is what this patch is all
        about. The previous TestController::websiteDataStore() is now called
        TestController::defaultWebsiteDataStore() and the new
        TestController::websiteDataStore() returns the configured website data store.
        Most of the use of the default website data store should probably change but
        that's not really for this patch to deal with. I did however move all of
        resource load statistics' use to the new TestController::websiteDataStore().

        A new TestRunner function was added: isStatisticsEphemeral()
        It allows test cases to query the ephemeral status of resource load statistics.

        One problem that is mitigated in this patch but not fully fixed is that for
        Cocoa platforms, the TestRunner sets up two ephemeral sessions, once in
        TestController::generatePageConfiguration() via C API 
        WKPageConfigurationSetWebsiteDataStore(), and then again in 
        TestControllerCocoa's initializeWebViewConfiguration() via Cocoa API
        [copiedConfiguration setWebsiteDataStore:ephemeralWebsiteDataStore].
        I tried removing the latter since one session for all platforms should be
        Enough but got broken behavior as a result. So now both are still there
        and both enable resource load statistics.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isStatisticsEphemeral):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::defaultWebsiteDataStore):
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestController::decidePolicyForNavigationAction):
        (WTR::TestController::platformAdjustContext):
        (WTR::TestController::clearServiceWorkerRegistrations):
        (WTR::TestController::clearDOMCache):
        (WTR::TestController::clearDOMCaches):
        (WTR::TestController::clearIndexedDatabases):
        (WTR::TestController::clearLocalStorage):
        (WTR::TestController::hasDOMCache):
        (WTR::TestController::domCacheSize):
        (WTR::TestController::setStatisticsEnabled):
        (WTR::TestController::isStatisticsEphemeral):
        (WTR::TestController::setStatisticsDebugMode):
        (WTR::TestController::setStatisticsPrevalentResourceForDebugMode):
        (WTR::TestController::setStatisticsLastSeen):
        (WTR::TestController::setStatisticsMergeStatistic):
        (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::isStatisticsOnlyInDatabaseOnce):
        (WTR::TestController::setStatisticsGrandfathered):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::setUseITPDatabase):
        (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::hasStatisticsIsolatedSession):
        (WTR::TestController::setStatisticsShouldDowngradeReferrer):
        (WTR::TestController::setStatisticsShouldBlockThirdPartyCookies):
        (WTR::TestController::setStatisticsFirstPartyWebsiteDataRemovalMode):
        (WTR::TestController::statisticsResetToConsistentState):
        (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):

2020-03-02  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Mapping from MIME type to UTI type should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=208415

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UTIFromMIMEType.mm: Added.
        (TEST):

2020-03-02  Daniel Bates  <dabates@apple.com>

        Page::editableElementsInRect() should find nested editable elements and return found elements in paint order
        https://bugs.webkit.org/show_bug.cgi?id=208352
        <rdar://problem/59867815>

        Reviewed by Wenson Hsieh.

        Update test results to reflect the new behavior. To do this I also need to fix up the test code
        to actually scroll the web content. This also means we now execute the same code on both Mac and
        iOS to do the scrolling: window.scrollTo(0, 5000). Also fixed up sub-test "Inputs scrolled outside
        the requested rect; should not be included." to use a 10000px height <div> so that you can scroll
        to a y position of 5000. Otherwise, it's impossible to do because the page height is < 5000px.

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

2020-03-02  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, rolling out r257687.

        This commit caused debug tests to crash for macOS & iOS

        Reverted changeset:

        "[Cocoa] Mapping from MIME type to UTI type should be done in
        the UI process"
        https://bugs.webkit.org/show_bug.cgi?id=208415
        https://trac.webkit.org/changeset/257687

2020-03-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r257618.

        This allegedly causes Safari to crash when closing a window
        (see rdar://problem/59922725).

        Reverted changeset:

        "UIProcess crash after using _prepareForMoveToWindow, then
        deallocating the WKWebView before moving to the window"
        https://bugs.webkit.org/show_bug.cgi?id=208365
        https://trac.webkit.org/changeset/257618

2020-02-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove std::lock_guard
        https://bugs.webkit.org/show_bug.cgi?id=206451

        Reviewed by Anders Carlsson.

        Add std::lock_guard lint rule to prevent from using it.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_lock_guard):
        (check_style):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_lock_guard):
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (assertHasObjects):
        (assertHasOnlyObjects):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AXThread::dispatch):
        (WTR::AXThread::dispatchFunctionsFromAXThread):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AXThread::initializeRunLoop):

2020-02-29  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Mapping from MIME type to UTI type should be done in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=208415

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UTIFromMIMEType.mm: Added.
        (TEST):

2020-02-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r257565.

        It broke WinCairo MiniBrowser

        Reverted changeset:

        "[CMake] Use WEBKIT_EXECUTABLE in MiniBrowser"
        https://bugs.webkit.org/show_bug.cgi?id=206894
        https://trac.webkit.org/changeset/257565

2020-02-28  Aakash Jain  <aakash_jain@apple.com>

        EWS fails to retry build in case of kill-old-processes exception
        https://bugs.webkit.org/show_bug.cgi?id=208003

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (KillOldProcesses.evaluateCommand):
        (KillOldProcesses.getResultSummary):

2020-02-28  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should update the ChangeLog with Reviewer name
        https://bugs.webkit.org/show_bug.cgi?id=206535

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch.start): Update the patch with the patch reviewer name if available.

2020-02-28  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Make upload format valid
        https://bugs.webkit.org/show_bug.cgi?id=208341

        Rubber-stamped by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (uploadResults): Remove. FIXME.
        * Scripts/webkitdirs.pm:
        (splitVersionString): Handle case where the subminor version number has a - in it.
        * Scripts/webkitperl/webkitdirs_unittest/splitVersion.pl: Add unit tests.

2020-02-28  youenn fablet  <youenn@apple.com>

        [MacOS/iOS] Enable audio/video capture in GPUProcess by default
        https://bugs.webkit.org/show_bug.cgi?id=208130

        Reviewed by Eric Carlson.

        * WebKitTestRunner/TestOptions.h:
        Use GPU process to capture by default.
        We will remove this option once done verifying that every test works smoothly.

2020-02-28  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit queue should skip building and testing for rollout patches
        https://bugs.webkit.org/show_bug.cgi?id=208329

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin._is_patch_obsolete): Set rollout property appropriately.
        (CompileWebKit.doStepIf): Skip tests for rollout patches on commit-queue.
        (RunWebKit1Tests.doStepIf): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCompileWebKit.test_skip_for_rollout_patches_on_commit_queue): Added unit-test.
        (TestRunWebKit1Tests.test_skip_for_rollout_patches_on_commit_queue): Ditto.

2020-02-28  Daniel Bates  <dabates@apple.com>

        Update my watch list preferences and contributor's entry.

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

2020-02-27  Don Olmstead  <don.olmstead@sony.com>

        Fix WebCore export macros for declspec
        https://bugs.webkit.org/show_bug.cgi?id=208363

        Reviewed by Konstantin Tokarev.

        Remove setting of WEBCORE_EXPORT and WEBCORE_TESTSUPPORT_EXPORT from the header
        files. Removed precompiled headers that were empty.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/win/DefaultPolicyDelegate.cpp: Added a missing config.h.
        * MiniBrowser/win/stdafx.h:
        * TestWebKitAPI/win/TestWebKitAPIPrefix.cpp: Removed.
        * TestWebKitAPI/win/TestWebKitAPIPrefix.h: Removed.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h: Removed.
        * WebKitTestRunner/PlatformFTW.cmake:
        * WebKitTestRunner/PlatformWin.cmake:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2020-02-27  Tim Horton  <timothy_horton@apple.com>

        UIProcess crash after using _prepareForMoveToWindow, then deallocating the WKWebView before moving to the window
        https://bugs.webkit.org/show_bug.cgi?id=208365

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/PrepareForMoveToWindow.mm:
        (TEST):
        Add a test! It was a 100% repro crash before this change.

2020-02-27  Kate Cheney  <katherine_cheney@apple.com>

        TestWebKitAPI and WebKitTestRunner should have bundle identifiers
        https://bugs.webkit.org/show_bug.cgi?id=208260
        <rdar://problem/59820107>

        Reviewed by Tim Horton.

        Followed instructions for adding an Info.plist for Single-File Tools
        found on https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html

        The default WebsiteDataStore file path will change with this test to
        reflect the new bundleID so we must change expectations for any api
        tests which rely on knowing the path.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBStructuredCloneBackwardCompatibility.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        (TEST):
        (defaultWebsiteCacheDirectory):
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageNullEntries.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobThenDelete.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (runWebsiteDataStoreCustomPaths):
        (TEST):
        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        (TestWebKitAPI::resetTestState):
        Now that we set a bundleID, we have to reset the cache model between
        tests, otherwise it gets stored between tests.

        (TestWebKitAPI::TEST):
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2020-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        TextManipulationController should not generate a new item for content in manipulated paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=208286

        Reviewed by Wenson Hsieh.

        Added a regression test.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TextManipulation.InsertingContentIntoAlreadyManipulatedContentDoesNotCreateTextManipulationItem):

2020-02-27  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Make upload format valid
        https://bugs.webkit.org/show_bug.cgi?id=208341

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (uploadResults): Print json blob for upload after failure for debugging.

2020-02-27  Don Olmstead  <don.olmstead@sony.com>

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

        Reviewed by Michael Catanzaro.

        Add workaround for Windows where PAL_FRAMEWORK_HEADERS_DIR is not propagating.

        * DumpRenderTree/PlatformWin.cmake:

2020-02-27  Alex Christensen  <achristensen@webkit.org>

        Add SPI to query WKFrameInfos in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=208212

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp: Removed.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::saltForOrigin):

2020-02-27  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, rolling out r257530.

        This commit seems to have broke the build internally for
        watchOS

        Reverted changeset:

        "Add SPI to query WKFrameInfos in a WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=208212
        https://trac.webkit.org/changeset/257530

2020-02-27  Don Olmstead  <don.olmstead@sony.com>

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

        Reviewed by Adrian Perez de Castro.

        Modify CMake ports to use WEBKIT_EXECUTABLE when creating their respective
        MiniBrowsers.

        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/wpe/CMakeLists.txt:

2020-02-26  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebsiteDataStore::setSourceApplicationBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=206456

        Reviewed by Brady Eidson.

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

2020-02-26  Alex Christensen  <achristensen@webkit.org>

        _WKUserContentWorld should be a wrapper around WKContentWorld
        https://bugs.webkit.org/show_bug.cgi?id=208274

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentWorld.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):

2020-02-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r257522.

        Caused 16 API test failures on the bots

        Reverted changeset:

        "TestWebKitAPI and WebKitTestRunner should have bundle
        identifiers"
        https://bugs.webkit.org/show_bug.cgi?id=208260
        https://trac.webkit.org/changeset/257522

2020-02-26  Alex Christensen  <achristensen@webkit.org>

        Add SPI to query WKFrameInfos in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=208212

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp: Removed.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::saltForOrigin):

2020-02-26  Kate Cheney  <katherine_cheney@apple.com>

        TestWebKitAPI and WebKitTestRunner should have bundle identifiers
        https://bugs.webkit.org/show_bug.cgi?id=208260
        <rdar://problem/59820107>

        Reviewed by Tim Horton.

        Followed instructions for adding an Info.plist for Single-File Tools
        found on https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/Info.plist: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/Info.plist: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2020-02-26  Kate Cheney  <katherine_cheney@apple.com>

        Tests should each use a unique ResourceLoadStatistics file path for its database store
        https://bugs.webkit.org/show_bug.cgi?id=208206
        <rdar://problem/59690272>

        Reviewed by Brady Eidson.

        Initialize a default website data store before checking for the ITP
        store to ensure the directory exists after the file has been deleted.

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

2020-02-26  Christopher Reid  <chris.reid@sony.com>

        [Win] Implement NetworkCache::Data by using FileSystem::MappedFileData
        https://bugs.webkit.org/show_bug.cgi?id=197684
        <rdar://problem/59467397>

        Reviewed by Yusuke Suzuki.

        Add test for FileSystem::createFile

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2020-02-26  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should verify patch committer and reviewer
        https://bugs.webkit.org/show_bug.cgi?id=206532

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidateCommiterAndReviewer): Build step to validate patch commiter and reviewer.
        (ValidateCommiterAndReviewer._addToLog):
        (ValidateCommiterAndReviewer.getResultSummary):
        (ValidateCommiterAndReviewer.fail_build):
        (ValidateCommiterAndReviewer.load_contributors): Load contributors information.
        (ValidateCommiterAndReviewer.is_reviewer):
        (ValidateCommiterAndReviewer.is_committer):
        (ValidateCommiterAndReviewer.full_name_from_email):
        (ValidateCommiterAndReviewer.start):

2020-02-26  Daniel Bates  <dabates@apple.com>

        [iOS] Send focus update immediately on becoming or resigning first responder
        https://bugs.webkit.org/show_bug.cgi?id=208082
        <rdar://problem/59688413>

        Rubber-stamped by Jer Noble.

        Add a test to ensure that selecting a position at a point after the web view
        becomes first responder is allowed. Such an operation is only allowed if the
        web view is focused.

        * TestWebKitAPI/Tests/ios/UIWKInteractionViewProtocol.mm:
        (-[TestWKWebView selectPositionAtPoint:]):
        (TEST):
        * TestWebKitAPI/ios/UIKitSPI.h: Forward declare SPI.

2020-02-26  Chris Dumez  <cdumez@apple.com>

        Unreviewed, disable new DragAndDropTests.DragAndDropOnEmptyView API test on iOS.

        The test was added for macOS and times out on iOS.

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

2020-02-26  Youenn Fablet  <youenn@apple.com>

        Use WebPageProxy preferences for capture instead of WebProcessPool configuration parameters
        https://bugs.webkit.org/show_bug.cgi?id=208238

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):
        Remove use of deleted parameter.

2020-02-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: safari app extension isolated worlds and injected files use the extension's identifier instead of its name
        https://bugs.webkit.org/show_bug.cgi?id=206911
        <rdar://problem/58026635>

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        Add test for `WTF::HashSet::reserveInitialCapacity`.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Actually check the value of `WTF::HashMap::capacity`.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKInspectorDelegate.mm: Added.
        (-[InspectorDelegate _webView:didAttachInspector:])
        (-[InspectorDelegate _webView:browserDomainEnabledForInspector:])
        (-[InspectorDelegate _webView:browserDomainDisabledForInspector:])
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[InspectorDelegate _webView:didAttachInspector:]): Deleted.
        (TestWebKitAPI::TEST): Deleted.

2020-02-25  Matt Lewis  <jlewis3@apple.com>

        Add checkout_root to stubrepository.py
        https://bugs.webkit.org/show_bug.cgi?id=208213

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/checkout/scm/stub_repository.py:
        (StubRepository.__init__):

        We are creating our own class variable for checkout_root rather than calling the parent SCM variable
        because when initially we left out the parent constructor due to trying to override the fact that we don't actually have a SCM.

2020-02-25  Daniel Bates  <dabates@apple.com>

        TestWebKitAPI.PasteMixedContent.CopyAndPasteWithCustomPasteboardDataOnly should wait until copy operation completes
        https://bugs.webkit.org/show_bug.cgi?id=208214

        Reviewed by Wenson Hsieh.

        Wait until the copy operation completes before loading the second web view and testing paste
        to ensure that something was actually copied to the clipboard.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
        (TestWebKitAPI::TEST): Substitute -_synchronouslyExecuteEditCommand for -_executeEditCommand
        so that we wait until the command completes.

2020-02-25  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r256882): Can't drag an HTML file into a new (empty) Safari tab
        https://bugs.webkit.org/show_bug.cgi?id=208199
        <rdar://problem/59746887>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2020-02-25  Sihui Liu  <sihui_liu@apple.com>

        spinRunLoop should take a non-zero integer as parameter
        https://bugs.webkit.org/show_bug.cgi?id=208148
        <rdar://problem/59766682>

        Unreviewed iOS build fix.

        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        (TestWebKitAPI::Util::spinRunLoop):

2020-02-25  Sihui Liu  <sihui_liu@apple.com>

        spinRunLoop should take a non-zero integer as parameter
        https://bugs.webkit.org/show_bug.cgi?id=208148

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        (TestWebKitAPI::Util::spinRunLoop):

2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add tests for CompactRefPtrTuple
        https://bugs.webkit.org/show_bug.cgi?id=208172

        Reviewed by Darin Adler.

        We copy tests from RefPtr for CompactRefPtrTuple to ensure that it is working correctly.
        Many of tests are not necessary since currently CompactRefPtrTuple is non-copyable / non-movable.

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

2020-02-24  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should check that patch have appropriate review flag
        https://bugs.webkit.org/show_bug.cgi?id=208138

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin._is_patch_obsolete): Drive-by fix to set build properties for patch author, commiter and reviewer.
        (BugzillaMixin._is_patch_cq_plus):
        (BugzillaMixin._does_patch_have_acceptable_review_flag): Method to check if patch have r? or r- flag.
        (ValidatePatch.start):

2020-02-24  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement SPI for the platform authenticator
        https://bugs.webkit.org/show_bug.cgi?id=208087
        <rdar://problem/59369305>

        Reviewed by Brent Fulgham.

        Besides adding API tests, this patch also teaches TestWebKitAPI to use restricted entitlements.

        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponse:completionHandler:]):
        (-[TestWebAuthenticationPanelDelegate panel:verifyUserWithAccessControl:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-la.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la-duplicate-credential.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la-error.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-la.html: Added.

2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, updating LLDB test for CompactPointerTuple.
        https://bugs.webkit.org/show_bug.cgi?id=207827

        * lldb/lldb_webkit.py:
        (WTFCompactPointerTupleProvider):
        (WTFCompactPointerTupleProvider.update):

2020-02-24  Ellie Epskamp-Hunt  <eepskamphunt@apple.com>

        Provide alternate way to name Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=205224
        rdar://57038084

        Reviewed by Alex Christensen.

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

2020-02-24  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Link to result archives
        https://bugs.webkit.org/show_bug.cgi?id=207646
        <rdar://problem/59395807>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/archiveRouter.js: Added.
        (_ArchiveRouter): Retrieve json from archive-router endpoint.
        (_ArchiveRouter.prototype._determineArgumentFromAncestry): Given an argument, default and ancestry values,
        return the most specific value.
        (_ArchiveRouter.prototype.hasArchive): Check if a suite and mode have an archive link.
        (_ArchiveRouter.prototype.pathFor): Construct the path for archive access.
        (_ArchiveRouter.prototype.labelFor): Return a label for an archive link.
        * resultsdbpy/resultsdbpy/view/static/js/investigate.js:
        (parametersForInstance): Extract from lambda function.
        (testRunLink): Use parametersForInstance instead of a lambda function.
        (archiveLink): Return an archive link for data. 
        (contentForData): Add archive link to view.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (TimelineFromEndpoint): Accept both suite and test.
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Add archive link to pop-over.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Pass suite and test to TimelineEndpoint.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Pass suite to TimelineEndpoint.
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Add archive_route dictionary.

2020-02-24  Alex Christensen  <achristensen@webkit.org>

        WKWebViewConfiguration._corsDisablingPatterns should also disable CORS for non-DocumentThreadableLoader loading
        https://bugs.webkit.org/show_bug.cgi?id=208035
        <rdar://problem/58011337>

        Reviewed by Tim Hatcher.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-02-22  Darin Adler  <darin@apple.com>

        Fix some include mistakes and make some coding style tweaks to WebKit and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=208099

        Reviewed by Antti Koivisto.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        Sorted includes the traditional way. Added an include of AccessibilityCommonMac.h
        so we can use the -[NSString createJSStringRef] method.
        (-[NSString createJSStringRef]): Deleted. This is a duplicate of the method
        defined in AccessibilityCommonMac.mm, and was causing a linker warning.

2020-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html is failing in iOS 13.4 beta
        https://bugs.webkit.org/show_bug.cgi?id=208096
        <rdar://problem/59632008>

        Reviewed by Alexey Proskuryakov.

        In the iOS 13.4 beta, the fix for <rdar://problem/56422337> changed -[UIDatePicker setCalendar:], such that
        if the new calendar locale matches that of the current calendar's locale (and several other properties of the
        new NSCalendar are also unchanged), then the UIDatePicker's calendar will also avoid changing.

        In our layout tests, the mechanism we use to simulate the user changing their preferred calendar is no longer
        compatible with the above change since the swizzled NSCalendar instance does not have a locale set, so it will
        default to the same locale as the one used in the original NSCalendar. This means the call to -setCalendar: ends
        up being a no-op, so the test fails to override the simulated Japanese calendar type with a Gregorian calendar
        in the credit card expiry field.

        To fix this, additionally specify a calendar locale identifier when generating the mock NSCalendar.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setDefaultCalendarType):
        * WebKitTestRunner/TestController.h:

        Change m_overriddenCalendarIdentifier to m_overriddenCalendarAndLocaleIdentifiers, a pair of calendar
        identifier and calendar locale identifier.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::swizzledCalendar):
        (WTR::TestController::overriddenCalendarIdentifier const):
        (WTR::TestController::overriddenCalendarLocaleIdentifier const):

        Clean these up by returning the `NSString *` instead of making another `RetainPtr`.

        (WTR::TestController::setDefaultCalendarType):

        Plumb the new calendar's locale identifier through this method.

        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::getOverriddenCalendarIdentifier const): Deleted.
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setDefaultCalendarType):

2020-02-21  Kate Cheney  <katherine_cheney@apple.com>

        App-bound domains should have separate Network Sessions
        https://bugs.webkit.org/show_bug.cgi?id=208026
        <rdar://problem/59434006>

        Reviewed by Brent Fulgham.

        This patch is mostly test infrastructure involving 3 functions.
        One sets in-app browser privacy as enabled in the network process
        manually for the test. One ensures that setting the WebView category
        works properly, and the last one checks for an app-bound session for
        an app-bound navigation.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::getWebViewCategory):
        (WTR::TestRunner::callDidReceiveWebViewCategoryCallback):
        (WTR::TestRunner::hasAppBoundSession):
        (WTR::TestRunner::setInAppBrowserPrivacyEnabled):
        (WTR::TestRunner::callDidSetInAppBrowserPrivacyEnabledCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        Clearing the bundleID should happen right before setting a new one, 
        otherwise it clears the ID after it is set and returns a null ID.

        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::getWebViewCategory):
        (WTR::InAppBrowserPrivacyCallbackContext::InAppBrowserPrivacyCallbackContext):
        (WTR::inAppBrowserPrivacyBooleanResultCallback):
        (WTR::inAppBrowserPrivacyVoidResultCallback):
        (WTR::TestController::hasAppBoundSession):
        (WTR::TestController::setInAppBrowserPrivacyEnabled):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetInAppBrowserPrivacyEnabled):
        (WTR::TestInvocation::didReceivePrevalentDomains):
        (WTR::TestInvocation::didReceiveWebViewCategory):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::getWebViewCategory):

2020-02-21  Jonathan Bedard  <jbedard@apple.com>

        Build DumpRenderTree and WebKitTestRunner for macCatalyst
        https://bugs.webkit.org/show_bug.cgi?id=208068
        <rdar://problem/59676596>

        Reviewed by Tim Horton.

        * DumpRenderTree/ios/TextInputControllerIOS.m: Import WebKitLegacy explicitly.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Use cocoatouch instead of SDK.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Ditto.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig: Ditto.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig: Ditto.
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig: Ditto.
        * DumpRenderTree/mac/EditingDelegate.mm: Import WebKitLegacy explicitly.
        * DumpRenderTree/mac/EventSendingController.h: Ditto.
        * DumpRenderTree/mac/ObjCPlugin.m: Ditto.
        * DumpRenderTree/mac/ResourceLoadDelegate.mm: Ditto.
        * Makefile: Add DumpRenderTree and WebKitTestRunner.
        * WebKitTestRunner/Configurations/Base.xcconfig: Use cocoatouch instead of SDK.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Ditto.

2020-02-21  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to Validate ChangeLog for commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=208064

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidateChangeLogAndReviewer): Build step to validate ChangeLog.
        (ValidateChangeLogAndReviewer.start):
        (ValidateChangeLogAndReviewer.evaluateCommand): If the validation fails, comment on bug and mark patch as cq-.
        (SetCommitQueueMinusFlagOnPatch.start): End the build (after marking the patch cq-) if build_finish_summary property is set.

2020-02-21  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build step to set cq- flag on bugzilla patch
        https://bugs.webkit.org/show_bug.cgi?id=208021

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin.set_cq_minus_flag_on_patch):
        (SetCommitQueueMinusFlagOnPatch):
        (SetCommitQueueMinusFlagOnPatch.start):
        (SetCommitQueueMinusFlagOnPatch.getResultSummary):

2020-02-20  Matt Lewis  <jlewis3@apple.com>

        Stub repositories fail to upload some results due to missing head svn revision
        https://bugs.webkit.org/show_bug.cgi?id=207684

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/host_mock.py: Added in call for creating stub repo checkout information for upload tests.
        (MockHost.__init__):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Changed call to head_svn_revision to port.commits_for_upload() to bring
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (SummarizedResultsTest.setUp): Added in new required parameter for testing.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Removed the forced movement up the systems tree that prevented us 
        from using mock SCMs and more
        * Scripts/webkitpy/port/test.py: Added function to make the checkout_information.json for upload testing.

2020-02-21  Diego Pino Garcia  <dpino@igalia.com>

        [JSCOnly] Add --verbose flag when running JavaScriptCore tests
        https://bugs.webkit.org/show_bug.cgi?id=208051

        Reviewed by Carlos Alberto Lopez Perez.

        Verbose flag prints out each test name executed. Without this flag
        stdout prints out one or two periods.

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

2020-02-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] googleapis.com is a public suffix, defeating isGoogle() check in UserAgentQuirks.cpp
        https://bugs.webkit.org/show_bug.cgi?id=207984

        Reviewed by Daniel Bates.

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

2020-02-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Improve user agent quirk for Google Docs and Google Drive
        https://bugs.webkit.org/show_bug.cgi?id=206506

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasFirefoxBrowserQuirk):
        (TestWebKitAPI::TEST):

2020-02-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        check-webkit-style: Check if *_EXPORT and *_EXPORT_PRIVATE macros are used under corresponding directories
        https://bugs.webkit.org/show_bug.cgi?id=207380

        Reviewed by Jonathan Bedard.

        Added a new rule 'build/export_macro'.

        Removed a obsolete rule 'readability/webkit_export' which was used
        only by Chromium port (r148185).

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.export_macro):
        (check_function_definition):
        (_unix_path): Added.
        (is_generated_file): Use _unix_path.
        (check_has_config_header): Ditto.
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_export_macro_check):
        (WebKitStyleTest.test_webkit_export_check): Deleted.

2020-02-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Add prettier toolbar button icons
        https://bugs.webkit.org/show_bug.cgi?id=207999

        Reviewed by Ross Kirsling.

        Use a custom toolbar button icons instead of system stock icons.

        Fixed a bug toolbar button dropdown arrows always looked being
        hovered. TBSTYLE_FLAT should be given.

        Removed the window border line of Progress Indicator.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::createToolbar):
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/toolbar.bmp: Added.

2020-02-20  Aakash Jain  <aakash_jain@apple.com>

        Update run-webkit-tests help description for skip-failing-tests
        https://bugs.webkit.org/show_bug.cgi?id=208031

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:

2020-02-20  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r255677): Reloading tab with beforeunload prompt closes tab when asking to stay on page
        https://bugs.webkit.org/show_bug.cgi?id=208015
        <rdar://problem/59591630>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2020-02-20  Tim Horton  <timothy_horton@apple.com>

        WKWebView with non-zero origin has the wrong top content inset with NSWindowStyleMaskFullSizeContentView
        https://bugs.webkit.org/show_bug.cgi?id=207998
        <rdar://problem/40942425>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TopContentInset.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/FullscreenTopContentInset.mm.
        (-[FullscreenChangeMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        Add some tests for top content insets.

2020-02-20  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Correctly report JSC tests for windows (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=207910

        Unreviewed infrastructure fix.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Use the major version instead of the sub-minor version
        for version name.

2020-02-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WPE::libwpe target
        https://bugs.webkit.org/show_bug.cgi?id=207970

        Reviewed by Adrian Perez de Castro.

        Use the WPE::libwpe target.

        * MiniBrowser/wpe/CMakeLists.txt:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/glib/PlatformWPE.cmake:
        * wpe/backends/CMakeLists.txt:

2020-02-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Add 'Go Home' menu item and toolbar button
        https://bugs.webkit.org/show_bug.cgi?id=207749

        Reviewed by Ross Kirsling.

        Added "Set Default URL to Current URL" menu item like Mac MiniBrowser.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::createToolbar):
        (MainWindow::WndProc):
        (MainWindow::setDefaultURLToCurrentURL):
        (MainWindow::goHome): Added.
        (MainWindow::onURLBarEnter):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/MiniBrowserReplace.h:
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2020-02-19  Peng Liu  <peng.liu6@apple.com>

        Fix check-webkit-style errors related to AVFoundationSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=207834

        Reviewed by Daniel Bates.

        Revert the change in r256770 regarding the headers ordering.
        Headers in the same category should be in sorted order (case sensitive, as done by the command-line sort tool or the Xcode sort selection command).

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_include_line):

2020-02-19  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Correctly report JSC tests for windows
        https://bugs.webkit.org/show_bug.cgi?id=207910

        Rubber-stamped by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Give Windows a version name.
        * Scripts/webkitdirs.pm:
        (determineWinVersion): Correctly parse Windows 10 version numbers, conform to
        Version dictionary.

2020-02-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix assertions in storage access API layout tests after r256882.

        Drop dead testRunner code to toggle storage access API feature.

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

2020-02-18  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Support 2D axis, smooth-motion events
        https://bugs.webkit.org/show_bug.cgi?id=207881

        Reviewed by Carlos Garcia Campos.

        * wpe/jhbuild.modules: Bump to a newer libwpe commit.

2020-02-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r256851.

        Broke internal bots

        Reverted changeset:

        "Stub repositories fail to upload some results due to missing
        head svn revision"
        https://bugs.webkit.org/show_bug.cgi?id=207684
        https://trac.webkit.org/changeset/256851

2020-02-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Support back/forward mouse buttons by handing APPCOMMAND_BROWSER_BACKWARD and APPCOMMAND_BROWSER_FORWARD
        https://bugs.webkit.org/show_bug.cgi?id=207883

        Reviewed by Ross Kirsling.

        Unlike other mouse buttons, 4th and 5th mouse buttons are
        processed differently. Clicking them dispatches WM_XBUTTONDOWN and
        WM_XBUTTONUP events to the window under the mouse cursor.
        Unhandled WM_XBUTTONUP events are automatically converted to
        WM_APPCOMMAND. And, unhandle WM_APPCOMMAND are propagated to the
        parent window.
        <https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-appcommand>

        Unlike other WM_* commands, WM_APPCOMMAND should return 1 if it is
        handled.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::navigateForwardOrBackward):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::navigateForwardOrBackward):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

2020-02-18  Alex Christensen  <achristensen@webkit.org>

        Expand WKRemoteObjectCoder supported POD types to encode NSURLResponse types
        https://bugs.webkit.org/show_bug.cgi?id=207912
        <rdar://problem/59556922>

        Reviewed by Brian Weinstein.

        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.h:
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistryPlugIn.mm:
        (-[RemoteObjectRegistryPlugIn sendRequest:response:challenge:error:completionHandler:]):

2020-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Web process may crash under ServicesOverlayController::buildPotentialHighlightsIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=207899
        <rdar://problem/55658207>

        Reviewed by Tim Horton and Simon Fraser.

        Make it possible to run tests on macOS with services controls enabled, via a new TestOptions flag.

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

2020-02-18  Matt Lewis  <jlewis3@apple.com>

        Stub repositories fail to upload some results due to missing head svn revision
        https://bugs.webkit.org/show_bug.cgi?id=207684

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (main): Added initializing the scm to the host object.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Changed call to head_svn_revision to port.commits_for_upload() to bring
        it in line with modern code.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Added inializing the scm to the host object.
        * Scripts/webkitpy/port/base.py:
        (Port.commits_for_upload): Removed the forced movement up the systems tree that prevented us
        from using mock SCMs and more
        * Scripts/webkitpy/test/main.py:
        (main):  Removed the forced movement up the systems tree, initialized the SCM on the host object,
        and converted the webkit_root variable to the SCM checkout root.
        (Tester._run_tests):

2020-02-18  Per Arne Vollan  <pvollan@apple.com>

        Move [UIDevice currentDevice] calls to UI process
        https://bugs.webkit.org/show_bug.cgi?id=204320

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/LocalizedDeviceModel.mm: Added.
        (TEST):

2020-02-18  Simon Fraser  <simon.fraser@apple.com>

        Move from "layer flush" terminology to "rendering update"
        https://bugs.webkit.org/show_bug.cgi?id=207870

        Reviewed by Tim Horton.

        Rename various functions and member variables to move away from the legacy "layer flush"
        terminology and instead use "rendering update", matching Page::updateRendering(). The fact
        that we have layers is an implementation detail.
        
        Change LayerFlushThrottlingState to be an OptionSet<>.

        * Tracing/SystemTracePoints.plist:

2020-02-17  Zhifei Fang  <zhifei_fang@apple.com>

        [Webkit.css] Adding popover style element
        This help to prevent us reinventing the wheel ever again
        https://bugs.webkit.org/show_bug.cgi?id=207787

        Reviewed by Dean Jackson.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml:
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.popover):
        (.popover>.content):
        (.popover.display):
        (.popover .arrow):
        (.popover .arrow.point-top):
        (.popover .arrow.point-bottom):
        (.popover .arrow.point-left):
        (.popover .arrow.point-right):
        (@media (prefers-color-scheme: dark) .popover>.content):
        (@media (prefers-color-scheme: dark) .popover.display):
        (@media (prefers-color-scheme: dark) .popover .arrow):
        (.popover>.content>.section): Deleted.
        (.popover:focus>.content, .popover:hover>.content): Deleted.
        (.popover.right>.content): Deleted.
        (.popover.right :focus>.content, .popover.right:hover>.content): Deleted.
        (.popover.left>.content): Deleted.
        (.popover.left :focus>.content, .popover.left:hover>.content): Deleted.
        (.popover.bottom>.content): Deleted.
        (.popover.bottom :focus>.content, .popover.bottom:hover>.content): Deleted.

2020-02-17  Brent Fulgham  <bfulgham@apple.com>

        Update WebKit Tools to issue mach extensions as needed
        https://bugs.webkit.org/show_bug.cgi?id=207850
        <rdar://problem/59521019>

        Reviewed by Per Arne Vollan.

        Revise the codesign settings for our testing tools to allow the process to vend mach extensions
        to its child processes (WebContent, GPU, Network, etc.) as needed.

        * MiniBrowser/MiniBrowser.entitlements:
        * TestWebKitAPI/Configurations/TestWebKitAPI-macOS.entitlements: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/Configurations/WebKitTestRunner.entitlements:

2020-02-17  Peng Liu  <peng.liu6@apple.com>

        Fix check-webkit-style errors related to AVFoundationSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=207834

        Reviewed by Eric Carlson.

        We need to use case-insensitive comparison to check whether the headers are alphabetically sorted in each header section.
        Soft-link headers can be included as either "file.h" or <file.h>.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_classify_include):
        (check_include_line):

2020-02-17  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after r256715.

        Fix tvOS and watchOS builds.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:

2020-02-17  Per Arne Vollan  <pvollan@apple.com>

        Use CF prefs direct mode in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=203420

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/PreferenceChanges.mm: Added.
        (TEST):

2020-02-17  Aakash Jain  <aakash_jain@apple.com>

        EWS should be able to file Bugzilla bugs
        https://bugs.webkit.org/show_bug.cgi?id=207845

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin.create_bug): Method to file bugzilla bug using bugzilla REST API.

2020-02-17  Aakash Jain  <aakash_jain@apple.com>

        EWS should be able to comment on Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=201927

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin.comment_on_bug): Method to comment on bugzilla bug.
        (BugzillaMixin.remove_flags_on_patch): Drive-by fix to correctly identify failure based on status code.
        (BugzillaMixin.close_bug): Ditto.
        (CommentOnBug): Build step to comment on bugzilla bug.

2020-02-17  Antti Koivisto  <antti@apple.com>

        [macOS] Add trace points for layer flush runloop observer
        https://bugs.webkit.org/show_bug.cgi?id=207837

        Reviewed by Sam Weinig.

        * Tracing/SystemTracePoints.plist:

2020-02-17  Don Olmstead  <don.olmstead@sony.com>

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

        Reviewed by Darin Adler.

        * TestWebKitAPI/PlatformWin.cmake:

2020-02-17  Aakash Jain  <aakash_jain@apple.com>

        [ews] add SetBuildSummary step for Windows EWS
        https://bugs.webkit.org/show_bug.cgi?id=207556

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (WindowsFactory.__init__):
        (GTKBuildAndTestFactory.__init__):
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestBuildAndTestsFactory.test_windows_factory): Added unit-test.

2020-02-17  Alberto Garcia  <berto@igalia.com>

        [WPE] Change the QML plugin install path
        https://bugs.webkit.org/show_bug.cgi?id=207761

        Reviewed by Philippe Normand.

        * Scripts/run-qt-wpe-minibrowser:
        * glib/api_test_runner.py:
        (TestRunner._run_test_qt):

2020-02-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove remaining WTF_EXPORT and WTF_IMPORT by replacing them with WTF_EXPORT_DECLARATION and WTF_IMPORT_DECLARATION
        https://bugs.webkit.org/show_bug.cgi?id=207746

        Reviewed by Don Olmstead.

        * MiniBrowser/win/stdafx.h:

2020-02-16  Brady Eidson  <beidson@apple.com>

        Expose "allowsContentJavaScript" on WKWebpagePreferences
        <rdar://problem/51534967> and https://bugs.webkit.org/show_bug.cgi?id=207427

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (TEST):
        (-[WebsitePoliciesNavigationDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]): Deleted.
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[TestNavigationDelegate waitForDidFinishNavigationWithPreferences:]):
        (-[WKWebView _test_waitForDidFinishNavigationWithPreferences:]):
        (-[TestNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView synchronouslyLoadHTMLString:preferences:]):

2020-02-14  Yusuke Suzuki  <ysuzuki@apple.com>

        NetworkLoadMetrics should be shared by multiple ResourceResponse instances
        https://bugs.webkit.org/show_bug.cgi?id=207747

        Reviewed by Keith Miller.

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

2020-02-14  Alex Christensen  <achristensen@webkit.org>

        Allow UIDNAInfo.errors from uidna_nameToUnicode that would not cause URL parsing failures
        https://bugs.webkit.org/show_bug.cgi?id=207360
        <rdar://problem/57825317>

        Reviewed by Ryosuke Niwa.

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

2020-02-14  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add Fontconfig::Fontconfig target
        https://bugs.webkit.org/show_bug.cgi?id=207730

        Reviewed by Adrian Perez de Castro.

        Use the Fontconfig::Fontconfig target.

        * WebKitTestRunner/PlatformGTK.cmake:

2020-02-13  Kate Cheney  <katherine_cheney@apple.com>

         Expose prevalent domains on a per-page basis
         https://bugs.webkit.org/show_bug.cgi?id=207523
         <rdar://problem/59270758>

        Reviewed by Chris Dumez.

        Added WebKitTestRunner functions so this functionality can be tested.
        clearPrevalentDomains should be called between tests to reset the
        state.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::getPrevalentDomains):
        (WTR::TestRunner::callDidReceivePrevalentDomainsCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::getPrevalentDomains):
        (WTR::TestController::clearPrevalentDomains):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceivePrevalentDomains):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::getPrevalentDomains):
        (WTR::TestController::clearPrevalentDomains):

2020-02-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] Reimplement the toolbar by using toolbar common control
        https://bugs.webkit.org/show_bug.cgi?id=207682

        Reviewed by Ross Kirsling.

        The toolbar placed button common controls as the toolbar buttons.
        However, because these buttons are focusable, shortcut keys don't
        work after clicking them.

        Added Home button, Add to Bookmarks button, dropdown buttons of
        back and forward buttons, but they aren't implemented yet. Just
        placeholders at the moment.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::createToolbar): Added.
        (MainWindow::resizeToolbar): Added.
        (MainWindow::rescaleToolbar): Added.
        (MainWindow::init):
        (MainWindow::resizeSubViews):
        (MainWindow::updateDeviceScaleFactor):
        * MiniBrowser/win/MainWindow.h: Added m_toolbarItemsWidth.

2020-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Dark Mode: In Notes, list item becomes invisible in dark mode after outdenting
        https://bugs.webkit.org/show_bug.cgi?id=207676

        Reviewed by Wenson Hsieh and Timothy Hatcher.

        Added regression tests for pasting content with -apple-system-label and outdenting content.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        (PasteHTML.TransformColorsOfDarkContentButNotSemanticColor):
        (PasteHTML.DoesNotTransformColorsOfLightContentDuringOutdent):

2020-02-13  Alex Christensen  <achristensen@webkit.org>

        _WKResourceLoadInfo should conform to NSSecureCoding
        https://bugs.webkit.org/show_bug.cgi?id=207667

        Reviewed by Brady Eidson.

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

2020-02-13  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Add Buildbots for Debug/Release builds
        https://bugs.webkit.org/show_bug.cgi?id=199454

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Add PlayStation slaves, builders
        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        Use higher timeout for playstation as with win bot
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        Set PlayStation category for playstation platform
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        Use same path as gtk, wincairo, etc for appendCustomBuildFlags
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        Add PlayStation expectations

2020-02-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Check if PIP is supported in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=207406

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/PictureInPictureSupport.mm: Added.
        (TEST):

2020-02-13  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Conditionalize fullscreen tests on fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=207397
        <rdar://problem/59268128>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCloseAllMediaPresentations.mm:

2020-02-13  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Re-baseline DocumentEditingContext for Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=207696

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:

2020-02-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] -updateSelectionWithExtentPoint:completionHandler: should work without requiring floating cursor
        https://bugs.webkit.org/show_bug.cgi?id=207680
        <rdar://problem/59340940>

        Reviewed by Tim Horton.

        Add a new API test to verify that calling -updateSelectionWithExtentPoint:completionHandler: with a point behind
        the current selection works.

        * TestWebKitAPI/Tests/ios/UIWKInteractionViewProtocol.mm:
        (-[TestWKWebView updateSelectionWithExtentPoint:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2020-02-13  Said Abou-Hallawa  <said@apple.com>

        Unreviewed, rolling out r255158, 255405 and r255486

        Caused test flakiness and PLT regression.

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

2020-02-12  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Allow insecure requests on upload
        https://bugs.webkit.org/show_bug.cgi?id=207662

        Rubber-stamped by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (uploadResults): Allow insecure curl request when posting results.

2020-02-12  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r256463.

        Caused major flakiness on Mac wk2

        Reverted changeset:

        "REGRESSION (r255158): http/tests/frame-throttling/raf-
        throttle-in-cross-origin-subframe.html is a flaky failure"
        https://bugs.webkit.org/show_bug.cgi?id=206839
        https://trac.webkit.org/changeset/256463

2020-02-12  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Remove debug JS logging
        https://bugs.webkit.org/show_bug.cgi?id=207663

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/investigate.js:
        (elapsed):
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (_ToolTip.prototype.toString):
        * resultsdbpy/resultsdbpy/view/static/library/js/Ref.js:
        (prototype.addWithDelay):
        * resultsdbpy/resultsdbpy/view/templates/archive_list.html:

2020-02-12  Simon Fraser  <simon.fraser@apple.com>

        Remove CSS_DEVICE_ADAPTATION
        https://bugs.webkit.org/show_bug.cgi?id=203479

        Reviewed by Tim Horton.
        
        CSS Working Group resolved to remove @viewport <https://github.com/w3c/csswg-drafts/issues/4766>,
        so remove the code.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-02-12  Said Abou-Hallawa  <said@apple.com>

        REGRESSION (r255158): http/tests/frame-throttling/raf-throttle-in-cross-origin-subframe.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=206839

        Reviewed by Simon Fraser.

        Remove the WKPreference key 'RenderingUpdateThrottlingEnabled'.

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

2020-02-12  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Cache archive content
        https://bugs.webkit.org/show_bug.cgi?id=207589

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/flask_support/util.py:
        (cache_for): Add decorator function which sets the cache values on the returned response.
        * resultsdbpy/resultsdbpy/view/archive_view.py:
        (ArchiveView): Cache archive content client-side for 12 hours.
        * resultsdbpy/resultsdbpy/view/archive_view_unittest.py:
        (ArchiveViewUnittest.test_file): Verify that archived content is cached.

2020-02-12  Youenn Fablet  <youenn@apple.com>

        WebSWServerConnection::registerServiceWorkerClient is not sending IPC message to UIProcess when it should
        https://bugs.webkit.org/show_bug.cgi?id=207537

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2020-02-11  Rob Buis  <rbuis@igalia.com>

        Bug 207424: Crash in WebCore::ParsedContentType::parseContentType when parsing invalid MIME type
        <https://webkit.org/b/207424>
        <rdar://problem/59250384>

        Reviewed by Rob Buis.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::TEST): Add more tests.

2020-02-11  Commit Queue  <commit-queue@webkit.org>

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

        It is breaking an API test (Requested by youenn on #webkit).

        Reverted changeset:

        "WebSWServerConnection::registerServiceWorkerClient is not
        sending IPC message to UIProcess when it should"
        https://bugs.webkit.org/show_bug.cgi?id=207537
        https://trac.webkit.org/changeset/256314

2020-02-11  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Configuration documentation should include architecture
        https://bugs.webkit.org/show_bug.cgi?id=207584

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Add architecture documentation.

2020-02-11  Youenn Fablet  <youenn@apple.com>

        Regression: RTCRtpSender.getCapabilities("video") returns null on iOS 13.4 (17E5223h)
        https://bugs.webkit.org/show_bug.cgi?id=207325
        <rdar://problem/59224810>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        Add a test validating that RTCRtpSender.getCapabilities does not return null.
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2020-02-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        KeyboardInputTests.SupportsImagePaste fails on recent versions of UIKit
        https://bugs.webkit.org/show_bug.cgi?id=207557

        Reviewed by Jonathan Bedard.

        The exception occurs because UIKit attempts to create a QoS interval upon setting the initially selected row in
        a UITableView when we focus a date picker. This fails because TestWebKitAPI isn't actually an app, so the call
        to `work_interval_create` with `WORK_INTERVAL_TYPE_CA_CLIENT` as the option flag fails. For the time being, work
        around this by focusing an empty select element instead (for which we won't attempt to create and select any
        table view cells).

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2020-02-11  Alex Christensen  <achristensen@webkit.org>

        Add WKHTTPCookieStore._getCookiesForURL SPI
        https://bugs.webkit.org/show_bug.cgi?id=207527

        Reviewed by Brady Eidson.

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

2020-02-11  Youenn Fablet  <youenn@apple.com>

        WebSWServerConnection::registerServiceWorkerClient is not sending IPC message to UIProcess when it should
        https://bugs.webkit.org/show_bug.cgi?id=207537

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2020-02-11  Lauro Moura  <lmoura@igalia.com>

        [WPE][WebDriver] MiniBrowser should react to close session commands
        https://bugs.webkit.org/show_bug.cgi?id=207529

        Reviewed by Carlos Garcia Campos.

        WebDriver delete session command asks to close the WebView associated to the
        current automation session. We must react to it to avoid lots of
        timeouts and errors.

        * MiniBrowser/wpe/main.cpp:
        (main): Listen to "close" signal on the main WebView.

2020-02-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Non-internal API test runners frequently crash due to Objective-C exceptions
        https://bugs.webkit.org/show_bug.cgi?id=207525
        <rdar://problem/59110543>

        Reviewed by Tim Horton.

        After the fix for <rdar://problem/56301207>, some scroll view content offset changes will attempt to call into
        CoreAnalytics API to try and report data about scrolling velocities. In the iOS 13.3 simulator, this involves
        creating a dictionary, of which one of the keys is the bundle identifier of the application. The value is
        unconditionally inserted into the dictionary. Since TestWebKitAPI does not run in the context of a
        UIApplication, the bundle identifier (that is, `NSBundle.mainBundle.bundleIdentifier`) ends up being nil,
        causing us to crash upon trying to create the dictionary.

        While it would make things easier, we can't just swizzle -bundleIdentifier for the entirely of every test, since
        some tests expect the bundle identifier to be nil (or call into system frameworks that expect the bundle
        identifier to be nil). These tests fail or time out when -bundleIdentifier is unconditionally swizzled
        throughout the test run. To work around this bug for the time being, simply pretend that we have a bundle
        identifier when running API tests on iOS, by swizzling `-[NSBundle bundleIdentifier]` to return a string at the
        beginning of each API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (overrideBundleIdentifier):

        Move this to the top of the file, so it can be shared.

        (+[WKWebView initialize]):

        At the start of each test, force UIKit to cache a fake value for `_UIMainBundleIdentifier()` by invoking an
        internal class method that calls into the internal helper function, with no other side effects.

        * TestWebKitAPI/ios/UIKitSPI.h:

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

        TestWebKitAPI: Support ClipboardTests.ReadMultipleItems on Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=207501
        <rdar://problem/59323414>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:
        (writeMultipleObjectsToPlatformPasteboard): All iOS family ports should have
        The same behavior.

2020-02-10  Alan Sien Wei Hshieh  <hshieh@apple.com>

        Add a variant of -[WKWebViewPrivate _getContentsAsStringWithCompletionHandler:] that includes contents from subframes
        https://bugs.webkit.org/show_bug.cgi?id=207352
        <rdar://problem/59115798>

        Reviewed by Alex Christensen.

        Add a test to exercise the new SPI.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm: Add a test for getting text from all frames with
        a webpage that contains text in subframes.


2020-02-10  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Crash when granting access to asset services
        https://bugs.webkit.org/show_bug.cgi?id=207520

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/GrantAccessToMobileAssets.mm: Added.
        (TEST):

2020-02-10  Chris Dumez  <cdumez@apple.com>

        [DRT] InternalSettingsGenerated::resetToConsistentState() may override TestOptions
        https://bugs.webkit.org/show_bug.cgi?id=207481

        Reviewed by Alexey Proskuryakov.

        InternalSettingsGenerated::resetToConsistentState() may override TestOptions such as enableBackForwardCache.
        This is causing issues such as the back/forward cache sometimes getting enabled on tests where
        TestOptions::enableBackForwardCache() is false, because a previous test has enabled the back/forward cache.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        Make sure we reset preferences after we call WebCoreTestSupport::resetInternalsObject(), since
        resetInternalsObject() updates settings and TestOptions / DRT preferences should have priority
        over internal settings.

2020-02-10  Per Arne Vollan  <pvollan@apple.com>

        [watchOS] Notification listener is never unregistered
        https://bugs.webkit.org/show_bug.cgi?id=207459

        Reviewed by Maciej Stachowiak.

        Add a test which tests that posting a backlight level change notification will not cause a crash.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/BacklightLevelNotification.mm: Added.
        (TEST):

2020-02-10  James Howard  <jameshoward@mac.com>

        Standard gamepad mapping for GameControllerGamepads
        https://bugs.webkit.org/show_bug.cgi?id=206033

        Reviewed by Dean Jackson.

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

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

        [ews] Display flaky layout test names in build summary
        https://bugs.webkit.org/show_bug.cgi?id=207504

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand): Drive-by fix to correct the pluralization.
        (AnalyzeLayoutTestsResults.report_pre_existing_failures): Append the flaky failure information.
        (AnalyzeLayoutTestsResults.start):

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

        [ews] Use SetBuildSummary instead of buildFinished in Layout tests
        https://bugs.webkit.org/show_bug.cgi?id=207492

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.evaluateCommand):
        (ReRunWebKitTests.evaluateCommand):
        (AnalyzeLayoutTestsResults.report_pre_existing_failures):
        * BuildSlaveSupport/ews-build/factories.py:
        (TestFactory.__init__):

2020-02-10  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r256091.

        Broke internal builds

        Reverted changeset:

        "Move trivial definitions from FeatureDefines.xcconfig to
        PlatformEnableCocoa.h"
        https://bugs.webkit.org/show_bug.cgi?id=207155
        https://trac.webkit.org/changeset/256091

2020-02-10  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r256103.

        This patch is blocking the rollout of r256091

        Reverted changeset:

        "Move JavaScriptCore related feature defines from
        FeatureDefines.xcconfig to PlatformEnableCocoa.h"
        https://bugs.webkit.org/show_bug.cgi?id=207436
        https://trac.webkit.org/changeset/256103

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

        results.webkit.org: Abstract archive storage solutions
        https://bugs.webkit.org/show_bug.cgi?id=207277

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext):
        (ArchiveContext.ArchiveMetaDataByCommit.unpack):
        (ArchiveContext.__init__): Add archiver member.
        (ArchiveContext.__enter__): archiver is a context manager.
        (ArchiveContext.__exit__): Ditto.
        (ArchiveContext.register): The archiver member owns saving an archive.
        (ArchiveContext.find_archive): The archiver member owns retrieving an archive.
        (ArchiveContext.ArchiveChunks): Move to CassandraArchiver.
        * resultsdbpy/resultsdbpy/model/archiver.py: Added.
        (Archiver): Base class for all Archiving systems.
        (Archiver.archive_digest): Given a file-like archive, calculate it's digest.
        (Archiver.archive_size): Given a file-like archive, calculate it's size.
        (Archiver.save):
        (Archiver.retrieve):
        * resultsdbpy/resultsdbpy/model/cassandra_archiver.py: Added.
        (CassandraArchiver):
        (CassandraArchiver.ArchiveChunks): Moved from ArchiveContext.
        (CassandraArchiver.__init__):
        (CassandraArchiver.__enter__):
        (CassandraArchiver.__exit__):
        (CassandraArchiver.save): Split the provided archive into chunks for saving, moved
        from ArchiveContext.
        (CassandraArchiver.retrieve): Retrieve an archive with the provided hash, moved
        from ArchiveContext.

2020-02-09  Lauro Moura  <lmoura@igalia.com>

        [GTK][WPE] Expose allowTopNavigationToDataURL
        https://bugs.webkit.org/show_bug.cgi?id=207384

        Reviewed by Adrian Perez de Castro.

        Updates with new "allow-top-navigation-to-data-urls" property.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewAllowModalDialogs): This test requires this property to be
        set.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Added tests for getter/setter.

2020-02-08  Sam Weinig  <weinig@apple.com>

        Move JavaScriptCore related feature defines from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=207436

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Remove ENABLE_FAST_JIT_PERMISSIONS and ENABLE_FTL_JIT.

2020-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Try using 75% load factor for HashTable
        https://bugs.webkit.org/show_bug.cgi?id=207183

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::testInitialCapacity):

2020-02-08  Sam Weinig  <weinig@apple.com>

        Move trivial definitions from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=207155

        Reviewed by Tim Horton.

        Move all trivial definitions (just ENABLE_FOO = ENABLE_FOO; or ENABLE_BAR = ;)
        from the FeatureDefines.xcconfigs to PlatformEnableCocoa.h, ensuring each one
        also has a default value in PlatformEnable.h

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Several iOS API tests that call -makeKeyWindow assert after r255907
        https://bugs.webkit.org/show_bug.cgi?id=207411

        Reviewed by Tim Horton.

        r255907 asserted in -makeKeyWindow that the shared UIApplication exists. While this was guaranteed for all call
        sites of -makeKeyWindow from API tests, -makeKeyWindow may also be invoked from within UIKit code; in this case,
        nothing guarantees that the application has been initialized, and we end up hitting this assertion. To fix this,
        replace the assertion with logic to bootstrap the shared UIApplication (if it didn't already exist).

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::overrideBundleIdentifier): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (overrideBundleIdentifier):
        (setOverriddenApplicationKeyWindow):

2020-02-07  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Disable legacy ActionSheet tests on Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=207405

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:

2020-02-07  Alex Christensen  <achristensen@apple.com>

        Remember if we used legacy TLS in the back/forward cache like we remember if we have only secure content
        https://bugs.webkit.org/show_bug.cgi?id=207409
        rdar://problem/59275641

        Reviewed by Chris Dumez.

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

2020-02-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r256051.

        Broke internal builds.

        Reverted changeset:

        "Move trivial definitions from FeatureDefines.xcconfig to
        PlatformEnableCocoa.h"
        https://bugs.webkit.org/show_bug.cgi?id=207155
        https://trac.webkit.org/changeset/256051

2020-02-07  Jonathan Bedard  <jbedard@apple.com>

        iPad testers failing to launch processes
        https://bugs.webkit.org/show_bug.cgi?id=207401
        <rdar://problem/58184777>

        Unreviewed infrastructure fix.

        This is a speculative fix because I've had problems reproducing this error.
        The only time I managed to reproduce the problem was immediately after killing the 
        SimulatorTrampoline and CoreSimulator.xpc processes.

        * BuildSlaveSupport/kill-old-processes:
        (main): Only kill Simulator.app, not all associated simulator processes.

2020-02-07  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Report CTAP Client Pin Error to clients
        https://bugs.webkit.org/show_bug.cgi?id=205837
        <rdar://problem/58356872>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-pin-auth-blocked-error.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-error.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-pin-invalid-error-retry.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-auth-blocked-error.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-error.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-pin-auth-blocked-error.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-error.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-pin-auth-invalid-error-retry.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-pin-blocked-error.html: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-error.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-pin-invalid-error-retry.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-invalid-error-retry.html: Added.

2020-02-07  Jonathan Bedard  <jbedard@apple.com>

        run-safari Doesn't work with the latest Xcode version and iOS
        https://bugs.webkit.org/show_bug.cgi?id=207394

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitdirs.pm:
        (iosSimulatorRuntime): Determine the runtime from valid runtimes.
        (findOrCreateSimulatorForIOSDevice): iPhone 5 is unsupported, remove code.

2020-02-07  Daniel Bates  <dabates@apple.com>

        Legacy WebKit: Have linkedOnOrAfter() respect the NSDefault WebKitLinkedOnOrAfterEverything and opt DumpRenderTree in
        https://bugs.webkit.org/show_bug.cgi?id=207366

        Reviewed by Brent Fulgham.

        Enable default WebKitLinkedOnOrAfterEverything in DumpRenderTree just as we do in WebKitTestRunner.
        This lets me put test results for Mac and iOS Legacy WebKit in the same cross-platform directory
        as the actual test instead of under a platform-specific directory even when the tests' behavior
        depends on the link-time version of WebKit.

        Note that testing of pre-linked behavior can still be accomplished by test writers by exposing settings
        and toggling them in a test.

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

2020-02-03  Sam Weinig  <weinig@apple.com>

        Move trivial definitions from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=207155

        Reviewed by Tim Horton.

        Move all trivial definitions (just ENABLE_FOO = ENABLE_FOO; or ENABLE_BAR = ;)
        from the FeatureDefines.xcconfigs to PlatformEnableCocoa.h, ensuring each one
        also has a default value in PlatformEnable.h

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-02-07  Kate Cheney  <katherine_cheney@apple.com>

        Update WebView category name to be more accurate
        https://bugs.webkit.org/show_bug.cgi?id=207334
        <rdar://problem/59224855>

        Reviewed by Brent Fulgham.

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

2020-02-07  Aakash Jain  <aakash_jain@apple.com>

        [ews] add commit-queue build step to close the bug
        https://bugs.webkit.org/show_bug.cgi?id=207387

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin.close_bug): Method to close the bugzilla bug.
        (CloseBug): Build step to close bugzilla bug.

2020-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews] add commit-queue build step to clear flags on patch
        https://bugs.webkit.org/show_bug.cgi?id=206536

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BugzillaMixin): Class for common bugzilla related methods.
        (BugzillaMixin.get_bugzilla_api_key): Method to read bugzilla api key from file.
        (BugzillaMixin.remove_flags_on_patch): Method to remove flags on patch.
        (ValidatePatch):
        (RemoveFlagsOnPatch): Class to remove flags on patch.
        (RemoveFlagsOnPatch.start):
        (ValidatePatch._addToLog): Moved.
        (ValidatePatch.fetch_data_from_url): Moved.
        (ValidatePatch.get_patch_json): Moved.
        (ValidatePatch.get_bug_json): Moved.
        (ValidatePatch.get_bug_id_from_patch): Moved.
        (ValidatePatch._is_patch_obsolete): Moved.
        (ValidatePatch._is_patch_review_denied): Moved.
        (ValidatePatch._is_patch_cq_plus): Moved.
        (ValidatePatch._is_bug_closed): Moved.

2020-02-07  Jonathan Bedard  <jbedard@apple.com>

        EWS should run resultsdbpy tests
        https://bugs.webkit.org/show_bug.cgi?id=201928

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/factories.py:
        (ServicesFactory.__init__): Add RunResultsdbpyTests.
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestTestsFactory.test_services_factory): Add RunResultsdbpyTests.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance): resultsdbpy changes should trigger service tests.
        (RunResultsdbpyTests): Add step which runs resultsdbpy tests.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunResultsdbpyTests):
        (TestRunResultsdbpyTests.setUp):
        (TestRunResultsdbpyTests.tearDown):
        (TestRunResultsdbpyTests.test_success):
        (TestRunResultsdbpyTests.test_failure):

2020-02-07  Jacob Uphoff  <jacob_uphoff@apple.com>

        Adding myself to contributors.json
        
        Unreviewed

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

2020-02-07  Jason Lawrence  <lawrence.j@apple.com>

        Adding myself to contributors.json
        
        Unreviewed

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

2020-02-07  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Add same-site cookie support
        https://bugs.webkit.org/show_bug.cgi?id=204137

        Reviewed by Carlos Garcia Campos.

        Update libsoup to 2.69.90 in JHBuild.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2020-02-07  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, revert 75% load-factor because of JetStream2/string-unpack-code-SP regression
        https://bugs.webkit.org/show_bug.cgi?id=207183

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::testInitialCapacity):

2020-02-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebPage::rangeForGranularityAtPoint always returns null in the case of CharacterGranularity
        https://bugs.webkit.org/show_bug.cgi?id=207350
        <rdar://problem/59239914>

        Reviewed by Tim Horton.

        Add a test to exercise the corner case in the SPI.

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

2020-02-06  Jiewen Tan  <jiewen_tan@apple.com>

        Adopt new SOAuthorizationOption constants
        https://bugs.webkit.org/show_bug.cgi?id=207186
        <rdar://problem/48909336>

        Reviewed by Brent Fulgham.

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

2020-02-06  Brady Eidson  <beidson@apple.com>

        Cleanup and promote WKContentWorld and its clients in WKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=207351

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):

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

        [Win][MiniBrowser] Accelerator keys don't work unless the main window is focused
        https://bugs.webkit.org/show_bug.cgi?id=207250

        Reviewed by Alex Christensen.

        MiniBrowser has shortcut keys, Ctrl-W to close window, Ctrl-R to
        reload. However, they don't work unless the main window is
        focused.

        Ctrl-W should be processed differently. Ctrl-W should be handled
        without dispatching to WebKit, others should be handled only when
        WebKit didn't consume. So, this change split the accelerator table
        into two, one is for Ctrl-W, another is for other shortcut keys.

        For Ctrl-W, key events are processed before dispatching to
        WebView. It is converted to IDM_CLOSE_WINDOW of WM_COMMAND, and
        dispatched to WebView. WebKit2 WebView bubbles up unhandled
        WM_COMMAND to the parent window. Then, IDM_CLOSE_WINDOW is handled
        in the main window's WndProc. However, it doesn't work for WebKit1
        because this change doesn't add the bubbling up code to WebKit1
        WebView.

        For other shortcut keys, for example Ctrl-R, key events are
        dispatched to WebView without accelerator key translations. Then,
        WebKitBrowserWindow::didNotHandleKeyEvent is called back if they
        aren't consumed. didNotHandleKeyEvent posts the messasge to the
        main window. The message loop processed key events dispatched to
        the main window with another accelerator table. However, it
        doesn't work for WebKit1, because WebKit1 doesn't have a API
        equivalent to didNotHandleKeyEvent.

        After switching the active window by pressing Alt-Tab and
        reactivating the main window, the main window got the focus. This
        was the reason shortcut keys worked only after reactivating the
        main window. But, this is not the desired behavior after this
        change because other shortcut keys don't work if the main window
        is focused. So. set the focus to the brower window when
        WM_ACTIVATE of the main window.

        Shortcut keys Ctrl++ (zoom in) and Ctrl+- (zoom out) were
        effective only for keyboard numpad. Add VK_OEM_MINUS and
        VK_OEM_PLUS for them.

        Add a shortcut key Ctrl-0 to reset page zoom scale to actual.

        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::isInstance):
        (MainWindow::WndProc):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/MiniBrowserLib.rc: Add a new accelerator table
        IDR_ACCELERATORS_PRE for Ctrl-W.
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::didNotHandleKeyEvent):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2020-02-06  Jonathan Bedard  <jbedard@apple.com>

        results.webkitorg: Dead CI links
        https://bugs.webkit.org/show_bug.cgi?id=207340

        Reviewed by Alexey Proskuryakov.

        * resultsdbpy/resultsdbpy/view/static/js/configuration.js:
        (Configuration.prototype.toParams): Version name and version number often duplicate the
        same information, exception version number is often more specific than is useful.

2020-02-06  Brent Fulgham  <bfulgham@apple.com>

        Prevent navigating top level frames to Data URLs
        https://bugs.webkit.org/show_bug.cgi?id=206962
        <rdar://problem/56770676>

        Reviewed by Youenn Fablet.

        Revise test running code to allow data URL navigations by default, since they are so frequently
        used in testing. However, provide a flag to turn this off in tests so we can confirm proper
        function.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (DownloadAttributeDoesNotStartDownloads): Revise configuration to allow script navigation of the main frame to a Data URL.
        (StartDownloadWithDownloadAttribute): Ditto.
        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (WebViewWillPerformClientRedirect): Ditto.
        (WebViewDidCancelClientRedirect): Ditto.
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (NavigateToDataURLThenBack): Ditto.
        (ContentExtensionBlocksMainLoadThenReloadWithoutExtensions): Ditto.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):

2020-02-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Provide a way to suppress software keyboards on WKWebView's WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=207272
        <rdar://problem/59190828>

        Reviewed by Tim Horton.

        Add an API test to verify (through UIKeyboardImpl) that the software keyboard should be suppressed when setting
        -_setSuppressSoftwareKeyboard: on the web view. This involves making `-makeKeyWindow` "work" in the API testing
        environment on iOS, by swizzling out both `-[NSBundle bundleIdentifier]` and `-[UIApplication keyWindow]`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::overrideBundleIdentifier):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (setOverriddenApplicationKeyWindow):
        (applicationKeyWindowOverride):
        (-[TestWKWebViewHostWindow makeKeyWindow]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

        Also move the `UIResponder (UIKitSPI)` category from the internal section to the SPI section; this is redundant
        when using the internal SDK to build, since these methods are already declared in UIResponder_Private.h.

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

        [PlayStation] Build a shared JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=198446

        Reviewed by Fujii Hironori.

        Add TARGET_OBJECTS for bmalloc and WTF so TestWTF links.

        * TestWebKitAPI/PlatformPlayStation.cmake:

2020-02-05  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Set up fonts for layout tests for test bot image
        https://bugs.webkit.org/show_bug.cgi?id=207223

        Reviewed by Fujii Hironori.

        * WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp:
          Implement activateFonts to load fonts for test

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

        [PlayStation] Miscellaneous build fixes February 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=207312

        Unreviewed build fix.

        * TestWebKitAPI/PlatformWebView.h: Remove #elif guard and just use #else

2020-02-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Try using 75% load factor for HashTable
        https://bugs.webkit.org/show_bug.cgi?id=207183

        Reviewed by Mark Lam.

        Fix load-factor assumption in existing tests.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::testInitialCapacity):

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

        resulsdbpy: Fix unit tests
        https://bugs.webkit.org/show_bug.cgi?id=207304

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/configuration_context_unittest.py:
        (ConfigurationContextTest.test_partition_by_configuration): Add branch to testing table.
        (ConfigurationContextTest.test_partition_by_partial_configuration): Ditto.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py:
        (FailureContextTest.test_failures): Sort test failures by uuid for a predictable order in testing.
        (FailureContextTest.test_unexpected_failures): Ditto.
        * resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory.iterate_all_commits): Do not batch requests since this function has no way
        of knowing how expensive the callback may be.

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

        Unreviewed, another build fix after r255846

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:

2020-02-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Delete entries for queues that have been removed from buildbot.

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

        Unreviewed build fix after r255846.

        * TestWebKitAPI/cocoa/HTTPServer.h:

2020-02-05  Jiewen Tan  <jiewen_tan@apple.com>

        Defer ending AppSSO sheets til NSWindowDidDeminiaturize or NSApplicationDidUnhide
        https://bugs.webkit.org/show_bug.cgi?id=207173
        <rdar://problem/55669065>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView _setUpTestWindow:]):
        Make the TestWKWebViewHostWindow miniaturizable to enable the test.

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

        results.webkit.org: Apply ttl to archive shards
        https://bugs.webkit.org/show_bug.cgi?id=207295

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext.ArchiveMetaDataByCommit): Use new table.
        (ArchiveContext.ArchiveChunks): Use new table.
        (ArchiveContext.register): Add ttl to archive shards.

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

        Make WKWebView._negotiatedLegacyTLS accurate when loading main resouorce from network or cache
        https://bugs.webkit.org/show_bug.cgi?id=207207

        Reviewed by Chris Dumez.

        HTTPServer now supports HTTPS. Tell your friends!

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (testCertificate):
        (testIdentity):
        (credentialWithIdentity):
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::webViewWithNavigationDelegate):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::HTTPServer::request const):

2020-02-05  Brady Eidson  <beidson@apple.com>

        _WKDownload should expose the originating FrameInfo.
        <rdar://problem/58022576> and https://bugs.webkit.org/show_bug.cgi?id=207185

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadTestSchemeDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[DownloadSecurityOriginDelegate _downloadDidStart:]):
        (loaded):
        * TestWebKitAPI/cocoa/HTTPServer.mm:

2020-02-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Fix dependencies build
        https://bugs.webkit.org/show_bug.cgi?id=207273

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules: Bumped wpebackend-fdo version to 1.4.1 and
        added mesa as one of its deps. Added the xserver patch as well.
        * gtk/patches/xserver-gl-version.patch: Added.

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

        REGRESSION(r255595): page not closed after beforeunload handler returns true
        https://bugs.webkit.org/show_bug.cgi?id=207189
        <rdar://problem/59149593>

        Reviewed by Youenn Fablet.

        Add API test coverage for fix landed in r255677.

        * TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm:
        (-[SlowBeforeUnloadPromptUIDelegate _webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

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

        results.webkit.org should disable auto-capitalize over the search field
        https://bugs.webkit.org/show_bug.cgi?id=207240
        <rdar://problem/59053042>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/search.js:

2020-02-01  Darin Adler  <darin@apple.com>

        Replace RGBA32 typedef with a class to improve type safety
        https://bugs.webkit.org/show_bug.cgi?id=206862

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKitCocoa/PDFSnapshot.mm:
        (TestWebKitAPI::TEST): Use the Color constructor instead of Color::createUnchecked.

2020-02-04  Darin Adler  <darin@apple.com>

        Remove NSKeyedArchiverSPI.h now that WebKit only uses API
        https://bugs.webkit.org/show_bug.cgi?id=207203

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm: Removed
        include of NSKeyedArchiverSPI.h and call methods of NSKeyedArchiver directly.
        * TestWebKitAPI/Tests/WebKitCocoa/Coding.mm: Ditto.
        * TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Ditto.
        * TestWebKitAPI/Tests/mac/EarlyKVOCrash.mm: Ditto.

2020-02-04  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Support Internal in run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=204095

        Rubber-stamped by Aakash Jain.

        * Scripts/VCSUtils.pm:
        (gitBisectStartBranchForDirectory): Renamed from gitBisectStartBranch.
        (gitBranchForDirectory): Compute branch for directory.
        (gitBranch): Compute branch for the current git directory.
        (commitForDirectory): Add git support.
        (gitBisectStartBranch): Renamed to gitBisectStartBranchForDirectory.
        * Scripts/run-javascriptcore-tests:
        (uploadResults): Check for Internal repository.

2020-02-04  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: (r255611) [ Mac ] 3 lldb tests failing related to HashMap
        https://bugs.webkit.org/show_bug.cgi?id=207204

        Reviewed by Simon Fraser.

        Remove support for HashSet and HashMap until we are able to do the equivalent of reinterpret_cast<unsigned*>(pointer)[-1]
        in LLDB's python API.

        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFHashMap_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFHashMap_of_vectors_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFHashSet_tablesize_and_size):

2020-02-04  Lauro Moura  <lmoura@igalia.com>

        [EWS] Stop GTK/WPE build if jhbuild fails.
        https://bugs.webkit.org/show_bug.cgi?id=207220

        Reviewed by Adrian Perez de Castro.

        * BuildSlaveSupport/ews-build/steps.py:
        (InstallGtkDependencies): Halt on failure
        (InstallWpeDependencies): Ditto

2020-02-04  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=207231

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/PlatformMac.cmake:

2020-02-04  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable TestWebKit
        https://bugs.webkit.org/show_bug.cgi?id=207211

        Reviewed by Ross Kirsling.

        Stub out PlayStation implementation of TestWebKit so it builds.

        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWebView.h: Simplify platform define
        * TestWebKitAPI/playstation/PlatformUtilitiesPlayStation.cpp: Added.
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        (TestWebKitAPI::Util::isKeyDown):
        * TestWebKitAPI/playstation/PlatformWebViewPlayStation.cpp: Added.
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::initialize):
        (TestWebKitAPI::PlatformWebView::page const):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::focus):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):

2020-02-04  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Support branches in run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=204094

        Rubber-stamped by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (uploadResults): Use webkitdirs function to generate commit information.
        * Scripts/VCSUtils.pm:
        (commitForDirectory): Generate commit information for SVN repository, including
        branch name.

2020-02-04  Matt Lewis  <jlewis3@apple.com>

        Replace bot677 due to hardware failure
        https://bugs.webkit.org/show_bug.cgi?id=207224

        Reviewed by Aakash Jain.

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

2020-02-04  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Handle case where test result does not contain path
        https://bugs.webkit.org/show_bug.cgi?id=207216

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::Printer::OnTestPartResult): It's possible that the TestPartResult
        will not contain a file name. We should handle this case.

2020-02-04  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Better order upload callbacks
        https://bugs.webkit.org/show_bug.cgi?id=207219

        Reviewed by Aakash Jain.

        Order upload callbacks more deliberately so that the quickest callbacks
        that are least likely to link to information from unfinished callbacks are
        executed first.

        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__): Generate buildbot links first, then generate a failure
        list, then generate the collective suite results and finally, individual
        test results.

2020-02-04  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Do not remove TestWebKitAPI prefix from api test failures
        https://bugs.webkit.org/show_bug.cgi?id=207210

        Reviewed by Jonathan Bedard.

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

2020-02-04  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Do not remove webkitpy prefix from test failures
        https://bugs.webkit.org/show_bug.cgi?id=207206

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (WebKitPyTest.getResultSummary): Do not remove 'webkitpy' from test name. Also handled the
        case when json output doesn't have failures/errors key.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2020-02-04  Ross Kirsling  <ross.kirsling@sony.com>

        [CMake] Add Cairo::Cairo target
        https://bugs.webkit.org/show_bug.cgi?id=207159

        Reviewed by Konstantin Tokarev.

        * DumpRenderTree/PlatformWin.cmake:
        * ImageDiff/Cairo.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformWPE.cmake:
        * WebKitTestRunner/PlatformWin.cmake:
        * wpe/backends/CMakeLists.txt:

2020-02-03  Jiewen Tan  <jiewen_tan@apple.com>

        Pass a hint from the extension to decidePolicyForSOAuthorizationLoadWithCurrentPolicy
        https://bugs.webkit.org/show_bug.cgi?id=207079
        <rdar://problem/48290464>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
        (-[TestSOAuthorizationDelegate _webView:decidePolicyForSOAuthorizationLoadWithCurrentPolicy:forExtension:completionHandler:]):
        (overrideGetAuthorizationHintsWithURL):
        (TestWebKitAPI::TEST):

2020-02-03  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Support jsc stress tests
        https://bugs.webkit.org/show_bug.cgi?id=204096

        Rubber-stamped by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Add pass and failures to reported results.

2020-02-03  Alexey Shvayka  <shvaikalesh@gmail.com>

        Make Bugzilla._find_select_element_for_flag more robust
        https://bugs.webkit.org/show_bug.cgi?id=207148

        Reviewed by Jonathan Bedard.

        This patch resolves two FIXMEs:
        1. _find_select_element_for_flag() is now used in _fill_attachment_form() method.
        2. _find_select_element_for_flag() now does not rely on order of <select> elements.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._fill_attachment_form):
        (Bugzilla._find_select_element_for_flag):

2020-02-03  Alex Christensen  <achristensen@webkit.org>

        Reduce size of HashMap and HashSet
        https://bugs.webkit.org/show_bug.cgi?id=207138

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):

2020-02-03  Alexey Shvayka  <shvaikalesh@gmail.com>

        obsolete_attachment should not fail when flags do not exist
        https://bugs.webkit.org/show_bug.cgi?id=171121

        Reviewed by Jonathan Bedard.

        Before this change, an error occured if a contributor without EditBugs privileges tried
        to obsolete not their own attachment. With this patch, uploading routine continues with
        friendly console warning like we have in reassign_bug() method.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla):
        (Bugzilla.obsolete_attachment):
        (Bugzilla.reassign_bug): Use NO_EDIT_BUGS_MESSAGE constant.

2020-02-03  Chris Dumez  <cdumez@apple.com>

        Regression(r253224) WKUIDelegate.webViewDidClose may get called twice after calling _tryClose on the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=207121
        <rdar://problem/58880177>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/beforeunload-slow.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm:
        (-[SlowBeforeUnloadHandlerUIDelegate _webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[SlowBeforeUnloadHandlerUIDelegate webViewDidClose:]):
        (TEST):

2020-02-03  Lauro Moura  <lmoura@igalia.com>

        [WebKitTestRunner] setOpenPanelFiles support in non-local tests
        https://bugs.webkit.org/show_bug.cgi?id=206517

        Reviewed by Carlos Alberto Lopez Perez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFiles): Use file:// if the passed path
        starts with a leading slash instead of using the test URL, which could
        cause input forms with invalid file data.

2020-02-03  Aakash Jain  <aakash_jain@apple.com>

        [ews] Set custom build summary for webkitpy tests
        https://bugs.webkit.org/show_bug.cgi?id=207027

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/steps.py:
        (WebKitPyTest.setBuildSummary):
        (WebKitPyTest.getResultSummary):
        * BuildSlaveSupport/ews-build/factories_unittest.py:

2020-02-03  Jonathan Bedard  <jbedard@apple.com>

        run-javascriptcore-tests: Don't split binary results
        https://bugs.webkit.org/show_bug.cgi?id=207118

        Rubber-stamped by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (runTest): Only report aggregated binary results.

2020-02-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, disable ResponsivenessTimer test in Debug / ASAN

        The ResponsivenessTimer is disabled for those configurations as of r255518.

        * TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm:

2020-02-03  Zan Dobersek  <zdobersek@igalia.com>

        Use std::hypot() where possible
        https://bugs.webkit.org/show_bug.cgi?id=198483

        Reviewed by Carlos Garcia Campos.

        Use std::hypot() where possible, allowing for a possibly more precise
        calculation of square roots of sums of two or three square values.

        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropSimulator initialProgressForMouseDrag]):

2020-02-03  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [JHBuild] remove libvpx
        https://bugs.webkit.org/show_bug.cgi?id=207103

        Reviewed by Xabier Rodriguez-Calvar.

        libvpx were added in jhbuild in times of OpenWebRTC. Nowadays, LibWebRTC is used and libvpx is
        installed through Tools/gtk/install-dependencies, thus it should be removed from jhbuild.modules

        * gstreamer/jhbuild.modules: remove libvpx.

2020-02-02  Sam Weinig  <weinig@apple.com>

        Update style checker with new locations OS version checks are allowed
        https://bugs.webkit.org/show_bug.cgi?id=207106

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):
        Update path check to allow anything with the pattern "Source/WTF/wtf/Platform[a-zA-Z]+\.h"

2020-02-01  Simon Fraser  <simon.fraser@apple.com>

        Closing a MiniBrowser WK2 window does not release the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=203185

        Reviewed by Wenson Hsieh.
        
        Use a weak WKWebView reference in the _textFinder.hideInterfaceCallback() block
        to avoid a retain cycle that keeps the window controller and WKWebView alive.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):

2020-01-31  David Quesada  <david_quesada@apple.com>

        REGRESSION(r252185): NetworkSessionCocoa cancels downloads that receive authentication challenges
        https://bugs.webkit.org/show_bug.cgi?id=206984
        rdar://problem/58999654

        Reviewed by Brady Eidson.

        Add an API test for a resumed download that receives an authentication challenge. The download
        delegate should be asked to handle the challenge, and the download should be able to finish.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadCancelingDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[DownloadCancelingDelegate _download:didReceiveData:]):
        (-[DownloadCancelingDelegate _downloadDidCancel:]):
        (-[AuthenticationChallengeHandlingDelegate _download:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[AuthenticationChallengeHandlingDelegate _downloadDidFinish:]):
        (TEST):

2020-01-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for specifying background colors when setting marked text
        https://bugs.webkit.org/show_bug.cgi?id=207065
        <rdar://problem/57876140>

        Reviewed by Tim Horton.

        Add support in WebKitTestRunner for specifying a list of highlight ranges when setting marked text. This comes
        in the form of an additional argument to TextInputController::setMarkedText, which contains an array of objects,
        each describing one range (in the composition) to highlight.

        * DumpRenderTree/ios/TextInputControllerIOS.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController setMarkedText:selectedFrom:length:suppressUnderline:highlights:]):
        (-[TextInputController setMarkedText:selectedFrom:length:suppressUnderline:]): Deleted.
        * DumpRenderTree/mac/TextInputControllerMac.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController setMarkedText:selectedFrom:length:suppressUnderline:highlights:]):
        (-[TextInputController setMarkedText:selectedFrom:length:suppressUnderline:]): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl:
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp:
        (WTR::arrayLength):
        (WTR::createCompositionHighlightData):

        Add logic to convert a given JSObject containing the composition highlight information into a WKArrayRef, which
        is then passed into WebKit via WKBundlePageSetComposition.

        (WTR::TextInputController::setMarkedText):
        * WebKitTestRunner/InjectedBundle/TextInputController.h:

2020-01-31  Alex Christensen  <achristensen@webkit.org>

        Add KVO SPI WKWebView._negotiatedLegacyTLS
        https://bugs.webkit.org/show_bug.cgi?id=207067

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (-[TLSObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[TLSObserver waitUntilNegotiatedLegacyTLSChanged]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/config.h:

2020-01-31  Aakash Jain  <aakash_jain@apple.com>

        [ews] Display flaky test names in build summary when ReRunWebKitTests passes
        https://bugs.webkit.org/show_bug.cgi?id=207050

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunWebKitTests.evaluateCommand):

2020-01-31  David Kilzer  <ddkilzer@apple.com>

        REGRESSION: [ iPadOS ] imported/w3c/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html always fails
        <https://webkit.org/b/206759>
        <rdar://problem/58872607>

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        (WTR::UIScriptControllerIOS::waitForModalTransitionToFinish const):
        - Add declaration.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::waitForModalTransitionToFinish const):
        - Implement by waiting for
          -[UIViewController isPerformingModalTransition] to return NO
          while spinning the runloop.
        (WTR::UIScriptControllerIOS::singleTapAtPointWithModifiers):
        - Call waitForModalTransitionToFinish() to fix the test.

2020-01-31  Aakash Jain  <aakash_jain@apple.com>

        [ews] add build step to set custom build summary
        https://bugs.webkit.org/show_bug.cgi?id=207026

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (SetBuildSummary.doStepIf): Run this step only if build_summary property is set.
        (SetBuildSummary.hideStepIf): Hide this step if it is not executed.
        (SetBuildSummary.start):

2020-01-31  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Handle modified firewall rules
        https://bugs.webkit.org/show_bug.cgi?id=207047

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/results/upload.py:
        (Upload.upload_archive): Return true for 403 and 413 errors, but print a message
        indicating the upload failed.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.test_archive_upload):

2020-01-30  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, another speculative test fix after r255041

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        Adds kSecAttrAccessible: kSecAttrAccessibleAfterFirstUnlock to secItem to bypass
        potential error due to screen locks.

2020-01-30  Alex Christensen  <achristensen@webkit.org>

        Add WKNavigationDelegate SPI to disable TLS 1.0 and 1.1
        https://bugs.webkit.org/show_bug.cgi?id=206979

        Reviewed by Brady Eidson.

        * MiniBrowser/mac/SettingsController.m:
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (-[TLSNavigationDelegate waitForDidFinishNavigation]):
        (-[TLSNavigationDelegate waitForDidFailProvisionalNavigation]):
        (-[TLSNavigationDelegate receivedShouldAllowLegacyTLS]):
        (-[TLSNavigationDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[TLSNavigationDelegate webView:didFinishNavigation:]):
        (-[TLSNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TLSNavigationDelegate _webView:authenticationChallenge:shouldAllowLegacyTLS:]):
        (TestWebKitAPI::TEST):

2020-01-30  Jonathan Bedard  <jbedard@apple.com>

        PAL: Remove old iOS version macros
        https://bugs.webkit.org/show_bug.cgi?id=206905

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm: Remove USE(NSPROGRESS_PUBLISHING_SPI)
        with HAVE(NSPROGRESS_PUBLISHING_SPI)

2020-01-30  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Re-baseline AccessibilityTests for Catalyst
        https://bugs.webkit.org/show_bug.cgi?id=206997

        Reviewed by Wenson Hsieh.

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

2020-01-29  Jonathan Bedard  <jbedard@apple.com>

        run-safari / run-webkit-tests --ios-simulator not working with XCode 13.3.1 (11C504)
        https://bugs.webkit.org/show_bug.cgi?id=206932

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.get_runtime_for_device_type): Request for a device running
        some version will return a runtime of the same major version with a minor version
        that is equal to or greater than the specified minor version.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_matching_up_success):
        (test_matching_up_failure):

2020-01-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Give up IC when unknown structure transition happens
        https://bugs.webkit.org/show_bug.cgi?id=206846

        Reviewed by Mark Lam.

        Add `crash!` annotation, which allows us to write a crashing JS test.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-playstation.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2020-01-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add api-gtk to EWS bubbles.
        https://bugs.webkit.org/show_bug.cgi?id=206930

        Reviewed by Aakash Jain.

        A new queue has been added to the EWS to run GTK API tests in r255238.
        The queue is now running fine with no pre-existent failures.
        Let's add it to the EWS bubbles.

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

2020-01-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix TestWebKitAPI/TestJSC:/jsc/options API test after r255314
        https://bugs.webkit.org/show_bug.cgi?id=206927

        Reviewed by Carlos Garcia Campos.

        Update the default value tested from 4MB to 5MB.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testsJSCOptions):

2020-01-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Extra packages needed to successfully run API tests (cups-daemon and fonts-liberation)
        https://bugs.webkit.org/show_bug.cgi?id=206925

        Reviewed by Carlos Garcia Campos.

        Add cups-daemon to the list of packages to be installed, which is necessary to sucessfully
        run the printing related GTK API tests. Add also the liberation fonts, which are needed to
        run the complex text controller API tests.

        * gtk/install-dependencies:
        * wpe/install-dependencies: Don't add cups packages, because WPE currently doesn't run print-related API test.

2020-01-28  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Right clicking on a link follows it immediately
        https://bugs.webkit.org/show_bug.cgi?id=206919
        <rdar://problem/58936679>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm:
        (TEST):
        Add a test ensuring that mouseup is still called with the secondary button,
        even if the event's buttonmask is 0.

2020-01-28  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Conditionalize device orientation tests on ENABLE(DEVICE_ORIENTATION)
        https://bugs.webkit.org/show_bug.cgi?id=206913
        <rdar://problem/58973357>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:

2020-01-28  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Triple clicking to select a sentence results in an empty selection
        https://bugs.webkit.org/show_bug.cgi?id=206863
        <rdar://problem/58776993>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MacCatalystMouseSupport.mm: Added.
        (-[WKTestingEvent locationInView:]):
        (-[WKTestingEvent _setButtonMask:]):
        (-[WKTestingEvent _buttonMask]):
        (-[WKTestingTouch locationInView:]):
        (-[WKTestingTouch setTapCount:]):
        (-[WKTestingTouch tapCount]):
        (mouseGesture):
        (TEST):
        Add a test ensuring that simply plumbing mouse events to WebCore
        does not result in a selection change in macCatalyst (because UIKit
        will handle the selection change itself, instead).

2020-01-28  Jonathan Bedard  <jbedard@apple.com>

        TestWebKitAPI: Conditionalize QuickLook tests on USE(QUICK_LOOK)
        https://bugs.webkit.org/show_bug.cgi?id=206907
        <rdar://problem/58969924>

        Rubber-stamped by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm: Conditionalize on USE(QUICK_LOOK).

2020-01-28  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: speed up index records deletion
        https://bugs.webkit.org/show_bug.cgi?id=206196

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgrade.sqlite3: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IDBObjectStoreInfoUpgradeToV2.mm: Added.
        (-[IDBObjectStoreInfoUpgradeToV2MessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2020-01-28  James Darpinian  <jdarpinian@chromium.org>

        Quote file argument to git check-attr
        https://bugs.webkit.org/show_bug.cgi?id=206322

        Reviewed by Jonathan Bedard.

        * Scripts/prepare-ChangeLog:
        (attributeCommand):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/filenameWithParentheses.pl: Added.
        (writeFileWithContent):

2020-01-28  Brent Fulgham  <bfulgham@apple.com>

        Reset the application bundle identifier between test runs
        https://bugs.webkit.org/show_bug.cgi?id=206858
        <rdar://problem/58844002>

        Reviewed by Per Arne Vollan.

        Clear the application bundle identifier set during testing when resetting the test system
        to a known state in preparation for the next run.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Clear any override for the application
        bundle identifier before the next test invocation.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::setApplicationBundleIdentifier): Correct an over-release caused by assigning
        an autorelease return value to an NSRetainPtr.
        (WTR::TestController::clearApplicationBundleIdentifierTestingOverride): Added.

2020-01-28  Aakash Jain  <aakash_jain@apple.com>

        EWS django app should send cq+ patches to commit-queue
        https://bugs.webkit.org/show_bug.cgi?id=206534

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.send_patch_to_buildbot): Added support to send to commit queue.
        * BuildSlaveSupport/ews-app/ews/config.py: Added COMMIT_QUEUE_PORT.
        * BuildSlaveSupport/ews-app/ews/fetcher.py: Added support for sending patches to commit queue.
        * BuildSlaveSupport/ews-app/ews/migrations/0003_patch_sent_to_commit_queue.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch): Added sent_to_commit_queue field in patch table.
        (Patch.is_patch_sent_to_commit_queue): Method to check if patch is sent to commit queue.
        (Patch.set_sent_to_commit_queue): Set sent_to_commit_queue field.

2020-01-28  Stephan Szabo  <stephan.szabo@sony.com>

        Python 3: Update windows scripts and uses of is constant
        https://bugs.webkit.org/show_bug.cgi?id=206856

        Reviewed by Jonathan Bedard.

        * Scripts/download-github-release.py: Update for python 3
        * Scripts/webkitpy/common/system/profiler.py: Change is constant usage
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py: Change is constant usage
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py: Change is constant usage
        * Scripts/webkitpy/port/westondriver.py: Change is constant usage
        * Scripts/webkitpy/port/win.py: Update for python 3
        * Scripts/webkitpy/port/xvfbdriver.py: Change is constant usage
        * Scripts/webkitpy/xcode/device_type.py: Change is constant usage

2020-01-28  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: clobber-old-results should remove the entire results folder
        https://bugs.webkit.org/show_bug.cgi?id=205875
        <rdar://problem/58236117>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Boot http servers after the build check and after clobbering
        old results.
        (Manager._clobber_old_results): Remove entire results folder.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_retrying_and_flaky_tests): clobber-old-results now removes the
        entire results directory.

2020-01-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add EWS testers to run GTK unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=202361

        Reviewed by Aakash Jain.

        This switches two of the GTK BuildOnly EWS bots to be BuildAndRunAPITests bots.
        It doesn't make it a test-only bot because of concerns related with having to
        upload and download much data constantly over the network. It reuses the same
        logic for running Mac API tests, but simply using a different command at startup.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        (GTKBuildFactory):
        (GTKBuildAndTestFactory):
        (GTKBuildAndTestFactory.__init__):
        (GTKAPIBuildAndTestFactory):
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/steps.py:
        (RunAPITests.start):
        (ReRunAPITests.evaluateCommand):
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2020-01-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        WPT test importer only rewrites the first URL on <style> tags.
        https://bugs.webkit.org/show_bug.cgi?id=206842

        Reviewed by Jonathan Bedard.

        There was an issue, when a <style> tag had several URL() paths
        to local references, only the first one was converted.
        This was caused because the test parser was only seeing the
        first one (re.search() only finds the first regex), instead use
        re.findall() to find all the ocurrences.
        Then in the test converter for relative paths, when there are
        several paths to be converted, convert from the last conversion
        instead of the original text.

        * Scripts/webkitpy/w3c/test_converter.py:
        (_W3CTestConverter.convert_reference_relpaths):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (test_convert_style_multiple_url):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2020-01-28  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make Animation.timeline read-write only if a runtime flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=206173
        <rdar://problem/58527432>

        Reviewed by Dean Jackson.

        Manually enable the new WebAnimationsMutableTimelines runtime flag in DumpRenderTree.

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

2020-01-27  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add method to fetch cq+ patches from Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=206774

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla._get_commit_queue_patches_from_bug): Method to get cq+ patches for a given bug.
        (Bugzilla._is_patch_cq_plus): Method to check if patch has cq+ flag set.
        (Bugzilla.get_list_of_patches_for_commit_queue): Method to fetch list of cq+ patches from Bugzilla.
        (BugzillaBeautifulSoup.fetch_bug_ids_for_commit_queue):

2020-01-27  Noam Rosenthal  <noam@webkit.org>

        Unreviewed. Adding myself back as a reviewer.

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

2020-01-27  Keith Rollin  <krollin@apple.com>

        Fix internal builds
        https://bugs.webkit.org/show_bug.cgi?id=206790
        <rdar://problem/58888951>

        Reviewed by Maciej Stachowiak.

        TestRunner.cpp in DumpRenderTree includes ExecutableAllocator.h. In
        some circumstances, this file can include <os/thread_self_restrict.h>,
        which in turn includes <machine/cpu_capabilities.h>. This latter file
        does not exist at a standard location, and the build fails due to not
        being able to find the file. Fix this by adding a path to it to the
        build command line.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2020-01-27  Robin Morisset  <rmorisset@apple.com>

        Tools/Scripts/set-webkit-configuration should accept --coverage/--no-coverage
        https://bugs.webkit.org/show_bug.cgi?id=206833

        Reviewed by Jonathan Bedard.

        Just a trivial fix to the arguments validation code of the script.

        * Scripts/set-webkit-configuration:

2020-01-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Throttling requestAnimationFrame should be controlled by RenderingUpdateScheduler
        https://bugs.webkit.org/show_bug.cgi?id=204713

        Reviewed by Simon Fraser.

        RenderingUpdateThrottling is enabled by default. Turn it off for DRT and
        WTR. In some cases, the page may not get visually active while it's
        waiting for rAF. Throttling tests will have to explicitly turn it on.

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

2020-01-26  Aakash Jain  <aakash_jain@apple.com>

        [ews] Status bubble hover over message in case of success should indicate whether it built the patch or run tests
        https://bugs.webkit.org/show_bug.cgi?id=206807

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2020-01-27  Kate Cheney  <katherine_cheney@apple.com>

        Delete the ITP storage file that is not being used (plist or database file) when switching to a new storage type
        https://bugs.webkit.org/show_bug.cgi?id=206601
        <rdar://problem/58696521>

        Reviewed by Alex Christensen.

        This patch caused some API tests to fail which relied on the ITP files
        always existing. Now the tests ensure the respective file exists when 
        switching between in-memory and database storage before running the tests.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (ensureITPFileIsCreated):
        (TEST):

2020-01-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r255131.

        Caused assertion failures on iOS debug bots.

        Reverted changeset:

        "Throttling requestAnimationFrame should be controlled by
        RenderingUpdateScheduler"
        https://bugs.webkit.org/show_bug.cgi?id=204713
        https://trac.webkit.org/changeset/255131

2020-01-27  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Replace StringIO.StringIO in statusserver.py
        https://bugs.webkit.org/show_bug.cgi?id=206825

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer._upload_attachment_to_server): The Python 3 compatible StringIO
        object cannot be referenced as StringIO.StringIO

2020-01-26  Said Abou-Hallawa  <said@apple.com>

        Throttling requestAnimationFrame should be controlled by RenderingUpdateScheduler
        https://bugs.webkit.org/show_bug.cgi?id=204713

        Reviewed by Simon Fraser.

        RenderingUpdateThrottling is enabled by default. Turn it off for DRT and
        WTR. In some cases, the page may not get visually active while it's
        waiting for rAF. Throttling tests will have to explicitly turn it on.

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

2020-01-25  Mark Lam  <mark.lam@apple.com>

        Add some tests for dynamically allocated StaticStringImpls.
        https://bugs.webkit.org/show_bug.cgi?id=206802

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::doStaticStringImplTests):
        (TestWebKitAPI::TEST):

2020-01-25  Aakash Jain  <aakash_jain@apple.com>

        webkit-patch upload should not submit automatically to old EWS
        https://bugs.webkit.org/show_bug.cgi?id=206801

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/submittoews.py:

2020-01-25  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Media mime types map should be created in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=206478

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/MimeTypes.mm: Added.
        (TEST):

2020-01-25  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Re-enable line layout integration
        https://bugs.webkit.org/show_bug.cgi?id=206795
        <rdar://problem/58853907>

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/TestOptions.h:

2020-01-25  Youenn Fablet  <youenn@apple.com>

        HTMLMediaElement should not remove the media session at DOM suspension time
        https://bugs.webkit.org/show_bug.cgi?id=206661
        <rdar://problem/58800787>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        (TestWebKitAPI::TEST):
        Suspend/resume Active DOM Objects from time to time as would do scrolling.
        This allows pending tasks to be executed asynchronously when not scrolling.

2020-01-23  Matt Lewis  <jlewis3@apple.com>

        Remove Apple windows 7 queues.
        https://bugs.webkit.org/show_bug.cgi?id=206702

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        Removed Windows 7 queues from config and from dashboard.

2020-01-24  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed, rolling out r255050.

        Introduced crashes on bots

        Reverted changeset:

        "[Cocoa] Media mime types map should be created in the UI
        process"
        https://bugs.webkit.org/show_bug.cgi?id=206478
        https://trac.webkit.org/changeset/255050

2020-01-24  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Handle case where device socket make handle invalid
        https://bugs.webkit.org/show_bug.cgi?id=206707

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.NonBlockingFileFromSocket.close): Catch IOError when closing file.

2020-01-24  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] API test runner fails with error: too many open files.
        https://bugs.webkit.org/show_bug.cgi?id=206743

        Reviewed by Carlos Garcia Campos.

        The API test runner for google tests was leaking file descriptors because
        it was not closing the file descriptor of the pseudo-terminal of the child,
        which was referred in the parent because of the forkpty() call.
        This was causing a small but constant increase of open file descriptors,
        until the point it reached the limit of maximum open files (1024 usually)
        causing this error.

        Fix that by closing the reference to the fd of the child's pseudo-terminal.

        * glib/api_test_runner.py:
        (TestRunner._run_google_test):

2020-01-24  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE dependency bump.

        * wpe/jhbuild.modules: Bump the libwpe checkout commit to include fixes
        for configuration errors that can occur with older (but still supported)
        CMake versions.

2020-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Mark /webkit/WebKitWebPage/get-uri as flaky

        * TestWebKitAPI/glib/TestExpectations.json:

2020-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support setting minimum effective device width during dynamic viewport size updates
        https://bugs.webkit.org/show_bug.cgi?id=206709
        <rdar://problem/58713872>

        Reviewed by Tim Horton.

        Adds a new API test that changes both the effective minimum device width and view size during animated resize.

        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:

2020-01-23  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Media mime types map should be created in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=206478

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/MimeTypes.mm: Added.
        (TEST):

2020-01-22  Jiewen Tan  <jiewen_tan@apple.com>

        WebKitTestRunner: use ad hoc signing for internal Production builds
        https://bugs.webkit.org/show_bug.cgi?id=206607
        <rdar://problem/56087327>

        Reviewed by Jonathan Bedard.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:

2020-01-23  Tuomas Karkkainen  <tuomas.webkit@apple.com>

        Add missing coverage.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=206686

        Reviewed by Mark Lam.

        * coverage/coverage.xcconfig: Added.

2020-01-23  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Broker access to the PowerManagement API
        https://bugs.webkit.org/show_bug.cgi?id=206373

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/Battery.mm: Added.
        (TEST):

2020-01-23  Jonathan Bedard  <jbedard@apple.com>

        Fix iOS 13.2 iphoneos build
        https://bugs.webkit.org/show_bug.cgi?id=206618

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (XcodeOptions): Relax provisioning profile rules on embedded SDKs.

2020-01-23  Takashi Komori  <Takashi.Komori@sony.com>

        KeyedDecoderGeneric crashes when it accesses a data with empty string key.
        https://bugs.webkit.org/show_bug.cgi?id=206572

        Reviewed by Fujii Hironori.

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

2020-01-23  Tuomas Karkkainen  <tuomas.webkit@apple.com>

        It should be possible to build JavaScriptCore with LLVM Source-based Code Coverage, run the tests and see the coverage data
        https://bugs.webkit.org/show_bug.cgi?id=206389

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-javascriptcore-tests:
        * Scripts/set-webkit-configuration:
        * Scripts/webkitdirs.pm:
        * coverage/coverage.xcconfig: Added.

2020-01-22  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, rolling out r254955.

        Broke internal builds

        Reverted changeset:

        "WebKitTestRunner: move code sign configurations from
        WebKitTestRunner.xcconfig to DebugRelease.xcconfig"
        https://bugs.webkit.org/show_bug.cgi?id=206607
        https://trac.webkit.org/changeset/254955

2020-01-22  Jiewen Tan  <jiewen_tan@apple.com>

        WebKitTestRunner: move code sign configurations from WebKitTestRunner.xcconfig to DebugRelease.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=206607
        <rdar://problem/56087327>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:

2020-01-22  Brady Eidson  <beidson@apple.com>

        REGRESSION (r253519): [WKWebView evaluateJavaScript:completionHandler:] gives a non-nil, non-Error result even when JavaScript cannot be evaluated
        <rdar://problem/58544942> and https://bugs.webkit.org/show_bug.cgi?id=206608

        Reviewed by Alex Christensen.

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

2020-01-22  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: WebSocket server doesn't support Python 3 (Workaround)
        https://bugs.webkit.org/show_bug.cgi?id=206546

        Reviewed by Alexey Proskuryakov.

        websocket_server.py doesn't support Python 3, and needs to be run with
        Python 2.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket._prepare_config): Use Python 2 explicitly.

2020-01-22  Basuke Suzuki  <basuke.suzuki@sony.com>

        [build-webkit] Add option for toggling unified build
        https://bugs.webkit.org/show_bug.cgi?id=206597

        Reviewed by Adrian Perez de Castro.

        Added command line option for build-webkit script to toggle unified build.

        * Scripts/webkitperl/FeatureList.pm:

2020-01-22  Don Olmstead  <don.olmstead@sony.com>

        Share InjectedBundleController::platformInitialize
        https://bugs.webkit.org/show_bug.cgi?id=206598

        Reviewed by Konstantin Tokarev.

        Add a stub for platformInitialize in InjectedBundleController.cpp which is
        used for non-Cocoa ports. Remove the platform specific stubs.

        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/gtk/InjectedBundleControllerGtk.cpp: Removed.
        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Removed.
        * TestWebKitAPI/wpe/InjectedBundleControllerWPE.cpp: Removed.

2020-01-22  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Make logging during ImageDiff crashes accurate
        https://bugs.webkit.org/show_bug.cgi?id=206542

        Reviewed by Aakash Jain.

        When ImageDiff crashes, the generated logs are not accurate, they
        reference a crash in test output when the test will actually fail
        with an Image failure. The owner of a ServerProcess should be able
        to customize this error message.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._start): Pass ImageDiff specific crash message.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image.make_proc): Match ImageDiff calcite.
        (PortTestCase.test_diff_image_passed): Ditto.
        (PortTestCase.test_diff_image_failed): Ditto.
        (PortTestCase.test_diff_image_crashed.make_proc): Ditto.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Support a custom message when the process crashes.
        (ServerProcess.write): Ditto.
        (ServerProcess._wait_for_data_and_update_buffers_using_select): Ditto.
        (ServerProcess.has_crashed): Ditto.
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.__init__): Match the ServerProcess constructor.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.__init__): Support a custom message when the process crashes.

2020-01-21  Matt Lewis  <jlewis3@apple.com>

        Test history links on the dashboard should go to the new results database
        https://bugs.webkit.org/show_bug.cgi?id=205821

        Reviewed by Jonathan Bedard.

        Made changes to the various locations that we use the old database in the main dashboard
        and test results pages.
        
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
        (ui.urlForFlakinessDashboard):
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js:
        (ui.results.FlakinessData.base._handleMessage):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitTestHistory.js:
        (TestHistory):
        (TestHistory.prototype.historyPageURLForTest):
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2020-01-22  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Disable integration to see performance impact
        https://bugs.webkit.org/show_bug.cgi?id=206576
        <rdar://problem/58562185>

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/TestOptions.h:

2020-01-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        A partially selected RTL text is placed at a wrong vertical position if it has a vertical initial advance
        https://bugs.webkit.org/show_bug.cgi?id=205990

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        Replaced all "controller.totalWidth()" with "controller.totalAdvance().width()".

2020-01-21  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r254856?): [Win] http/tests/security/same-origin-websql-blocked.html and 2 fast/dom/Window/window-function-* tests failing
        https://bugs.webkit.org/show_bug.cgi?id=206552

        Unreviewed fix after r254856. r254856 wanted to enable WebSQL on layout tests but enableWebSQL was set to false.

        * DumpRenderTree/TestOptions.h:

2020-01-21  Jiewen Tan  <jiewen_tan@apple.com>

        ProvisionalPageProxy::loadData should pass last navigation's shouldOpenExternalURLsPolicy flag to WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=206462
        <rdar://problem/57468718>

        Reviewed by Chris Dumez.

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

2020-01-21  Rob Buis  <rbuis@igalia.com>

        Add build flag for stale-while-revalidate
        https://bugs.webkit.org/show_bug.cgi?id=204169

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-01-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] AtomStringTable should be small
        https://bugs.webkit.org/show_bug.cgi?id=206400

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Packed.cpp:
        (TestWebKitAPI::TEST):

2020-01-21  Alex Christensen  <achristensen@webkit.org>

        Add SPI on WKURLSchemeTask to access WKFrameInfo of originating frame
        https://bugs.webkit.org/show_bug.cgi?id=204265
        <rdar://57193883>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[FrameSchemeHandler waitForAllRequests]):
        (-[FrameSchemeHandler setExpectedWebView:]):
        (-[FrameSchemeHandler webView:startURLSchemeTask:]):
        (-[FrameSchemeHandler webView:stopURLSchemeTask:]):

2020-01-21  Aakash Jain  <aakash_jain@apple.com>

        [ews] commit-queue should check cq+ flag
        https://bugs.webkit.org/show_bug.cgi?id=206530

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        ValidatePatch._is_patch_cq_plus): Method to check cq+ flag on patch.
        (ValidatePatch.start):
        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/factories_unittest.py: Updated unit-tests.

2020-01-21  Keith Rollin  <krollin@apple.com>

        Fix tvOS values in SUPPORTED_PLATFORMS
        https://bugs.webkit.org/show_bug.cgi?id=206435
        <rdar://problem/58674587>

        Reviewed by Alexey Proskuryakov.

        A number of targets in WebKit have 'tvos' and 'tvsimulator' in
        SUPPORTED_PLATFORMS. The correct values are 'appletvos' and
        'appletvsimulator'. These should be updated to the correct ones as the
        wrong values prevent the tvOS run destination from being usable in the
        UI to build for tvOS.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2020-01-21  Sihui Liu  <sihui_liu@apple.com>

        Disable WebSQL everywhere by default except in tests
        https://bugs.webkit.org/show_bug.cgi?id=204907

        Reviewed by Ryosuke Niwa.

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

2020-01-20  Aakash Jain  <aakash_jain@apple.com>

        [ews] Add build and layout-test steps for commit-queue in new ews
        https://bugs.webkit.org/show_bug.cgi?id=206510

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

2020-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable WebGL by default
        https://bugs.webkit.org/show_bug.cgi?id=205335

        Reviewed by Adrian Perez de Castro.

        Update the unit test.

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

2020-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable WebAudio by default
        https://bugs.webkit.org/show_bug.cgi?id=205334

        Reviewed by Adrian Perez de Castro.

        Update the unit test.

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

2020-01-20  Sam Weinig  <weinig@apple.com>

        Platform.h is out of control Part 8: Macros are used inconsistently
        https://bugs.webkit.org/show_bug.cgi?id=206425

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Packed.cpp:
        (TestWebKitAPI::TEST):
        Update to use OS_CONSTANT.

2020-01-20  Saam Barati  <sbarati@apple.com>

        REGRESSION(r254788): mozilla-tests.yaml/js1_5/Regress/regress-191633.js.mozilla fails
        https://bugs.webkit.org/show_bug.cgi?id=206477
        <rdar://problem/58714886>

        Unreviewed.

        In r232603 when we added test specific options, the implementation did not
        clear the test specific options before parsing each test inside a yaml
        file. It only worked for tests where we ran each js file inside a directory.
        This patch makes it also work for yaml files.

        * Scripts/run-jsc-stress-tests:

2020-01-20  David Kilzer  <ddkilzer@apple.com>

        Fix missing header guards and clean up empty files in WebCore, WebKitLegacy, WebKit, Tools
        <https://webkit.org/b/206505>

        Reviewed by Eric Carlson.

        * DumpRenderTree/TestNetscapePlugIn/TestObject.h:
        * TestWebKitAPI/JavaScriptTest.h:
        * TestWebKitAPI/Tests/WebCore/DFAHelpers.h:
        - Add #pragma once statement.

2020-01-20  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: Improve header guard checks
        <https://webkit.org/b/206480>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_header_guard):
        - Add `file_path` (filename) argument to check for config.h and
          *Prefix.h headers.
        - Use hints in header file to determine if this is a header file
          only used by Objective-C or not.
        - Change #ifndef/#define check to use both lines instead of
          assuming a format for the macro.
        - Emit new 'build/header_guard_missing' error.
        (_process_lines):
        - Pass `filename` argument to check_for_header_guard().
        (CppChecker):
        - Enable new 'build/header_guard_missing' check.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.perform_header_guard_check):
        (CppStyleTestBase.assert_header_guard):
        - Move default `filename` argument from
          perform_header_guard_check() to assert_header_guard() so tests
          may pass in different values for header paths.
        (CppStyleTest):
        - Add tests for config.h, *Prefix.h headers.
        - Update test for `build/header_guard' (legacy header guard)
          error.
        - Update test for missing header guard so that it now expects a
          'build/header_guard_missing' error message.
        - Add tests for Objective-C headers with and without __OBJC__
          checks.

2020-01-20  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Add WebKitRectangle, use it for WebKitWebView's SHOW_MENU signal
        https://bugs.webkit.org/show_bug.cgi?id=206495

        Reviewed by Carlos Garcia Campos.

        Update the TestOptionMenu test case for WPE now that a rectangle object
        is also passed through to the signal handler.

        * TestWebKitAPI/Tests/WebKitGLib/TestOptionMenu.cpp:
        (OptionMenuTest::showOptionMenuCallback):
        (OptionMenuTest::showOptionMenu):

2020-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Also include the selection index in webkit_input_method_context_notify_surrounding()
        https://bugs.webkit.org/show_bug.cgi?id=206497

        Reviewed by Adrian Perez de Castro.

        Add new test case to check the selection index when there's a selection.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (webkitInputMethodContextMockNotifySurrounding):
        (webkitInputMethodContextMockReset):
        (testWebKitInputMethodContextSurrounding):

2020-01-20  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Expose the WebKitOptionMenu APIs
        https://bugs.webkit.org/show_bug.cgi?id=206287

        Move TestOptionMenu under the WebKitGLib directory, adding the
        appropriate adjustments for the WPE variant of the API

        * TestWebKitAPI/Tests/WebKitGLib/TestOptionMenu.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKitGtk/TestOptionMenu.cpp.
        (OptionMenuTest::OptionMenuTest):
        (OptionMenuTest::~OptionMenuTest):
        (OptionMenuTest::destroyMenu):
        (OptionMenuTest::showOptionMenuCallback):
        (OptionMenuTest::menuCloseCallback):
        (OptionMenuTest::showOptionMenu):
        (OptionMenuTest::clickAtPositionAndWaitUntilOptionMenuShown):
        (OptionMenuTest::close):
        (OptionMenuTest::activateItem):
        (OptionMenuTest::selectItem):
        (testOptionMenuSimple):
        (testOptionMenuGroups):
        (testOptionMenuActivate):
        (testOptionMenuSelect):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/PlatformGTK.cmake:

2020-01-20  Rob Buis  <rbuis@igalia.com>

        Make isValidUserAgentHeaderValue GLib only
        https://bugs.webkit.org/show_bug.cgi?id=206475

        Reviewed by Youenn Fablet.

        Make the unit test that tests isValidUserAgentHeaderValue
        depend on USE(GLIB) as well.

        * TestWebKitAPI/Tests/WebCore/HTTPParsers.cpp:

2020-01-20  Takashi Komori  <Takashi.Komori@sony.com>

        KeyedDecoderGeneric crashes when it accesses data with non-existing key
        https://bugs.webkit.org/show_bug.cgi?id=205902

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/KeyedCoding.cpp: Added.
        (TestWebKitAPI::checkDecodedBytes):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testSimpleValue):
        (TestWebKitAPI::KeyedCodingTestObject::encode):
        (TestWebKitAPI::KeyedCodingTestObject::decode):
        (TestWebKitAPI::KeyedCodingTestObject::KeyedCodingTestObject):
        (TestWebKitAPI::KeyedCodingTestObject::equals const):
        (TestWebKitAPI::operator==):

2020-01-19  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] HeadlessViewBackend should hande SHM-based buffer exports
        https://bugs.webkit.org/show_bug.cgi?id=206283

        Reviewed by Adrian Perez de Castro.

        The ViewBackend class should also handle any SHM-based exports from
        the wpe_view_backend_exportable_fdo_egl instance. In case of such an
        export, the buffer is transported down into the implementing object.

        For WindowViewBackend, we do nothing with this yet, except emit a
        warning. For HeadlessViewBackend, we repeat what's currently done with
        EGL exports, storing pending updates until the update timer is fired
        and we move the buffer into the locked position, clearing up any
        previous locked buffer.

        Upon creating a snapshot of the current contents, we add additional
        separation in how EGL and SHM exports are handled. Nothing changes
        for the former, while for the latter we simply retrieve the
        wl_shm_buffer object, map it, copy data from it into the pixel data
        storage that's basis for the returned Cairo surface, and unmap it.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.setup_environ_for_server): Copy the LIBGL_ALWAYS_SOFTWARE
        environment variable, if present. This variable is normally used to
        force Mesa into software rasterizing mode.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::~HeadlessViewBackend):
        (WPEToolingBackends::HeadlessViewBackend::createSnapshot):
        (WPEToolingBackends::HeadlessViewBackend::createEGLSnapshot):
        (WPEToolingBackends::HeadlessViewBackend::createSHMSnapshot):
        (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:
        * wpe/backends/WindowViewBackend.h:

2020-01-17  Cathie Chen  <cathiechen@igalia.com>

        Add support for scroll behavior parsing
        https://bugs.webkit.org/show_bug.cgi?id=205009

        Reviewed by Frédéric Wang.

        Based on the patch by Frédéric Wang.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions): Parse CSSOMViewSmoothScrollingEnabled.
        * DumpRenderTree/TestOptions.h: Add CSSOMViewSmoothScrollingEnabled, disabled by default.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions): Set CSSOMViewSmoothScrollingEnabled from the test options.

2020-01-16  Simon Fraser  <simon.fraser@apple.com>

        fast/forms/ios/zoom-after-input-tap-wide-input.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=206313

        Reviewed by Wenson Hsieh.
        
        The timeout was caused by the previous test, fast/forms/ios/validation-bubble-dismiss-on-tap.html, 
        which puts up a validation bubble whose implementation involves showing a modal UIViewController.
        That view controller disappears with an animation, which happened after we're proceeded to the next
        test, and the overlay view could intercept touches thus breaking any subsequent touch-based test.

        Fix by having platformResetStateToConsistentValues() wait for the presentedViewController to
        go to nil, which requires spinning the runloop.

        platformResetStateToConsistentValues() will return false if we fail to remove the presented view controller,
        which will trigger a timeout with a log.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2020-01-17  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Print disk space usage for windows bots
        https://bugs.webkit.org/show_bug.cgi?id=206421

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Windows bot use cygwin, so df command works.

2020-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews] Perform validation of patch before running layout-tests on Windows
        https://bugs.webkit.org/show_bug.cgi?id=206424

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

2020-01-17  Megan Gardner  <megan_gardner@apple.com>

        Fix assertion when test fast/events/ios/rotation/basic-rotation.html is followed by fast/events/ios/rotation/do-not-shrink-to-fit-content-after-rotation.html
        https://bugs.webkit.org/show_bug.cgi?id=206383
        <rdar://problem/58618513>

        Reviewed by Tim Horton.

        Rotation tests are asserting because _didEndRotation is being called multiple times.
        The call is at the end of viewWillTransitionToSize, which is called with the same
        size that the view already is. Therefore, if no size is changing, early out,
        which keeps this double call from happening.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[PlatformWebViewController viewWillTransitionToSize:withTransitionCoordinator:]):

2020-01-17  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support to run-webkit-tests (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=205291

        Unreviewed follow-up fix.

        * Scripts/webkitpy/common/unicode_compatibility.py:
        (decode_for): Handle case where provided value is None.

2020-01-17  Brady Eidson  <beidson@apple.com>

        TestWebKitAPI.AsyncFunction.Promise times out on slower machines in debug builds.
        <rdar://problem/58445164> and https://bugs.webkit.org/show_bug.cgi?id=206012

        Reviewed by Keith Miller.

        Previously, to force GC, over 30,000 function calls would be made.
        This was too slow on slower machines in debug builds. It eventually would've worked given enough time, but...
        It turns just a few hundred function calls with an API call to force GC seems reliable and is much faster.
        
        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::tryGCPromise): Deleted.

2020-01-16  Keith Miller  <keith_miller@apple.com>

        Reland bytecode checkpoints since bugs have been fixed
        https://bugs.webkit.org/show_bug.cgi?id=206361

        Unreviewed, reland.

        The watch bugs have been fixed by https://trac.webkit.org/changeset/254674

        * Scripts/run-jsc-stress-tests:

2020-01-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r254678.

        API tests failures for Mac port

        Reverted changeset:

        "KeyedDecoderGeneric crashes when it accesses data with non-
        existing key"
        https://bugs.webkit.org/show_bug.cgi?id=205902
        https://trac.webkit.org/changeset/254678

2020-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(r253224) No longer able to prevent a tab from closing via the beforeunload prompt
        https://bugs.webkit.org/show_bug.cgi?id=206366
        <rdar://problem/58537467>

        Reviewed by Geoffrey Garen.

        tryClose_timeout_fix

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/beforeunload.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm:
        (-[SlowBeforeUnloadPromptUIDelegate _webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[SlowBeforeUnloadPromptUIDelegate webViewDidClose:]):
        (TEST):

2020-01-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] User Verification (UV) option present on a CTAP2 authenticatorMakeCredential while the authenticator has not advertised support for it
        https://bugs.webkit.org/show_bug.cgi?id=204111
        <rdar://problem/57019604>

        Reviewed by Brent Fulgham.

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

2020-01-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [bmalloc] IsoHeap's initial setup should be small
        https://bugs.webkit.org/show_bug.cgi?id=206214

        Reviewed by Michael Saboff.

        * TestWebKitAPI/Tests/WTF/bmalloc/IsoHeap.cpp:
        (assertHasObjects):
        (assertHasOnlyObjects):
        (assertClean):
        (TEST):

2020-01-16  Brady Eidson  <beidson@apple.com>

        Make the callAsyncJavaScriptFunction function actually be async (so await works).
        <rdar://problem/58571682> and https://bugs.webkit.org/show_bug.cgi?id=206364

        Reviewed by Geoffrey Garen.

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

2020-01-16  Philippe Normand  <philn@igalia.com>

        [GStreamer][WPE] Client-side video rendering support
        https://bugs.webkit.org/show_bug.cgi?id=206289

        Reviewed by Xabier Rodriguez-Calvar.

        * wpe/jhbuild.modules: Bump to libwpe and wpebackend-fdo git
        snapshots, until 1.5.x releases are published.

2020-01-16  Takashi Komori  <Takashi.Komori@sony.com>

        KeyedDecoderGeneric crashes when it accesses data with non-existing key
        https://bugs.webkit.org/show_bug.cgi?id=205902

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/KeyedCoding.cpp: Added.
        (TestWebKitAPI::checkDecodedBytes):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testSimpleValue):
        (TestWebKitAPI::KeyedCodingTestObject::encode):
        (TestWebKitAPI::KeyedCodingTestObject::decode):
        (TestWebKitAPI::KeyedCodingTestObject::KeyedCodingTestObject):
        (TestWebKitAPI::KeyedCodingTestObject::equals const):
        (TestWebKitAPI::operator==):

2020-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Password field doesn't get input method
        https://bugs.webkit.org/show_bug.cgi?id=34285

        Reviewed by Žan Doberšek.

        Enable the test case for password field.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (testWebKitInputMethodContextContentType):

2020-01-16  Cathie Chen  <cathiechen@igalia.com>

        Mapping HTML attributes width/height to the default aspect ratio of <img>
        https://bugs.webkit.org/show_bug.cgi?id=201641

        Reviewed by Frédéric Wang

        Add experimental flag: AspectRatioOfImgFromWidthAndHeightEnabled.

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

2020-01-15  Brady Eidson  <beidson@apple.com>

        Add WKContentWorld SPI, and use it in JavaScript execution.
        https://bugs.webkit.org/show_bug.cgi?id=206310

        Reviewed by Alex Christensen.
        
        Update previous callAsyncFunction calls with the new signature.
        Add tests for new _WKContentWorld class and its behavior with regard to executing JavaScript.

        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (TestWebKitAPI::tryGCPromise):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEvaluateJavaScript.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):

2020-01-15  Jonathan Bedard  <jbedard@apple.com>

        run-api-tests no longer supports wildcards in test names
        https://bugs.webkit.org/show_bug.cgi?id=206319
        <rdar://problem/58351608>

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._find_test_subset):

2020-01-17  Simon Fraser  <simon.fraser@apple.com>

        Some iOS tests using UIHelper.dragFromPointToPoint() are flakey
        https://bugs.webkit.org/show_bug.cgi?id=206441
        rdar://problem/56714139

        Reviewed by Wenson Hsieh.

        The way that HIDEventGenerator sends all the generated events in a blocking loop seems to
        trigger an issue where the events, when received by the scroll view gesture recognizers,
        don't actually trigger a scroll.

        Attempt to fix by creating an event stream in UIScriptControllerIOS::dragFromPointToPoint,
        and dispatching via -[HIDEventGenerator sendEventStream:completionBlock:]. This spawns a
        thread to dispatch the events, which will hopefully be closer to user behavior and more
        reliably trigger the gesture recognizer.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::dictionaryForFingerEventWithContentPoint):
        (WTR::UIScriptControllerIOS::dragFromPointToPoint):

2020-01-15  David Kilzer  <ddkilzer@apple.com>

        Enable -Wconditional-uninitialized in DumpRenderTree, WebKitTestRunner
        <https://webkit.org/b/206269>
        <rdar://problem/58589158>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Add -Wconditional-uninitialized switch.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        Initialize `imageRef` stack variable to `nullptr`.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Add -Wconditional-uninitialized switch.

2020-01-15  Keith Miller  <keith_miller@apple.com>

        Revert bytecode checkpoints since it breaks watch
        https://bugs.webkit.org/show_bug.cgi?id=206301

        Unreviewed, revert.

2020-01-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove self assignments
        https://bugs.webkit.org/show_bug.cgi?id=206294

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/webkit_finder.py:
        (WebKitFinder.webkit_base):
        * Scripts/webkitpy/port/factory.py:
        (_builder_options):

2020-01-15  Alicia Boya García  <aboya@igalia.com>

        [WTF] Remove MediaTime.cpp test warning in GCC
        https://bugs.webkit.org/show_bug.cgi?id=206238

        Reviewed by Xabier Rodriguez-Calvar.

        GCC emits warnings when it finds clang pragmas, so I'm wrapping them
        in #if COMPILER(CLANG) to reduce the noise.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:

2020-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r254480, r254496, and r254517.
        https://bugs.webkit.org/show_bug.cgi?id=206278

        "It regressed JetStream2 and Speedometer2" (Requested by
        saamyjoon on #webkit).

        Reverted changesets:

        "Throw away baseline code if there is an optimized
        replacement"
        https://bugs.webkit.org/show_bug.cgi?id=202503
        https://trac.webkit.org/changeset/254480

        "Unreviewed. Change useLLInt=0 to forceBaseline=1"
        https://trac.webkit.org/changeset/254496

        "Add an option that enables/disables throwing away baseline
        JIT code"
        https://bugs.webkit.org/show_bug.cgi?id=206244
        https://trac.webkit.org/changeset/254517

2020-01-14  Chris Dumez  <cdumez@apple.com>

        document.cookie should not do a sync IPC to the network process for iframes that do not have storage access
        https://bugs.webkit.org/show_bug.cgi?id=206108

        Reviewed by Geoff Garen and John Wilander.

        Make setStatisticsShouldBlockThirdPartyCookies IPC from the WebProcess to the UIProcess asynchronous
        since this ends up sending an IPC back to the WebProcess now (which would deadlock).

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsShouldBlockThirdPartyCookies):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2020-01-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement SPI to tell UI clients to select assertion responses
        https://bugs.webkit.org/show_bug.cgi?id=206112
        <rdar://problem/58495733>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponses:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-multiple-accounts.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid.html:

2020-01-14  Luming Yin  <luming_yin@apple.com>

        Update API availability for autoplay event
        https://bugs.webkit.org/show_bug.cgi?id=202214
        <rdar://problem/55710395>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit/js-play-with-controls.html:
        * TestWebKitAPI/Tests/WebKitCocoa/audio-with-play-button.html:
        * TestWebKitAPI/Tests/WebKitCocoa/video-with-play-button.html:
        Provide an id for each play button on various testing pages so that they can be triggered on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[AutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]):
        (-[AsyncAutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]):
        (TEST):
        Enable tests related to autoplay policy on iOS.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView clickOnElementID:]):
        Helper method that performs a click on a given element ID.

2020-01-14  Jonathan Bedard  <jbedard@apple.com>

        EWS: Run webkitpy tests with Python 2 and 3
        https://bugs.webkit.org/show_bug.cgi?id=206113

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/factories.py:
        (WebKitPyFactory.__init__): Run webkitpy tests in Python 2 and Python 3.
        * BuildSlaveSupport/ews-build/factories_unittest.py:
        (TestTestsFactory.test_webkitpy_factory):
        * BuildSlaveSupport/ews-build/steps.py:
        (WebKitPyTest): Renamed from RunWebKitPyTests.
        (RunWebKitPyPython2Tests):
        (RunWebKitPyPython3Tests):
        (RunWebKitPyTests): Renamed to WebKitPyTest.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestWebKitPyPython2Tests): Moved from TestWebKitPyTests.
        (TestWebKitPyTests): Moved to TestWebKitPyPython2Tests.
        (TestWebKitPyPython3Tests): Copied from TestWebKitPyPython2Tests.

2020-01-14  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Status bubble tooltip might display success message sometimes on a failed build
        https://bugs.webkit.org/show_bug.cgi?id=206180

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._most_recent_failure_message): Returns the status from failed step instead of last step.

2020-01-14  Jonathan Bedard  <jbedard@apple.com>

        test-webkitpy: Make json file creation Python 3 compatible
        https://bugs.webkit.org/show_bug.cgi?id=206255

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/test/main.py:
        (_print_results_as_json): Convert maps to lists.

2020-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r254533 and r254535.
        https://bugs.webkit.org/show_bug.cgi?id=206263

        Breaks iOS and macOS builds (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        "[WebAuthn] Implement SPI to tell UI clients to select
        assertion responses"
        https://bugs.webkit.org/show_bug.cgi?id=206112
        https://trac.webkit.org/changeset/254533

        "Unreviewed, a build fix after r254533"
        https://trac.webkit.org/changeset/254535

2020-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Keyboard input is severely delayed after switching away from unresponsive tab
        https://bugs.webkit.org/show_bug.cgi?id=206242
        <rdar://problem/57132891>

        Reviewed by Tim Horton.

        Add a couple of new API tests: (1) verify that the key event completion handler can still be invoked in an
        unresponsive web view after resigning first responder, and (2) verify that we'll try to wait for the current
        key event to be processed in a web view, if it remains the first responder.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2020-01-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement SPI to tell UI clients to select assertion responses
        https://bugs.webkit.org/show_bug.cgi?id=206112
        <rdar://problem/58495733>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:selectAssertionResponses:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-multiple-accounts.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid.html:

2020-01-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Pass ImageDiff commands in a single write
        https://bugs.webkit.org/show_bug.cgi?id=206194
        <rdar://problem/58578775>

        Reviewed by Stephanie Lewis.

        ImageDiff can encounter race conditions if it is fed content in multiple writes,
        instead of in a single block.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image): Pass ImageDiff data in a single write command.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image__missing_both): diff_image only accepts byte arrays.
        (PortTestCase.test_diff_image__missing_actual): Ditto.
        (PortTestCase.test_diff_image__missing_expected): Ditto.
        (PortTestCase.test_diff_image): Ditto.
        (PortTestCase.test_diff_image_passed): Ditto.
        (PortTestCase.test_diff_image_failed): Ditto.
        (PortTestCase.test_diff_image_crashed): Ditto.

2020-01-14  Antti Koivisto  <antti@apple.com>

        [LFC][Integration] Support the feature flag in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=206218

        Reviewed by Zalan Bujtas.

        This allows tests to turn off the feature in WK1 if needed.

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

2020-01-14  Alicia Boya García  <aboya@igalia.com>

        [WTF] Make MediaTime constructor constexpr
        https://bugs.webkit.org/show_bug.cgi?id=206036

        Reviewed by Adrian Perez de Castro.

        Added test for global static MediaTime constants.

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

2020-01-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed sort-Xcode-project-file

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2020-01-13  Saam Barati  <sbarati@apple.com>

        Throw away baseline code if there is an optimized replacement
        https://bugs.webkit.org/show_bug.cgi?id=202503

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2020-01-13  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        Fix path-specific filters on Windows
        https://bugs.webkit.org/show_bug.cgi?id=205786

        Reviewed by David Kilzer.

        * Scripts/webkitpy/style/filter.py:
        (FilterConfiguration._path_rules_from_path):
        Convert forward slashes to backward slashes on Windows by using
        os.path.normcase(). Nothing changed on other OSs.
        * Scripts/webkitpy/style/filter_unittest.py:
        (FilterConfigurationTest.test_path_with_different_case):

2020-01-13  David Kilzer  <ddkilzer@apple.com>

        WTR::TestController::decidePolicyForPluginLoad() should output bundle identifier on release assert
        <https://webkit.org/b/206105>

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForPluginLoad): Change
        RELEASE_ASSERT_NOT_REACHED() to
        RELEASE_ASSERT_NOT_REACHED_WITH_MESSAGE() with bundle
        identifier.

2020-01-13  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Add unit tests for factories
        https://bugs.webkit.org/show_bug.cgi?id=206159

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories_unittest.py: Added unit tests for factories.

2020-01-13  Eric Carlson  <eric.carlson@apple.com>

        Don't softlink AVCapture classes on watchOS or tvOS
        https://bugs.webkit.org/show_bug.cgi?id=205974
        <rdar://problem/58427281>

        Unreviewed test fix after r254257.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST):

2020-01-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support CTAP Client Pin
        https://bugs.webkit.org/show_bug.cgi?id=191516
        <rdar://problem/56558558>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapPinTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:requestPINWithRemainingRetries:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-pin.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-key-agreement-error.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-pin-token-error.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin-get-retries-error.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid-pin.html: Added.

2020-01-11  Alex Christensen  <achristensen@webkit.org>

        Expose frame information on _WKResourceLoadInfo
        https://bugs.webkit.org/show_bug.cgi?id=206104
        <rdar://problem/57132290>

        Reviewed by Dean Jackson.

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

2020-01-11  Kate Cheney  <katherine_cheney@apple.com>

        Add correct grandfathering functionality to the ITP database backend
        https://bugs.webkit.org/show_bug.cgi?id=205844
        <rdar://problem/58360450>

        Reviewed by John Wilander.

        In order to test both the ITP database and memory stores, this patch
        had to restructure the grandfathering API tests.

        If the test is for the database backend (ends in *Database), it will
        check if the default store matches. If so, it continues on with the
        normal test. If not, it has to use an API call to reconstruct the
        new store and ensure the grandfathering still happens. Vice versa for
        the memory store tests.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (isITPDatabaseEnabled):
        (TEST):

2020-01-10  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r185816): In the Hong Kong locale, navigator.language reports it's in the Taiwan locale
        https://bugs.webkit.org/show_bug.cgi?id=200043

        Reviewed by Dean Jackson.

        Migrate system language tests to LayoutTests, to match the rest of our system language tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm: Removed.

2020-01-10  Jer Noble  <jer.noble@apple.com>

        [iOS] Audio from non-frontmost tab continues when app is backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=206101
        <rdar://problem/58089916>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKWebViewPausePlayingAudioTests.mm: Added.
        (TestWebKitAPI::autoplayingConfiguration):
        (TestWebKitAPI::TEST):

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

        Python3: Support Source/WebKit/Scripts/webkit
        https://bugs.webkit.org/show_bug.cgi?id=206078

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Call test-webkitpy with Python 3 since
        everything is now compatible.

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

        webkit-patch crashes when creating new bug with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=205911

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries.is_invalid_bugzilla_email): Decode page before applying regex.
        (Bugzilla.authenticate): Decode group before printing.
        (Bugzilla._parse_attachment_id_from_add_patch_to_bug_response): Ensure HTML response
        Is a string before applying the regex.
        (Bugzilla._check_create_bug_response): Ditto.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Attachment ID should be a string,
        not a byte array.

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

        Fix test assertions after r254345
        https://bugs.webkit.org/show_bug.cgi?id=206037

        There were two assertions being hit in the new tests:
        1. Beacon sends POST requests, so the HTTP server that receives them needs to be able to handle POST requests.
        2. There was an assertion in the destructor of NetworkResourceLoader because we were destroying a WKWebView during a sync xhr.
        This isn't a problem in practice, but we may as well wait for the sync xhr to finish before completing the test so we can
        keep the sync xhr assertion, which is useful to prevent hangs.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        (-[TestUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::respondToRequests):

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

        [GTK][WPE] EWS should not wipe the JHBuild in the unapply patch step
        https://bugs.webkit.org/show_bug.cgi?id=206061

        Reviewed by Aakash Jain.

        The current unapply patch step on the EWS calls the script clean-webkit, which wipes everything.
        Rebuilding the JHBuild takes around 30 minutes, even with ccache.
        And its not needed to wipe the JHBuild directories on the clean-webkit step, because the WebKit
        tooling for building the JHBuild (update-webkitgtk-libs) already detects when the moduleset has
        been modified and wipes it when necessary.

        This patch adds the optional argument --keep-jhbuild-directory to the script clean-webkit,
        that the EWS will pass when doing the unapply patch step for platform GTK or WPE.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanWorkingDirectory.start):
        * Scripts/clean-webkit:
        (main):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.discard_untracked_files):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:

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

        Build fix for builds without libwebrtc's BoringSSL.
        https://bugs.webkit.org/show_bug.cgi?id=206037

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:

2020-01-10  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support authenticatorGetNextAssertion
        https://bugs.webkit.org/show_bug.cgi?id=203346
        <rdar://problem/56558488>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        Adds new test case for new logic in DeviceResponseConverter.

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

        Python 3: Add support to run-webkit-tests (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=205291

        Unreviewed follow-up fix.

        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image): Diff output is byte array, not string.
        (PortTestCase.test_diff_image_failed): Ditto.
        (PortTestCase.test_diff_image_crashed): Ditto.

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

        Expand _WKResourceLoadDelegate callbacks
        https://bugs.webkit.org/show_bug.cgi?id=206037

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
        (-[TestResourceLoadDelegate webView:resourceLoad:didSendRequest:]):
        (-[TestResourceLoadDelegate webView:resourceLoad:didPerformHTTPRedirection:newRequest:]):
        (-[TestResourceLoadDelegate webView:resourceLoad:didReceiveChallenge:]):
        (-[TestResourceLoadDelegate webView:resourceLoad:didReceiveResponse:]):
        (-[TestResourceLoadDelegate webView:resourceLoad:didCompleteWithError:]):
        (TEST):
        (-[TestResourceLoadDelegate webView:willSendRequest:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h:
        (TestWebKitAPI::HTTPServer::HTTPResponse::HTTPResponse):
        Add the ability to have non-200 status codes in responses.
        Also switch the order of parameters to reflect the fact that header fields are sent before the body.
        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::statusText):
        (TestWebKitAPI::HTTPServer::respondToRequests):

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

        Add SPI to enable TLS 1.0 and 1.1 in WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=206046

        Reviewed by Youenn Fablet.

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

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

        Remove WebsiteDataStore::setCacheStorageDirectory which has been replaced by WebsiteDataStoreConfiguration::setCacheStorageDirectory
        https://bugs.webkit.org/show_bug.cgi?id=205841

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

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

        [WTR] Use short heart beat timer as a TestOption
        https://bugs.webkit.org/show_bug.cgi?id=205795

        Reviewed by Chris Dumez.

        Using short service worker heartbeat timeout values creates flakiness on slow bots.
        By default, use regular service worker heartbeat timeout values for layout tests.
        Add a WTR option value to use short service worker timeout values.
        Use this option for service worker spinning layout tests.

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

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

        Python 3: Add support to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=205291

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.
        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool._loop): Move exception inside of loop.
        (_Message.__repr__): Use .format strings.
        (_Worker.__init__): Ditto.
        * Scripts/webkitpy/common/wavediff.py:
        (WaveDiff.__init__): Use Python 3 compatible BytesIO and StringIO.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder._read_test_names_from_file): Use .format string.
        (LayoutTestFinder.split_into_chunks): Explicitly use integer division.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._get_test_inputs): Use range over xrange.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error): Use .format strings.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator._insert_failure_summaries): Use Python 3 compatible itervalues.
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__): Sort type list.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.setUp): Multiple processes are buggy in test-webkitpy.
        (RunTest.test_basic): replace buflist with getvalue().
        (RunTest.test_child_processes_2): Ditto.
        (RunTest.test_child_processes_min): Ditto.
        (RunTest.test_keyboard_interrupt): Ditto.
        (RunTest.test_missing_and_unexpected_results): Compare dictionaries instead of json strings.
        (RunTest.test_crash_with_stderr): Ditto.
        (RunTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist): Ditto.
        (EndToEndTest.test_reftest_with_two_notrefs): Ditto.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Flush stream after writing.
        (MeteredStream._erase_last_partial_line): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_directory_timings): Can't compare string to integer.
        (Printer._print_statistics_for_test_timings): Use integer division.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs): Use items over iteritems.
        * Scripts/webkitpy/port/device.py:
        (Device.__hash__): Allow hashing of devices.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._install): Use range over xrange.
        (DevicePort.setup_test_run): Ditto.
        (DevicePort.clean_up_test_run): Ditto.
        * Scripts/webkitpy/port/driver.py:
        (DriverOutput.__init__): Text should be decoded, audio encoded.
        (Driver.__init__):
        (Driver.run_test):
        (Driver._parse_child_processes_output): Output is byte array.
        (Driver._check_for_driver_timeout): Ditto.
        (Driver._check_for_address_sanitizer_violation): Error lines are byte arrays.
        (Driver._check_for_driver_crash_or_unresponsiveness): Ditto.
        (Driver._read_optional_image_block): If a block is base64 encoded, we want the decoded
        content, otherwise, we want the encoded content.
        (Driver._read_header): Lines are byte arrays, decode them before processing.
        (Driver._process_stdout_line): Blocks are byte arrays.
        (Driver._strip_eof): Lines should be byte arrays, not strings.
        (Driver._read_block): Standardize encoding in blocks.
        (ContentBlock.__init__): Content should be a byte array.
        (ContentBlock.decode_content): Attempt to decode content.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_read_binary_block): Content should be encoded.
        (DriverTest.test_read_base64_block): Ditto.
        (DriverTest.test_check_for_driver_crash): ServerProcess output should be a byte array.
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image): ImageDiff output is in byte arrays.
        (ImageDiffer._read): Ditto.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write): Encode data before writing it.
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.__init__): Convert string mock output to bytes.
        (MockServerProcess.read_stdout_line): Stdout lines are byte arrays.
        (MockServerProcess.read_stdout): Ditto.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.NonBlockingFileFromSocket.close): Don't double close socket in Python 3.
        (SimulatorProcess._start): Stdin should be a binary stream.
        * Scripts/webkitpy/port/test.py:
        (unit_test_list): Convert audio streams to byte arrays.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Decode xcrun output.
        (SimulatedDevice.install_app): Use xrange over range.

2020-01-10  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak] Update IceCC to version 1.2
        https://bugs.webkit.org/show_bug.cgi?id=206059

        Reviewed by Philippe Normand.

        Update IceCC/Icecream to version 1.2, which is the same version
        currently shipped with Debian stable (Buster). This bump is needed
        because IceCC 1.1 does not seem to interoperate with the scheduler
        from newer versions and it is expected that people who run IceCC will
        install IceCC in their build farm from distribution packages.

        * flatpak/org.webkit.CommonModules.yaml: Bump IceCC version to 1.2,
        add the Git commit-id for the release tag.

2020-01-10  Charlie Turner  <mail@charles.plus>

        [EME][ClearKey] Refactor CDMClearKey::update()
        https://bugs.webkit.org/show_bug.cgi?id=205999

        Reviewed by Xabier Rodriguez-Calvar.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::TEST_F): Added a test for the new toHexString
        helper. It should make sure to zero pad each byte to two
        characters, so that it's easy to read.

2020-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add GLib specific API for JSC JSValueRef.h's JSValueMakeFromJSONString and JSValueCreateJSONString methods
        https://bugs.webkit.org/show_bug.cgi?id=205161

        Reviewed by Adrian Perez de Castro.

        Add tests for new API.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCJSON):
        (main):

2020-01-09  Ryan Haddad  <ryanhaddad@apple.com>

        Move macOS Test262, JSC, and perf queues to Catalina
        https://bugs.webkit.org/show_bug.cgi?id=205971

        Unreviewed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Update queue names on dashboard to match new naming scheme (dashes instead of spaces)

2020-01-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use ComplexTextController instead of UniscribeController
        https://bugs.webkit.org/show_bug.cgi?id=204884

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp: Enabled these tests for PLATFORM(WIN).

2020-01-09  David Kilzer  <ddkilzer@apple.com>

        TestController::platformLibraryPathForTesting() returns inner pointer to autoreleased NSString
        <https://webkit.org/b/206018>
        <rdar://problem/58449733>

        Reviewed by Darin Adler.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        - Use WTF::AutodrainedPool to fix remaining autoreleasePool
          leaks.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformLibraryPathForTesting):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformLibraryPathForTesting):
        - Retain NSString since these methods return an inner pointer.
          This also only needs to be initialized once.

2020-01-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation controller should not observe changes in new replacement elements
        https://bugs.webkit.org/show_bug.cgi?id=206015
        <rdar://problem/58353667>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

        Add a new API test to verify that we don't fire text manipulation item callbacks due to inserting elements when
        completing text manipulation.

        (-[TextManipulationDelegate initWithItemCallback]): Deleted.

        Remove a stray initializer that was unused (and also doesn't take an ItemCallback, as its name might suggest).

2020-01-09  Ryan Haddad  <ryanhaddad@apple.com>

        Move macOS Test262, JSC, and perf queues to Catalina
        https://bugs.webkit.org/show_bug.cgi?id=205971

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add missing scheduler for perf queue.

2020-01-09  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add timing information to WebPageProxy::logFrameNavigation() to detect delayed client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=205522
        <rdar://problem/58125759>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
            Removed dead code.

2020-01-09  Paulo Matos  <pmatos@igalia.com>

        Race condition in run-jsc-stress-tests chdir
        https://bugs.webkit.org/show_bug.cgi?id=205910

        Reviewed by Keith Miller.

        chdir block was in a race condition when multiple remotes are used.
        As an example of this see line 3345 of:
          https://ews-build.webkit.org/#/builders/26/builds/5719/steps/12/logs/stdio

        quote error:
        Tools/Scripts/run-jsc-stress-tests:1946: warning: conflicting chdir during another chdir block

        Multiple threads should not enter a chdir block simultaneously, therefore we need
        a mutex to guard it. More information is here:
          https://bugs.ruby-lang.org/issues/15661

        * Scripts/run-jsc-stress-tests:

2020-01-09  Ryan Haddad  <ryanhaddad@apple.com>

        Move commit queue to Mojave
        https://bugs.webkit.org/show_bug.cgi?id=205972

        Reviewed by Alexey Proskuryakov.

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

2020-01-08  Ryan Haddad  <ryanhaddad@apple.com>

        Move macOS Test262, JSC, and perf queues to Catalina
        https://bugs.webkit.org/show_bug.cgi?id=205971

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.macos-highsierra img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2020-01-09  David Kilzer  <ddkilzer@apple.com>

        WebKitTestRunner leaks objects in a top-level autoreleasePool that's never cleared
        <https://webkit.org/b/205950>
        <rdar://problem/50987831>

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/ios/mainIOS.mm:
        (main):
        - Add an @autoreleasepool block around a line of code
          that generates autoreleased objects.  These objects
          would never be released for the life of the process
          prior to this change.
        * WebKitTestRunner/mac/main.mm:
        (main):
        - Move instantiation of WTR::TestController outside of
          @autoreleasepool block so the pool can be drained
          while running tests.  Prior to this change, this
          autoreleasePool would never be drained.

2020-01-08  Saam Barati  <sbarati@apple.com>

        build-jsc should work with "testing" and "release+assert" targets
        https://bugs.webkit.org/show_bug.cgi?id=205978

        Reviewed by Mark Lam.

        * Scripts/webkitdirs.pm:
        (determineConfiguration):
        (determinePassedConfiguration):

2020-01-08  Saam Barati  <sbarati@apple.com>

        build-jsc should invoke make instead of calling xcodebuild directly
        https://bugs.webkit.org/show_bug.cgi?id=205960

        Reviewed by Keith Miller.

        This makes build-jsc invoke make instead of directly invoking xcodebuild.
        There are some benefits here:
        - 'make' is a more standard way to build than build-jsc, so as we make
        improvements to the make build (e.g r254234), we'll get the same improvements
        in build-jsc.
        
        - There has been a longstanding bug where if you did if you did
        `build-jsc --release && cd Source/JavaScriptCore && make release`
        then the `make release` call would rebuild all of JavaScriptCore.
        If build-jsc directly invokes make, this issue goes away and allows
        the two to interoperate as expected.

        * Scripts/build-jsc:
        (buildMyProject):

2020-01-08  Commit Queue  <commit-queue@webkit.org>

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

        Broke layout tests (Requested by aakashja_ on #webkit).

        Reverted changeset:

        "run-webkit-tests: clobber-old-results should remove the
        entire results folder"
        https://bugs.webkit.org/show_bug.cgi?id=205875
        https://trac.webkit.org/changeset/254235

2020-01-08  Aakash Jain  <aakash_jain@apple.com>

        [ews] Perform validation of patch before retrying CompileWebKit on ToT
        https://bugs.webkit.org/show_bug.cgi?id=205953
        <rdar://problem/58064430>

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand):

2020-01-08  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: clobber-old-results should remove the entire results folder
        https://bugs.webkit.org/show_bug.cgi?id=205875
        <rdar://problem/58236117>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._clobber_old_results): Remove entire results folder.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_retrying_and_flaky_tests): clobber-old-results now removes the
        entire results directory.

2020-01-08  Mark Lam  <mark.lam@apple.com>

        Rename testing build configuration to release+assert, and add new testing build configuration.
        https://bugs.webkit.org/show_bug.cgi?id=205954

        Reviewed by Yusuke Suzuki.

        Added a --force-opt shortcut for the --force-optimization-level option of
        set-webkit-configuration.  This makes it less painful to type this on the command
        line for those of us who would like to use this option often in our local builds.

        * Makefile:
        * Scripts/set-webkit-configuration:

2020-01-08  Matt Lewis  <jlewis3@apple.com>

        Move EWS from macOS High Sierra to macOS Mojave
        https://bugs.webkit.org/show_bug.cgi?id=205948
        
        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/config.json:

2020-01-08  Brady Eidson  <beidson@apple.com>

        Make _callAsyncFunction:withArguments: work with promises.
        https://bugs.webkit.org/show_bug.cgi?id=205654

        Reviewed by Saam Barati.

        Test that:
        - Resolve results in success handler being called
        - Reject results in error handler being called
        - Both resolve and reject becoming unreachable results in the error handler being called
        - Both native Promise objects and arbitrary thenables work
        - Any object where "then" is callable - even if not a function - works
        
        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm:
        (TestWebKitAPI::tryGCPromise):
        (TestWebKitAPI::TEST): 

2020-01-08  Daniel Bates  <dabates@apple.com>

        Regression r254160: 6 API test failures
        https://bugs.webkit.org/show_bug.cgi?id=205935
        <rdar://problem/58411559>

        Revert API test changes in r254160. I mistakenly thought this were legitimate changes,
        but they were actually the result of a bug I have since corrected in r254167.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        (TEST):

2020-01-08  Keith Miller  <keith_miller@apple.com>

        Fix testing Makefile to inherit preprocessor definitions
        https://bugs.webkit.org/show_bug.cgi?id=205940

        Reviewed by Mark Lam.

        * Makefile:

2020-01-08  Paulo Matos  <pmatos@igalia.com>

        Allow multiple cmakeargs inside inside envvar
        https://bugs.webkit.org/show_bug.cgi?id=205722

        Reviewed by Carlos Alberto Lopez Perez.

        Allow sub-argument lists to be passed in a build environment variable.

        * Scripts/build-jsc:
        * Scripts/build-webkit:

2020-01-07  Saam Barati  <sbarati@apple.com>

        run-jsc should not print "... I should not be here ..." when it doesn't get killed when sending a signal to itself
        https://bugs.webkit.org/show_bug.cgi?id=205907

        Reviewed by Ross Kirsling.

        In r253024, I added code that would try to make run-jsc exit with the same
        signal that the actual jsc binary exitted with. This made it so crashes and
        in the `jsc` process would look like equivalent crashes in `run-jsc` process.
        Not thinking of non terminating signals, I added code like this:
        ```
        system("kill -" . $signal . " " . $PID);
        print STDERR "\n... I should not be here ...\n";
        ```
        
        However, this print will happen for totally legitimate reasons, like when
        you Ctrl+C from the REPL when  using `run-jsc`. This patch removes this print.

        * Scripts/run-jsc:

2020-01-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Implement css3-images image-orientation
        https://bugs.webkit.org/show_bug.cgi?id=89052

        Reviewed by Simon Fraser.

        Remove the ENABLE_CSS_IMAGE_ORIENTATION feature flag.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2020-01-07  Alex Christensen  <achristensen@webkit.org>

        Introduce _WKResourceLoadDelegate
        https://bugs.webkit.org/show_bug.cgi?id=205887

        Reviewed by Dean Jackson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm: Added.
        (-[TestResourceLoadDelegate webView:willSendRequest:]):
        (TEST):

2020-01-07  Keith Miller  <keith_miller@apple.com>

        Add a testing target to make that is release + assertions
        https://bugs.webkit.org/show_bug.cgi?id=205895

        Reviewed by Mark Lam.

        * Makefile:

2020-01-07  Kate Cheney  <katherine_cheney@apple.com>

        Create a mechanism for 'safe by default' web views
        https://bugs.webkit.org/show_bug.cgi?id=205407
        <rdar://problem/58053071>

        Reviewed by Alex Christensen.

        Test the default WebView category is correct and that the setter works
        properly.

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

2020-01-07  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r254165.

        Caused 500+ missing results on Mac

        Reverted changeset:

        "run-webkit-tests: clobber-old-results should remove the
        entire results folder"
        https://bugs.webkit.org/show_bug.cgi?id=205875
        https://trac.webkit.org/changeset/254165

2020-01-07  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: clobber-old-results should remove the entire results folder
        https://bugs.webkit.org/show_bug.cgi?id=205875
        <rdar://problem/58236117>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._clobber_old_results): Remove entire results folder.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_retrying_and_flaky_tests): clobber-old-results now removes the
        entire results directory.

2020-01-07  Aakash Jain  <aakash_jain@apple.com>

        [EWS] Limit pre-existing JSC tests failures to display in buildbot summary
        https://bugs.webkit.org/show_bug.cgi?id=205878

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeJSCTestsResults.start): Limit the number of failures to display.

2020-01-07  Daniel Bates  <dabates@apple.com>

        First character in each word-wrapped line has incorrect character rect when requested range spans multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=205842
        <rdar://problem/56884325>

        Reviewed by Zalan Bujtas.

        Add a new test.

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

2020-01-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r254144.

        Broke the iOS build.

        Reverted changeset:

        "First character in each word-wrapped line has incorrect
        character rect when requested range spans multiple lines"
        https://bugs.webkit.org/show_bug.cgi?id=205842
        https://trac.webkit.org/changeset/254144

2020-01-07  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Handle case where processing data is undefined
        https://bugs.webkit.org/show_bug.cgi?id=205870

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext._do_job_for_key): If the job content is undefined, mark the job as
        finished.

2020-01-07  Daniel Bates  <dabates@apple.com>

        First character in each word-wrapped line has incorrect character rect when requested range spans multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=205842
        <rdar://problem/56884325>

        Reviewed by Zalan Bujtas.

        Add a new test.

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

2020-01-07  Basuke Suzuki  <basuke.suzuki@sony.com>

        check-webkit-style: bmalloc doesn't use config.h
        https://bugs.webkit.org/show_bug.cgi?id=205840

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_IncludeState.check_next_include_order):
        (check_include_line):
        (check_has_config_header):

2020-01-07  youenn fablet  <youenn@apple.com>

        Add an option to make video capture in GPUProcess
        https://bugs.webkit.org/show_bug.cgi?id=205853

        Reviewed by Eric Carlson.

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

2020-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to retrieve and delete surrounding text for input methods
        https://bugs.webkit.org/show_bug.cgi?id=205716

        Reviewed by Žan Doberšek.

        Add new test case for the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (webkitInputMethodContextMockFinalize):
        (webkitInputMethodContextMockNotifySurrounding):
        (webkitInputMethodContextMockReset):
        (webkit_input_method_context_mock_class_init):
        (testWebKitInputMethodContextSurrounding):
        (beforeAll):

2020-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to set purpose and hints of active editable element to input methods
        https://bugs.webkit.org/show_bug.cgi?id=205605

        Reviewed by Žan Doberšek.

        Add new test case to check the purpose and hints API.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (testWebKitInputMethodContextContentType):
        (beforeAll):

2020-01-06  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Tweak processing constants
        https://bugs.webkit.org/show_bug.cgi?id=205828
        <rdar://problem/58146698>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/upload_context.py:
        (UploadContext):
        Increase process timeout to 1 week.
        Allow 5 retries instead of 3.
        Retry stuck tasks after 10 minutes instead of 5.
        Include more tasks so that a scan is always greater than the number of workers.

2020-01-06  Jonathan Bedard  <jbedard@apple.com>

        test-lldb-webkit: Use logging module
        https://bugs.webkit.org/show_bug.cgi?id=205832

        Reviewed by Stephanie Lewis.

        * Scripts/test-lldb-webkit:
        (LldbTester.run): Configure logger.

2020-01-06  Daniel Bates  <dabates@apple.com>

        Precision of getClientRects(), getBoundingClientRect() differs depending whether simple line layout or line box layout is used
        https://bugs.webkit.org/show_bug.cgi?id=205563
        <rdar://problem/58165528>

        Reviewed by Zalan Bujtas.

        Update test results.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        (TEST):

2020-01-06  youenn fablet  <youenn@apple.com>

        XMLHTTPRequest POSTs blob data to a custom WKURLSchemeHandler protocol crash
        https://bugs.webkit.org/show_bug.cgi?id=205685

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-01-06  Alex Christensen  <achristensen@webkit.org>

        Remove WebsiteDataStore::setServiceWorkerRegistrationDirectory
        https://bugs.webkit.org/show_bug.cgi?id=205754

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::websiteDataStore):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2020-01-06  Alex Christensen  <achristensen@webkit.org>

        Allow wildcard scheme in UserContentURLPattern
        https://bugs.webkit.org/show_bug.cgi?id=205695

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

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

        REGRESSION: [ iOS ] imported/w3c/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=205458
        <rdar://problem/58081704>

        Reviewed by Wenson Hsieh.

        The last sub-test in imported/w3c/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html checks on the
        ability to activate various form controls after disabling and re-enabling them. Two of those form controls, <select>
        and <textarea>, would trigger animations of the web view's UIScrollView causing touches to be consumed by UIKit and
        never seen by the WKContentView, and as such the expected "click" events would not be received. It would have been
        possible to modify the test to wait on any potential page scroll to complete before dispatching taps, but since this
        is a WPT test, we cannot modify it. Instead, we make a change to the function called by uiScriptController.singleTapAtPoint()
        to interrupt any pending UIScrollView animation when a tap is being triggered on the web view. Credit to Wenson Hsieh
        for suggesting this simple and effective approach.

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

2020-01-06  Mark Lam  <mark.lam@apple.com>

        Convert ASSERT_DISABLED to ASSERT_ENABLED, and fix some tests of NDEBUG that should actually test for ASSERT_ENABLED.
        https://bugs.webkit.org/show_bug.cgi?id=205776

        Reviewed by Saam Barati.

        * DumpRenderTree/mac/ObjCController.m:
        (-[ObjCController accessStoredWebScriptObject]):

2020-01-06  Mark Lam  <mark.lam@apple.com>

        Add --force-optimization-level option to Tools/Scripts/set-webkit-configuration.
        https://bugs.webkit.org/show_bug.cgi?id=205787

        Reviewed by Saam Barati.

        Usage:
            --force-optimization-level=<opt> Force optimization: O3, O2, O1, O0, Os, Ofast, Og, or none

        This can be used to force debug builds to be built with a higher level optimization
        so that tests can run to completion faster.

        It can also be useful as a simple way to force release builds to be built with
        different optimization levels for performance comparison.

        Setting --force-optimization-level=none restores the default optimization levels.
        Of course, the build targets need to be rebuilt for this to take effect.

        * Scripts/set-webkit-configuration:
        * Scripts/webkitdirs.pm:
        (determineForceOptimizationLevel):
        (forceOptimizationLevel):
        (XcodeOptions):

2020-01-05  Dean Jackson  <dino@apple.com>

        Rename GraphicsContext3D to GraphicsContextGL
        https://bugs.webkit.org/show_bug.cgi?id=205778
        <rdar://problem/58327597>

        Reviewed by Sam Weinig.

        Rename all the GraphicsContext3D things to GraphicsContextGL
        (includes Extensions3D and GRAPHICS_CONTEXT_3D).

        GraphicsContext3DBase now becomes GraphicsContextGL.
        GraphicsContext3D is now GraphicsContextGLOpenGL (since it represents
        the OpenGL implementation of the API).

        * Scripts/webkitpy/common/config/watchlist:

2020-01-06  Paulo Matos  <pmatos@igalia.com>

        Remove unused variable jsDriverArgs from script
        https://bugs.webkit.org/show_bug.cgi?id=205797

        Reviewed by Žan Doberšek.

        * Scripts/run-javascriptcore-tests:

2020-01-06  Paulo Matos  <pmatos@igalia.com>

        Add support for passing test arguments in envvar TEST_JSC_ARGS
        https://bugs.webkit.org/show_bug.cgi?id=205800

        Reviewed by Žan Doberšek.

        Similarly to what is done in build-jsc, we add support to pass
        extra command line arguments in environment variable TEST_JSC_ARGS.

        * Scripts/run-javascriptcore-tests:

2020-01-06  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Issue mach lookup extension to launch services daemon for Mail
        https://bugs.webkit.org/show_bug.cgi?id=205316

        Reviewed by Brent Fulgham.

        Add test option to set bundle identifier. Using this, WebKitTestRunner can pretend to be any client, e.g. Mail.

        Test: fast/sandbox/ios/sandbox-mach-lookup-mail.html

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

2020-01-06  Philippe Normand  <pnormand@igalia.com>

        [WPE][Qt] TestRunJavaScript failure
        https://bugs.webkit.org/show_bug.cgi?id=205766

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WPEQt/TestRunJavaScript.cpp:
        (TestRunJavaScript::main): Surround JS function with parentheses
        to comply with the ECMAScript specification.

2020-01-05  Sam Weinig  <weinig@apple.com>

        Further simplify StringBuilder usage by standardizing hex formating to a single hex() function
        https://bugs.webkit.org/show_bug.cgi?id=205759

        Reviewed by Dean Jackson.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/HexNumber.cpp: Added.
        Add testing for hex formatting of integers.

2020-01-05  Simon Fraser  <simon.fraser@apple.com>

        DumpRenderTree doesn't always call updateRendering() when a test completes
        https://bugs.webkit.org/show_bug.cgi?id=205761

        Reviewed by Darin Adler.
        
        Some animation tests (and possibly many others) are flakey or broken in WK1 because
        there was no code to guarantee that Page::updateRendering() was called at notifyDone()
        time.

        WK2 calls DrawingArea::forceRepaint(), which does updateRendering(), flushes layers,
        and flushes a CATransaction.

        In WK1, we historically relied in AppKit to call -viewWillDraw on WebView and/or WebHTMLView,
        and just called [webView display] to make this happen. However, with layer backing, AppKit behavior
        changes, and WebCore changes that make more things happen with HTML event loop timing, this
        approach no longer works. The fix is to add WebView SPI, _forceRepaintForTesting, which emulates what
        WK2 is doing.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (updateDisplay):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:

2020-01-03  Tim Horton  <timothy_horton@apple.com>

        REGRESSION: 150+ flaky failures on some bots (color mismatches)
        https://bugs.webkit.org/show_bug.cgi?id=205755
        <rdar://problem/58248136>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (colorProfileURLForDisplay):
        (displayUUIDStrings):
        Use CGGetOnlineDisplayList instead of CGGetActiveDisplayList; we want
        all attached displays, even if they are sleeping.

2020-01-03  Keith Miller  <keith_miller@apple.com>

        Update test262 tests to commit 157b18d
        https://bugs.webkit.org/show_bug.cgi?id=205741

        Reviewed by Yusuke Suzuki.

        Using --save and --latest-import should update expectations rather than overwrite.

        * Scripts/test262/Runner.pm:
        (main):

2020-01-03  Simon Fraser  <simon.fraser@apple.com>

        Add some shared schemes to the WebKit.xcworkspace
        https://bugs.webkit.org/show_bug.cgi?id=205698

        Reviewed by Tim Horton.
        
        Make WebKit.xcworkspace show the following schemes by default:
            All Source
            All Tools
            WTF
            JavaScriptCore
            WebCore
            WebKit
            WebKitLegacy
            DumpRenderTree
            WebKitTestRunner
            TestWebKitAPI
            MiniBrowser
            MobileMiniBrowser.
            
        Also remove the MobileMiniBrowserUITests scheme.

        * DumpRenderTree/DumpRenderTree.xcodeproj/xcshareddata/xcschemes/DumpRenderTree.xcscheme: Copied from Tools/MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme.
        * MiniBrowser/MiniBrowser.xcodeproj/xcshareddata/xcschemes/MiniBrowser.xcscheme: Copied from Tools/MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme.
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowser.xcscheme: Copied from Tools/MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/xcshareddata/xcschemes/TestWebKitAPI.xcscheme: Copied from Tools/MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/xcshareddata/xcschemes/WebKitTestRunner.xcscheme: Renamed from Tools/MobileMiniBrowser/MobileMiniBrowser.xcodeproj/xcshareddata/xcschemes/MobileMiniBrowserUITests.xcscheme.

2020-01-03  youenn fablet  <youenn@apple.com>

        Provide pid to crashing service worker process and GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205564

        Reviewed by Alex Christensen.

        Exposing the pid allows WebKitTestRunner to provide better information.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::serviceWorkerProcessDidCrash):
        (WTR::TestController::gpuProcessDidCrash):
        * WebKitTestRunner/TestController.h:

2020-01-03  Alex Christensen  <achristensen@webkit.org>

        Deprecate _WKWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=205539

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[ContentBlockingWebsitePoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (TEST):
        (-[AutoplayPoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[AsyncAutoplayPoliciesDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[WebsitePoliciesNavigationDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomNavigatorPlatformDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:preferences:userInfo:decisionHandler:]):
        (-[PopUpPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[ContentBlockingWebsitePoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.
        (-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.
        (-[AsyncAutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.
        (-[WebsitePoliciesNavigationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): Deleted.
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]): Deleted.
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.

2020-01-03  Alicia Boya García  <aboya@igalia.com>

        [GStreamer][MSE] Player stalling too soon
        https://bugs.webkit.org/show_bug.cgi?id=205117

        Reviewed by Xabier Rodriguez-Calvar.

        Backported patch to jhbuild.

        Small modifications were necessary to make it apply on 1.16.1.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/libav-0001-gstavviddec-Limit-default-number-of-decoder-threads.patch: Added.

2020-01-02  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable CORS on requests to URLs matching a pattern
        https://bugs.webkit.org/show_bug.cgi?id=205534
        <rdar://problem/58011337>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

2020-01-02  Sam Weinig  <weinig@apple.com>

        Simplify StringBuilder API/align with makeString by removing appendFixed* functions and using FormatNumber struct instead
        https://bugs.webkit.org/show_bug.cgi?id=205671

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        Replace all uses of builder.appendFixedPrecisionNumber(...) with builder.append(FormattedNumber::fixedPrecision(...)).

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

        [WPE] OpenJPEG missing in install dependencies script.
        https://bugs.webkit.org/show_bug.cgi?id=205647

        Unreviewed follow-up fix.

        Add also the OpenJPEG-2 package to the WPE install list.

        * wpe/install-dependencies:

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

        [GTK][WPE] OpenJPEG missing in install dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=205647

        Reviewed by Adrian Perez de Castro.

        * gtk/install-dependencies: Add OpenJPEG-2 package to the list.

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

        Add WKWebView SPI to evaluate a function with arguments
        https://bugs.webkit.org/show_bug.cgi?id=205239

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AsyncFunction.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView objectByCallingAsyncFunction:withArguments:error:]):

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

        [GTK][WPE] Report number of total tests run and failed in API test runner like run-api-tests does
        https://bugs.webkit.org/show_bug.cgi?id=205608

        Reviewed by Carlos Garcia Campos.

        Calculate the total number of tests (including subtests) executed
        and report it at the end of the step in the same format than run-api-tests does.

        * glib/api_test_runner.py:
        (TestRunner._run_test_glib): Pass the list of skipped tests instead of calculating it here to avoid calculating it twice.
        (TestRunner._get_tests_from_google_test_suite): Ditto.
        (TestRunner._run_google_test_suite): Ditto.
        (TestRunner._run_test): Ditto.
        (TestRunner.run_tests):
        (TestRunner.run_tests.number_of_tests):
        (TestRunner.run_tests.report):

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

        [GTK][WPE] support output of results in json format in API test runner.
        https://bugs.webkit.org/show_bug.cgi?id=205579

        Reviewed by Carlos Garcia Campos.

        Write the results of the tests in json format when the option --json-output
        is passed to run-gtk-tests or run-wpe-tests. Use the same format than mac's
        run-api-tests.

        * glib/api_test_runner.py:
        (TestRunner.run_tests):
        (TestRunner.run_tests.generate_test_list_for_json_output):
        (TestRunner):
        (add_options):

2019-12-28  Commit Queue  <commit-queue@webkit.org>

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

        Seeing strange test results after this change (Requested by ap
        on #webkit).

        Reverted changeset:

        "Python 3: Add support to run-webkit-tests"
        https://bugs.webkit.org/show_bug.cgi?id=205291
        https://trac.webkit.org/changeset/253804

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

        [iOS] Layout tests sometimes throw an exception under checkForOutstandingCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=205612
        <rdar://problem/57789693>

        Reviewed by Tim Horton.

        On iOS, layout tests that synthesize HID events but end before WebKitTestRunnerApp finishes dequeueing and
        handling those events occasionally cause the next test to crash with an Objective-C exception under
        UIScriptControllerIOS::checkForOutstandingCallbacks. This happens when UIScriptContext is destroyed after a HID
        marker event is dispatched, but before that HID marker event has been handled. (For clarity, the HID marker
        event is a special vendor-defined event used by HIDEventGenerator to signify the end of a series of synthesized
        HID events that were previously dispatched to the application).

        This is typically fixed by ensuring that all iOS layout tests always wait for synthesized HID events to finish
        before ending the test (i.e. by calling `testRunner.notifyDone()`). However, some tests that fall into this
        category are imported: e.g. dom/events/document-level-touchmove-event-listener-passive-by-default.html in
        web-platform-tests/, which does not wait for the swipe gesture to finish before completing. This current causes
        us to dispatch the end of the gesture while the following test (dom/events/event-disabled-dynamic.html) begins.

        While I wasn't able to trivially reproduce the exception locally, it was consistently reproducible by forcing a
        50 ms `sleep` in -[HIDEventGenerator sendMarkerHIDEventWithCompletionBlock:], right before queueing the marker
        event. This suggests that the crash is timing-dependent, and just seems to occasionally reproduce more
        frequently in internal automation.

        This test seems to be passing reliably in other engines (e.g. Chrome and Edge), so instead of trying to fix the
        test to always wait for events to finish dispatching, we can address the issue by teaching WebKitTestRunner to
        simply wait for outgoing marker events to finish dispatching before proceeding with the next test, rather than
        crashing. This should not only fix the crash, but also address sporadic flakiness that may result from tests
        that handle synthetic HID events that were dispatched by the previous test.

        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::~UIScriptContext):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::waitForOutstandingCallbacks):
        (WTR::UIScriptController::checkForOutstandingCallbacks): Deleted.

        Rename checkForOutstandingCallbacks to waitForOutstandingCallbacks, and make it wait up to a second for the
        application to finish handling any outgoing marker HID event. In the event that the timeout is hit, we still
        throw an Objective-C exception to avoid beginning the next test in an unpredictable state.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator init]):

        Perform some minor cleanup here, by removing excess private category properties in HIDEventGenerator (including
        -debugTouchViews, which was unused); also, change _eventCallbacks into a `RetainPtr`, so that we don't need to
        worry about manually releasing it.

        (-[HIDEventGenerator dealloc]): Deleted.
        (-[HIDEventGenerator hasOutstandingCallbacks]):
        (-[HIDEventGenerator checkForOutstandingCallbacks]): Deleted.

        Rename -checkForOutstandingCallbacks to -hasOutstandingCallbacks, and flip the return result.

        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::waitForOutstandingCallbacks):
        (WTR::UIScriptControllerIOS::checkForOutstandingCallbacks): Deleted.

2019-12-28  Antti Koivisto  <antti@apple.com>

        Allow disabling internal and experimental features in run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=205614

        Reviewed by Tim Horton.

        Add an optional true/false parameter to --internal-feature/--experimental-feature options.
        This can be useful for isolating problems in features that are enabled by default. Example:

        --internal-feature LayoutFormattingContextIntegrationEnabled=false

        The [=true|false] syntax is the same as used in test headers.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * WebKitTestRunner/Options.cpp:
        (WTR::parseFeature):
        (WTR::handleOptionExperimentalFeature):
        (WTR::handleOptionInternalFeature):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::testOptionsForTest const):
        * WebKitTestRunner/TestController.h:

2019-12-25  Dean Jackson  <dino@apple.com>

        WKTR/DRT always trigger the Discrete GPU on dual GPU systems
        https://bugs.webkit.org/show_bug.cgi?id=205546
        <rdar://problem/58139610>

        Reviewed by Alexey Proskuryakov.

        Add an option "--prefer-integrated-gpu" to run-webkit-test
        that causes the LayoutTestHelper to NOT lock the
        machine to a discrete GPU on a dual-GPU system.
        The default is false.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (main):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.start_helper):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper):
        * Scripts/webkitpy/port/mock_drt.py:
        (MockDRTPort.start_helper):

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

        REGRESSION (r253282): Tests that use applyAutocorrection assert in UIScriptContext::requestUIScriptCompletion
        https://bugs.webkit.org/show_bug.cgi?id=205588
        <rdar://problem/58109942>

        Reviewed by Tim Horton.

        The change made in r253282 intended to defer completing the async task prepared in
        UIScriptController::applyAutocorrection until after the current runloop; however, it ended up keeping the
        synchronous call to asyncTaskComplete. Fix this by removing this code, so that we instead wait for the
        dispatch_async block to invoke asyncTaskComplete.

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

2019-12-24  Youenn Fablet  <youenn@apple.com>

        Deny Notification API access for non secure contexts
        https://bugs.webkit.org/show_bug.cgi?id=205496
        <rdar://problem/58074660>

        Reviewed by Chris Dumez.

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

2019-12-24  youenn fablet  <youenn@apple.com>

        Service Worker doesn't terminate after a period of time when thread blocking
        https://bugs.webkit.org/show_bug.cgi?id=202992
        <rdar://problem/56298596>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Enable small timeout values.

2019-12-23  Keith Miller  <keith_miller@apple.com>

        DFG/FTL should be able to exit to the middle of a bytecode
        https://bugs.webkit.org/show_bug.cgi?id=205232

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

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

        [GTK] InputMethod API unit tests don't work under X11
        https://bugs.webkit.org/show_bug.cgi?id=205497

        Reviewed by Žan Doberšek.

        Use a toplevel window instead of a popup for the input method tests, since that's required in X11 to get the web
        view focused.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (testWebKitInputMethodContextSimple):
        (testWebKitInputMethodContextSequence):
        (testWebKitInputMethodContextInvalidSequence):
        (testWebKitInputMethodContextCancelSequence):
        (testWebKitInputMethodContextReset):

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

        [GTK][WPE] Special combination characters doesn't respect the keystroke order when high CPU load
        https://bugs.webkit.org/show_bug.cgi?id=185248

        Reviewed by Žan Doberšek.

        Remove the waits() that were added to work around this bug.

        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:
        (testWebKitInputMethodContextSequence):
        (testWebKitInputMethodContextInvalidSequence):
        (testWebKitInputMethodContextCancelSequence):
        (testWebKitInputMethodContextReset):

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

        [JSC] Improve our bound function implementation
        https://bugs.webkit.org/show_bug.cgi?id=205327

        Reviewed by Keith Miller.

        Support running slow-microbenchmarks.

        * Scripts/run-jsc-benchmarks:

2019-12-21  Kate Cheney  <katherine_cheney@apple.com>

        Add timeStamp to ITP database
        https://bugs.webkit.org/show_bug.cgi?id=205121
        <rdar://problem/57633021>

        Reviewed by John Wilander.

        Added checks to test that the timestamp is properly exposed via API
        in the ITP database backend. This also adds an API test case using the
        ITP database store. It was previously only testing the ITP memory store.

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

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

        TextManipulationController should respect new token orders
        https://bugs.webkit.org/show_bug.cgi?id=205378

        Reviewed by Wenson Hsieh.

        Added a bunch of tests for WKTextManipulation.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TextManipulation.CompleteTextManipulationReplaceSimpleSingleParagraph):
        (TextManipulation.CompleteTextManipulationDisgardsTokens):
        (TextManipulation.CompleteTextManipulationReordersContent):
        (TextManipulation.CompleteTextManipulationCanSplitContent):
        (TextManipulation.CompleteTextManipulationCanMergeContent):
        (TextManipulation.CompleteTextManipulationFailWhenContentIsRemoved):
        (TextManipulation.CompleteTextManipulationFailWhenExcludedContentAppearsMoreThanOnce):
        (TextManipulation.CompleteTextManipulationPreservesExcludedContent):

2019-12-20  Megan Gardner  <megan_gardner@apple.com>

        Paint highlights specified in CSS Highlight API
        https://bugs.webkit.org/show_bug.cgi?id=205318

        Reviewed by Ryosuke Niwa.

        Expand MarkedText to take a style name.

        * TestWebKitAPI/Tests/WebCore/MarkedText.cpp:
        (WebCore::operator<<):

2019-12-20  Jonathan Bedard  <jbedard@apple.com>

        lldbwebkittester: Strip CLANG_DEBUG_INFORMATION_LEVEL option while building
        https://bugs.webkit.org/show_bug.cgi?id=205513

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (buildXCodeProject): Strip CLANG_DEBUG_INFORMATION_LEVEL from lldbWebKitTester.

2019-12-20  Simon Fraser  <simon.fraser@apple.com>

        Add a Custom User Agent menu to MiniBrowser, and related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=205507

        Reviewed by Wenson Hsieh.
        
        Add a User Agent" submenu to the Settings menu, and construct it with some built-in
        UA strings. When changed, it sets the customUserAgent on the WKWebView/WebView and
        triggers a reload.
        
        I also rearranged the menus so that "Settings" and "Debug" are no longer to the right
        of the "Help" menu, which means getting the Settings menu from the xib. It was then
        easier if SettingsController was no longer a singleton, but owned by AppDelegate.
        Added a category on NSApplication to make it easier to get to BrowserAppDelegate
        and thence to the SettingsController.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[NSApplication browserAppDelegate]):
        (-[BrowserAppDelegate awakeFromNib]):
        (-[BrowserAppDelegate defaultConfiguration]):
        (-[BrowserAppDelegate defaultPreferences]):
        (-[BrowserAppDelegate createBrowserWindowController:]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate newPrivateWindow:]):
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        (-[BrowserAppDelegate userContentContoller]):
        (defaultConfiguration): Deleted.
        (defaultPreferences): Deleted.
        * MiniBrowser/mac/ExtensionManagerWindowController.m:
        (-[ExtensionManagerWindowController init]):
        (-[ExtensionManagerWindowController add:]):
        (-[ExtensionManagerWindowController remove:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController initWithMenu:]):
        (-[SettingsController dealloc]):
        (-[SettingsController _populateMenu]):
        (+[SettingsController userAgentData]):
        (-[SettingsController buildUserAgentsMenu:]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController _toggleBooleanDefault:]):
        (-[SettingsController toggleExperimentalFeature:]):
        (-[SettingsController toggleInternalDebugFeature:]):
        (-[SettingsController customUserAgent]):
        (-[SettingsController changeCutomUserAgent:]):
        (+[SettingsController shared]): Deleted.
        (-[SettingsController init]): Deleted.
        (-[SettingsController menu]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        (-[WK1BrowserWindowController userAgentDidChange:]):
        (-[WK1BrowserWindowController windowWillClose:]):
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController initWithConfiguration:]):
        (-[WK2BrowserWindowController userAgentDidChange:]):
        (-[WK2BrowserWindowController windowWillClose:]):
        (-[WK2BrowserWindowController didChangeSettings]):

2019-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement coders for CTAP ClientPIN requests and responses
        https://bugs.webkit.org/show_bug.cgi?id=205376
        <rdar://problem/58034395>

        Reviewed by Brent Fulgham.

        Adds API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapPinTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:

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

        Python 3: Add support to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=205291

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.
        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool._loop): Move exception inside of loop.
        (_Message.__repr__): Use .format strings.
        (_Worker.__init__): Ditto.
        * Scripts/webkitpy/common/wavediff.py:
        (WaveDiff.__init__): Use Python 3 compatible BytesIO and StringIO.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder._read_test_names_from_file): Use .format string.
        (LayoutTestFinder.split_into_chunks): Explicitly use integer division.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._get_test_inputs): Use range over xrange.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._handle_error): Use .format strings.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator._insert_failure_summaries): Use Python 3 compatible itervalues.
        * Scripts/webkitpy/layout_tests/models/test_results.py:
        (TestResult.__init__): Sort type list.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.setUp): Multiple processes are buggy in test-webkitpy.
        (RunTest.test_basic): replace buflist with getvalue().
        (RunTest.test_child_processes_2): Ditto.
        (RunTest.test_child_processes_min): Ditto.
        (RunTest.test_keyboard_interrupt): Ditto.
        (RunTest.test_missing_and_unexpected_results): Compare dictionaries instead of json strings.
        (RunTest.test_crash_with_stderr): Ditto.
        (RunTest.test_reftest_should_not_use_naming_convention_if_not_listed_in_reftestlist): Ditto.
        (EndToEndTest.test_reftest_with_two_notrefs): Ditto.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Flush stream after writing.
        (MeteredStream._erase_last_partial_line): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer._print_directory_timings): Can't compare string to integer.
        (Printer._print_statistics_for_test_timings): Use integer division.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs): Use items over iteritems.
        * Scripts/webkitpy/port/device.py:
        (Device.__hash__): Allow hashing of devices.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._install): Use range over xrange.
        (DevicePort.setup_test_run): Ditto.
        (DevicePort.clean_up_test_run): Ditto.
        * Scripts/webkitpy/port/driver.py:
        (DriverOutput.__init__): Text should be decoded, audio encoded.
        (Driver.__init__):
        (Driver.run_test):
        (Driver._parse_child_processes_output): Output is byte array.
        (Driver._check_for_driver_timeout): Ditto.
        (Driver._check_for_address_sanitizer_violation): Error lines are byte arrays.
        (Driver._check_for_driver_crash_or_unresponsiveness): Ditto.
        (Driver._read_optional_image_block): If a block is base64 encoded, we want the decoded
        content, otherwise, we want the encoded content.
        (Driver._read_header): Lines are byte arrays, decode them before processing.
        (Driver._process_stdout_line): Blocks are byte arrays.
        (Driver._strip_eof): Lines should be byte arrays, not strings.
        (Driver._read_block): Standardize encoding in blocks.
        (ContentBlock.__init__): Content should be a byte array.
        (ContentBlock.decode_content): Attempt to decode content.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_read_binary_block): Content should be encoded.
        (DriverTest.test_read_base64_block): Ditto.
        (DriverTest.test_check_for_driver_crash): ServerProcess output should be a byte array.
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image): ImageDiff output is in byte arrays.
        (ImageDiffer._read): Ditto.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write): Encode data before writing it.
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.__init__): Convert string mock output to bytes.
        (MockServerProcess.read_stdout_line): Stdout lines are byte arrays.
        (MockServerProcess.read_stdout): Ditto.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.NonBlockingFileFromSocket.close): Don't double close socket in Python 3.
        (SimulatorProcess._start): Stdin should be a binary stream.
        * Scripts/webkitpy/port/test.py:
        (unit_test_list): Convert audio streams to byte arrays.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Decode xcrun output.
        (SimulatedDevice.install_app): Use xrange over range.

2019-12-19  Matt Lewis  <jlewis3@apple.com>

        Fixing Host name of gpu process bot
        https://bugs.webkit.org/show_bug.cgi?id=205469
        
        Reviewed by Jonathan Bedard.

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

2019-12-19  Antti Koivisto  <antti@apple.com>

        Allow Vectors as hash keys
        https://bugs.webkit.org/show_bug.cgi?id=205449

        Reviewed by Geoff Garen.

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

2019-12-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add initial API for input method
        https://bugs.webkit.org/show_bug.cgi?id=204679

        Reviewed by Žan Doberšek.

        Remove the old unit tests for InputMethodFilter and add new tests using the new API.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKit/gtk/InputMethodFilter.cpp: Removed.
        * TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp: Added.
        (webkitInputMethodContextMockFinalize):
        (webkitInputMethodContextMockGetPreedit):
        (webkitInputMethodContextMockFilterKeyEvent):
        (webkitInputMethodContextMockNotifyFocusIn):
        (webkitInputMethodContextMockNotifyFocusOut):
        (webkitInputMethodContextMockReset):
        (webkit_input_method_context_mock_class_init):
        (webkit_input_method_context_mock_init):
        (testWebKitInputMethodContextSimple):
        (testWebKitInputMethodContextSequence):
        (testWebKitInputMethodContextInvalidSequence):
        (testWebKitInputMethodContextCancelSequence):
        (testWebKitInputMethodContextReset):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::clickMouseButton):
        (WebViewTest::keyStroke):

2019-12-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Missing UIScriptController implementation
        https://bugs.webkit.org/show_bug.cgi?id=200295

        Reviewed by Žan Doberšek.

        Add initial implementation of UIScriptController for WPE.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/PlatformWPE.cmake:
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::addToWindow):
        (WTR::PlatformWebView::removeFromWindow):
        * WebKitTestRunner/wpe/UIScriptControllerWPE.cpp: Added.
        (WTR::UIScriptController::create):
        (WTR::UIScriptControllerWPE::doAsyncTask):
        (WTR::UIScriptControllerWPE::setContinuousSpellCheckingEnabled):
        (WTR::UIScriptControllerWPE::copyText):
        (WTR::UIScriptControllerWPE::dismissMenu):
        (WTR::UIScriptControllerWPE::isShowingMenu const):
        (WTR::UIScriptControllerWPE::activateAtPoint):
        (WTR::UIScriptControllerWPE::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptControllerWPE::removeViewFromWindow):
        (WTR::UIScriptControllerWPE::addViewToWindow):
        * WebKitTestRunner/wpe/UIScriptControllerWPE.h: Added.
        * wpe/backends/ViewBackend.h:

2019-12-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Mark /webkit/WebKitWebsiteData/configuration as flaky

        * TestWebKitAPI/glib/TestExpectations.json:

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

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

        "We think this may have caused a membuster regression, so
        rolling it out." (Requested by nham on #webkit).

        Reverted changeset:

        "Navigation from empty page doesn't use cached web process"
        https://bugs.webkit.org/show_bug.cgi?id=205015
        https://trac.webkit.org/changeset/253646

2019-12-18  Alex Christensen  <achristensen@webkit.org>

        Add SPI WKWebView._updateWebpagePreferences to replace _updateWebsitePolicies
        https://bugs.webkit.org/show_bug.cgi?id=205427

        Reviewed by Wenson Hsieh.

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

2019-12-18  Jonathan Bedard  <jbedard@apple.com>

        test-lldb-webkit: Run in CI (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=205315

        Unreviewed follow-up fix.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitPyTests.start): Call method of parent class to avoid infinite recursion.

2019-12-18  Alex Christensen  <achristensen@webkit.org>

        Add ObjC version of WKBundleFrameIsMainFrame
        https://bugs.webkit.org/show_bug.cgi?id=205415

        Reviewed by Brian Weinstein.

        * TestWebKitAPI/Tests/WebKitCocoa/UserContentWorld.mm:
        (-[UserContentWorldRemoteObject didObserveMainFrame]):
        (-[UserContentWorldRemoteObject didObserveSubframe]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentWorldPlugIn.mm:
        (-[UserContentWorldPlugIn webProcessPlugInBrowserContextController:globalObjectIsAvailableForFrame:inScriptWorld:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentWorldProtocol.h:

2019-12-18  Jonathan Bedard  <jbedard@apple.com>

        results.webkit.org: Serve files in uploaded archive
        https://bugs.webkit.org/show_bug.cgi?id=201654

        Reviewed by Stephanie Lewis.

        * resultsdbpy/resultsdbpy/controller/configuration.py:
        (Configuration.to_query): Conver a configuration object to a query string.
        * resultsdbpy/resultsdbpy/controller/configuration_unittest.py:
        (ConfigurationUnittest):
        (ConfigurationUnittest.test_to_query):
        * resultsdbpy/resultsdbpy/flask_support/util.py:
        (query_as_string): Convert the current query to a string.
        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext._files_for_archive): Python's shutil creates archives which
        don't have have a root directory.
        (ArchiveContext.file): We need to add query parameters to relative links
        In the returned file.
        * resultsdbpy/resultsdbpy/view/archive_view.py: Added.
        (ArchiveView):
        (ArchiveView.__init__):
        (ArchiveView.list): Return html which lists and links to the provided paths.
        (ArchiveView.extract): Endpoint which extracts a file from an archive matching
        the provided arguments.
        * resultsdbpy/resultsdbpy/view/archive_view_unittest.py: Added.
        (ArchiveViewUnittest):
        (ArchiveViewUnittest.register_archive):
        (ArchiveViewUnittest.test_directory):
        (ArchiveViewUnittest.test_file):
        * resultsdbpy/resultsdbpy/view/templates/archive_list.html: Added.
        * resultsdbpy/resultsdbpy/view/view_routes.py:
        (ViewRoutes.__init__): Add archive endpoints.

2019-12-18  Matt Lewis  <jlewis3@apple.com>

        Update WebGL bot hostname
        https://bugs.webkit.org/show_bug.cgi?id=205349

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Changed hostname 
        to bring it in line with non standard testers.

2019-12-18  Jonathan Bedard  <jbedard@apple.com>

        GPU-Process: Bring up automated tester 
        https://bugs.webkit.org/show_bug.cgi?id=205229

        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add GPU Process tester,
        derived from debug testing queue.

2019-12-18  Kate Cheney  <katherine_cheney@apple.com>

        Only report prevalent domains in the ResourceLoadStatistics data summary API
        https://bugs.webkit.org/show_bug.cgi?id=205281
        <rdar://problem/57975017>

        Reviewed by Brent Fulgham.

        Update the GetResourceLoadStatisticsDataSummary to set third parties
        as prevalent to maintain test functionality.

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

2019-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Update expectations of unit tests

        Add two flaky failures and mark /jsc/vm as slow alos in release builds.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        run-javascriptcore-tests: Fix upload details
        https://bugs.webkit.org/show_bug.cgi?id=205347

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/run-javascriptcore-tests:
        (uploadResults): Make upload details compliant with results database.

2019-12-17  Ben Nham  <nham@apple.com>

        Navigation from empty page doesn't use cached web process
        https://bugs.webkit.org/show_bug.cgi?id=205015
        <rdar://problem/57703742>

        Reviewed by Chris Dumez.

        When navigating from an empty page to another domain foo.com, we always use the source
        WebProcess (which is basically uninitialized) rather than using an already-initialized
        cached WebProcess that has navigated to foo.com. The cached WebProcess should probably be
        preferred since it has more relevant cached resources available to it (e.g. memory cache, JS
        bytecode cache, prewarmed fonts, ...).

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Verify that a load from an empty document uses the process cache. To actually force the
        WebProcess to launch with an empty document loaded, we use the private API
        _ensureRunningProcessForTesting.

2019-12-17  Megan Gardner  <megan_gardner@apple.com>

        Update Check webkit style to allow for auto with pairs in c++
        https://bugs.webkit.org/show_bug.cgi?id=205320

        Reviewed by Jonathan Bedard.

        Allow for spaces between auto and brakets when using auto with pairs.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):

2019-12-17  youenn fablet  <youenn@apple.com>

        WebKitTestRunner should report GPU process crashes
        https://bugs.webkit.org/show_bug.cgi?id=205338

        Reviewed by Tim Horton.

        Report GPU process crashes.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::gpuProcessDidCrash):
        * WebKitTestRunner/TestController.h:

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Mark WebKit.FocusedFrameAfterCrash as timeout

        * TestWebKitAPI/glib/TestExpectations.json:

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Mark several tests that usually time out in the bots as slow

        It seems it depends on the load of the bots. Some of them still time out sometimes even after being marked as
        slow, so also mark them all as flaky.

        * TestWebKitAPI/glib/TestExpectations.json:

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Mark /webkit/WebKitWebExtension/form-submission-steps as timeout

        * TestWebKitAPI/glib/TestExpectations.json:

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK gardening. Fix test /webkit/WebKitPrintOperation/close-after-print

        Use webkit_web_view_new_with_related_view() instead of webkit_web_view_new_with_context() since it's expected
        that web views created in WebKitWebView::create signal callback are related. Also use g_object_unref() instead
        of gtk_widget_destroy() to release the created web view since it's never added to a window.

        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:

2019-12-17  youenn fablet  <youenn@apple.com>

        WebKitTestRunner should report service worker process crashes
        https://bugs.webkit.org/show_bug.cgi?id=205267

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::serviceWorkerProcessDidCrash):
        * WebKitTestRunner/TestController.h:

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. WebDriver: set doc_root in WebDriverW3CExecutor server config

        It's expected by test imported/w3c/webdriver/tests/navigate_to/navigate.py::test_file_protocol

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__):

2019-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        check-webkit-style: allow underscores for public symbols in JSC GLIB API
        https://bugs.webkit.org/show_bug.cgi?id=205265

        Reviewed by Jonathan Bedard.

        Add an exception for symbols starting with jsc_ in glib directories.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

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

        test-lldb-webkit: Run in CI
        https://bugs.webkit.org/show_bug.cgi?id=205315

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (TestFactory.__init__): Add RunLLDBWebKitTests to Mac test runs.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunPythonTests): Generalized step for all Python tests.
        (RunPythonTests.start):
        (RunWebKitPyTests): Step for running test-webkitpy.
        (RunWebKitPyTests.__init__):
        (RunWebKitPyTests.start):
        (RunLLDBWebKitTests): Step for running test-lldb-webkit.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

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

        -[UIWKDocumentContext markedTextRange] is wrong when the caret is not at the start of marked text
        https://bugs.webkit.org/show_bug.cgi?id=205302

        Reviewed by Tim Horton.

        Add an API test to exercise the case where the options `UIWKDocumentRequestMarkedTextRects` and
        `UIWKDocumentRequestText` are used to grab marked text rects.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[UIWKDocumentContext contextBeforeLength]):
        (-[UIWKDocumentContext markedTextLength]):
        (-[UIWKDocumentContext markedTextRange]):

        Work around a bug that should be fixed by <rdar://problem/57338528>, so that the new API test can pass on
        shipping builds of iOS.

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

        Unreviewed follow-up fix.
        <rdar://problem/57989146> jsc-ta-payload fails consistently on YukonE Device Builds

        Bug caused by <rdar://problem/57453545> [safari-root] CrashTracer: [USER] jsc at jsc: jscmain

        run-jsc-stress-tests still looked for jsc in
        JavaScriptCore.framework/Resources. Change this to also look in
        JavaScriptCore.framework/Helpers.

        * Scripts/run-jsc-stress-tests:

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

        results.webkit.org: Make default limit 1000
        https://bugs.webkit.org/show_bug.cgi?id=205305

        Reviewed by Stephanie Lewis.

        We have ~200 commits a week in WebKit, since we don't quite report
        results for every commit, a limit of 1000 translates to about a 1.5 months
        of data. Any more than this and the network request for results becomes
        noticeably slow.

        * resultsdbpy/resultsdbpy/controller/failure_controller.py:
        (FailureController): Change default limit from 5000 to 1000.
        * resultsdbpy/resultsdbpy/controller/suite_controller.py:
        (SuiteController): Change default limit from 5000 to 1000.
        * resultsdbpy/resultsdbpy/controller/test_controller.py:
        (TestController): Change default limit from 5000 to 1000.

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

        python3: wpt exporter should parse a patch as bytes
        https://bugs.webkit.org/show_bug.cgi?id=205243

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        (MockSCM.create_patch): Patches are byte arrays.
        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter._wpt_patch): Diff should be byte array.
        (WebPlatformTestExporter._find_filename): Ditto.
        (WebPlatformTestExporter._is_ignored_file): Filenames will be encoded bytes.
        (WebPlatformTestExporter._strip_ignored_files_from_diff): Diff should be byte array.
        (WebPlatformTestExporter.write_git_patch_file): Ditto.
        * Scripts/webkitpy/w3c/test_exporter_unittest.py:
        (TestExporterTest.MockGit): Diff should be byte array.
        (TestExporterTest.test_ignore_changes_to_expected_file): Ditto.

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

        TextManipulationController should observe newly inserted or displayed contents
        https://bugs.webkit.org/show_bug.cgi?id=205203
        <rdar://problem/56567020>

        Reviewed by Wenson Hsieh.

        Added tests for detecting newly inserted or displayed contents in WKTextManipulation SPI.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (-[TextManipulationDelegate initWithItemCallback]):
        (-[TextManipulationDelegate _webView:didFindTextManipulationItem:]):
        (TestWebKitAPI::TEST):

2019-12-16  Daniel Bates  <dabates@apple.com>

        Organize DocumentEditingContext.mm under a more descriptive suite
        https://bugs.webkit.org/show_bug.cgi?id=205284

        Reviewed by Tim Horton.

        Register with the runtime all of the DocumentEditingContext.mm tests under the suite
        DocumentEditingContext as opposed to the suite WebKit (as they are now). This makes
        it easy to run all of these tests using:

                run-api-tests DocumentEditingContext

        This is more useful than letting them stay categorized under the WebKit suite. If it
        turns out this change interferes with the workflow of others then we can revert this
        change and look to expose Google Test's regex filtering in run-api-tests to achieve
        a similiar result given that these tests have the same prefix.

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

2019-12-16  Daniel Bates  <dabates@apple.com>

        Use Ahem font to ensure consistent test results
        https://bugs.webkit.org/show_bug.cgi?id=205283

        Reviewed by Wenson Hsieh.

        To avoid test failures due to future font metrics changes make use of the Ahem font
        for the tests in DocumentEditingContext.m. Ahem is a font with well-defined properties
        that when used correclty ensures consistent font rendering results.

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

2019-12-16  Daniel Bates  <dabates@apple.com>

        Reproducible case of backwards nextParagraph returning a position ahead of the input position
        https://bugs.webkit.org/show_bug.cgi?id=196127
        <rdar://problem/49135890>

        Reviewed by Wenson Hsieh.

        Add a test to ensure that requesting two paragraphs around the insertion point that is
        not in a paragraph still works.

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

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

        lldbwebkittester: Conform with testing binary format
        https://bugs.webkit.org/show_bug.cgi?id=205271

        Reviewed by Alexey Proskuryakov.

        lldbwebkittester should be built the same way ImageDiff, TestWebKitAPI and WebKitTestRunner are.
        This also paves the way for adding lldb tests against WebCore and WebKit, since lldbwebkittestrunner
        is now packaged with the rest of WebKit's testing binaries.

        * Scripts/build-lldbwebkittester:
        * Scripts/build-webkit:

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

        [JSC] Remove ArrayBufferNeuteringWatchpointSet
        https://bugs.webkit.org/show_bug.cgi?id=205194

        Reviewed by Saam Barati.

        Add tests for PackedRef and PackedRefPtr.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/PackedRef.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::passWithRef):
        (TestWebKitAPI::PackedRefCheckingRefLogger::PackedRefCheckingRefLogger):
        (TestWebKitAPI::PackedRefCheckingRefLogger::ref):
        (TestWebKitAPI::PackedRefCheckingRefLogger::deref):
        (TestWebKitAPI::DerivedPackedRefCheckingRefLogger::DerivedPackedRefCheckingRefLogger):
        * TestWebKitAPI/Tests/WTF/PackedRefPtr.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::f1):
        (TestWebKitAPI::ConstRefCounted::create):
        (TestWebKitAPI::returnConstRefCountedRef):
        (TestWebKitAPI::returnRefCountedRef):
        (TestWebKitAPI::PackedRefPtrCheckingRefLogger::PackedRefPtrCheckingRefLogger):
        (TestWebKitAPI::loggerName):
        (TestWebKitAPI::PackedRefPtrCheckingRefLogger::ref):
        (TestWebKitAPI::PackedRefPtrCheckingRefLogger::deref):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::f1):
        (TestWebKitAPI::returnConstRefCountedRef):
        (TestWebKitAPI::returnRefCountedRef):

2019-12-16  Keith Miller  <keith_miller@apple.com>

        Fix btjs on current lldb
        https://bugs.webkit.org/show_bug.cgi?id=205293

        Reviewed by Mark Lam.

        * lldb/lldb_webkit.py:
        (btjs):

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

        Isolated object implementation of parameterized attribute SelectTextWithCriteria.
        https://bugs.webkit.org/show_bug.cgi?id=205210

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement): Always run in my thread.
        (WTR::AccessibilityController::execute): Dispatches to the secondary thread. Spins the main loop to allow parameterized attributes methods to execute in main thread.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::findAccessibleObjectById):
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

2019-12-16  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix for tvOS after r253440.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:

2019-12-16  youenn fablet  <youenn@apple.com>

        Consider top-level context whose origin is unique as insecure
        https://bugs.webkit.org/show_bug.cgi?id=205111
        <rdar://problem/57834967>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (TEST):
        Disable secure context checks so that loading directly about:blank from the API test
        can call DeviceOrientationEvent.requestPermission() successfully.

2019-12-16  Daniel Bates  <dabates@apple.com>

        -requestDocumentContext always returns 1 text unit more granularity than requested
        https://bugs.webkit.org/show_bug.cgi?id=205142
        <rdar://problem/57858236>

        Reviewed by Darin Adler and Wenson Hsieh.

        Add tests for requesting text by character, sentence, paragraph, and line granularities.
        Also organized tests, demarcating sections of related tests, and renaming the existing
        word granularity tests for consistency.

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

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

        Unreviewed GTK gardening. Mark /webkit/WebKitWebView/pointer-lock-permission-request as timeout

        * TestWebKitAPI/glib/TestExpectations.json:

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

        Unreviewed. Fix GLib test /webkit/WebKitWebView/geolocation-permission-requests after r249207

        PERMISSION_DENIED is returned for non-secure contexts instead of POSITION_UNAVAILABLE since r249207.

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

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

        Unreviewed. Fix GLib test /jsc/options after r253244.

        The default value of smallHeapRAMFraction option changed in r253244. The test just wants to check a float jsc
        option, so use criticalGCMemoryThreshold instead that has a fixed default value.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testsJSCOptions):

2019-12-16  youenn fablet  <youenn@apple.com>

        Reset cached getUserMedia queries when calling stopMediaCapture
        https://bugs.webkit.org/show_bug.cgi?id=205064

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (-[GetUserMediaCaptureUIDelegate _webView:requestMediaCaptureAuthorization:decisionHandler:]):
        (TestWebKitAPI::TEST):

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

        -[WKWebView _detectDataWithTypes:completionHandler:] crashes when there is no running process
        https://bugs.webkit.org/show_bug.cgi?id=205254

        Reviewed by Tim Horton.

        Add a test to verify that we don't crash when calling data detection API's immediately after crashing the web
        content process.

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:

2019-12-15  Emilio Cobos Álvarez  <emilio@crisal.io>

        [GTK] jhbuild fails to configure if gettext 0.20 is installed
        https://bugs.webkit.org/show_bug.cgi?id=205249

        Reviewed by Michael Catanzaro.

        Update jhbuild.

        * jhbuild/jhbuild-wrapper:

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

        Unreviewed, fix the macCatalyst build after r253486

        Replace the #elif with an #else, so that the codepath is compiled on non-iOS (but iOS-family) platforms such as
        watchOS and macCatalyst.

        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:
        (readMarkupFromPasteboard):

2019-12-13  Peng Liu  <peng.liu6@apple.com>

        Add an option to run_webkit_tests.py to enable all GPU process related features and choose the additional expectations
        https://bugs.webkit.org/show_bug.cgi?id=205214

        The option also specifies the result-report-flavor.

        Reviewed by Tim Horton.

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

2019-12-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        Unreviewed. Add myself as a committer.

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

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

        Allow cross-origin requests to WKURLSchemeHandlers
        https://bugs.webkit.org/show_bug.cgi?id=205198
        <rdar://problem/57897836>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        Verify that a cross origin request is received by the WKURLSchemeHandler.  It was not before.
        Verify that loading will fail unless there are CORS headers in the response.

2019-12-13  Devin Rousso  <drousso@apple.com>

        Teach prepare-ChangeLog about JavaScript async functions
        https://bugs.webkit.org/show_bug.cgi?id=205195

        Reviewed by Jonathan Bedard.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_javascript):

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests.js:
        (AsyncFuncClass): Added.
        (AsyncFuncClass.async staticAsync): Added.
        (AsyncFuncClass.prototype.async methodAsync): Added.
        (AsyncFuncClass.prototype.async get getAsync): Added.
        (AsyncFuncClass.prototype.async set setAsync): Added.
        (async asyncFunc1): Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/javascript_unittests-expected.txt:

2019-12-13  John Wilander  <wilander@apple.com>

        IsLoggedIn: Abstract data type for IsLoggedIn state
        https://bugs.webkit.org/show_bug.cgi?id=205041
        <rdar://problem/56723904>

        Reviewed by Chris Dumez.

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

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

        [Clipboard API] Sanitize HTML and image data written using clipboard.write
        https://bugs.webkit.org/show_bug.cgi?id=205188
        <rdar://problem/57612968>

        Reviewed by Darin Adler.

        Adds an API test to verify that the markup written to the platform pasteboard on macOS and iOS is sanitized, and
        does not contain hidden content, such as script elements.

        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:
        (-[TestWKWebView writeString:toClipboardWithType:]):
        (readMarkupFromPasteboard):
        * TestWebKitAPI/Tests/WebKitCocoa/clipboard.html:

2019-12-13  Kate Cheney  <katherine_cheney@apple.com>

        Create WebKit API calls for ITP Data
        https://bugs.webkit.org/show_bug.cgi?id=204932
        <rdar://problem/57632753>

        Reviewed by Alex Christensen. 

        Added a test to check that the ITP data summary was being properly
        aggregated and sent to the UIProcess, and to make sure the API works
        as expected. Added interface declarations to the file to allow for
        use of the _WKResourceLoadStatisticsFirstParty and
        _WKResourceLoadStatisticsThirdParty classes without having
        to import the header files.

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

2019-12-13  Devin Rousso  <drousso@apple.com>

        Prefix CSS selectors with all applicable CSS groupings when generating a ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=205196

        Reviewed by Jonathan Bedard.

        * Scripts/prepare-ChangeLog:
        (get_selector_line_ranges_for_css):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/css_unittests-expected.txt:

2019-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Several tests crashing after r247898 "Reorganize UIScriptController into platform-specific subclasses"
        https://bugs.webkit.org/show_bug.cgi?id=200534

        Reviewed by Alejandro G. Castro.

        Add implementation of several UIScriptController virtual methods to avoid crashes.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::addToWindow):
        (WTR::PlatformWebView::removeFromWindow):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.cpp:
        (WTR::UIScriptControllerGtk::doAsyncTask):
        (WTR::UIScriptControllerGtk::setContinuousSpellCheckingEnabled):
        (WTR::UIScriptControllerGtk::copyText):
        (WTR::UIScriptControllerGtk::dismissMenu):
        (WTR::UIScriptControllerGtk::isShowingMenu const):
        (WTR::UIScriptControllerGtk::activateAtPoint):
        (WTR::UIScriptControllerGtk::activateDataListSuggestion):
        (WTR::UIScriptControllerGtk::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptControllerGtk::removeViewFromWindow):
        (WTR::UIScriptControllerGtk::addViewToWindow):
        * WebKitTestRunner/gtk/UIScriptControllerGtk.h:

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

        Move WKWebView code related to testing to new files, with new private "for testing" headers.
        https://bugs.webkit.org/show_bug.cgi?id=205021

        Reviewed by Tim Horton.
        
        Move testing-only SPI to new private headers to discourage first parties from using
        them by mistake. Move test-only code to new files to reduce the size of WKWebView.mm.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        * TestWebKitAPI/EditingTestHarness.mm:
        * TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoubleDefersLoading.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SnapshotStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCandidateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFirstResponderTests.mm:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:

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

        Python 3: Support serial webkitpy.common tests
        https://bugs.webkit.org/show_bug.cgi?id=205162

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids): Processess are encoded as bytes.
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_run_in_parallel): Use Python 3 compatible print statements.

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

        webkit-patch print-expectations fails to format TestExpectationLine with DumpJSConsoleLogInStdErr
        https://bugs.webkit.org/show_bug.cgi?id=194283

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser): Add DumpJSConsoleLogInStdErr to TestExpectationParser._expectation_tokens.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        Added a tokenize test and round tip test for DumpJSConsoleLogInStdErr.

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

        Don't assert in HTTPServer::respondToRequests when connections fail
        https://bugs.webkit.org/show_bug.cgi?id=205072
        <rdar://problem/57718266>

        Reviewed by Alexey Proskuryakov.

        We have records that this assertion is being hit, but it's probably when things are being torn down after the test passes.
        If someone actually has a connection failure that breaks a test, we'll notice elsewhere.

        * TestWebKitAPI/cocoa/HTTPServer.mm:
        (TestWebKitAPI::HTTPServer::respondToRequests):

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

        [iOS] Deny mach lookup access to content filter service in the WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=205077

        Reviewed by Brent Fulgham.

        With this patch, the WebContentAnalysis framework will not be loaded in the WebContent process unless
        [WebFilterEvaluator isManagedSession] returns YES. Swizzle this method to return YES in the UI process.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (isManagedSession):
        (TEST):

2019-12-12  Patrick Griffis  <pgriffis@igalia.com>

        [SOUP] Use new API for strict secure cookies
        https://bugs.webkit.org/show_bug.cgi?id=169356

        Reviewed by Michael Catanzaro.

        Update libsoup to fix a secure cookie test

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

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

        Python 3: Support serial ServerProcess tests
        https://bugs.webkit.org/show_bug.cgi?id=205146

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write): Flush stdin after writing to it.
        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess): print to stderr in Python 2/3 compatible way.
        (TestServerProcess.serial_test_basic): ServerProcess speaks in bytes.
        (TestServerProcess.serial_test_read_after_process_exits): Ditto.
        (TestServerProcess.serial_test_process_crashing): Ditto.
        (TestServerProcess.serial_test_process_crashing_no_data): Ditto.

2019-12-11  Daniel Bates  <dabates@apple.com>

        UIWKDocumentContext returns 0 character rects when caret is at beginning or end of text
        https://bugs.webkit.org/show_bug.cgi?id=205135
        <rdar://problem/56887914>

        Reviewed by Wenson Hsieh.

        Add tests that request rects when the insertion point is at the beginning or end of the text.

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

2019-12-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Combine AuthenticatorResponse and PublicKeyCredentialData
        https://bugs.webkit.org/show_bug.cgi?id=190783
        <rdar://problem/57781183>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        Updates tests accordingly.

2019-12-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r253376.

        Broke internal builds

        Reverted changeset:

        "Move WKWebView code related to testing to new files, with
        their own headers, and stop exposing test-only functions as
        SPI."
        https://bugs.webkit.org/show_bug.cgi?id=205021
        https://trac.webkit.org/changeset/253376

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

        Python 3: Add support in webkitpy.performance_tests
        https://bugs.webkit.org/show_bug.cgi?id=205122

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.performance_tests.
        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.run): Use range over xrange.
        (PerfTest.log_statistics): Python 3 may use more precision than Python 2.
        (PerfTest._run_with_driver): Convert list to map.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest._assert_results_are_correct): Convert map to list.
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest._test_run_with_json_output): Use range over xrange, convert keys to list.
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_collect_tests_with_multile_files): Use assertEqual over assertItemsEqual.
        (MainTest.test_collect_tests_with_skipped_list): Ditto.
        (MainTest.test_collect_tests_with_skipped_list_and_files): Ditto.
        (MainTest.test_collect_tests_with_ignored_skipped_list): Ditto.

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

        Python 3: Add support in webkitpy.w3c
        https://bugs.webkit.org/show_bug.cgi?id=205118

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.w3c.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.open_binary_file_for_reading): Missing file should cause Filesystem exception.
        (MockFileSystem.read_binary_file): Ditto.
        (MockFileSystem.open_text_file_for_reading): Ditto.
        (MockFileSystem.remove): Ditto.
        * Scripts/webkitpy/w3c/test_converter.py:
        (convert_for_webkit): Convert binary file to text file.
        (_W3CTestConverter.read_webkit_prefixed_css_property_list): Use items over iteritems.
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (verify_test_harness_paths): Use Python 3 compatible type check.
        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._init_paths_from_expectations): Use items over iteritems.
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.readEnvironmentsForTemplateTest): Convert filter to list.
        * Scripts/webkitpy/w3c/wpt_github.py:
        (WPTGitHub.auth_token): Encode base64 input and decode base64 output.
        * Scripts/webkitpy/w3c/wpt_github_unittest.py:
        (WPTGitHubTest.test_auth_token):

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

        Move WKWebView code related to testing to new files, with their own headers, and stop exposing test-only functions as SPI.
        https://bugs.webkit.org/show_bug.cgi?id=205021

        Reviewed by Tim Horton.

        Stop exposing WKWebView (WKTesting) as SPI, because everyone added SPI here by mistake, and
        internal clients kept using testing SPI.
        
        Instead, move testing-only functions to internal headers that are not present in the built framework,
        and move to WKWebView (WKPrivate) properties and functions that webkit clients rely on.
        
        Add WKWebViewTesting/WKWebViewTestingMac/WKWebViewTestingIOS for test-only code.
        
        WKWebViewTesting* headers are copied to a "WebKitTestSupport" directory in the Products directory, and WTR/DRT and TestWebKitAPI
        get header search paths to find the headers there.

        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/EditingTestHarness.mm:
        * TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoubleDefersLoading.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SnapshotStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCandidateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFirstResponderTests.mm:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:

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

        Add test-lldb-webkit
        https://bugs.webkit.org/show_bug.cgi?id=187916

        Reviewed by Stephanie Lewis.

        * Scripts/test-lldb-webkit: Added.
        (NoAction): Argparse action which support --<variable> and --no-<variable>.
        (LldbTester): Wrapper around webkitpy's Tester class.
        (LldbTester.parse_args): Specialized argparse for lldb tests.
        (LldbTester.run): Setup environment and build lldb test runner.
        (main):
        * Scripts/webkitpy/test/main.py:
        (main): Remove lldb testing code.
        (Tester._parse_args): Ditto.
        (Tester.run): Ditto.
        (Tester._run_tests): Ditto.
        (Tester._test_names): Ditto.
        (_supports_building_and_running_lldb_tests): Deleted.

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

        Fix API test failure after r253351
        https://bugs.webkit.org/show_bug.cgi?id=205089

        Reviewed by Brent Fulgham.

        With the patch landed in r253351, the NetworkExtension framework will not be loaded in the WebContent process unless
        [NEFilterSource filterRequired] returns YES. Swizzle this method to return YES in the UI process.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (filterRequired):
        (TEST):

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

        Gyroscope (DeviceMotion related) permission cannot be requested in WKWebView unless the client app sets a WKUIDelegate
        https://bugs.webkit.org/show_bug.cgi?id=203287

        Reviewed by Alex Christensen.

        Add layout test coverage.

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

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

        Mark some WPT test folders as DumpJSConsoleLogInStdErr
        https://bugs.webkit.org/show_bug.cgi?id=204793

        Reviewed by Eric Carlson.

        Make DTR and WTR set the default DumpJSConsoleLogInStdErr to true for some WPT sub-folders.
        This is easier done there instead of TestExpectations as TestExpectations can be overriden in more specific expectations. 

        * DumpRenderTree/TestOptions.cpp:
        (pathContains):
        (shouldDumpJSConsoleLogInStdErr):
        (TestOptions::TestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::shouldDumpJSConsoleLogInStdErr):
        (WTR::TestOptions::TestOptions):

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

        Disable video capture in UIProcess for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=205054

        Reviewed by Eric Carlson.

        * WebKitTestRunner/TestOptions.h:
        Some tests are still flaky as noted in bug 205053 and this option is still experimental.

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

        test-webkitpy: Remove --<configuration> flags from CI
        https://bugs.webkit.org/show_bug.cgi?id=205016

        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunPythonTests): Remove --debug/--release flags to test-webkitpy.

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

        Re-disable TLS1.0 and TLS1.1 by default
        https://bugs.webkit.org/show_bug.cgi?id=204922
        <rdar://problem/57677752>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::respondWithOK):
        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::getWebSocketEventWebKitLegacy):

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

        Add an option to capture audio in GPU process
        https://bugs.webkit.org/show_bug.cgi?id=205007

        Reviewed by Eric Carlson.

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

2019-12-08  Tim Horton  <timothy_horton@apple.com>

        REGRESSION: Crash under UIScriptControllerIOS::simulateAccessibilitySettingsChangeNotification
        https://bugs.webkit.org/show_bug.cgi?id=205002

        Reviewed by Wenson Hsieh.

        Keep a strong reference to the UIScriptController while running async tasks.
        UIScriptContext will be nulled out if the view was torn down, but this way
        we keep the UIScriptController itself and can find the null UIScriptContext
        reliably.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::doAsyncTask):
        (WTR::UIScriptControllerIOS::zoomToScale):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::doAsyncTask):
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        (WTR::UIScriptControllerMac::removeViewFromWindow):
        (WTR::UIScriptControllerMac::addViewToWindow):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::doAfterPresentationUpdate):
        (WTR::UIScriptControllerIOS::doAfterNextStablePresentationUpdate):
        (WTR::UIScriptControllerIOS::ensurePositionInformationIsUpToDateAt):
        (WTR::UIScriptControllerIOS::doAfterVisibleContentRectUpdate):
        (WTR::UIScriptControllerIOS::zoomToScale):
        (WTR::UIScriptControllerIOS::retrieveSpeakSelectionContent):
        (WTR::UIScriptControllerIOS::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptControllerIOS::touchDownAtPoint):
        (WTR::UIScriptControllerIOS::liftUpAtPoint):
        (WTR::UIScriptControllerIOS::twoFingerSingleTapAtPoint):
        (WTR::UIScriptControllerIOS::doubleTapAtPoint):
        (WTR::UIScriptControllerIOS::stylusDownAtPoint):
        (WTR::UIScriptControllerIOS::stylusMoveToPoint):
        (WTR::UIScriptControllerIOS::stylusUpAtPoint):
        (WTR::UIScriptControllerIOS::stylusTapAtPointWithModifiers):
        (WTR::UIScriptControllerIOS::dragFromPointToPoint):
        (WTR::UIScriptControllerIOS::longPressAtPoint):
        (WTR::UIScriptControllerIOS::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptControllerIOS::dismissFilePicker):
        (WTR::UIScriptControllerIOS::applyAutocorrection):
        (WTR::UIScriptControllerIOS::simulateRotation):
        (WTR::UIScriptControllerIOS::simulateRotationLikeSafari):
        (WTR::UIScriptControllerIOS::setDidStartFormControlInteractionCallback):
        (WTR::UIScriptControllerIOS::setDidEndFormControlInteractionCallback):
        (WTR::UIScriptControllerIOS::setDidShowContextMenuCallback):
        (WTR::UIScriptControllerIOS::setDidDismissContextMenuCallback):
        (WTR::UIScriptControllerIOS::setWillBeginZoomingCallback):
        (WTR::UIScriptControllerIOS::setDidEndZoomingCallback):
        (WTR::UIScriptControllerIOS::setDidShowKeyboardCallback):
        (WTR::UIScriptControllerIOS::setDidHideKeyboardCallback):
        (WTR::UIScriptControllerIOS::setWillPresentPopoverCallback):
        (WTR::UIScriptControllerIOS::setDidDismissPopoverCallback):
        (WTR::UIScriptControllerIOS::setDidEndScrollingCallback):
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):
        (WTR::UIScriptControllerIOS::doAfterDoubleTapDelay):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::zoomToScale):
        (WTR::UIScriptControllerMac::simulateAccessibilitySettingsChangeNotification):
        (WTR::UIScriptControllerMac::chooseMenuAction):
        (WTR::UIScriptControllerMac::activateAtPoint):

2019-12-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Make ColorSpace an enum class
        https://bugs.webkit.org/show_bug.cgi?id=204970

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/ExtendedColor.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::makeColor):

2019-12-06  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.tool (Follow-up, part 2)
        https://bugs.webkit.org/show_bug.cgi?id=204838

        Unreviewed follow-up fix.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:

2019-12-06  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.tool (Follow-up, part 1)
        https://bugs.webkit.org/show_bug.cgi?id=204838

        Reviewed by Stephanie Lewis.

        As I've been using webkit-patch with Python 3, I've encountered a handful of other
        compatibility bugs.

        * Scripts/webkit-patch:
        (ForgivingUTF8Writer): Only apple the ForgivingUTF8Writer when our string type isn't unicode.
        (ForgivingUTF8Writer.write): Use standardized decoding functions.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.authenticate): Use byte regex.
        * Scripts/webkitpy/tool/steps/editchangelog.py:
        (EditChangeLog.run): Convert map to list.

2019-12-06  Jonathan Bedard  <jbedard@apple.com>

        Python 3: Add support in webkitpy.test
        https://bugs.webkit.org/show_bug.cgi?id=204952

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.tool.
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py: Use Python 2/3
        compatible StringIO objects.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Ditto.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py: Ditto.
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py: Ditto.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py: Ditto.
        * Scripts/webkitpy/test/finder.py:
        (Finder._exclude): Convert filter to list.
        * Scripts/webkitpy/test/main.py:
        (Tester._log_exception): Use Python 2/3 compatible StringIO object.
        (_Loader.getTestCaseNames): Convert filter to list.
        * Scripts/webkitpy/test/main_unittest.py:
        (TesterTest.test_no_tests_found): Use Python 2/3 compatible StringIO.
        (TesterTest.test_integration_tests_are_found): Sort serial tests before comparing.
        * Scripts/webkitpy/test/printer.py: Use Python 2/3 compatible StringIO.
        * Scripts/webkitpy/test/runner_unittest.py: Ditto.
        * Scripts/webkitpy/test/skip.py:
        (_skipped_method._skip): Fix class inspection on instance method.
        * Scripts/webkitpy/test/skip_unittest.py: Use Python 2/3 compatible StringIO.
        * Scripts/webkitpy/w3c/test_converter.py: Use Python 2/3 compatible HTMLParser.
        * Scripts/webkitpy/w3c/wpt_runner.py:
        (main): Fix Python 3 syntax errors.
        * lldb/dump_class_layout_unittest.py:
        (TestDumpClassLayout.setUpClass): Fix Python 3 syntax errors.

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

        Python 3: Add support to webkitpy.browserperfdash
        https://bugs.webkit.org/show_bug.cgi?id=204887

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.browserperfdash.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: Remove urlparse dependency.
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py: Use explicit import.
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner._run_one_test): Use Python 2/3 compatible urljoin.

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

        Fix a Typo in IndexedDBInPageCache.html
        https://bugs.webkit.org/show_bug.cgi?id=204897

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBInPageCache.html:

2019-12-05  youenn fablet  <youenn@apple.com>

        inspector/page/overrideSetting-MockCaptureDevicesEnabled.html is failing after removal of internals.setMockMediaCaptureDevicesEnabled API
        https://bugs.webkit.org/show_bug.cgi?id=204849

        Reviewed by Eric Carlson.

        Add test runner API to check which center (mock or not) is used in UIProcess side.

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

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

        [LFC][IFC] Move trailing trimming logic to LineBuilder::TrimmableContent
        https://bugs.webkit.org/show_bug.cgi?id=204872
        <rdar://problem/57652365>

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        run-javascriptcore-tests is failing to run testmasm of 64bit AppleWin on Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=204869

        Reviewed by Per Arne Vollan.

        testmasm is compiled only when DEVELOPER_MODE.
        Enable DEVELOPER_MODE for all 64bit Windows builds.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Replaced "isFTW() || isWinCairo()" with isWin64()
        in the condition of enabling DEVELOPER_MODE.

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

        results.webkit.org: Decrease ttl for archives
        https://bugs.webkit.org/show_bug.cgi?id=204806
        <rdar://problem/57527644>

        Unreviewed infrastructure fix.

        * resultsdbpy/resultsdbpy/controller/archive_controller_unittest.py:
        (ArchiveControllerUnittest.setup_webserver): Disable time-to-live.
        * resultsdbpy/resultsdbpy/model/mock_model_factory.py:
        (MockModelFactory.create): Ensure time-to-live is longer than the oldest commit.

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

        results.webkit.org: Handle duplicate archives
        https://bugs.webkit.org/show_bug.cgi?id=204860

        Reviewed by Stephanie Lewis.

        * resultsdbpy/resultsdbpy/controller/archive_controller.py:
        (ArchiveController): Pass test time to ArchiveContext, de-duplicate any
        identical archives.
        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext): Only upack identical archives once, pass digest to caller.

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

        Python 3: Add support in webkitpy.benchmark_runner
        https://bugs.webkit.org/show_bug.cgi?id=204784

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.benchmark_runner.
        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults): Arithmetic aggregator should use integer division.
        (BenchmarkResults._format_values): Convert map to list.
        (BenchmarkResults._aggregate_results): Ditto.
        (BenchmarkResults._aggregate_results_for_test): Use Python 2/3 compatible iteritems.
        (BenchmarkResults._subtest_values_by_config_iteration): Ditto.
        (BenchmarkResults._lint_subtest_results): Ditto.
        (BenchmarkResults._lint_configuration): Ditto.
        * Scripts/webkitpy/benchmark_runner/benchmark_results_unittest.py: Use explicit imports.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_cog_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_epiphany_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowsergtk_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowserwpe_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Ditto.
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py: Ditto.

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

        Python 3: Add support in webkitpy.tool
        https://bugs.webkit.org/show_bug.cgi?id=204838

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.tool.
        * Scripts/webkit-patch: Remove version check.
        * Scripts/webkitpy/common/net/bugzilla/bug.py:
        (Bug.reviewed_patches): Convert filter to list.
        (Bug.commit_queued_patches): Ditto.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzillaQueries.fetch_bug_ids_from_commit_queue): Convert map to list.
        (MockBugzillaQueries.fetch_attachment_ids_from_review_queue): Ditto.
        (MockBugzillaQueries.fetch_bug_ids_from_pending_commit_list): Ditto.
        (MockBugzilla.post_comment_to_bug): Sort cc list before printing.
        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer.set_api_key): Convert filter to list.
        * Scripts/webkitpy/common/net/web.py:
        (Web.get_binary): Use Python 2/3 compatible urlopen.
        (Web.request): Use Python 2/3 compatible Request.
        * Scripts/webkitpy/common/prettypatch.py:
        (PrettyPatch.pretty_diff_file): Encode diff before printing.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_and_throw_if_fail): Sort environment before printing.
        (MockExecutive.run_command): Convert input to string before printing.
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (FailingTestCommitQueue.test_results): Convert map to list.
        (MockSimpleTestPlanCommitQueue.test_results): Ditto.
        * Scripts/webkitpy/tool/bot/feeders.py:
        (CommitQueueFeeder.feed): Use Python 2/3 compatible sort.
        (CommitQueueFeeder._patch_cmp): Deleted.
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (FlakyTestReporter._lookup_bug_for_flaky_test): Convert filter to list.
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Whois.execute): Convert map to list.
        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py:
        (JSCEarlyWarningSystemTest._create_task): Convert map to list.
        * Scripts/webkitpy/tool/bot/sheriff.py:
        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Use sorted lists
        Instead of sets.
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchSequencingCommand.__init__): Use Python 2/3 compatible sort.
        * Scripts/webkitpy/tool/commands/download_unittest.py: Sort environment.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.load_ews_classes): str.translate differs between Python 2
        and Python 3.
        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot._summarize_commit_log): Convert filter to list.
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue.should_continue_work_queue): Handle case where iterations is a MagicMock.
        (AbstractQueue._log_from_script_error_for_upload): Explicitly use BytesIO
        * Scripts/webkitpy/tool/commands/queues_unittest.py: Use explicit import paths.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Sort lists before comparing them.
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        (StepSequence.options): Use Python 2/3 compatible sort.
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (AbstractCommitLogCommand.__init__): Use Python 2/3 compatible sort.
        (SuggestNominations._print_nominations): Ditto.
        (SuggestNominations._print_counts): Ditto.
        (SuggestNominations._print_nominations.nomination_cmp): Deleted.
        (SuggestNominations._print_counts.counter_cmp): Deleted.
        * Scripts/webkitpy/tool/mocktool_unittest.py: Use explicit import paths.
        * Scripts/webkitpy/tool/multicommandtool.py:
        (HelpCommand._help_epilog): Convert filter to list, use Python 2/3 compatible sort.
        (MultiCommandTool._find_all_commands): Use Python 2/3 compatible sort.
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPServer): Use Python 2/3 compatible HTTPServers.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort.baseline_search_path): Use list instead of utterable keys.
        (RebaselineHTTPServer): Use Python 2/3 compatible HTTPServers.
        (RebaselineHTTPServer.__init__): Ditto.
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (GetActualResultFilesTest.test): Use assertEqual instead of assertItemsEqual.
        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
        (ReflectionHandler): Use Python 2/3 compatible HTTPServers.
        * Scripts/webkitpy/tool/steps/applywatchlist.py:
        (ApplyWatchList.run): Sort cc_emails before printing.
        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Print sorted list instead
        of set.
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff._show_pretty_diff): Use Python 2/3 compatible pathname2url.
        * Scripts/webkitpy/tool/steps/haslanded.py:
        (HasLanded.convert_to_svn): Use Python 2/3 compatible StringIO.
        (HasLanded.strip_change_log): Ditto.
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog._resolve_existing_entry): Convert zip object to list.
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py: Use Python 2/3 compatible urlparse.
        * Scripts/webkitpy/tool/steps/steps_unittest.py: Sort environment.
        * Scripts/webkitpy/w3c/test_exporter.py: Use Python 2/3 compatible HTTPError.
        * Scripts/webkitpy/w3c/wpt_github.py:
        (WPTGitHub.remove_label): Use Python 2/3 compatible urllib.quote.
        (WPTGitHub.is_pr_merged): Use Python 2/3 compatible HTTPError.
        (WPTGitHub.merge_pr): Ditto.
        (JSONResponse.__init__):

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

        Unreviewed, rolling out r253069.

        requests not handling certificate chain correctly in Catalina

        Reverted changeset:

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

2019-12-04  Louie Livon-Bemel  <llivonbemel@apple.com>

        Add exclusion rule for text manipulation SPI to exclude based on element class
        https://bugs.webkit.org/show_bug.cgi?id=204754
        <rdar://problem/57398802>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):
            - When matching a class, it should work even with other class names on the element.
            - All children elements should get the same exclusion rule, unless overridden by another rule.

2019-12-04  youenn fablet  <youenn@apple.com>

        WebProcessPool::terminateServiceWorkerProcess should be renamed terminateServiceWorkers
        https://bugs.webkit.org/show_bug.cgi?id=204792

        Reviewed by Chris Dumez.

        Renaming testRunner API from terminateServiceWorkerProcess to terminateServiceWorkers.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::terminateServiceWorkers):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::terminateServiceWorkers):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-12-04  Patrick Griffis  <pgriffis@igalia.com>

        [GTK][WPE] Add libuuid to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=204705

        Reviewed by Adrian Perez de Castro.

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

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

        Introduce a GPU process
        https://bugs.webkit.org/show_bug.cgi?id=204343

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-12-03  Megan Gardner  <megan_gardner@apple.com>

        Add disabled highlight API skeleton
        https://bugs.webkit.org/show_bug.cgi?id=204809

        Reviewed by Ryosuke Niwa.

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

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

        Replace customJavaScriptUserAgentAsSiteSpecificQuirks with customUserAgentAsSiteSpecificQuirks
        https://bugs.webkit.org/show_bug.cgi?id=204824

        Reviewed by Brent Fulgham.

        Replaced WebKit.WebsitePoliciesCustomJavaScriptUserAgent and WebKit.WebsitePoliciesCustomUserAgents
        with WebKit.WebsitePoliciesCustomUserAgentAsSiteSpecificQuirksDisabled, which tests that the UA string
        specified by customUserAgentAsSiteSpecificQuirks is not used when site specific quirks is disabled,
        and WebKit.WebsitePoliciesCustomUserAgentAsSiteSpecificQuirks, which tests that new property sets
        UA string for both network requests and JS API.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):

2019-12-03  Andres Gonzalez  <andresg_22@apple.com>

        Focus tracking support in the accessibility isolatedtree.
        https://bugs.webkit.org/show_bug.cgi?id=204535

        Reviewed by Chris Fleizach.

        FocusElement can run on the secondary AXThread.

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

2019-12-03  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Delete non-cookie website data after 7 days of no user interaction
        https://bugs.webkit.org/show_bug.cgi?id=204779
        <rdar://problem/57578989>

        Reviewed by Alex Christensen.

        These changes are test infrastructure so that TestRunner can
        control the new setting.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsFirstPartyWebsiteDataRemovalMode):
        (WTR::TestRunner::statisticsCallDidSetFirstPartyWebsiteDataRemovalModeCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsFirstPartyWebsiteDataRemovalMode):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didSetFirstPartyWebsiteDataRemovalMode):
        * WebKitTestRunner/TestInvocation.h:

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

        Python 3: Add support in webkitpy.bindings
        https://bugs.webkit.org/show_bug.cgi?id=204783

        Reviewed by Stephanie Lewis.

        Allow Tools/Scripts/run-bindings-tests to support Python 3.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency): Encode unicode strings before
        writing to file as bytes.

2019-12-03  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.

        Reverting the active parts of r250997 now that the certificates are sorted out.

        * Scripts/webkitpy/results/upload.py:
        (Upload.upload):
        (Upload.upload_archive):

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

        results.webkit.org: Decrease ttl for archives
        https://bugs.webkit.org/show_bug.cgi?id=204806
        <rdar://problem/57527644>

        Reviewed by Aakash Jain.

        Make the ttl on the archive tables shorter, drop the existing table and create new ones
        with a shorter ttl.

        * resultsdbpy/resultsdbpy/model/archive_context.py:
        (ArchiveContext.ArchiveMetaDataByCommit): Define new ArchiveMetaDataByCommit table.
        (ArchiveContext.ArchiveChunks): Ditto.
        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__): Add archive ttl, 8 weeks by default.

2019-12-03  Christopher Reid  <chris.reid@sony.com>

        Regular expression hangs in Safari only
        https://bugs.webkit.org/show_bug.cgi?id=202882
        <rdar://problem/56236654>

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/BumpPointerAllocator.cpp: Added.

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

        https://bugs.webkit.org/show_bug.cgi?id=204804
        <rdar://problem/57595666>

        Reviewed by Tim Horton.

        * Scripts/webkitpy/port/mac.py:
        (MacCatalystPort):
        (MacCatalystPort._build_driver_flags): Add SDKVARIANT=iosmac to build flags.

2019-12-03  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a runtime flag for Web Animations composite operations
        https://bugs.webkit.org/show_bug.cgi?id=204718

        Reviewed by Dean Jackson.

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

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

        Do not retry the EWS build due to flaky failures in layout-test
        https://bugs.webkit.org/show_bug.cgi?id=204769

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.start): Do not retry the build due to flaky tests failures.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (test_flaky_and_inconsistent_failures_without_clean_tree_failures): expected outcome changed from RETRY to SUCCESS.
        (test_flaky_and_inconsistent_failures_with_clean_tree_failures): Ditto.
        (test_flaky_and_consistent_failures_with_clean_tree_failures): Ditto.
        (test_mildly_flaky_patch_with_some_tree_redness_and_flakiness): Ditto.

2019-12-03  youenn fablet  <youenn@apple.com>

        Add support for camera rotation when capturing in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=204750

        Reviewed by Eric Carlson.

        Add test runner API to set the device rotation specifically for mock camera devices.

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

2019-12-03  youenn fablet  <youenn@apple.com>

        Expose WKWebView API to stop ongoing capture
        https://bugs.webkit.org/show_bug.cgi?id=204787

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2019-12-03  youenn fablet  <youenn@apple.com>

        [Cocoa] Run camera capture in UIProcess by default in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=204512

        Reviewed by Eric Carlson.

        By defaut, enable capture in UIProcess on Cocoa side.

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

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

        Unreviewed. Focus the location bar on CTRL+l in GTK MiniBrowser

        * MiniBrowser/gtk/BrowserWindow.c:
        (focusLocationBar):
        (browser_window_init):

2019-12-02  Sihui Liu  <sihui_liu@apple.com>

        Cross-thread version StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=203971
        <rdar://problem/57290349>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp: Removed as we have a different StorageQuotaManager 
        implementation now.
        * WebKitTestRunner/TestController.cpp: reset StorageQuotaManager's quota between tests.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::resetQuota):
        * WebKitTestRunner/TestController.h:

2019-12-02  Saam Barati  <sbarati@apple.com>

        run-jsc should exit with the same signal or exit status that the `jsc` shell does
        https://bugs.webkit.org/show_bug.cgi?id=204778

        Reviewed by Keith Miller.

        * Scripts/run-jsc:

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

        Revert - [EWS] Do not retry layout-tests build if the flaky test failures are also present in clean tree run
        https://bugs.webkit.org/show_bug.cgi?id=204704

        Reverting this, a more generic fix for handling flakiness would be made in Bug 204769.

2019-12-02  Louie Livon-Bemel  <llivonbemel@apple.com>

        Add helper methods for description and equality to text manipulation SPI
        https://bugs.webkit.org/show_bug.cgi?id=204758
        <rdar://problem/57438200>

        Reviewed by Wenson Hsieh.

        Add tests for the new methods. Most are equality tests for various situations, and are moved over from the
        Safari unit tests I had for the category methods that had the same purpose.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
        (TestWebKitAPI::TEST):
            - Add test to make sure the content isn't included in the regular -description, but the identifier is. And
              That -debugDescription does include the contents.
            - Add many tests equality for various situations, testing both with and without content equality.
        (TestWebKitAPI::createTextManipulationToken):
            Add a helper for creating a token in one line.

2019-12-02  Daniel Bates  <dabates@apple.com>

        REGRESSION (r195080): prepare-ChangeLog does not emit function list for file paths that contain a space
        https://bugs.webkit.org/show_bug.cgi?id=204236

        Reviewed by Brian Burg.

        Revert the filename escape logic added in <http://trac.webkit.org/changeset/195080> as it broke
        function list generation in file paths that contain space characters. Function list generation
        broke because the escaping was performed after line range dictionaries were built up keyed off
        the unescaped file path. Subsequent code would try to query these dictionaries to build up the
        changed function list using the escaped file path and never a match. The escaping logic was not
        necessary to fix the originally reported bug. All that was needed was to use the three-argument
        open() call that took a mode. So, remove the escape logic.

        * Scripts/prepare-ChangeLog:
        (actuallyGenerateFunctionLists):

2019-11-30  Ross Kirsling  <ross.kirsling@sony.com>

        test262-runner should dump YAML with correct encoding
        https://bugs.webkit.org/show_bug.cgi?id=204493

        Reviewed by Saam Barati.

        Even though we spit out correctly-encoded output to the terminal, Perl's YAML module insists upon *re*-encoding
        to UTF-8 when dumping to file. This works out in the end because an analogous double-decode occurs when loading
        from file. Still, it's really annoying that expectations.yaml has garbled (i.e. double-encoded) text.

        We shouldn't modify libraries directly, but we can copy-paste DumpFile/LoadFile into Runner.pm and tweak!

        * Scripts/test262/Runner.pm:
        (DumpFile):
        (LoadFile):
        Add custom versions of DumpFile/LoadFile which do not execute `binmode $OUT, ':utf8';`.

2019-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (2648 new tests -> 3980).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-11-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for hyphenate-limit-lines
        https://bugs.webkit.org/show_bug.cgi?id=204712
        <rdar://problem/57536727>

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [EWS] Do not retry layout-tests build if the flaky test failures are also present in clean tree run
        https://bugs.webkit.org/show_bug.cgi?id=204704

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeLayoutTestsResults.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_flaky_and_inconsistent_failures_with_clean_tree_failures): Changed expected outcome to SUCCESS.
        (TestAnalyzeLayoutTestsResults.test_flaky_and_consistent_failures_with_clean_tree_failures): Ditto.

2019-11-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for hyphenate-limit-before and hyphenate-limit-after
        https://bugs.webkit.org/show_bug.cgi?id=204710
        <rdar://problem/57535210>

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-11-29  Antti Koivisto  <antti@apple.com>

        Add mechanism for enabling internal and experimental features from run-webkit-test command line
        https://bugs.webkit.org/show_bug.cgi?id=204702

        Reviewed by Antoine Quint.

        Add --internal-feature and --experimental-feature flags to TestRunner and run-webkit-tests.
        This is useful for running existing tests with different feature enabled without modifying
        anything else. For example:

        run-webkit-tests --internal-feature LayoutFormattingContextRenderTreeIntegrationEnabled

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.internal_feature):
        (Port):
        (Port.experimental_feature):
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionExperimentalFeature):
        (WTR::handleOptionInternalFeature):
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::testOptionsForTest const):
        * WebKitTestRunner/TestController.h:

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

        Add a unit-test to new EWS for scenario when there is flakiness with patch and also on clean tree
        https://bugs.webkit.org/show_bug.cgi?id=204707
        <rdar://problem/57533998>

        Unreviewed unit-test.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeLayoutTestsResults.test_mildly_flaky_patch_with_some_tree_redness_and_flakiness):

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

        Add a unit-test to old EWS for scenario when there is flakiness with patch and also on clean tree
        https://bugs.webkit.org/show_bug.cgi?id=204707

        Unreviewed unit-test.

        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

2019-11-29  Paulo Matos  <pmatos@igalia.com>

        Move jsc-i386 from old to new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204667

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * QueueStatusServer/config/queues.py:

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

        Remove ENABLE_KEYBOARD_CODE_ATTRIBUTE and ENABLE_KEYBOARD_KEY_ATTRIBUTE macros
        https://bugs.webkit.org/show_bug.cgi?id=204666

        Reviewed by Ross Kirsling and Don Olmstead.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Rename 'submit to new EWS' to 'Submit for EWS analysis'
        https://bugs.webkit.org/show_bug.cgi?id=204692

        Unreviewed minor fix.

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

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

        Old EWS is showing 'Submit to old EWS' button on every patch
        https://bugs.webkit.org/show_bug.cgi?id=204691

        Unreviewed minor fix.

        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble.get): Disabled Submit to old EWS button since almost all the queues
        have been removed from old EWS.

2019-11-28  Diego Pino Garcia  <dpino@igalia.com>

        test262-runner ends with SIGPIPE signal
        https://bugs.webkit.org/show_bug.cgi?id=194816

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/test262/Runner.pm:
        (main):

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

        Removed ENABLED_QUEUES logic from ews-app
        https://bugs.webkit.org/show_bug.cgi?id=204683

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Removed ENABLED_QUEUES.
        (StatusBubble._build_bubbles_for_patch):
        (StatusBubble._should_show_bubble_for_queue): Deleted.

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

        [ews] Enable Windows queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204243

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled windows queue bubble on new EWS.
        * BuildSlaveSupport/ews-build/config.json: Enabled the scheduler for windows queue. Removed the disabled Try_Userpass scheduler.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Removed windows ews queue from bot-watcher's dashboard.
        * QueueStatusServer/config/queues.py: Removed windows queue from old EWS.

2019-11-28  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Move GL video sink to its own GstBin sub-class
        https://bugs.webkit.org/show_bug.cgi?id=204624

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitpy/style/checker.py: White-list the new GLVideoSinkGStreamer GObject implementation.

2019-11-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt: These tests were passing accidentally.

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

        [AppleWin] run-webkit-tests is failing to find bin32/DumpRenderTree since r252834
        https://bugs.webkit.org/show_bug.cgi?id=204571

        Reviewed by Ross Kirsling.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebKitTests.start): Replaced 'bin32' with 'bin64'.

2019-11-25  Kent Tamura  <tkent@chromium.org>

        Remove tkent@ from watchlist
        https://bugs.webkit.org/show_bug.cgi?id=204599

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/common/config/watchlist: Remove tkent@

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

        [macOS] Dragged images are only available as .tiff when dropping onto macCatalyst apps
        https://bugs.webkit.org/show_bug.cgi?id=204598
        <rdar://problem/57093920>

        Reviewed by Tim Horton.

        Verify that WKWebView is able to provide data in non-TIFF formats when dragging several types of images using a
        new API test.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:

2019-11-25  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Ensure MiniBrowser can be built with !ENABLE(WEBKIT_LEGACY)
        https://bugs.webkit.org/show_bug.cgi?id=204592

        Reviewed by Don Olmstead.

        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::init):
        (MainWindow::WndProc):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * PlatformWin.cmake:

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

        Add DefaultHash<OptionSet<T>> and HashTrait<OptionSet<T>> specializations
        https://bugs.webkit.org/show_bug.cgi?id=204562

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        Added a new test WTF_OptionSet.HashSet.

2019-11-25  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] xserver build fails
        https://bugs.webkit.org/show_bug.cgi?id=204577

        Reviewed by Žan Doberšek.

        * gtk/jhbuild.modules: Bump libdrm and add implicit dependency to
        it via mesa for the xserver recipe.

2019-11-25  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Flatten MediaPlayerPrivateGStreamer into MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=204352

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py: The base class no longer
        exists, perform the check on the player private.

2019-11-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] libgpg-error fails to build with gawk 5
        https://bugs.webkit.org/show_bug.cgi?id=204568

        Reviewed by Frédéric Wang.

        Gawk 5 throws errors when compiling libgpg-error. To avoid those, we
        have to bump libgpg-error to the latest 1.36 version and have the
        upstream fix applied on top of that.

        Autoreconf has to be invoked to regenerate automake files. Because
        autogen.sh script (which is present in the release tarballs) falters
        under jhbuild, we invoke autoreconf directly for libgpg-error builds.

        * gtk/jhbuild.modules:
        * gtk/patches/libgpg-error-prepare-for-gawk-5-0.patch: Added.
        * wpe/jhbuild.modules:
        * wpe/patches/libgpg-error-prepare-for-gawk-5-0.patch: Added.

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

        Resource Load Statistics: Allow multiple third-party cookie blocking settings
        https://bugs.webkit.org/show_bug.cgi?id=204389
        <rdar://problem/57344054>

        Reviewed by Brent Fulgham.

        This change allows the existing TestRunner function
        setStatisticsShouldBlockThirdPartyCookies() to set an optional boolean
        parameter onlyOnSitesWithoutUserInteraction to opt in to that behavior.

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

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

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

        Caused test failures and ASan crashes (Requested by ap on
        #webkit).

        Reverted changeset:

        "Cross-thread version StorageQuotaManager"
        https://bugs.webkit.org/show_bug.cgi?id=203971
        https://trac.webkit.org/changeset/252805

2019-11-23  Per Arne Vollan  <pvollan@apple.com>

        Archive step is failing after r252827
        https://bugs.webkit.org/show_bug.cgi?id=204548

        Reviewed by Alexey Proskuryakov.

        After https://trac.webkit.org/changeset/252827/webkit, the archive step is failing.

        * BuildSlaveSupport/built-product-archive:
        (createZip):

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

        Run LayoutTests/accessibility/mac/primary-screen-height.html on secondary accessibility thread.
        https://bugs.webkit.org/show_bug.cgi?id=204391

        Reviewed by Chris Fleizach.

        Added AccessibilityController::execute to execute any
        AccessibilityUIElement call into AccessibilityObjectWrapper on the
        secondary accessibility thread.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement): leftover from previous review.
        (WTR::AccessibilityController::execute): added this to execute any AccessibilityUIElement method on the appropriate thread.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::getChildrenWithRange): Runs on secondary thread.
        (WTR::AccessibilityUIElement::numberAttributeValue): Runs on secondary thread.

2019-11-22  Per Arne Vollan  <pvollan@apple.com>

        Set 64-bit as default architecture on Windows
        https://bugs.webkit.org/show_bug.cgi?id=204477

        Reviewed by Ross Kirsling.

        This will make 64-bit building and testing the default.

        * Scripts/webkitdirs.pm:
        (determineIsWin64):
        * Scripts/webkitpy/port/win.py:
        (WinPort):

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

        run-javascriptcore-tests: Failure to determine configuration for reporting is fatal
        https://bugs.webkit.org/show_bug.cgi?id=204526

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Use uname as the default upload configuration 

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

        results.webkit.org/api/failures should return an error when no test-run is found for specified criteria
        https://bugs.webkit.org/show_bug.cgi?id=204385
        <rdar://problem/57334389>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/failure_controller.py:
        (FailureController.failures): Return a 404 error if no test runs are found.
        * resultsdbpy/resultsdbpy/controller/failure_controller_unittest.py:
        (FailureControllerTest):
        (FailureControllerTest.test_no_runs):
        * resultsdbpy/resultsdbpy/model/failure_context.py:
        (FailureContext._failures): Return 'None' if no test runs are found.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py:
        (FailureContextTest):
        (FailureContextTest.test_no_test_runs):

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

        HTTPHeaderMap's operator== is not fully correct
        https://bugs.webkit.org/show_bug.cgi?id=204361

        Reviewed by Alex Christensen.

        Add API test coverage.

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

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

        Cross-thread version StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=203971
        <rdar://problem/57290349>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp: Removed as we have a different StorageQuotaManager 
        implementation now.
        * WebKitTestRunner/TestController.cpp: reset StorageQuotaManager's quota between tests.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::resetQuota):
        * WebKitTestRunner/TestController.h:

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

        Unreviewed, rolling out r252791.

        Cannot use key on scalar in some perl versions

        Reverted changeset:

        "run-javascriptcore-tests: Failure to determine configuration
        for reporting is fatal"
        https://bugs.webkit.org/show_bug.cgi?id=204526
        https://trac.webkit.org/changeset/252791

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

        run-javascriptcore-tests: Failure to determine configuration for reporting is fatal
        https://bugs.webkit.org/show_bug.cgi?id=204526

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload): Return empty hash if no configuration is available.
        (uploadResults): Soft-fail upload if configuration is empty.

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

        Setup EWS queue for JSConly i386
        https://bugs.webkit.org/show_bug.cgi?id=204523

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        [ews] Add KillOldProcesses step before running JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204525

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

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

        run-javascriptcore-tests: Hide the output of binaries behind --verbose
        https://bugs.webkit.org/show_bug.cgi?id=204386

        Reviewed by Aakash Jain.

        * Scripts/run-javascriptcore-tests:
        (runTest): Do not log binary output by default, always log test failures.

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

        [ews] Add basic commit-queue support in new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204517

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/loadConfig.py:

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

        run-webkit-tests: Failing to run spindump shouldn't be fatal
        https://bugs.webkit.org/show_bug.cgi?id=204518
        <rdar://problem/57397417>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Catch script error.

2019-11-22  Paulo Matos  <pmatos@igalia.com>

        Remove JSC 32bit ARMv7 and MipsEl old EWS queues
        https://bugs.webkit.org/show_bug.cgi?id=204344

        Reviewed by Aakash Jain.

        Remove JSC armv7 and mips from old EWS queue and fix bubbles
        by removing them from old ews and adding them to new ews.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * QueueStatusServer/config/queues.py:

2019-11-22  Paulo Matos  <pmatos@igalia.com>

        Support JSCOnly platform in test reporting
        https://bugs.webkit.org/show_bug.cgi?id=204495

        Reviewed by Carlos Garcia Campos.

        Add JSCOnly to possible platforms.

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload):

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

        [GTK][WPE] RemoteInspector: use sockets instead of DBus
        https://bugs.webkit.org/show_bug.cgi?id=204503

        Reviewed by Žan Doberšek.

        Update the unit tests to not use DBus.

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:

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

        [iOS] Web process crashes when attempting to request document context in a textarea
        https://bugs.webkit.org/show_bug.cgi?id=204455
        <rdar://problem/57383975>

        Reviewed by Tim Horton.

        Add a test to verify that we don't crash (and are still able to retrieve character rects).

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[UIWKDocumentContext markedTextRects]):
        (-[UIWKDocumentContext textRects]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-21  Matt Lewis  <jlewis3@apple.com>

        Fix triggers for catalina debug and webgl testers.
        https://bugs.webkit.org/show_bug.cgi?id=204456

        Reviewed by Jonathan Bedard.

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

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

        build.webkit.org: Forward results database credentials to jsc test runs
        https://bugs.webkit.org/show_bug.cgi?id=204453

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests.__init__): Do not log environment with credentials in it.
        (RunJavaScriptCoreTests.start): Add results database API key to environment.
        (RunLLINTCLoopTests.__init__): Do not log environment with credentials in it.
        (RunLLINTCLoopTests.start): Add results database API key to environment.
        (Run32bitJSCTests.__init__): Do not log environment with credentials in it.
        (Run32bitJSCTests.start): Add results database API key to environment.

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

        run-webkit-tests: Clean-up simulator processes after tearing down simulators
        https://bugs.webkit.org/show_bug.cgi?id=204416

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.running_pids): Make function Python 3 compatible.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Kill any CoreSimulator processes.

2019-11-21  Pablo Saavedra  <psaavedra@igalia.com>

        Fix Tools/Scripts/run-javascriptcore-tests after r252490
        https://bugs.webkit.org/show_bug.cgi?id=204452

        Rubber-stamped by Philippe Normand

        Regression introduced in:

          results.webkit.org: Report JSC tests to the results database
          https://bugs.webkit.org/show_bug.cgi?id=204091
          <rdar://problem/49778900>

        WebKitGTK and WPE build environment is defined by the dependencies
        policy document [1] as a Debian Stable. For Debian the `uname` binary
        is installed in the `/bin/` directory and this directory is included
        in the `$PATH` for any regular or system user. This fix removes the
        path for the `uname` command in the run-javascriptcore-tests script.
        
        [1] https://trac.webkit.org/wiki/WebKitGTK/DependenciesPolicy

        * Scripts/run-javascriptcore-tests:
        (configurationForUpload):

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

        run-webkit-tests: Make usability test on booting simulators more robust
        https://bugs.webkit.org/show_bug.cgi?id=204423
        <rdar://problem/57364735>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Use regular expressions to find home-screen service.

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

        run-webkit-tests: Do not create global SystemHost objects
        https://bugs.webkit.org/show_bug.cgi?id=204426

        Reviewed by Aakash Jain.

        If created, SystemHost objects should be created on-demand, not globally
        shared between all instances of a function.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):
        (SimulatedDeviceManager.available_devices):
        (SimulatedDeviceManager.device_by_filter):
        (SimulatedDeviceManager._create_or_find_device_for_request):
        (SimulatedDeviceManager._boot_device):
        (SimulatedDeviceManager.device_count_for_type):
        (SimulatedDeviceManager.initialize_devices):
        (SimulatedDeviceManager.max_supported_simulators):
        (SimulatedDeviceManager.swap):
        (SimulatedDeviceManager.tear_down):

2019-11-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Correct argument types in UIScriptController::activateDataListSuggestion after r252062
        https://bugs.webkit.org/show_bug.cgi?id=203116

        Reviewed by Tim Horton.

        Use `unsigned` to represent `unsigned long` arguments declared in the IDL.

        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::activateDataListSuggestion):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):

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

        run-api-tests reports AssertionError os.pathsep not in value in _append_value_colon_separated in Cygwin Python
        https://bugs.webkit.org/show_bug.cgi?id=204400

        Reviewed by Jonathan Bedard.

        r249500 changed Port.environment_for_api_tests to use
        Port._append_value_colon_separated to append a build path to some
        enviroment variables. _append_value_colon_separated has a
        assertion to ensure the given value doesn't iclude ':'. However,
        Port._build_path contains ':' on Cygwin Python.

        Those enviroment variables are only for macOS and iOS. Move the code to darwin.py.

        * Scripts/webkitpy/port/base.py:
        (Port.environment_for_api_tests):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.environment_for_api_tests):

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

        [WebGL] Add `--webgl-test-suite` flag for run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=204327

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Add the --webgl macro command, which is the equivalent of:
        'Run-webkit-tests --additional-expectations=LayoutTests/webgl/TestExpectations webgl'

2019-11-20  ChangSeok Oh  <changseok@webkit.org>

        Reactivate my committer status.

        Unreviewed.

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

2019-11-20  Matt Lewis  <jlewis3@apple.com>

        Add trigger for WebGL bot to config.

        RS config fix by Jonathan Bedard.

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

2019-11-19  Matt Lewis  <jlewis3@apple.com>

        Bring up WebGL Test Queue.
        https://bugs.webkit.org/show_bug.cgi?id=204374

        Reviewed by Jonathan Bedard.

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

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

        [EWS] iOS layout-tests fails with 30+ failures on re-run and on clean-tree
        https://bugs.webkit.org/show_bug.cgi?id=204409

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPerlTests.evaluateCommand): Add killOldProcesses before running test suite.
        (RunJavaScriptCoreTests.evaluateCommand): Ditto.
        (ReRunJavaScriptCoreTests.evaluateCommand): Ditto.
        (RunWebKitTests.evaluateCommand): Ditto.
        (ReRunWebKitTests.evaluateCommand): Ditto.
        (RunAPITests.evaluateCommand): Ditto.
        (ReRunAPITests.evaluateCommand): Ditto.

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

        kill-old-processes: Log currently running processes
        https://bugs.webkit.org/show_bug.cgi?id=204415

        Unreviewed infrastructure management.

        * BuildSlaveSupport/kill-old-processes:
        (main): Log 'ps aux' for Mac and Linux.

2019-11-19  Saam Barati  <sbarati@apple.com>

        Remove runNullishAwareOperatorsEnabled

        Rubber-stamped by Keith Miller.

        * Scripts/run-jsc-stress-tests:

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

        results.webkit.org: Have build.webkit.org report JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204364

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunJavaScriptCoreTests):
        (RunWebKitTests):
        (RunAPITests):
        (RunPythonTests):
        (RunLLINTCLoopTests):
        (Run32bitJSCTests):

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

        Disable reporting EWS test failures from clean-tree to results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=204369

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTestsWithoutPatch):
        (RunAPITestsWithoutPatch.evaluateCommand):
        (RunWebKitTestsWithoutPatch.start): Deleted.
        (RunAPITestsWithoutPatch.start): Deleted.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.
        * BuildSlaveSupport/ews-build/loadConfig.py:

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

        [Cocoa] Add WKUIDelegate SPI to inform clients when a _WKInspector attaches to a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=204300
        <rdar://problem/57136993>

        Reviewed by Devin Rousso.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[InspectorDelegate _webView:didAttachInspector:]):
        (TEST): Add new test to ensure the delegate is called as expected.

2019-11-19  Sihui Liu  <sihui_liu@apple.com>

        Update expectations for bufferedAmount-unchanged-by-sync-xhr.any.worker.html
        https://bugs.webkit.org/show_bug.cgi?id=204313

        Reviewed by Alex Christensen.

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

2019-11-19  Paulo Matos  <pmatos@igalia.com>

        Setup EWS queues for JSConly 32bits ARMv7 and MIPSel
        https://bugs.webkit.org/show_bug.cgi?id=203946

        Reviewed by Aakash Jain.

        Naming of queues follow old EWS: jsc-mips for MIPSel
        and jsc-armv7 for ARMv7.

        * BuildSlaveSupport/ews-build/config.json:
        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.start):
        (PrintConfiguration.run):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.test_remote_success):

2019-11-18  John Wilander  <wilander@apple.com>

        Check if ITP is on before applying third-party cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=204322
        <rdar://problem/57120772>

        Reviewed by Chris Dumez and Alexey Proskuryakov.

        This is test infrastructure to allow a layout test to
        disable ITP in the network process.

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

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

        [Win] kill-old-processes should kill WebKitWebProcess.exe and WebKitNetworkProcess.exe
        https://bugs.webkit.org/show_bug.cgi?id=204337

        Reviewed by Ross Kirsling.

        * BuildSlaveSupport/kill-old-processes:
        (main): Removed WebKit2WebProcess.exe, and added WebKitWebProcess.exe and WebKitNetworkProcess.exe to
        tasksToKillWin.

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

        Python 3: Support run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=204252

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._collect_tests): Use items over iteritems.
        (Manager._print_tests_result_with_status): Use compatible iteritems.
        (Manager.run): Use range over xrange, use compatible iteritems.
        * Scripts/webkitpy/api_tests/runner.py:
        (Runner.run): Use compatible iteritems.
        (Runner.result_map_by_status): Ditto.
        (_Worker._run_single_test): Server process returns byte arrays, not strings.
        (_Worker.handle): Use items over iteritems, use range over xrange.
        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.run): Use range over xrange.
        (_MessagePool._start_workers): Ditto.
        * Scripts/webkitpy/common/multiprocessing_bootstrap.py: Remove version check.
        * Scripts/webkitpy/port/base.py:
        (Port.check_api_test_build):Use items over iteritems.
        (Port.commits_for_upload): Ditto.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._reset): Use byte array over string.
        (ServerProcess._pop_stdout_line_if_ready): Check for bytes newline.
        (ServerProcess._pop_stderr_line_if_ready): Ditto.

2019-11-18  Andres Gonzalez  <andresg_22@apple.com>

        Run AccessibilityController::rootElement on secondary thread to simulate HIServices during LayoutTests.
        https://bugs.webkit.org/show_bug.cgi?id=204226

        Reviewed by Chris Fleizach.

        HIServices _AXUIElementUseSecondaryAXThread and _AXUIElementRequestServicedBySecondaryAXThread
        do not work for WebKitTestRunner since this is calling directly into
        WebCore/accessibility via JavaScript without going through HIServices.
        Thus to simulate the behavior of HIServices, AccessibilityController is
        spawning a secondary thread to service the JavaScript requests.
        The very first request needs to be serviced in the main thread,
        and all subsequent requests in the secondary thread. this is what
        the behavior would be if using HIServices.
        Once the IsolatedTree would be enabled, the first request has to be
        served in the main thread in order to build the AXIsolatedTree.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement):
        (WTR::AXThread::AXThread):
        (WTR::AXThread::isCurrentThread):
        (WTR::AXThread::dispatch):
        (WTR::AXThread::dispatchBarrier):
        (WTR::AXThread::singleton):
        (WTR::AXThread::createThreadIfNeeded):
        (WTR::AXThread::dispatchFunctionsFromAXThread):
        (WTR::AXThread::initializeRunLoop):
        (WTR::AXThread::wakeUpRunLoop):
        (WTR::AXThread::threadRunLoopSourceCallback):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AXThread::initializeRunLoop):
        (WTR::AXThread::wakeUpRunLoop):
        (WTR::AXThread::threadRunLoopSourceCallback):

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

        results.webkit.org: Uncollapsed failures shouldn't include runs with no failures
        https://bugs.webkit.org/show_bug.cgi?id=204315

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/model/failure_context.py:
        (FailureContext): Do not include test runs which have no failed tests.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py:
        (FailureContextTest):
        (FailureContextTest.test_no_failures):

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

        Dedicate ews116 to macOS-High-Sierra-Debug-Build-EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=204256

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        TestWebKitAPI.ProcessSwap.QuickBackForwardNavigationWithPSON is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=199645
        <rdar://problem/52856112>

        Reviewed by Alex Christensen.

        Make sure the test waits for the history navigations to complete before checking the
        back/forward list.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-11-18  Keith Rollin  <krollin@apple.com>

        Move jsc from Resources to Helpers
        https://bugs.webkit.org/show_bug.cgi?id=203970
        <rdar://problem/55917748>

        Reviewed by Keith Miller.

        'jsc' is a supporting application or tool, not a resource. As such, it
        should go into Helpers, per
        <https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG201>

        * Scripts/run-jsc-stress-tests:
        * Scripts/run-layout-jsc:
        * Scripts/sunspider-compare-results:
        (pathToSystemJSC):
        * Scripts/test262/Runner.pm:
        (getBuildPath):
        * Scripts/webkitdirs.pm:
        (jscPath):

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

        Python 3: Add support in webkitpy.layout_tests.views
        https://bugs.webkit.org/show_bug.cgi?id=204227

        Reviewed by Aakash Jain.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.views.
        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_unexpected_results): Use compatible iteritems.
        * Scripts/webkitpy/layout_tests/views/buildbot_results_unittest.py:
        (BuildBotPrinterTests.get_printer): Use compatible StringIO object.
        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.__init__): Use maxsize instead of maxint.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.setUp): Use compatible StringIO, remove buflist.
        (RegularTest.test_logging_not_included): Ditto.
        (RegularTest._basic): Remove buflist.
        (RegularTest.test_basic): Compare against stream value instead of buflist.
        (RegularTest._log_after_update): Remove buflist.
        (RegularTest.test_log_after_update): Compare against stream value
        instead of buflist.
        (RegularTest.test_log_args): Ditto.
        (RegularTest.test_unicode): We can't join unicode strings and standard strings
        in Python 2.
        (RegularTest.test_stream_with_encoding): Use compatible StringIO, Python 3 uses
        unicode strings.
        (TtyTest.test_basic): Compare against stream value instead of buflist.
        (TtyTest.test_log_after_update): Ditto.
        (VerboseTest.test_basic): Ditto.
        (VerboseTest.test_log_after_update): Ditto.
        (VerboseTest.test_log_args): Ditto.
        (VerboseWithOutTimestamp.test_basic): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.assertWritten): Use stream value instead of buflist.
        (Testprinter.reset): Use Python 3 compatible steam reset.
        (Testprinter.get_printer): Use compatible StringIO.
        (Testprinter.test_print_one_line_summary): Compare against stream value instead
        of buflist.
        (Testprinter.test_test_status_line): Ditto.
        (Testprinter.test_print_found): Ditto.

2019-11-18  Simon Fraser  <simon.fraser@apple.com>

        Fix alpha value rounding to match the CSS Color spec
        https://bugs.webkit.org/show_bug.cgi?id=203597
        <rdar://problem/56728546>

        Reviewed by Tim Horton.

        Fix the test for rounding.

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

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

        [iOS] [UIWKDocumentContext] Add the ability to request all marked text rects
        https://bugs.webkit.org/show_bug.cgi?id=204278
        <rdar://problem/56527803>

        Reviewed by Tim Horton.

        Add an API test to exercise the new request option.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (-[UIWKDocumentContext markedTextRects]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-15  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Audio capture fails when a track is unmuted
        https://bugs.webkit.org/show_bug.cgi?id=204202
        <rdar://problem/57005820>

        Reviewed by Jer Noble.
        
        Make WebKit2.CaptureMute failures easier to diagnose.

        * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm:
        (TestWebKitAPI::wkMediaCaptureStateString):
        (TestWebKitAPI::waitUntilCaptureState):
        (TestWebKitAPI::TEST):

2019-11-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Apple] Enable variation fonts on all Apple platforms
        https://bugs.webkit.org/show_bug.cgi?id=198100

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [EWS] Update windows bots in config.json
        https://bugs.webkit.org/show_bug.cgi?id=204245

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json:

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

        Windows EWS should not upload archives
        https://bugs.webkit.org/show_bug.cgi?id=204229

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:

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

        results.webkit.org: Report JSC tests to the results database
        https://bugs.webkit.org/show_bug.cgi?id=204091
        <rdar://problem/49778900>

        Reviewed by Aakash Jain.

        Upload results to the specified results database.

        DEMONSTRATION OF FAILURE IN EWS BEHAVIOR, DO NOT LAND!

        * Scripts/run-javascriptcore-tests:
        (runTest): Parse binary output to mark individual tests as passing
        or failing.
        (uploadConfiguration): Return a hash map representing the configuration
        For this specific test run.
        (uploadResults): If a report URL is defined, upload test results to that URL.
        * Scripts/webkitdirs.pm:
        (splitVersionString): splitVersionString is supposed to be a generally used
        function, so should not set a global variable.
        (determineOSXVersion): Remove newline from version number.

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

        run-webkit-tests loads committers.py 4 times, taking about 40ms
        https://bugs.webkit.org/show_bug.cgi?id=204211

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry): Don't create CommitterList on import.
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        (CommitInfo.__init__): Ditto.

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

        [ews] Perform validation of patch before retrying JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204222

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests.evaluateCommand): Add a ValidatePatch step before retrying.
        (ReRunJavaScriptCoreTests.evaluateCommand): Ditto.

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

        Python 3: Add support in webkitpy.layout_tests.layout_package
        https://bugs.webkit.org/show_bug.cgi?id=204212

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.layout_package.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (convert_trie_to_flat_paths): Use compatible iteritems.
        (JSONResultsGenerator._insert_failure_summaries): Use compatible iterkeys.
        (JSONResultsGenerator._convert_json_to_current_version): Use compatible iteritems.
        (JSONResultsGenerator._convert_tests_to_trie): Use compatible iterkeys.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest._verify_json_results): Use items instead of iteritems.
        (JSONGeneratorTest.test_test_timings_trie): Python 3's json decoder is sensitive to ordering.

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

        Flaky API Test TestWebKitAPI.ServiceWorkers.ThrottleCrash
        https://bugs.webkit.org/show_bug.cgi?id=203734

        Reviewed by Youenn Fablet.

        Some API tests using TCPServer have multiple concurrent HTTP requests in flight at the same time.
        When this happens, sometimes NSURLSession will make multiple TCP connections to the same server.
        TCPServer is not the right tool for this because it handles all its connections manually.
        To make the test server agnostic to how many connections are initiated, I introduce HTTPServer,
        which uses the Network framework to handle as many responses and as many connections as happen.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/cocoa/HTTPServer.h: Added.
        (TestWebKitAPI::HTTPServer::HTTPResponse::HTTPResponse):
        * TestWebKitAPI/cocoa/HTTPServer.mm: Added.
        (TestWebKitAPI::HTTPServer::HTTPServer):
        (TestWebKitAPI::HTTPServer::respondToRequests):
        (TestWebKitAPI::HTTPServer::port const):
        (TestWebKitAPI::HTTPServer::request const):
        * TestWebKitAPI/config.h:

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

        Python 3: Add support in webkitpy.layout_tests.servers
        https://bugs.webkit.org/show_bug.cgi?id=204209

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.servers.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Use compatible iteritems.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config): Ditto.

2019-11-14  Megan Gardner  <megan_gardner@apple.com>

        Fix another build error from r252449
        https://bugs.webkit.org/show_bug.cgi?id=204173

        Unreviewed Build Fix for r252449

        * TestWebKitAPI/ios/UIKitSPI.h:

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

        Python 3: Add support in webkitpy.style
        https://bugs.webkit.org/show_bug.cgi?id=203762

        Reviewed by Stephanie Lewis.

        * Scripts/check-webkit-style: Remove Python 2 version check.
        * Scripts/test-webkitpy-python3: Add webkitpy.style.
        * Scripts/webkitpy/style/checker.py: Use explicit imports.
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_max_reports_per_category): Use keys() over iterkeys.
        * Scripts/webkitpy/style/checkers/contributors.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._should_log_linter_warning): Use compatible iteritems.
        * Scripts/webkitpy/style/error_handlers_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/filter.py:
        (FilterConfiguration._get_path_specific_lower): Return list instead of iterator.
        (FilterConfiguration._filter_from_path): Avoid confusion with filter builtin.
        * Scripts/webkitpy/style/filter_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/main.py:
        (CheckWebKitStyle._engage_awesome_stderr_hacks): No reason to apply encoding to stderr
        in Python 3.
        * Scripts/webkitpy/style/main_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/patchreader.py:
        (PatchReader.check): Ensure that the provided patch is a string, use items over iteritems.

2019-11-14  Megan Gardner  <megan_gardner@apple.com>

        Fix build error from r252449
        https://bugs.webkit.org/show_bug.cgi?id=204173

        Reviewed by Wenson Hsieh.

        Include needed header for all platforms, not just iPhone.

        * TestWebKitAPI/ios/UIKitSPI.h:

2019-11-14  Brady Eidson  <beidson@apple.com>

        Summary: WKWebView is missing an equivalent to WebKit 1's API to set the media style.
        <rdar://problem/49862107> and https://bugs.webkit.org/show_bug.cgi?id=203974

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaType.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-11-14  Brady Eidson  <beidson@apple.com>

        pageZoom/setPageZoom: should not be in a Mac-only part of WKWebView.mm
        https://bugs.webkit.org/show_bug.cgi?id=204128

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PageZoom.mm: Added.
        (TestWebKitAPI::getClientWidth):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView waitUntilClientWidthIs:]):

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

        webkitpy: Clarify webkitpy/style/optparser_unittest.py by removing parse variables
        https://bugs.webkit.org/show_bug.cgi?id=204183

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/style/optparser_unittest.py:
        (ArgumentParserTest.test_parse_documentation): Remove parse variable.
        (ArgumentParserTest.test_parse_bad_values): Ditto.
        (ArgumentParserTest.test_parse_default_arguments): Ditto.
        (ArgumentParserTest.test_parse_explicit_arguments): Ditto.
        (ArgumentParserTest.test_parse_files): Ditto.

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

        Add support for remotes file for EWS builders (follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=203899

        Unreviewed follow-up fix.

        * BuildSlaveSupport/ews-build/factories.py:
        (JSCTestsFactory.__init__): Passed remotes parameter to JSCTestsFactory as well.
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: Updated unit-test.

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

        [ews] Enable JSC queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=204179

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/config.json: Enabled the scheduler for JSC queue.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Enabled JSC queue bubble on new EWS.
        * QueueStatusServer/config/queues.py: Removed JSC queue from old EWS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Removed JSC queue from bot-watcher's dashboard.

2019-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Add support for Clipboard.write()
        https://bugs.webkit.org/show_bug.cgi?id=204078
        <rdar://problem/57087756>

        Reviewed by Ryosuke Niwa.

        Make the LocalPasteboard in WebKitTestRunner compatible with calls to -writeObjects: with a list of pasteboard
        items. Currently, attempts to -writeObjects: result in a crash, since NSPasteboard code will attempt to
        communicate with pasted and fail. We fix this by implementing -writeObjects: and storing the array of
        NSPasteboardItems in LocalPasteboard, the same way we do in DumpRenderTree's LocalPasteboard implementation.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):

        Factor out logic to clear the pasteboard's content into a separate helper, and clear out the list of saved
        pasteboard items here as well.

        (-[LocalPasteboard clearContents]):

        Implement -clearContents in DumpRenderTree's LocalPasteboard, so that we can test Clipboard.write() in WebKit1.

        (-[LocalPasteboard writeObjects:]):

        Also make it so that we save any NSPasteboardItems we write to the local pasteboard, so that we can return them
        later in -pasteboardItems.

        (-[LocalPasteboard pasteboardItems]):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (-[LocalPasteboard initWithName:]):

        Clean up this code a bit by replacing manual reference counting for `typesArray` and its neighboring data
        structures with `RetainPtr`. Additionally, underscore-prefix the instance variables on LocalPasteboard to match
        most of the other Objective-C objects in WebKit.

        (-[LocalPasteboard name]):
        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):

        Clear out the NSPasteboardItem list here too.

        (-[LocalPasteboard clearContents]):
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):
        (-[LocalPasteboard changeCount]):
        (-[LocalPasteboard types]):
        (-[LocalPasteboard availableTypeFromArray:]):
        (-[LocalPasteboard setData:forType:]):
        (-[LocalPasteboard dataForType:]):
        (-[LocalPasteboard pasteboardItems]):
        (-[LocalPasteboard writeObjects:]):

        Implement this by porting over the implementation that currently exists in DumpRenderTree. Like in
        DumpRenderTree, we want to also save the NSPasteboardItem array we're given here, so that we can return it in
        -pasteboardItems.

        (-[LocalPasteboard dealloc]): Deleted.

2019-11-13  Megan Gardner  <megan_gardner@apple.com>

        Cleanup UIKitSPI for Testing
        https://bugs.webkit.org/show_bug.cgi?id=204173

        Reviewed by Simon Fraser.

        Remove old staging for UIKit APIs that should not be needed now.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        [ews] Add build step to Analyze JSC Tests Results
        https://bugs.webkit.org/show_bug.cgi?id=204174

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ReRunJavaScriptCoreTests.evaluateCommand): invoke AnalyzeJSCTestsResults step.
        (AnalyzeJSCTestsResults): Build step to analyze layout-test results.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestAnalyzeJSCTestsResults):
        (TestAnalyzeJSCTestsResults.test_single_new_stress_failure): Added unit-test.
        (TestAnalyzeJSCTestsResults.test_single_new_binary_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_multiple_new_stress_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_multiple_new_binary_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_new_stress_and_binary_failure): Ditto.
        (TestAnalyzeJSCTestsResults.test_stress_failure_on_clean_tree): Ditto.
        (TestAnalyzeJSCTestsResults.test_binary_failure_on_clean_tree): Ditto.
        (TestAnalyzeJSCTestsResults.test_stress_and_binary_failure_on_clean_tree): Ditto.
        (TestAnalyzeJSCTestsResults.test_flaky_stress_and_binary_failures): Ditto.
        (TestAnalyzeJSCTestsResults.test_flaky_and_consistent_stress_failures): Ditto.
        (TestAnalyzeJSCTestsResults.test_flaky_and_consistent_failures_with_clean_tree_failures): Ditto.

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

        Python 3: Add support in webkitpy.layout_tests.controllers
        https://bugs.webkit.org/show_bug.cgi?id=204180

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.controllers.
        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.__init__): Use Python 3 queue syntax.
        (_MessagePool._can_pickle): Use Python 3 pickle syntax.
        (_MessagePool._loop): Use Python 3 queue syntax.
        (_Worker.run): Use Python 3 queue syntax.
        (_Worker._raise): Python 2 and Python 3 have different semantics for raising an exception
        With a stack trace. However, 'raise' will raise the exception we are in the process of capturing,
        Which is exactly what we want in this case.
        * Scripts/webkitpy/common/read_checksum_from_png.py:
        (read_checksum): Standardize checksum as a string.
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.write_binary_file): Binary files should be written with bytes, not strings.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.write_binary_file): Binary files should be written with bytes, not strings.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py: assertItemsEqual is not
        Defined in Python 3.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._do_post_tests_work): Use compatible iteritems.
        (Sharder._shard_by_directory): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Use compatible itervalues.
        (Manager._look_for_new_crash_logs): Use Python 3 item iteration.
        (Manager._results_to_upload_json_trie): Use compatible itervalues.
        (Manager._stats_trie): Use compatible iteritems.
        * Scripts/webkitpy/port/base.py:
        (Port.expected_text): Be explicit about decoding text expectations.
        * Scripts/webkitpy/port/mock_drt.py:
        (MockDRT.write_test_output):

2019-11-13  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION: WKWebView navigation fails when navigating from about:blank
        https://bugs.webkit.org/show_bug.cgi?id=203852

        Reviewed by Brent Fulgham.

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

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

        [Win][DumpRenderTree][WebKitTestRunner] eventSender.keyDown should support function keys
        https://bugs.webkit.org/show_bug.cgi?id=204146

        Reviewed by Ross Kirsling.

        Changed eventSender.keyDown of DRT and WTR to support sending
        function keys.

        In addition to that, this change set correct scan code to LPARAM
        for all key events. Unfortunately, there is no API to get a
        correct extended scan code from a virtual key because
        MapVirtualKey and MapVirtualKeyEx doesn't work as expected.
        makeKeyDataForScanCode turns on KF_EXTENDED flag for some keys
        explicitly for the workaround.
        <http://www.setnode.com/blog/mapvirtualkey-getkeynametext-and-a-story-of-how-to/>

        * DumpRenderTree/win/EventSender.cpp:
        (makeKeyDataForScanCode):
        (keyDownCallback):
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::makeKeyDataForScanCode):
        (WTR::EventSenderProxy::keyDown):

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

        Python 3: Add support in webkitpy.style.checkers
        https://bugs.webkit.org/show_bug.cgi?id=203761

        Rubber-stamped by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.style.checkers.
        * Scripts/webkitpy/port/builders.py:
        (all_port_names): Convert map to a list before concatenating.
        * Scripts/webkitpy/style/checkers/changelog.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/changelog_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/cmake.py: Ditto.
        * Scripts/webkitpy/style/checkers/cmake_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/common_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/contributors.py: Ditto.
        * Scripts/webkitpy/style/checkers/cpp.py:
        (Position): Add rich comparison functions.
        (check_for_copyright): Use range instead of xrange.
        (detect_functions): Ditto.
        (check_language): Use r-string.
        (check_for_include_what_you_use): Use range instead of xrange.
        (_process_lines): Convert iterator to list, use range instead of xrange.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest): Be explicit about bytes vs strings.
        * Scripts/webkitpy/style/checkers/js.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/js_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/jsonchecker.py: Ditto.
        (JSONFeaturesChecker.check):
        * Scripts/webkitpy/style/checkers/jsonchecker_unittest.py: Ditto.
        (JSONCheckerTest.test_conflict_marker): Differentiate between Python 2 and 3
        json parsers.
        * Scripts/webkitpy/style/checkers/jstest_unittest.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/messagesin.py: Ditto.
        * Scripts/webkitpy/style/checkers/messagesin_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/png_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/python.py:
        (PythonChecker.check): Only run pylint in Python 2.
        (PythonChecker._check_pylint): Use r string.
        (Pylinter.run): Surpress logging from Pylint.
        * Scripts/webkitpy/style/checkers/python_unittest.py: Use explicit imports.
        (PythonCheckerTest.test_check): Add FIXME for running pylint in Python 3.
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py:
        * Scripts/webkitpy/style/checkers/python_unittest_input.py:
        * Scripts/webkitpy/style/checkers/test_expectations.py: Use explicit imports.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/text.py: Ditto.
        * Scripts/webkitpy/style/checkers/text_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/watchlist_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/xcodeproj_unittest.py: Ditto.
        * Scripts/webkitpy/style/checkers/xml_unittest.py: Ditto.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pep8): Update pep8 version.

2019-11-13  Jer Noble  <jer.noble@apple.com>

        Link mediaDataLoadsAutomatically setting to AutoplayPolicy
        https://bugs.webkit.org/show_bug.cgi?id=201738
        <rdar://problem/55315194>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/media-loading.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):

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

        test262-runner: use NUMBER_OF_PROCESSORS and stop multiplying the number of cores.
        https://bugs.webkit.org/show_bug.cgi?id=204154

        Reviewed by Ross Kirsling.

        We have enabled running test262 on GTK and WPE test bots on r252362
        But it seems this test262 runner is not respecting the environment
        variable NUMBER_OF_PROCESSORS. We set that on the bot environments
        to tell each worker how much parallelism it should use.

        Instead this runner was using all the system cores (which on some
        cases is 256) and that was causing issues on other containers/workloads
        running on the same system at the same time.

        This environment variable is understood by all webkit-related test scripts.
        It should be accepted also by this test262 runner script.

        On top of that, this patch removes the multiplication that is done
        when the number of parallel jobs is not specified and its calculated
        from the available cores of the system. On one hand there is no
        written motivation for this multiplication behaviour, and on the other
        hand there is evidence that it doesn't improve performance.

        * Scripts/test262/Runner.pm:
        (getProcesses):

2019-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Fix build
        https://bugs.webkit.org/show_bug.cgi?id=204136

        Reviewed by Alex Christensen.

        Remove deprecation warnings.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController validateMenuItem:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        (-[DragInfo ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[DragInfo draggedImage]): Deleted.

2019-11-13  Megan Gardner  <megan_gardner@apple.com>

        check-webkit-style: fix false errors for obj-c method calls in range-based for statements using colon syntax
        https://bugs.webkit.org/show_bug.cgi?id=204142

        Reviewed by Jonathan Bedard.

        Allow for the existance of an obj-c method call in a range-based for statement that also uses colons.
        Do not allow colons between square brackets to trigger the error.
        Also add a test for this specific case.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_spacing):

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

        [EWS] Parse jsc_results.json for JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=204090

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJavaScriptCoreTests):
        (RunJavaScriptCoreTests.start): Initialize log_observer for json.
        (RunJavaScriptCoreTests.commandComplete): Parse jsc_results.json and set properties accordingly.
        (RunJavaScriptCoreTests.getResultSummary): Update the build-step summary string.
        (ReRunJavaScriptCoreTests):
        (RunJSCTestsWithoutPatch):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.setUp): Added sample json files for testing.
        (TestRunJavaScriptCoreTests.configureStep):
        (TestRunJavaScriptCoreTests.test_single_stress_test_failure): Added unit-tests.
        (TestRunJavaScriptCoreTests.test_lot_of_stress_test_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_masm_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_b3_and_stress_test_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_dfg_air_and_stress_test_failure): Ditto.

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

        Take service worker assertions based on client processes assertion states
        https://bugs.webkit.org/show_bug.cgi?id=204119

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Add tests checking service worker process assertion state.

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

        Make webkitperl EWS robust against flakiness in webkitperl tests
        https://bugs.webkit.org/show_bug.cgi?id=204155

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPerlTests): Set haltOnFailure and flunkOnFailure to false.
        (RunWebKitPerlTests.evaluateCommand): Add re-run step in case of failure.
        (ReRunWebKitPerlTests):
        (ReRunWebKitPerlTests.evaluateCommand): Overrided this to avoid running this step again.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestReRunJavaScriptCoreTests): Added unit-tests.

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

        Flaky API Test TestWebKitAPI.ServiceWorkers.ThrottleCrash
        https://bugs.webkit.org/show_bug.cgi?id=203734
        <rdar://problem/56814638>

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: Disabled the flaky test for now.

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

        Flaky API Test TestWebKitAPI.WebKit.ApplicationCacheDirectories
        https://bugs.webkit.org/show_bug.cgi?id=203732
        <rdar://problem/56814641>

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm: Disabled the flaky test for now.

2019-11-13  Rob Buis  <rbuis@igalia.com>

        Support stale-while-revalidate cache strategy
        https://bugs.webkit.org/show_bug.cgi?id=201461

        Reviewed by Youenn Fablet.

        Enable stale-while-revalidate for the test runner.

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

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

        [iOS] WKWebView does not respect system spellchecking preference
        https://bugs.webkit.org/show_bug.cgi?id=204100
        <rdar://problem/56653808>

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/cocoa/UIScriptControllerCocoa.h:
        * DumpRenderTree/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::UIScriptControllerCocoa):
        (WTR::UIScriptControllerCocoa::setContinuousSpellCheckingEnabled):

        Add a new UIScriptControllerCocoa subclass for DumpRenderTree. For now, this will just contain the cross-
        platform implementation of setContinuousSpellCheckingEnabled.

        * DumpRenderTree/ios/UIScriptControllerIOS.h:
        (WTR::UIScriptControllerIOS::UIScriptControllerIOS):
        * DumpRenderTree/mac/UIScriptControllerMac.h:
        (WTR::UIScriptControllerMac::UIScriptControllerMac):

        Make both -IOS and -Mac subclasses inherit from UIScriptControllerCocoa.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::setContinuousSpellCheckingEnabled):

        Add a new script controller method to change the platform spell checking preference during a layout test.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

        Adjust this to explicitly turn continuous spellchecking on or off based on the `shouldShowSpellCheckingDots`
        test option flag, instead of toggling it on and then off when resetting state before and after the layout test.

        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
        * WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
        (WTR::UIScriptControllerCocoa::setContinuousSpellCheckingEnabled):

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

        Update unit-tests for JSC EWS
        https://bugs.webkit.org/show_bug.cgi?id=204123

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.configureStep):
        (TestRunJavaScriptCoreTests.test_success): Updated platform to mac-highsierra.
        (TestRunJavaScriptCoreTests.test_failure): Ditto.
        (TestRunJavaScriptCoreTests.test_remote_success): Unit-test for jsc-only platform.
        (TestReRunJavaScriptCoreTests): Automatically run all unit-tests from TestRunJavaScriptCoreTests class.

2019-11-12  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Add 'test262-test' step to GTK and WPE build bots
        https://bugs.webkit.org/show_bug.cgi?id=204063

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

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

        Unreviewed. Update W3C WebDriver imported tests.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mozlog): Update the mozlog version and add mozterm that is ow required by mozlog.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__): Add alternate domain for cross-origin checks.

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

        [Win] UIScriptController::zoomToScale not implemented
        https://bugs.webkit.org/show_bug.cgi?id=180424

        Reviewed by Alex Christensen.

        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/UIScriptControllerWin.cpp: Added.
        (WTR::UIScriptController::create):
        (WTR::UIScriptControllerWin::doAsyncTask):
        (WTR::UIScriptControllerWin::zoomToScale):
        (WTR::UIScriptControllerWin::zoomScale const):
        * DumpRenderTree/win/UIScriptControllerWin.h: Added.
        (WTR::UIScriptControllerWin::UIScriptControllerWin):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/PlatformWin.cmake:
        * WebKitTestRunner/win/UIScriptControllerWin.cpp: Added.
        (WTR::UIScriptController::create):
        (WTR::UIScriptControllerWin::doAsyncTask):
        (WTR::UIScriptControllerWin::zoomToScale):
        (WTR::UIScriptControllerWin::zoomScale const):
        * WebKitTestRunner/win/UIScriptControllerWin.h: Added.
        (WTR::UIScriptControllerWin::UIScriptControllerWin):

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

        [GTK] WebDriver: implement new window command
        https://bugs.webkit.org/show_bug.cgi?id=203994

        Reviewed by Carlos Alberto Lopez Perez.

        Add support for new window command to MiniBrowser and a test case to check the new API to unit tests.

        * MiniBrowser/gtk/BrowserWindow.c:
        (findActiveWindow):
        (browser_window_get_or_create_web_view_for_automation):
        (browser_window_create_web_view_in_new_tab_for_automation):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createWebViewForAutomationInWindowCallback):
        (createWebViewForAutomationInTabCallback):
        (automationStartedCallback):
        (createWebViewForAutomationCallback): Deleted.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):

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

        Add SPI to access a WebsiteDataStore without instantiating it, and its configuration
        https://bugs.webkit.org/show_bug.cgi?id=204089

        Reviewed by Tim Horton.

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

2019-11-11  Ross Kirsling  <ross.kirsling@sony.com>

        UTC offset for Samoa is miscalculated when !HAVE(TIMEGM)
        https://bugs.webkit.org/show_bug.cgi?id=204032

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:
        Allow environment variables to be passed to "complex" tests.

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

        Regression r252309: API Test TestWebKitAPI._WKActivatedElementInfo.InfoForLinkAroundImage is failing consistently
        https://bugs.webkit.org/show_bug.cgi?id=204058
        <rdar://problem/57056000>

        Unreviewed.

        Remove test that looks at screen dimensions, because it fails on iPad.

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

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

        [EWS] Use named arguments in factories.py
        https://bugs.webkit.org/show_bug.cgi?id=204071

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__):
        (StyleFactory.__init__):
        (WatchListFactory.__init__):
        (BindingsFactory.__init__):
        (WebKitPerlFactory.__init__):
        (WebKitPyFactory.__init__):
        (BuildFactory.__init__):
        (TestFactory.__init__):
        (JSCTestsFactory.__init__):
        (WindowsFactory.__init__):
        (WinCairoFactory.__init__):
        (GTKFactory.__init__):
        (WPEFactory.__init__):
        (ServicesFactory.__init__):

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

        EWS should retry build in case of kill-old-processes failure
        https://bugs.webkit.org/show_bug.cgi?id=203858

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (KillOldProcesses.evaluateCommand): Retry the build in case of failure.
        (KillOldProcesses.getResultSummary): Update the build-step summary string.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        Clicky Orbing support.apple.com categories shows a PNG instead of the web page preview, tapping loads image asset only instead of web page
        https://bugs.webkit.org/show_bug.cgi?id=204037
        <rdar://55614939>

        Reviewed by Simon Fraser.

        New tests for a link wrapping an image, and the ordering of API and SPI.

        Rename these tests so that they are much easier to filter on the command line.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ContextMenus.mm:
        (TEST):
        (-[TestContextMenuAPIBeforeSPIUIDelegate webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate _webView:contextMenuConfigurationForElement:completionHandler:]):
        (-[TestContextMenuAPIBeforeSPIUIDelegate webView:contextMenuWillPresentForElement:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/image.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/link-with-image.html: Added.

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

        WKWebView Find-in-page API.
        <rdar://problem/46971112> and https://bugs.webkit.org/show_bug.cgi?id=203872

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPageAPI.mm: Added.
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView selectionRangeHasStartOffset:endOffset:]):

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

        Simulators having trouble launching apps after booting
        <rdar://problem/57032042>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Temporarily increase timeout to help out bots.

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

        results.webkit.org: List failing tests for criteria
        https://bugs.webkit.org/show_bug.cgi?id=203905

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/controller/api_routes.py:
        (APIRoutes.__init__): Add FailureController and /failures endpoint.
        * resultsdbpy/resultsdbpy/controller/failure_controller.py: Added.
        (FailureController): Added FailureController object to drive /failure endpoint.
        (FailureController.__init__):
        (FailureController.failures): Return a json list of failures for a range.
        * resultsdbpy/resultsdbpy/controller/failure_controller_unittest.py: Added.
        (FailureControllerTest): Test the /failure API.
        (FailureControllerTest.setup_webserver):
        (FailureControllerTest.test_failures_collapsed):
        (FailureControllerTest.test_unexpected_failures_collapsed):
        (FailureControllerTest.test_failures):
        (FailureControllerTest.test_unexpected_failures):
        (FailureControllerTest.test_failure_by_time):
        * resultsdbpy/resultsdbpy/model/failure_context.py: Added.
        (FailureContext): Database access to tables recording test failures.
        (FailureContext.TestFailuresBase):
        (FailureContext.TestFailuresBase.unpack):
        (FailureContext.TestFailuresByCommit): Save test failures sorted by commit.
        (FailureContext.TestFailuresByStartTime): Save test failures sorted by start time.
        (FailureContext.UnexpectedTestFailuresByCommit): Save unexpected test failures
        sorted by commit.
        (FailureContext.UnexpectedTestFailuresByStartTime): Save unexpected test failures
        sorted by commit.
        (FailureContext.__init__):
        (FailureContext.register): Register test failures to each of the 4 tables for an upload.
        (FailureContext._failures): Return a list of test failures from a table.
        (FailureContext.failures_by_commit): Return a list of test failures from a table sorted
        by commit.
        (FailureContext.failures_by_start_time): Return a list of test failures from a table
        sorted by commit.
        * resultsdbpy/resultsdbpy/model/failure_context_unittest.py: Added.
        (FailureContextTest):
        (FailureContextTest.init_database):
        (FailureContextTest.test_failures_collapsed):
        (FailureContextTest.test_unexpected_failures_collapsed):
        (FailureContextTest.test_failures):
        (FailureContextTest.test_unexpected_failures):
        * resultsdbpy/resultsdbpy/model/model.py:
        (Model.__init__):
        * resultsdbpy/resultsdbpy/view/templates/documentation.html: Add documentation
        for the /failure endpoint.

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

        Fix flaky tests in http/tests/cache/disk-cache
        https://bugs.webkit.org/show_bug.cgi?id=203822

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setCacheModel):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        Clicking on EWS status-bubble should open the results in new tab
        https://bugs.webkit.org/show_bug.cgi?id=204012

        Reviewed by Alexey Proskuryakov.

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

2019-11-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Return NotAllowedError immediately for UI cancellations
        https://bugs.webkit.org/show_bug.cgi?id=203937
        <rdar://problem/56962420>

        Reviewed by Brent Fulgham.

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

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

        [ews] Prioritize builders over testers when a bot is shared over multiple queues
        https://bugs.webkit.org/show_bug.cgi?id=204007

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        (prioritizeBuilders): Method to prioritize builder queues over tester queues.

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

        Build fix for platforms without WebRTC's SSL after r252185
        https://bugs.webkit.org/show_bug.cgi?id=203934

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        The new test uses TLS with the HTTPS proxy.  Don't compile it if we can't compile it.

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

        [GTK] Add pointer lock permission request API
        https://bugs.webkit.org/show_bug.cgi?id=203896

        Reviewed by Adrian Perez de Castro.

        Handle pointer lock permission requests in MiniBrowser and add a new tests case to check the new API.

        * MiniBrowser/gtk/BrowserTab.c:
        (pointerLockMessageTimeoutCallback):
        (decidePermissionRequest):
        (browserTabFinalize):
        (browserTabConstructed):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewPointerLockPermissionRequest):
        (beforeAll):

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

        TestController may reuse a view that used window.open(), which prevents process-swapping and causes flakiness
        https://bugs.webkit.org/show_bug.cgi?id=203981

        Reviewed by Ryosuke Niwa.

        Stop reusing WebViews that have created other WebViews (via window.open()) since this prevents process-swapping
        and may therefore cause flakiness (see Bug 203965).

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        * WebKitTestRunner/TestController.h:

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

        [ews] rename RunJavaScriptCoreTestsToT to RunJSCTestsWithoutPatch
        https://bugs.webkit.org/show_bug.cgi?id=203959

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunJSCTestsWithoutPatch): Renamed.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        Re-enable NSURLSession isolation after r252116
        https://bugs.webkit.org/show_bug.cgi?id=203934
        <rdar://problem/56921584>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (-[DataTaskIdentifierCollisionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[DataTaskIdentifierCollisionDelegate waitForMessages:]):
        (-[DataTaskIdentifierCollisionDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):

2019-11-07  Paulo Matos  <pmatos@igalia.com>

        Add support for remotes file for EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=203899

        Reviewed by Aakash Jain.

        Require to support builders that cross-compile and run tests on native machines
        through the use of --remote-config-file.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__):
        (StyleFactory.__init__):
        (WatchListFactory.__init__):
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.__init__):
        (ConfigureBuild.start):
        (RunJavaScriptCoreTests.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunJavaScriptCoreTests.test_remote_success):

2019-11-06  Antti Koivisto  <antti@apple.com>

        REGRESSION: [ iOS ] ( r251015 ) Layout Test fast/text/whitespace/pre-wrap-overflow-selection.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=203366
        <rdar://problem/56580680>

        Reviewed by Simon Fraser.

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

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

        WEBCORE_TESTSUPPORT_EXPORT should be used only for WebCoreTestSupport, not for WebCore
        https://bugs.webkit.org/show_bug.cgi?id=203876

        Reviewed by Ross Kirsling.

        * TestWebKitAPI/win/TestWebKitAPIPrefix.h:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        Define WEBCORE_TESTSUPPORT_EXPORT emtpy.

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

        [Win] DumpRenderTree.exe and WebKitTestRunner.exe shouldn't link with WebCoreTestSupport
        https://bugs.webkit.org/show_bug.cgi?id=203879

        Reviewed by Ross Kirsling.

        After r252086, WinCairo DumpRenderTree.exe and
        WebKitTestRunner.exe can't start because they are linked with
        WinCairoRequirements DLLs unexpectedly.

        DumpRenderTree.exe and WebKitTestRunner.exe are just wrapper
        programs. They shouldn't link with WinCairoRequirements libs.

        * DumpRenderTree/PlatformWin.cmake: Set DumpRenderTree_LIBRARIES only shlwapi.
        * WebKitTestRunner/PlatformWin.cmake: Set WebKitTestRunner_LIBRARIES only shlwapi.

2019-11-06  Kate Cheney  <katherine_cheney@apple.com>

        Update entry in contributors.json to fix commit privileges.

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

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

        Unreviewed build fix: fix TestWebKitAPI in macCatalyst, tvOS, and
        watchOS builds by conditionalizing some code on HAVE_UIWEBVIEW and
        HAVE_PDFKIT. Follow-up to r251976.

        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/JSLockTakesWebThreadLock.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollToRevealSelection.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        * TestWebKitAPI/config.h:

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

        All EWS status-bubbles shows #1 on security patches when patch is uploaded with webkit-patch --no-review
        https://bugs.webkit.org/show_bug.cgi?id=203903

        Reviewed by David Kilzer.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):

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

        [ews] Increase timeout for svn-apply
        https://bugs.webkit.org/show_bug.cgi?id=203909

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

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

        Add watchlist category for BuildSlaveSupport
        https://bugs.webkit.org/show_bug.cgi?id=203900

        Reviewed by Jonathan Bedard.

        * Scripts/webkitpy/common/config/watchlist:

2019-11-06  Philippe Normand  <philn@igalia.com>

        [GTK][WPE] Add libfdk-aac-dev to the install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=203812

        Reviewed by Carlos Garcia Campos.

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

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

        [GTK] Implement support for Pointer Lock API
        https://bugs.webkit.org/show_bug.cgi?id=202956

        Reviewed by Carlos Alberto Lopez Perez.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::getGDKKeySymForKeyRef): Handle escape key.

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

        [iOS] Scroll position does not get restored when doing a history navigation while the reader view is shown
        https://bugs.webkit.org/show_bug.cgi?id=203871
        <rdar://problem/56564603>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/simple-tall.html:
        * TestWebKitAPI/Tests/WebKitCocoa/RestoreScrollPosition.mm: Added.
        (TestWebKitAPI::TEST):

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

        REGRESSION(r252031): layout tests fail to run in non apple ports after r252031 (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=203844

        Rubber-stamped by Aakash Jain.

        Remove infinite loop for Windows.

        * Scripts/webkitpy/port/win.py:
        (WinPort._path_to_default_image_diff):
        (WinPort._path_to_image_diff): Deleted.

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

        EWS should report test failures from clean-tree to results.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=203829

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests.__init__):
        (RunWebKitTestsWithoutPatch.start):
        (RunAPITestsWithoutPatch.start):
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added and updated unit-tests.

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

        Native text substitutions interfere with HTML <datalist> options resulting in crash
        https://bugs.webkit.org/show_bug.cgi?id=203116
        <rdar://problem/49875932>

        Reviewed by Tim Horton.

        Add a new testing hook to wait for datalist suggestions to show up and choose the suggestion at the given index.

        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::activateDataListSuggestion):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::activateDataListSuggestion):
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::activateDataListSuggestion):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::isShowingDataListSuggestions const):
        (WTR::UIScriptControllerMac::activateDataListSuggestion):

        Dig through the view hierarchy of the NSWindow subclass used to show datalist suggestions for the table view
        containing the suggestions; then, select the given row, and invoke the action on the target.

        (WTR::UIScriptControllerMac::dataListSuggestionsTableView const):

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

        TestWebKitAPI.WebKit.DocumentEditingContext is failing on iPad
        https://bugs.webkit.org/show_bug.cgi?id=203828
        <rdar://problem/55854631>

        Reviewed by Myles Maxfield.

        Specify both a font size and line height when using Ahem as per [1]. Otherwise, text may be
        rendered inconsistently. Plus, disable text-autosizing and fix viewport to make test result
        consistent on both iPhone and iPad. 

        [1] <https://web-platform-tests.org/writing-tests/ahem.html>

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (applyStyle): Remove unused style for <iframe>s and fix up parameter name to conform to style guide.
        (applyAhemStyle): Set -webkit-text-size-adjust to 100% to disable auto-sizing. Fix viewport width
        and initial scale to ensure the result is the same on both iPhone and iPad. Also remove unused style
        for <iframe>s and renamed parameter name to conform to style guide.
        (TEST):

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

        REGRESSION (r250754): web page using IDBIndex doesn't load occasionally
        https://bugs.webkit.org/show_bug.cgi?id=203431

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBInPageCache.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBInPageCache.mm: Added.
        (-[IndexedDBInPageCacheMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBNotInPageCache.html: Added.

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

        webkitpy: Build ImageDiff if it is missing (Follow-fix)
        https://bugs.webkit.org/show_bug.cgi?id=183422

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/base.py:
        (Port._path_to_image_diff): Use the host build directory.
        * Scripts/webkitpy/port/config.py:
        (Config.build_directory): Allow the caller to ignore the port argument, which will return the default
        build directory for the host running the script.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.make_port):

2019-11-05  Chris Lord  <clord@igalia.com>

        [WPE] WebKit.NewFirstVisuallyNonEmptyLayout* unexpected pass
        https://bugs.webkit.org/show_bug.cgi?id=203846

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/glib/TestExpectations.json:

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

        REGRESSION(r252031): layout tests fail to run in non apple ports after r252031
        https://bugs.webkit.org/show_bug.cgi?id=203844

        Reviewed by Žan Doberšek.

        Since r252032 Port.check_image_diff() assumes that ImageDiff binary is built in the build path, which is not
        true for all ports. This patch adds Port._path_to_default_image_diff() to be used instead of the build_path()
        and overriden by ports not building the ImageDiff in the build path.

        * Scripts/webkitpy/port/base.py:
        (Port.check_image_diff):
        (Port._path_to_default_image_diff):
        (Port._path_to_image_diff):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._path_to_default_image_diff):
        * Scripts/webkitpy/port/win.py:
        (WinPort._path_to_default_image_diff):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._path_to_default_image_diff):

2019-11-05  Chris Lord  <clord@igalia.com>

        [WPE] Geolocation API tests are consistently passing
        https://bugs.webkit.org/show_bug.cgi?id=203845

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/glib/TestExpectations.json:

2019-11-05  youenn fablet  <youenn@apple.com>

        Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
        https://bugs.webkit.org/show_bug.cgi?id=203362

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):
        Update test to take into account the ability to ask again for permission.
        * TestWebKitAPI/Tests/WebKit/getDisplayMedia.html:
        Update to make sure we notify test if internals is not available.

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

        [ews] Perform validation of patch before retrying API and layout tests
        https://bugs.webkit.org/show_bug.cgi?id=203756

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch.__init__): Added parameters to optionally skip certain validations.
        (ValidatePatch.start): Skip certain validations based on the parameters.
        (RunWebKitTests.evaluateCommand): Add a ValidatePatch step before retrying.
        (ReRunWebKitTests.evaluateCommand): Ditto.
        (RunAPITests.evaluateCommand): Ditto.
        (ReRunAPITests.evaluateCommand): Ditto.

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

        [WebAuthn] Guard against unexpected -[_WKWebAuthenticationPanel cancel]
        https://bugs.webkit.org/show_bug.cgi?id=203830
        <rdar://problem/56797134>

        Reviewed by Brent Fulgham .

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (-[TestWebAuthenticationPanelDelegate panel:dismissWebAuthenticationPanelWithResult:]):
        (TestWebKitAPI::TEST):

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

        webkitpy: Build ImageDiff if it is missing
        https://bugs.webkit.org/show_bug.cgi?id=183422

        Reviewed by Alexey Proskuryakov.

        ImageDiff is built with a different SDK than the rest of the WebKit
        stack, and this frequently causes infrastructure failures where ImageDiff
        is missing on testers. To address this, we should automatically build
        ImageDiff if it is missing.

        * Scripts/webkitpy/port/base.py:
        (Port.check_build): Unconditionally build ImageDiff if it is missing.
        (Port.check_image_diff): Use _build_path since _path_to_image_diff will
        attempt to use a back-up location.
        (Port._path_to_image_diff): If the provided path to ImageDiff does not
        exist, use the path of the one we built.

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

        Add Googletest assertion support for CGRect and NSRect
        https://bugs.webkit.org/show_bug.cgi?id=203817

        Reviewed by Myles C. Maxfield.

        Add operator== and operator<< overloads for CGRect and NSRect so that these types can be
        passed to EXPECT_EQ() and other Googletest assertions.

        To make use of these overloads Cocoa tests should include #import "TestCocoa.h" instead of
        "Test.h". TestCocoa.h imports Test.h. With these overloads an assertion like this:

            EXPECT_EQ(CGRectMake(0, 0, 23, 24), rects[0].CGRectValue);

        will produce output like this when it fails:

            Expected equality of these values:
              CGRectMake(138, 0, 23, 24)
                Which is: (origin = (x = 138, y = 0), size = (width = 23, height = 24))
              rects.firstObject.CGRectValue
                Which is: (origin = (x = 96, y = 0), size = (width = 16, height = 17))

        * TestWebKitAPI/SourcesCocoa.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add source files.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        Write in terms of EXPECT_EQ() now that it just works when passed CGRects.

        * TestWebKitAPI/cocoa/TestCocoa.h: Added.
        * TestWebKitAPI/cocoa/TestCocoa.mm: Added.
        (ostreamRectCommon):
        (operator<<):
        (operator==):

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

        [ews] Status bubble should be white for CANCELLED builds
        https://bugs.webkit.org/show_bug.cgi?id=201204

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

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

        Resource Load Statistics: Flush the shared ResourceLoadObserver when the webpage is closed by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=203623
        <rdar://problem/56756427>

        Reviewed by Alex Christensen.

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

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

        Consolidate forEachViewInHierarchy and findAllViewsInHierarchyOfType into common helper file
        https://bugs.webkit.org/show_bug.cgi?id=203777

        Reviewed by Tim Horton.

        * TestRunnerShared/cocoa/PlatformViewHelpers.h: Added.
        * TestRunnerShared/cocoa/PlatformViewHelpers.mm: Added.

        Add a new Cocoa helper file, PlatformViewHelpers, to make it easier to traverse platform view hierarchies
        (NSView and UIView) for testing purposes. This is minor refactoring, before I try to create some new testing
        primitives to make webkit.org/b/203116 testable.

        (forEachViewInHierarchy):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::findEditableImageCanvas const):
        (WTR::forEachViewInHierarchy): Deleted.
        (WTR::findEditableImageCanvas): Deleted.

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

        Flaky API Test TestWebKitAPI.WebKit.UploadDirectory
        https://bugs.webkit.org/show_bug.cgi?id=203652

        Reviewed by Alexey Proskuryakov.

        It is not important that the directory to upload does not exist before the test starts.
        Make the test more robust to state left behind by previous iterations of this test by removing the check.
        The important check in this test is the uploaded body size.

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

2019-11-04  Kate Cheney  <katherine_cheney@apple.com>

        updated email in contributors.json to match bugzilla.

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

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

        REGRESSION (r251623): When downloading a QuickLook file, the web view navigates to a "The URL can't be shown" error page instead of staying on the current page
        https://bugs.webkit.org/show_bug.cgi?id=203790
        <rdar://problem/56795440>

        Reviewed by Alex Christensen.

        Tested that "download" and "cancel" policy decisions for QuickLook files result in a
        provisional navigation failure with error code WebKitErrorFrameLoadInterruptedByPolicyChange.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookDelegate navigationError]):
        (-[QuickLookDelegate _webView:didFailNavigation:withError:userInfo:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (TEST):

2019-11-04  Peng Liu  <peng.liu6@apple.com>

        Cannot run WebKit layout tests on iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=203796

        Reviewed by Jonathan Bedard.

        Fix the error to parse iOS version numbers like "xx.yy".

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):

2019-11-03  Tim Horton  <timothy_horton@apple.com>

        WKWebView can get stuck blank (Web Content process thinks the app is backgrounded)
        https://bugs.webkit.org/show_bug.cgi?id=203774
        <rdar://problem/53399054>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm: Added.
        (TEST):
        (isBackground):
        (createHostViewForExtensionIdentifier):
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewResizeCrash.mm: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewStablePresentationUpdateCallback.mm: Removed.
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFinishNavigationWithoutPresentationUpdate]):
        Merge existing WKPDFView tests into one file, and add one for this bug.

2019-11-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Add diagnostic logging for frontend feature usage
        https://bugs.webkit.org/show_bug.cgi?id=203579
        <rdar://problem/56717410>

        Reviewed by Brian Burg.

        Original patch by Matt Baker <mattbaker@apple.com>.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_INSPECTOR_TELEMETRY`, which is only enabled for macOS.

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

        Python 3: Add support in webkitpy.layout_tests.model
        https://bugs.webkit.org/show_bug.cgi?id=203702

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.layout_tests.model.
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (SpecifierSorter.sort_specifiers): Convert iterator to list.
        (TestConfigurationConverter.to_config_set): Use reduce from functors.
        (TestConfigurationConverter.intersect_combination): Ditto.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationsModel.get_test_set_for_keyword): Use iterators in both Python 2
        and Python 3.
        (TestExpectationsModel._remove_from_sets): Ditto.
        (TestExpectations.parse_generic_expectations): Covert iterators to lists for indexing.
        (TestExpectations.parse_default_port_expectations): Ditto.
        (TestExpectations.parse_override_expectations): Ditto.
        (TestExpectations.remove_configuration_from_test): Use any instead of just checking the
        first element in the set.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Use items instead of iteritems.

2019-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: add a timeline that shows information about any recorded CSS animation/transition
        https://bugs.webkit.org/show_bug.cgi?id=203651
        <rdar://problem/56128726>

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/WTF/Markable.cpp:
        (TestWebKitAPI::TEST):
        Add tests for extra utility operators.

2019-11-01  Brady Eidson  <beidson@apple.com>

        Promote "_getWebArchive" to API.
        <rdar://problem/17317547> and https://bugs.webkit.org/show_bug.cgi?id=203767

        Reviewed by Andy Estes.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController saveAsPDF:]):
        (-[BrowserWindowController saveAsWebArchive:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController saveAsWebArchive:]):

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

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

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.
        * Scripts/webkitpy/common/find_files_unittest.py: Use full import path.
        * Scripts/webkitpy/common/lru_cache_unittest.py:
        (LRUCacheTest.test_size_one_pop): Convert iterator to list
        * Scripts/webkitpy/common/prettypatch_unittest.py: Check for byte array explicitly.
        * Scripts/webkitpy/common/read_checksum_from_png_unittest.py: Use unicode compatible
        StringIO.
        (ReadChecksumFromPngTest.test_read_checksum):
        * Scripts/webkitpy/common/timeout_context.py:
        (Timeout.__enter__): Use range instead of xrange.

2019-11-01  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Get TestWebKitAPI building
        https://bugs.webkit.org/show_bug.cgi?id=203728

        Reviewed by Alexey Proskuryakov.

        * Makefile:
        Only build gtest and TestWebKitAPI for macCatalyst.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Make use of WK_COCOA_TOUCH instead of SDK conditionals.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        Fix some #ifdefs for macCatalyst.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollToRevealSelection.mm:
        (-[LegacyLoadingDelegate webViewDidFinishLoad:]):
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        (-[AsyncPolicyDelegateForInsetTest webView:didFinishNavigation:]):
        (TestWebKitAPI::TEST):
        Util::runUntil wants a bool, not a BOOL.

        * TestWebKitAPI/config.h:
        Import WebKitLegacy.h after WebKit.h. Traditionally WebKit.h includes
        WebKitLegacy.h, except in macCatalyst. Many tests depend on being able
        to get WebKitLegacy.h this way.

        * Scripts/webkitpy/style/checkers/sdkvariant.py:

        * Scripts/webkitpy/port/factory.py:
        * Scripts/webkitpy/port/mac.py:
        Add a MacCatalyst port behind --maccatalyst, and do the bare minimum
        required to get it working and finding the right binaries.
        It inherits from Mac instead of iOS because for the purposes of
        finding and running binaries, dealing with I/O, etc., these are
        100% bona fide macOS products.

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

        [ews] Improve summary string when there are flaky failures in API tests
        https://bugs.webkit.org/show_bug.cgi?id=203747

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults): Display pre-existing failure string string only
        if there are pre-existing API test failures.

2019-11-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        TestWebKitAPI.EditorStateTests.TypingAttributesTextAlignmentStartEnd is flaky in iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=203733
        <rdar://problem/56814640>

        Reviewed by Tim Horton.

        Try to fix the flaky test by making EditingTestHarness more robust. Instead of checking for expected editor
        state entries after the next presentation update, wait for the latest editor state entry to contain the expected
        values.

        * TestWebKitAPI/EditingTestHarness.mm:
        (-[EditingTestHarness _execCommand:argument:expectEntries:]):

        Preserve the existing log statement by printing it out once after a few seconds, if the entry is still not found
        in the last known editor state.

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

        [ews] Pass clobber-old-results parameter to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=203736

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitTests): Added --clobber-old-results paramter to run-webkit-tests. Also re-ordered
        --no-new-test-results and --no-show-results to match with build.webkit.org configuration.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        [CMake] TestWebCore shouldn't link with WebCoreTestSupport
        https://bugs.webkit.org/show_bug.cgi?id=203672

        Reviewed by Don Olmstead.

        TestWebCore doesn't need to link with WebCoreTestSupport. And, it
        causes a problem for Windows because WebCoreTestSupport imports
        WebCore symbols by using dllimport, however, WebCore is not a DLL.
        (Bug 203663 Comment 4)

        * TestWebKitAPI/CMakeLists.txt: Changed TestWebCore not to link
        with WebCoreTestSupport. Changed TestWebCore to link with
        WebCoreHeaderInterface instead.

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

        REGRESSION (r251808): run-webkit-test cannot show results.html
        https://bugs.webkit.org/show_bug.cgi?id=203709
        <rdar://problem/56798620>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.show_results_html_file): os.devnull is a string, not a file.

2019-10-31  Matt Baker  <mattbaker@apple.com>

        Changed my emails list.

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

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

        Turn on IOSurface support in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=203026
        <rdar://problem/56320993>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        Don't use RGB10 if we don't have it.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        Don't allocate many megabytes on the stack.
        This isn't currently a problem, but if you accidentally run the tests on
        a 3x simulator it starts crashing.

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

        [WebAssembly] Create a Wasm interpreter
        https://bugs.webkit.org/show_bug.cgi?id=194257
        <rdar://problem/44186794>

        Reviewed by Saam Barati.

        Add a mode that runs WebAssembly tests without the LLInt (i.e. only Air)
        and update the no-air mode to also disable the LLInt tier.

        * Scripts/run-jsc-stress-tests:

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

        [ews-build] Display pre-existing API test names in the build summary
        https://bugs.webkit.org/show_bug.cgi?id=199525

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults): Include the names of pre-existing test failures in summary string and 
        limit the number of failures to display to NUM_API_FAILURES_TO_DISPLAY.

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

        Expose more WKPreferences SPI
        https://bugs.webkit.org/show_bug.cgi?id=203631
        <rdar://problem/56717160>

        Reviewed by Brady Eidson.

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

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

        [iOS] imported/mozilla/svg/text/textpath-selection.svg is still flaky
        https://bugs.webkit.org/show_bug.cgi?id=203659
        <rdar://problem/52124292>

        Reviewed by Tim Horton.

        This test still fails in some internal test runner configurations, because the iOS text selection grabber dots
        sometimes show up in the actual result and not in the expectation. This still happens even after suppressing
        UITextSelectionView during ref test snapshotting in r251526, since the selection grabber dots are embedded as
        subviews of the text interaction container view, rather than UITextSelectionView itself, so hiding
        UITextSelectionView does not affect the visibility of these grabber views (UITextRangeView's -startGrabber and
        -endGrabber).

        To address this, we augment the change made in r251526 to apply to the start and end grabber views as well.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

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

        CMake build should make WebKit framework able to be used by Safari
        https://bugs.webkit.org/show_bug.cgi?id=203685

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:

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

        [EWS] Limit API tests failures to display in the status-bubble tooltip and buildbot summary
        https://bugs.webkit.org/show_bug.cgi?id=203678

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults): Define NUM_API_FAILURES_TO_DISPLAY as 10.
        (AnalyzeAPITestsResults.analyzeResults): Truncate the failure string to contain 10 test failures.

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

        [Picture-in-Picture Web API] Enable the support for iOS
        https://bugs.webkit.org/show_bug.cgi?id=202618

        Reviewed by Jer Noble.

        Enable the Picture-in-Picture API support for iOS (iPad only).

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Prevent Mac CMake build from bit rotting
        https://bugs.webkit.org/show_bug.cgi?id=203647

        Rubber-stamped by Tim Horton.

        * DumpRenderTree/PlatformMac.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

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

        WKContentRuleLists should block requests from service workers
        https://bugs.webkit.org/show_bug.cgi?id=201980
        <rdar://problem/55516735>

        Reviewed by Chris Dumez.

        NSString initWithContentsOfURL doesn't work with https URLs with certificates without a trusted root,
        so I use an ephemeral NSURLSession instead so I can tell it to accept any connection, even our WebKit httpd server.
        I also added an API test.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (-[WKTRSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WTR::TestController::configureContentExtensionForTest):

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

        Add pretty printer for CompactPointerTuple
        https://bugs.webkit.org/show_bug.cgi?id=203495

        Reviewed by Jer Noble.

        Make it easy to see the state of a CompactPointerTuple. Now we will print something like:

                (WTF::CompactPointerTuple<WTF::String *, unsigned char>) $0 = { type = 7 } {
                  [0] = 0x00007ffeefbff220 { length = 8, contents = 'résumé' }
                  [1] = 7
                }

        for aCompactPointerTuple defined like this:

                String aString { "résumé" };
                CompactPointerTuple<String*, uint8_t> aCompactPointerTuple { &aString, 7 };

        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (__lldb_init_module.lldb_webkit):
        (WTFCompactPointerTuple_SummaryProvider):
        (WTFCompactPointerTupleProvider):
        (WTFCompactPointerTupleProvider.__init__):

        (WTFCompactPointerTupleProvider.type_as_string):
        (WTFCompactPointerTupleProvider.is_human_readable_type):
        The majority of the time CompactPointerTuple will be used with non-character type data. So,
        I optimize for this use case and consider the integral value as more readable than than LLDB's
        default summary provider that emits the character or equivalent C escape sequence.

        (WTFCompactPointerTupleProvider.has_children):
        (WTFCompactPointerTupleProvider.num_children):
        (WTFCompactPointerTupleProvider.get_child_index):
        (WTFCompactPointerTupleProvider.get_child_at_index):
        (WTFCompactPointerTupleProvider.update):
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_aliased_flag):
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_empty):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_simple):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_max_type_value):
        (TestSummaryProviders.serial_test_WTFCompactPointerTuple_SummaryProvider_bool):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_empty):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_simple):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_max_type_value):
        (TestSummaryProviders.serial_test_WTFCompactPointerTupleProvider_simple_bool):

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

        Python 3: Add support in webkitpy.port
        https://bugs.webkit.org/show_bug.cgi?id=203489

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.port.
        * Scripts/webkitpy/common/newstringio.py: Removed.
        * Scripts/webkitpy/common/newstringio_unittest.py: Removed.
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockProcess.__init__): Ensure that stdout and stderr are byte arrays.
        * Scripts/webkitpy/common/version.py:
        (Version.__hash__): Add hash function for Version objects.
        * Scripts/webkitpy/port/base.py:
        (Port.default_baseline_search_path): Convert list to map.
        (Port.diff_text): Decode for the native string type.
        (Port.skipped_perf_tests): Convert filter to list.
        (Port._run_script): No need to decode strings in Python 3, even if decode_output is set.
        (Port.diff_text.to_raw_bytes): Deleted.
        * Scripts/webkitpy/port/base_unittest.py:
        (cmp): Add cmp function for Python 3 comparisons.
        (PortTest.test_diff_text): Do not escape spaces.
        (PortTest.test_parse_reftest_list): Write to test file explicitly.
        * Scripts/webkitpy/port/builders_unittest.py: Use full import path.
        * Scripts/webkitpy/port/config_standalone.py: script_dir was refering to Tools,
        not Tools/Scripts.
        * Scripts/webkitpy/port/config_unittest.py: Use full import path.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.show_results_html_file): Use os.devnull directly.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_read_base64_block): Explicitly compare against byte array.
        (DriverTest.test_setup_environ_base_vars): Convert iterators to lists.
        * Scripts/webkitpy/port/factory.py:
        (PortFactory.get.in): Imports need to use the full import path.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.default_baseline_search_path): Convert map to list.
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._parse_leaks_output): Search byte array with byte array.
        * Scripts/webkitpy/port/leakdetector_valgrind.py:
        (ValgrindError.__str__): Split byte array with byte array.
        (ValgrindError.error_hash): Correct regex.
        (LeakDetectorValgrind._parse_leaks_output): Convert bytes to string.
        (LeakDetectorValgrind.parse_and_print_leaks_detail): Standardize Python 2 and 3 sorting order.
        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py: Make unit tests Python 3 compatible.
        * Scripts/webkitpy/port/linux_get_crash_log.py:
        (GDBCrashLogGenerator._get_trace_from_systemd): Modernize exception handling.
        (GDBCrashLogGenerator.generate_crash_log): No need to decode strings in Python 3.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper): is_ready will be a byte array.
        (MacPort.stop_helper): stdin will be a byte array.
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        (MockDRTTest.assertTest): Use unicode compatible StringIO objects.
        (MockDRTTest.test_main): Ditto.
        * Scripts/webkitpy/port/port_testcase.py:
        (bind_mock_apple_additions.MockAppleAdditions.version_name_mapping): Use items instead of iteritems.
        (PortTestCase.test_expectations_ordering): Convert iterator to list.
        (PortTestCase.test_test_expectations): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort.__init__):
        (WinPort.default_baseline_search_path): Convert map to list.
        (WinPort.test_search_path): Ditto.
        (WinPort.setup_crash_log_saving): Use items instead of iteritems.
        (WinPort.restore_crash_log_saving): Ditto.
        (WinPort.prevent_error_dialogs): Ditto.
        (WinPort.allow_error_dialogs): Ditto.
        (WinCairoPort.default_baseline_search_path): Convert map to list.
        (WinCairoPort._port_specific_expectations_files): Ditto.
        (FTWPort.default_baseline_search_path): Ditto.
        (FTWPort._port_specific_expectations_files): Ditto.
        * Scripts/webkitpy/port/win_unittest.py: Ditto.
        (WinPortTest._assert_search_path): Ditto.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.default_baseline_search_path): Convert map to list.
        (WPEPort._port_specific_expectations_files): Ditto.

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

        Simulator testers are filling up
        https://bugs.webkit.org/show_bug.cgi?id=203056
        <rdar://problem/56344905>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Remove some CoreSimulator temporary directories
        after tearing down devices.

2019-10-30  Mark Lam  <mark.lam@apple.com>

        Gardening: fixing broken build.

        Not reviewed.

        JSON appears to not like commas at the end of the last element in an array.

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

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

        WKFrameIsDisplayingMarkupDocument() should return true after a window.open/document.write
        https://bugs.webkit.org/show_bug.cgi?id=203587
        <rdar://problem/56717726>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::createNewPageThenClose):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::createNewPage):
        * TestWebKitAPI/Tests/WebKit/window-open-then-document-open.html: Added.

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

        [Quick Look] Clean up LegacyPreviewLoaderClients
        https://bugs.webkit.org/show_bug.cgi?id=203472

        Reviewed by Brady Eidson.

        Updated API tests to compare data received in
        -_webView:didFinishLoadForQuickLookDocumentInMainFrame: with expected data.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (readFile):
        (-[QuickLookDelegate initWithExpectedFileURL:responsePolicy:]):
        (-[QuickLookDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookDelegate verifyDownload]):
        (TEST):

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

        results.webkit.org: Fix tooltip with drawer
        https://bugs.webkit.org/show_bug.cgi?id=203527

        Rubber-stamped by Aakash Jain.

        The interaction between tooltips and drawers needs improvement, tooltips
        are inconsistently under the drawer, do not treat the drawer as a boundary.

        * resultsdbpy/resultsdbpy/view/static/css/tooltip.css:
        (.tooltip): Use topZIndex variable.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (xAxisFromScale): Pass viewport to ToolTip.
        (TimelineFromEndpoint): Ditto.
        (TimelineFromEndpoint.prototype.update): Ditto.
        (TimelineFromEndpoint.prototype.render): Ditto.
        (TimelineFromEndpoint.prototype.render.onDotEnterFactory): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/tooltip.js:
        (_ToolTip.prototype.toString): Use passed viewport instead of the document size.
        (_ToolTip.prototype.setByElement): Set the viewport based on the passed viewport.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Define the viewport as the
        content element.
        * resultsdbpy/resultsdbpy/view/templates/suite_results.html: Ditto.

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

        [WebAuthn] Add more information to _WKWebAuthenticationPanel
        https://bugs.webkit.org/show_bug.cgi?id=202561
        <rdar://problem/55973910>

        Reviewed by Youenn Fablet and Brent Fulgham.

        Adds new API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (-[TestWebAuthenticationPanelUIDelegate panel]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid.html: Added.

2019-10-07  Jer Noble  <jer.noble@apple.com>

        Implement the Remote Playback API.
        https://bugs.webkit.org/show_bug.cgi?id=162971

        Reviewed by Youenn Fablet.

        Enable RemotePlayback for DumpRenderTree and WebKitTestRunner.

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

2019-10-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add fast path for String#localeCompare
        https://bugs.webkit.org/show_bug.cgi?id=202676

        Reviewed by Mark Lam.

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

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

        Add enterkeyhint support
        https://bugs.webkit.org/show_bug.cgi?id=189546
        <rdar://problem/51021148>

        Reviewed by Tim Horton.

        Add new API tests to check the resulting UIReturnKeyType that gets set on text input traits in the UI process,
        given the different values for "enterkeyhint". Also verifies that the default behaviors of search fields and
        text input fields inside actionable form elements is to show "Search" or "Go" as the return key by default,
        unless a different value for "enterkeyhint" is specified.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/EnterKeyHintTests.mm: Added.
        (-[TestWKWebView test:enterKeyHint:returnKeyType:]):
        (TestWebKitAPI::enterKeyHintTestCases):
        (TestWebKitAPI::createWebViewAndInputDelegateForTesting):
        (TestWebKitAPI::TEST):

2019-10-29  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251639.

        Caused flakey API failures for GetDisplayMediaTest.Constraints

        Reverted changeset:

        "Enforce user gesture for getUserMedia in case a previous
        getUserMedia call was denied"
        https://bugs.webkit.org/show_bug.cgi?id=203362
        https://trac.webkit.org/changeset/251639

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

        Notification permissions are not remembered for origins without port
        https://bugs.webkit.org/show_bug.cgi?id=203537
        <rdar://problem/55281080>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/WKSecurityOrigin.cpp: Added.
        (TestWebKitAPI::TEST):

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

       Removed duplicate email address.

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

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

        Edited email address for commiting.

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

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

        Added myself as a committer.

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

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

        Remove unused _WKProcessPoolConfiguration SPI
        https://bugs.webkit.org/show_bug.cgi?id=203066

        Reviewed by Youenn Fablet.

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

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

        Expose _printOperationWithPrintInfo: SPI as API
        <rdar://problem/36557179> and https://bugs.webkit.org/show_bug.cgi?id=203496

        Reviewed by Andy Estes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController printWebView:]):

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

        results.webkit.org: Show results which are missing expectations
        https://bugs.webkit.org/show_bug.cgi?id=203494
        <rdar://problem/56436643>

        Reviewed by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/css/timeline.css:
        (.dot.warning): Add warning dot with dark-orange color.
        * resultsdbpy/resultsdbpy/view/static/js/expectations.js:
        (Expectations.colorMap): Add warning.
        (Expectations.failureTypes): Ditto.
        (Expectations.failureTypeMap): Ditto.
        (Expectations.symbolMap): Ditto.
        * resultsdbpy/resultsdbpy/view/static/js/timeline.js:
        (Legend): Add warning bubble.

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

        Storage Access API: Make the API work with the experimental 3rd-party cookie blocking
        https://bugs.webkit.org/show_bug.cgi?id=203428
        <rdar://problem/56626949>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsCallDidSetShouldDowngradeReferrerCallback):
        (WTR::TestRunner::statisticsCallDidSetShouldBlockThirdPartyCookiesCallback):
            Both of these were missing resets of their m_hasSet*Callback booleans.

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

        results.webkit.org: Report more descriptive configurations for non-Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=203490
        <rdar://problem/56658244>

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort):
        (GtkPort.configuration_for_upload): Return use GTK as the platform.
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest):
        (GtkPortTest.test_default_upload_configuration):
        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.configuration_for_upload): Use wincairo as the platform.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort):
        (WPEPort.configuration_for_upload): Use WPE as the platform.
        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest):
        (WPEPortTest.test_default_upload_configuration):

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

        [ews] Improve summary for CompileWebKit and CompileJSC build step
        https://bugs.webkit.org/show_bug.cgi?id=203487

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.getResultSummary): Method to generate custom status message.
        (CompileJSC.getResultSummary): Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

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

        [WebAuthn] Warn users when multiple NFC tags present
        https://bugs.webkit.org/show_bug.cgi?id=200932
        <rdar://problem/54890736>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (TestWebKitAPI::TEST):
        Adds a new test for -[_WKWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:].
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc-multiple-tags.html: Added.

2019-10-27  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Test PublicSuffix.TopPrivatelyControlledDomain is failing since r250589
        https://bugs.webkit.org/show_bug.cgi?id=203193

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        (TestWebKitAPI::TEST_F): Add a test for a domain consisting only of dots.

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

        Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
        https://bugs.webkit.org/show_bug.cgi?id=203362

        Reviewed by Eric Carlson.

        Update test to take into account the ability to reask permission.
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):

2019-10-26  Chris Lord  <clord@igalia.com>

        Put OffscreenCanvas behind a build flag
        https://bugs.webkit.org/show_bug.cgi?id=203146

        Reviewed by Ryosuke Niwa.

        Put OffscreenCanvas behind a build flag and enable the runtime setting
        when running tests on platforms where it's built (GTK and WPE).

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

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

        Python 3: Add support in webkitpy.common.checkout
        https://bugs.webkit.org/show_bug.cgi?id=201956

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.checkout.
        * Scripts/webkitpy/common/checkout/changelog.py: Import Python 3 compatible unicdoe.
        * Scripts/webkitpy/common/checkout/changelog_unittest.py: Import Python 3 compatible StringIO.
        * Scripts/webkitpy/common/checkout/checkout.py: Use Python 3 compatible reduce.
        (Checkout._modified_files_matching_predicate): Convert iterators into lists before returning.
        (Checkout.suggested_reviewers): Ditto.
        * Scripts/webkitpy/common/checkout/checkout_mock.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Use full import paths, convert
        iterators into lists.
        * Scripts/webkitpy/common/checkout/diff_parser_unittest.py: Use full import paths, use Python 3
        compatible StringIO.
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__hash__): Committers need to be hashable to be inserted into a set.

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

        Python 3: Add support in webkitpy.xcode
        https://bugs.webkit.org/show_bug.cgi?id=203417

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.xcode.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (ReadableBinaryFileObject.seek): Add seek function to mirror actual binary file
        behavior and support plistlib.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type): Use values instead of itervalues.
        (SimulatedDeviceManager._get_device_identifier_for_type): Use items instead of iteritems.
        (SimulatedDeviceManager.device_count_for_type): Use values instead of itervalues.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (SimulatedDeviceTest.mock_host_for_simctl): Use items instead of iteritems.
        (change_state_to): Explicitly use bytes to edit a binary file.

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

        [EWS] Status page should show compiler ERRORS
        https://bugs.webkit.org/show_bug.cgi?id=203418

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (BuildLogLineObserver): Class for Analyzing build logs and extracting error logs.
        (CompileWebKit.start): Initialize the log observer.
        (CompileWebKit):
        (CompileWebKit.errorReceived): Add the error to the errors log.

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

        Rolling out r251579,r251162,r251512,r251500, and r251498 for build failures
        and test failures

        Unreviewed rollout.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        (-[TestWebAuthenticationPanelUIDelegate panel]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc-multiple-tags.html: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-make-credential-hid.html: Removed.

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

        [iOS 13] fast/forms/ios/accessory-bar-navigation.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=203294
        <rdar://problem/54520848>

        Reviewed by Tim Horton.

        This layout test consistently fails when it is the first test to involve bringing up the keyboard that is run in
        a newly created iOS simulator. This is because a software keyboard is presented when focusing the input fields
        in the test, and the test expectation (which depends on the visual viewport) requires a hardware keyboard.

        WebKitTestRunner already simulates the hardware keyboard being attached using the call to GraphicsServices SPI
        in TestController::platformResetStateToConsistentValues. However, this was effectively a no-op in the case where
        the simulated device has never (in its lifetime, even through reboots) brought up an input view. This is because
        -[UIKeyboardImpl hardwareKeyboardAvailabilityChanged] is never called, due to UIInputResponderController never
        having an active instance with an input view set. As a result, the automaticMinimizationEnabled property of
        UIKeyboardImpl is never set to its correct initial value (which depends on GSEventIsHardwareKeyboardAttached()).

        This leads to UIKeyboardImpl not automatically minimizing itself even though the hardware keyboard is attached
        (but only until the next time the keyboard is shown, after a hardware keyboard availability change notification
        has been sent, which occurs between every layout test).

        To work around this source of flakiness, we ensure that the keyboard preference for enabling automatic
        minimization has been set to @YES by the time we attempt to simulate connecting the hardware keyboard by calling
        GSEventIsHardwareKeyboardAttached. Note that the extra step of writing the value to com.apple.Preferences is
        necessary because logic in TextInput.framework exists that periodically wipes out any cached values for keyboard
        preferences on UIInputResponderController, and then attempts to regenerate them by reading defaults in
        com.apple.Preferences. However, the same logic also fails to actually update com.apple.Preferences before
        reading from it, which results in a software keyboard *very* rarely appearing again when running layout tests
        that don't expect to observe a software keyboard.

        * WebKitTestRunner/ios/TestControllerIOS.mm:

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

        Add exclusion rules to text manipulation SPI
        https://bugs.webkit.org/show_bug.cgi?id=203398
        <rdar://problem/56567256>

        Reviewed by Wenson Hsieh.

        Added tests for including & excluding content based on element names and attribute values.

        Also added a test to make sure _startTextManipulationsWithConfiguration calls the completion handler
        even when the _WKTextManipulationDelegate isn't set.

        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:

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

        results.webkit.org: Report the correct flavor for leaks
        https://bugs.webkit.org/show_bug.cgi?id=203413

        Reviewed by Aakash Jain.

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

2019-10-25  Ross Kirsling  <ross.kirsling@sony.com>

        test262-runner should be able to pass JSC a feature flag
        https://bugs.webkit.org/show_bug.cgi?id=203301

        Reviewed by Keith Miller.

        * Scripts/test262/Runner.pm:
        Recognize mapping from 262 features to JSC runtime options.

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

        Python 3: Add support in webkitpy.common.checkout.scm
        https://bugs.webkit.org/show_bug.cgi?id=203277

        Reviewed by Stephanie Lewis.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.checkout.scm, add --all flag.
        * Scripts/webkitpy/common/checkout/scm/detection.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/scm/detection_unittest.py: Ditto.
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.revisions_changing_file): Convert filter iterator to list.
        (Git.prepend_svn_revision): Patches need to be bytes.
        * Scripts/webkitpy/common/checkout/scm/scm.py: Import unicode.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py: Use full import paths,
        differentiate between binary and text files, replace assertItemsEqual with sorted,
        list fix regexes on byte arrays.
        * Scripts/webkitpy/common/checkout/scm/stub_repository.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/scm/stub_repository_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Use full import paths.
        (SVN.diff_for_revision): Diff for revision should be byte array.
        (SVN.propget): Use Python 3 compatible encoding.

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

        Add a mechanism to find and manipulate text by paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=203286

        Reviewed by Wenson Hsieh.

        Added basic API tests for the new SPI.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm: Added.
        (-[TextManipulationDelegate init]):
        (-[TextManipulationDelegate _webView:didFindItem:forFrame:]):
        (-[TextManipulationDelegate items]):
        (TestWebKitAPI::createItem):

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

        Unreviewed, rolling out r251558.

        This broke internal builds

        Reverted changeset:

        "Add a mechanism to find and manipulate text by paragraphs"
        https://bugs.webkit.org/show_bug.cgi?id=203286
        https://trac.webkit.org/changeset/251558

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

        Expose pageZoom as API.
        https://bugs.webkit.org/show_bug.cgi?id=203381

        Reviewed by Andy Estes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):

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

        Add a mechanism to find and manipulate text by paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=203286

        Reviewed by Wenson Hsieh.

        Added basic API tests for the new SPI.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm: Added.
        (-[TextManipulationDelegate init]):
        (-[TextManipulationDelegate _webView:didFindItem:forFrame:]):
        (-[TextManipulationDelegate items]):
        (TestWebKitAPI::createItem):

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

        Formalize PDF snapshot API.
        https://bugs.webkit.org/show_bug.cgi?id=203374

        Reviewed by Tim Horton.

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

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

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

        [Cocoa] Make it possible to convert SharedBuffer segments and data views to NSData without copying
        https://bugs.webkit.org/show_bug.cgi?id=203348

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        (TestWebKitAPI::TEST_F):

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

        [iOS 13] imported/mozilla/svg/text/textpath-selection.svg is flaky
        https://bugs.webkit.org/show_bug.cgi?id=203247
        <rdar://problem/52124292>

        Reviewed by Tim Horton.

        Roughly 1 in 3000 runs, this test fails due to an image diff, where only the expectation or test page shows a
        native selection view on iOS. Both the test and expectation create DOM selections on the page, which is then
        followed by a native selection view on the page at some point in the future.

        This "point in the future" depends on both WebKit implementation details (i.e. when the next remote layer tree
        commit happens) as well as UIKit implementation details (for example, many methods in UITextSelectionView and
        UIWKTextInteractionAssistant will schedule changes to UIView geometry using a runloop timer, instead of applying
        the updates immediately). Because of the latter, it's impractical to expect native selection views on iOS to
        always appear or not appear after finishing this layout test.

        To mitigate this rare source of flakiness, we hide these native text selection views when snapshotting iOS
        WKWebViews for the purposes of ref and pixel testing.

        Note that we still have a considerable number of layout tests that inspect these native selection views on iOS,
        but they work by waiting until the native selection views reach a particular state (e.g. by polling for the
        number of ranged selection subviews, or the presence of selection handles, or waiting for a caret selection with
        a given geometry, etc.), which ensures that they are robust against subtle changes to the timing of selection
        updates in the UI process.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

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

        WebBackForwardCache::removeEntriesMatching() may re-enter and crash
        https://bugs.webkit.org/show_bug.cgi?id=203341
        <rdar://problem/56553939>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-10-23  Megan Gardner  <megan_gardner@apple.com>

        Rename force-press-related functions to refer to context menus, and fix a former force-press test
        https://bugs.webkit.org/show_bug.cgi?id=202663
        <rdar://problem/52699530>

        Reviewed by Dean Jackson.

        Rename all relevant fuctions to more correctly reflect that this does not specifically
        require a force press to activate any longer.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowContextMenuCallback):
        (WTR::UIScriptController::didShowContextMenuCallback const):
        (WTR::UIScriptController::setDidDismissContextMenuCallback):
        (WTR::UIScriptController::didDismissContextMenuCallback const):
        (WTR::UIScriptController::setDidShowForcePressPreviewCallback): Deleted.
        (WTR::UIScriptController::didShowForcePressPreviewCallback const): Deleted.
        (WTR::UIScriptController::setDidDismissForcePressPreviewCallback): Deleted.
        (WTR::UIScriptController::didDismissForcePressPreviewCallback const): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView resetInteractionCallbacks]):
        (-[TestRunnerWKWebView _didShowContextMenu]):
        (-[TestRunnerWKWebView _didDismissContextMenu]):
        (-[TestRunnerWKWebView _didShowForcePressPreview]): Deleted.
        (-[TestRunnerWKWebView _didDismissForcePressPreview]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::setDidShowContextMenuCallback):
        (WTR::UIScriptControllerIOS::setDidDismissContextMenuCallback):
        (WTR::UIScriptControllerIOS::setDidShowForcePressPreviewCallback): Deleted.
        (WTR::UIScriptControllerIOS::setDidDismissForcePressPreviewCallback): Deleted.

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

        [EWS] Multiple builds are triggered for one patch sometimes in new EWS
        https://bugs.webkit.org/show_bug.cgi?id=199417

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch): Set the flag before sending the patch to buildbot. Unset it in case of failure. 
        Also added additional check for sent_to_buildbot flag before processing patch.
        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch): Improved logging.
        (Patch.set_sent_to_buildbot): Modified to accept sent_to_buildbot paramater, and set the value accordingly.

2019-10-23  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251261.

        This broke multiple tests

        Reverted changeset:

        "Using version 1 CFRunloopSource for faster task dispatch"
        https://bugs.webkit.org/show_bug.cgi?id=202874
        https://trac.webkit.org/changeset/251261

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

        [ews] iOS-13-Simulator-WK2-Tests-EWS is failing with an KeyError exception
        https://bugs.webkit.org/show_bug.cgi?id=203281

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/layout_test_failures.py:
        (LayoutTestFailures.results_from_string.get_failing_tests): Gracefully handle the case of missing 'report' key.

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

        Python 3: Add support in webkitpy.results
        https://bugs.webkit.org/show_bug.cgi?id=202478

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/test-webkitpy-python3: Add webkitpy.results.
        * Scripts/webkitpy/results/upload.py:
        (Upload.Encoder.default): Use range instead of xrange.
        (Upload.create_configuration): Support items iteration for Python 3.
        (Upload.create_run_stats): Change iteritems to items.
        (Upload.create_test_result): Ditto.
        * Scripts/webkitpy/results/upload_unittest.py:
        (UploadTest.Options.__init__): Change iteritems to items.
        (UploadTest.normalize): Ditto.

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

        [WebAuthn] Supply FrameInfo in -[WKUIDelegatePrivate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=202563
        <rdar://problem/55973968>

        Reviewed by Brent Fulgham.

        Adds new test contents into existing tests.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate init]):
        (-[TestWebAuthenticationPanelUIDelegate _webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (-[TestWebAuthenticationPanelUIDelegate frame]):
        (TestWebKitAPI::TEST):

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

        Unreviewed, fix tvOS and watchOS engineering builds after r251377

        -[UIPasteboard itemProviders] is only available on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm:
        (writeMultipleObjectsToPlatformPasteboard):

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

        Python 3: 2to3 script may not be in a user's path
        https://bugs.webkit.org/show_bug.cgi?id=203213

        Reviewed by Dewei Zhu.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.__init__): Remove executive dependencies.
        (AutoinstallImportHook._install_beautifulsoup): Use multiprocess because 2to3 sets
        Some undesirable global logging state.

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

        prepare-ChangeLog should whine about not having tests in WebKit-only patches
        https://bugs.webkit.org/show_bug.cgi?id=203027

        Reviewed by Ryosuke Niwa.

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs):
        Put the "No new tests" or list of newly added tests in the deeper
        of the WebCore or WebKit ChangeLogs, depending on which directories
        the patch touches.

        This is mostly intended to encourage tests for WebKit-only changes.

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

        [ews] Status bubble should show previous failures if any in case patch is skipped
        https://bugs.webkit.org/show_bug.cgi?id=203261

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Display build information from previous builds for skipped patch in
        case there are multiple builds.

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

        Re-enable legacy TLS by default, keep runtime switch
        https://bugs.webkit.org/show_bug.cgi?id=203253

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/TLSDeprecation.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::getWebSocketEventWebKitLegacy):

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

        [ews] Download the build archive from master when download from S3 fails
        https://bugs.webkit.org/show_bug.cgi?id=203263

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (DownloadBuiltProduct.evaluateCommand):
        (DownloadBuiltProductFromMaster): Build step to download the archive from build master.
        (DownloadBuiltProductFromMaster.getResultSummary): Added custom failure message.
        (DownloadBuiltProductFromMaster.evaluateCommand): Overrided to ensure it doesn't use this method from base
        class DownloadBuiltProduct.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

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

        Remove mayHaveServiceWorkerRegisteredForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=203055

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Remove obsolete test.

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

        operator==(Vector, Vector) should work with different inline capacities
        https://bugs.webkit.org/show_bug.cgi?id=203245

        Reviewed by Alex Christensen.

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

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

        Add a script to run ImageDiff manually
        https://bugs.webkit.org/show_bug.cgi?id=203226

        Reviewed by Adrian Perez de Castro.

        This allows to manually run the ImageDiff tool more easily, that
        is sometimes useful when debugging problems with it.

        * Scripts/run-imagediff: Added.

2019-10-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Thread JSGlobalObject* instead of ExecState*
        https://bugs.webkit.org/show_bug.cgi?id=202392

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/TestRunner.cpp:

2019-10-22  Dirk Schulze  <krit@webkit.org>

        Restore my committer status.

        Uneviewed.

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

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

        [results.webkit.org] Change dot and lengend dot use same mechanism to center text and image
        https://bugs.webkit.org/show_bug.cgi?id=203216

        Reviewed by Jonathan Bedard.

        * resultsdbpy/resultsdbpy/view/static/library/css/docs.yaml:
        * resultsdbpy/resultsdbpy/view/static/library/css/index.html:
        * resultsdbpy/resultsdbpy/view/static/library/css/webkit.css:
        (.dot *):
        (.dot img, .dot .text):
        (.dot>img, .dot>.text):
        (.dot.small img, .dot.small .text):
        (.dot.small>img, .dot.small>.text):
        (.dot.medium img, .dot.medium .text):
        (.dot.medium>img, .dot.medium>.text):
        (.dot.large img, .dot.large .text):
        (.dot.large>img, .dot.large>.text):
        (.lengend>.item .dot):
        (.lengend>.item .dot img, .lengend>.item .dot .text):
        (.lengend>.item .dot>img, .lengend>.item .dot>.text):
        (.dot.small *): Deleted.
        (.dot img, .dot.small img): Deleted.
        (.dot.medium *): Deleted.
        (.dot.medium img): Deleted.
        (.dot.large *): Deleted.
        (.dot.large img): Deleted.
        (.lengend>.item .dot .text): Deleted.
        (.lengend>.item .dot img): Deleted.

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

        Move service worker registration matching for navigation loads to network process
        https://bugs.webkit.org/show_bug.cgi?id=203144

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        We are now creating a WebSWClientConnection whenever receiving a WebSWClientConnection message
        from NetworkProcess. It is free to do so given it no longer requires sending some IPC.
        Update the tests accordingly.
        A future patch will remove the service worker registration bit feature and corresponding test.

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

        TestWebKitAPI.ScrollViewScrollabilityTests.ScrollableWithOverflowHiddenAndInputView is failing on iPad simulator
        https://bugs.webkit.org/show_bug.cgi?id=203053

        Reviewed by Wenson Hsieh.
        
        Make ScrollableWithOverflowHiddenAndInputView only test the results on iPhones. Test is not designed for ipad.

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

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

        results.webkit.org: Add ability to display time on bubbles
        https://bugs.webkit.org/show_bug.cgi?id=203202
        <rdar://problem/56436621>

        Rubber-stamped by Aakash Jain.

        * resultsdbpy/resultsdbpy/view/static/js/timeline.js: Add switch to show times under each bubble.
        * resultsdbpy/resultsdbpy/view/templates/search.html: Correctly update timeline on callback.

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

        Dispatch AR event on the originating anchor element
        https://bugs.webkit.org/show_bug.cgi?id=203198
        <rdar://55743929>

        Reviewed by Simon Fraser.

        Improve this test, most importantly so that it
        actually works :)

        Retrieve the ElementIdentifier for the <a> element,
        and trigger a system preview action on it.

        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:
        (-[TestSystemPreviewTriggeredHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/system-preview-trigger.html:

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

        ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
        https://bugs.webkit.org/show_bug.cgi?id=203141

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForRestoreFromDiskTest userContentController:didReceiveScriptMessage:]):
        (-[SWSchemes handledRequests]): Deleted.
        (-[SWSchemes webView:startURLSchemeTask:]): Deleted.
        (-[SWSchemes webView:stopURLSchemeTask:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h: Added.
        (ServiceWorkerTCPServer::ServiceWorkerTCPServer):
        (ServiceWorkerTCPServer::request):
        (ServiceWorkerTCPServer::requestWithLocalhost):
        (ServiceWorkerTCPServer::requestWithFragment):
        (ServiceWorkerTCPServer::userAgentsChecked):
        (ServiceWorkerTCPServer::requestWithFormat):
        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
        (-[StorageSchemes webView:startURLSchemeTask:]): Deleted.
        (-[StorageSchemes webView:stopURLSchemeTask:]): Deleted.

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

        Python 3: Add support in webkitpy.common.config
        https://bugs.webkit.org/show_bug.cgi?id=202463

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.config to the test list.
        * Scripts/webkitpy/common/config/committers.py:
        (Contributor.__init__): Convert lists to maps.
        (Contributor.__str__): __str__ will always return the native string type.
        (Contributor.__unicode__): Use .format() string.
        (CommitterList._exclusive_contributors): Convert filter to list.
        (CommitterList._exclusive_committers): Ditto.
        (CommitterList.contributors_by_search_string): Ditto.
        * Scripts/webkitpy/common/config/committervalidator_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/config/contributionareas_unittest.py: Use full import paths.
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.makeArgs): Use 'in' instead of has_key.
        * Scripts/webkitpy/common/config/urls_unittest.py:
        * Scripts/webkitpy/common/unicode_compatibility.py:
        (encode_for): Encode string for type.
        * Scripts/webkitpy/thirdparty/BeautifulSoup.py: Make html5lib import auto-install compatible.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Add html5lib.
        (AutoinstallImportHook._install_html5lib): Make html5lib a stand-alone installed package.
        (AutoinstallImportHook._install_mechanize): Install html5lib.
        (AutoinstallImportHook._install_beautifulsoup): Ditto.

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

        [Clipboard API] Implement ClipboardItem.getType() for platform clipboard items
        https://bugs.webkit.org/show_bug.cgi?id=203168

        Reviewed by Tim Horton.

        Add support for the new layout tests, as well as a new API test.

        * DumpRenderTree/ios/UIScriptControllerIOS.h:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::copyText):

        Implement UIScriptController.copyText in WebKit1. This is used in one of the new layout tests, which passes in
        WebKit1 on macOS and iOS.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):

        Adjust logic when declaring types on the platform pasteboard, such that it behaves more like the platform; when
        declaring types, even if the owner doesn't change, the change count should still get bumped up by 1.

        * DumpRenderTree/mac/UIScriptControllerMac.h:
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::copyText):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ClipboardTests.mm: Added.
        (-[TestWKWebView readClipboard]):
        (createWebViewForClipboardTests):
        (writeMultipleObjectsToPlatformPasteboard):

        Add a new API test to verify that clipboard items contain the right data when writing multiple items (each with
        different sets of types) to the platform pasteboard using native APIs.

        * TestWebKitAPI/Tests/WebKitCocoa/clipboard.html: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:
        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard _addTypesWithoutUpdatingChangeCount:owner:]):

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

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

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.net.
        * Scripts/webkitpy/common/net/credentials_unittest.py: Replace raw_input with input for Python3.
        * Scripts/webkitpy/common/net/ewsserver.py:
        * Scripts/webkitpy/common/net/resultsjsonparser.py:
        (ParsedJSONResults.__init__): Sort results by test name.
        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        (test_basic): Sort results by test name.
        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer._fetch_url):
        * Scripts/webkitpy/common/net/unittestresults_unittest.py:

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

        EWS should have a way to retry a patch
        https://bugs.webkit.org/show_bug.cgi?id=196599

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build): Add the retried field to keep track of whether a build is requested to be retried or not.
        (Build.set_retried): Method to set the retried field.
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Added the 'Retry failed builds' button.
        * BuildSlaveSupport/ews-app/ews/views/retrypatch.py:
        (RetryPatch.post): Added a check if the build is already retried. Also, set the retried flag appropriately.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Updated the status-bubble to in-progress while waiting for build to be retried.
        (StatusBubble._build_bubbles_for_patch): Display the retry button only if there are failed builds.
        * BuildSlaveSupport/ews-app/ews/migrations/0002_build_retried.py: Added database migration.

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

        [MSE][GStreamer] Revert WebKitMediaSrc rework temporarily
        https://bugs.webkit.org/show_bug.cgi?id=203078

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/style/checker.py:

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

        Unreviewed. Mark some more WTF unit tests as slow for GTK and WPE

        * TestWebKitAPI/glib/TestExpectations.json:

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

        [GTK][WPE] Check we don't leak the WebKitWebContext in all tests
        https://bugs.webkit.org/show_bug.cgi?id=202981

        Reviewed by Žan Doberšek.

        Also include the number of references left in leaks report.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        (Test::~Test):

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

        [WebAuthn] Warn users when no credentials are found
        https://bugs.webkit.org/show_bug.cgi?id=203147
        <rdar://problem/55931123>

        Reviewed by Brent Fulgham.

        Adds new tests for _WKWebAuthenticationPanelUpdateNoCredentialsFound.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelDelegate panel:updateWebAuthenticationPanel:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-cancel.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-no-credentials.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-u2f-no-credentials.html: Added.

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

        [Clipboard API] Refactor Pasteboard::read() to take an optional item index
        https://bugs.webkit.org/show_bug.cgi?id=203161

        Reviewed by Tim Horton.

        Add a couple of new API tests to verify that the web archive type identifier ("com.apple.webarchive") is (1)
        written to the pasteboard when copying a rich text selection, and (2) is read when attempting to paste web
        content.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:

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

        Python 3: Add support in webkitpy.common.watchlist
        https://bugs.webkit.org/show_bug.cgi?id=202473

        Reviewed by Dewei Zhu.

        * Scripts/test-webkitpy-python3: Add webkitpy.common.watchlist.
        * Scripts/webkitpy/common/watchlist/watchlist.py:
        (WatchList.find_matching_definitions): Use items instead of iteritems.
        * Scripts/webkitpy/common/watchlist/watchlist_unittest.py:
        (WatchListTest.test_filename_definition_no_matches): Back-slash needs to be escaped.
        (WatchListTest.test_filename_definition): Ditto.
        (WatchListTest.test_cc_rules_simple): Ditto.
        (WatchListTest.test_cc_rules_complex): Ditto.
        (WatchListTest.test_cc_and_message_rules_complex): Ditto.
        (WatchListTest.test_cc_and_message_rules_no_matches): Ditto.
        (WatchListTest.test_more_and_less_match): Ditto.
        (WatchListTest.test_complex_match): Ditto.
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        (WatchListParserTest.test_bad_definition): Back-slash needs to be escaped.
        (WatchListParserTest.test_bad_filename_regex): Ditto.
        (WatchListParserTest.test_bad_more_regex): Ditto.
        (WatchListParserTest.test_bad_match_type): Ditto.
        (WatchListParserTest.test_match_type_typo): Ditto.
        (WatchListParserTest.test_empty_cc_rule): Ditto.
        (WatchListParserTest.test_cc_rule_with_invalid_email): Ditto.
        (WatchListParserTest.test_cc_rule_with_secondary_email): Ditto.
        (WatchListParserTest.test_empty_message_rule): Ditto.
        (WatchListParserTest.test_unused_defintion): Ditto.
        (WatchListParserTest.test_cc_rule_with_undefined_defintion_with_suggestion): Ditto.

2019-10-18  Raphael Kubo da Costa  <rakuco@webkit.org>

        Remove myself from the CMake watchlist
        https://bugs.webkit.org/show_bug.cgi?id=203166

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/config/watchlist:

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

        Unreviewed, remove an extraneous header import after r251279

        Address a post-landing review comment.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:

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

        [WebAuthn] Implement AuthenticatorCancel
        https://bugs.webkit.org/show_bug.cgi?id=191523
        <rdar://problem/55920204>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
        (-[TestWebAuthenticationPanelUIDelegate webView:runWebAuthenticationPanel:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid-cancel.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html.
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-hid.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion-nfc.html:
        * TestWebKitAPI/Tests/WebKitCocoa/web-authentication-get-assertion.html:

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

        Cleanup: Stop setting -ApplePersistenceIgnoreState when running debug Mac WebKit
        https://bugs.webkit.org/show_bug.cgi?id=203156

        Reviewed by Jonathan Bedard.

        This is no longer needed. The new value has been supported since 2014.

        * Scripts/webkitdirs.pm:
        (argumentsForRunAndDebugMacWebKitApp):

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

        [Clipboard API] Support navigator.clipboard.read()
        https://bugs.webkit.org/show_bug.cgi?id=203021

        Reviewed by Ryosuke Niwa.

        Make adjustments to WebKitTestRunner and DumpRenderTree to support the new layout tests. See below for more
        details.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard pasteboardItems]):

        Fixes an existing issue with the mock NSPasteboard used for layout tests. Currently, our logic for converting
        the contents of the platform pasteboard to NSPasteboardItem simply writes the pasteboard data as-is to
        NSPasteboardItems. However, these pasteboard types may be legacy pasteboard types, in which case
        NSPasteboardItem will simply handle the call to `-setData:forType:` as a no-op. AppKit has logic in this
        scenario to canonicalize these legacy pasteboard types to their modern counterparts, but this is absent in
        DumpRenderTreePasteboard and WebKitTestRunnerPasteboard.

        Address this by teaching the mock pasteboards to convert legacy types to modern types when generating platform
        pasteboard items.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::copyText):

        Add a new UIScriptController method to write a string to the platform pasteboard. This patch adds support for
        this new testing hook on macOS and iOS, in WebKit2 (WebKitTestRunner).

        * TestRunnerShared/mac/NSPasteboardAdditions.h: Copied from Tools/WebKitTestRunner/mac/UIScriptControllerMac.h.
        * TestRunnerShared/mac/NSPasteboardAdditions.mm: Added.
        (+[NSPasteboard _modernPasteboardType:]):

        Add a helper to convert legacy pasteboard types (and dynamic UTIs that map to legacy pasteboard types) to
        modern pasteboard types, suitable for writing to NSPasteboardItems on macOS.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/UIScriptControllerIOS.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptControllerIOS::copyText):
        * WebKitTestRunner/mac/UIScriptControllerMac.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptControllerMac::copyText):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm:

        Apply the same fix for WebKitTestRunner's mock NSPasteboard.

        (-[LocalPasteboard _clearContentsWithoutUpdatingChangeCount]):
        (-[LocalPasteboard clearContents]):

        Make -clearContents clear out all the contents on the mock pasteboard, instead of crashing in AppKit.

        (-[LocalPasteboard declareTypes:owner:]):
        (-[LocalPasteboard pasteboardItems]):

2019-10-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr in more places and remove some unnecessary external linkage.
        https://bugs.webkit.org/show_bug.cgi?id=203115

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm:

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

        Using version 1 CFRunloopSource for faster task dispatch
        https://bugs.webkit.org/show_bug.cgi?id=202874

        Reviewed by Geoffrey Garen.

        Fix a flaky test.

        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

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