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