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

        REGRESSION (r231039): RunUnitTests step reports disabled tests as failures
        https://bugs.webkit.org/show_bug.cgi?id=185061

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunUnitTests.countFailures): Return the difference between the total number of tests run and the number that passed.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Add a test.

2018-04-26  Ross Kirsling  <ross.kirsling@sony.com>

        Add release bots for WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=185042

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Add a release build bot and two test bots, replacing the outdated WinCairo release bots.

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

        -[WKHTTPCookieStore deleteCookie:completionHandler:] doesn't delete cookies
        https://bugs.webkit.org/show_bug.cgi?id=184938
        <rdar://problem/34737395>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2018-04-26  Ross Kirsling  <ross.kirsling@sony.com>

        WinCairo test bots should run JSC tests with options for Windows command prompt.
        https://bugs.webkit.org/show_bug.cgi?id=185019

        Reviewed by Per Arne Vollan.

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

2018-04-26  Ross Kirsling  <ross.kirsling@sony.com>

        WinCairo WKL Debug Test bot is not using DRT.
        https://bugs.webkit.org/show_bug.cgi?id=185009

        Reviewed by Per Arne Vollan.

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

2018-04-26  Per Arne Vollan  <pvollan@apple.com>

        Disable content filtering in minimal simulator mode
        https://bugs.webkit.org/show_bug.cgi?id=185027
        <rdar://problem/39736091>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-04-26  Brady Eidson  <beidson@apple.com>

        Add a setting for keeping around all processes and always reusing them per-origin.
        <rdar://problem/39695798> and https://bugs.webkit.org/show_bug.cgi?id=185020

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-04-26  Andy VanWagoner  <thetalecrafter@gmail.com>

        [INTL] Implement Intl.PluralRules
        https://bugs.webkit.org/show_bug.cgi?id=184312

        Reviewed by JF Bastien.

        Added Intl.PluralRules feature flag.

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

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build and link against latest WPEBackend and WPEBackend-fdo
        https://bugs.webkit.org/show_bug.cgi?id=184643

        Reviewed by Žan Doberšek.

        Add missing INCLUDE_DIRS in many places.

        Adapt to single-header WPE includes.

        Null-initialize padding to silence -Wmissing-field-initializers. (Yuck.)

        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebBackend):
        * TestWebKitAPI/glib/PlatformWPE.cmake:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/PlatformWPE.cmake:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        * wpe/HeadlessViewBackend/CMakeLists.txt:
        * wpe/HeadlessViewBackend/HeadlessViewBackend.cpp:
        * wpe/HeadlessViewBackend/HeadlessViewBackend.h:
        * wpe/jhbuild.modules:

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

        REGRESSION (r230998): Bot watcher's dashboard doesn't display number of API test failures
        https://bugs.webkit.org/show_bug.cgi?id=184982

        Rubber-stamped by Aakash Jain.

        Correctly count the number of API test failures.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunUnitTests.countFailures): Count the number of test failures for the new run-api-tests.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * Scripts/webkitpy/api_tests/manager.py:
        (Manager.run): Disabled tests are not run.

2018-04-25  Jiewen Tan  <jiewen_tan@apple.com>

        Remove access to keychain from the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=184428
        <rdar://problem/13150903>

        Reviewed by Brent Fulgham.

        This patch does the followings:
        1. Added an API test for this patch.
        2. Instrument DumpRenderTree and WebKitTestRunner to take advantages of new SPIs.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate signedPublicKeyAndChallengeStringForWebView:]):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/SSLKeyGenerator.mm: Added.
        (TestWebKitAPI::SSLKeyGeneratorTest::SetUp):
        (TestWebKitAPI::SSLKeyGeneratorTest::TearDown):
        (TestWebKitAPI::TEST_F):
        * WebKitTestRunner/TestController.cpp:
        (WTR::copySignedPublicKeyAndChallengeString):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2018-04-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] The search field on www.bing.com is missing label text
        https://bugs.webkit.org/show_bug.cgi?id=184975
        <rdar://problem/39723081>

        Reviewed by Tim Horton.

        Adds UIScriptController.formInputLabel, which asynchronously requests the input label text for the currently
        focused element in extra zoom mode.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::formInputLabel const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::formInputLabel const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::formInputLabel const):

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Should load injected bundle from builddir in developer builds
        https://bugs.webkit.org/show_bug.cgi?id=184983

        Reviewed by Carlos Alberto Lopez Perez.

        Set WEBKIT_INJECTED_BUNDLE_PATH when running WPE MiniBrowser.

        * Scripts/run-minibrowser:

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] libgstggtk.so broken in jhbuild environment
        https://bugs.webkit.org/show_bug.cgi?id=184984

        Reviewed by Carlos Alberto Lopez Perez.

        Don't pass --enable-glx=no when building libepoxy, to ensure it's compatible with
        gst-plugins-good.

        * wpe/jhbuild.modules:

2018-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        PSON: Don't create a new process when navigating to a blob URL, data URL, and about:blank
        https://bugs.webkit.org/show_bug.cgi?id=184962

        Reviewed by Youenn Fablet.

        Added four test cases for navigating to a blob URL, data URL, and about:blank with process-swap-on-navigation turned on.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (ProcessSwap.SameOriginBlobNavigation): Added.
        (ProcessSwap.CrossOriginBlobNavigation): Added.
        (ProcessSwap.NavigateToAboutBlank): Added.
        (ProcessSwap.NavigateToDataURL): Added.

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Remove deprecated functions and properties from the API
        https://bugs.webkit.org/show_bug.cgi?id=179295

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationStorage): Disable this test for now. It will require some effort
        to rewrite LoadTrackingTest to not require the web view at construction time.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Don't test private browsing setting, which is gone.
        * TestWebKitAPI/glib/CMakeLists.txt: Disable TestCookieManager for now.

2018-04-25  Andy Estes  <aestes@apple.com>

        [Mac] Number of drop items is always 0 when performing a DHTML drag
        https://bugs.webkit.org/show_bug.cgi?id=184943

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DragAndDropPasteboardTests.mm:
        (-[DragInfo numberOfValidItemsForDrop]):
        (-[DragInfo setNumberOfValidItemsForDrop:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/full-page-dropzone.html: Added.

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

        API test harness should be Python
        https://bugs.webkit.org/show_bug.cgi?id=181043
        <rdar://problem/36164410>

        Reviewed by David Kilzer.

        Run API tests from a Python script rather than Perl. The Python API tests have
        the same structure as the layout tests.

        * Scripts/run-api-tests: Changed from Perl to Python.
        * Scripts/webkitpy/api_tests: Added.
        * Scripts/webkitpy/api_tests/__init__.py: Added.
        * Scripts/webkitpy/api_tests/manager.py: Added.
        (Manager):
        (Manager.__init__):
        (Manager._test_list_from_output): Construct a list of tests from the output of
        TestWTF and TestWebKitAPI.
        (Manager._find_test_subset): Given a list of all possible tests and command line
        arguments, return a list of tests which match the provided arguments.
        (Manager._collect_tests): Run TestWTF and TestWebKitAPI with --gtest_list_tests
        to determine which tests will be run.
        (Manager._print_test_result): Formatted print of a test with it's output.
        (Manager._print_tests_result_with_status): Print all tests and output for tests
        which ran with a specified exit status.
        (Manager.run): Collect all tests, run them and then print results from the run.
        * Scripts/webkitpy/api_tests/run_api_tests.py: Added.
        (main): Parse arguments, construct a port, early exit for illegal ports and
        then run tests.
        (run): Setup logging and printing before using the Manager to run tests.
        (parse_args): Use argparse to define all options used by run-api-tests.
        * Scripts/webkitpy/api_tests/runner.py: Added.
        (Runner):
        (Runner.__init__):
        (Runner._shard_tests): Split tests so that each suite runs together.
        (Runner.command_for_port): Run a command on the device specified by the given
        port object. Once <https://bugs.webkit.org/show_bug.cgi?id=175204> is completed,
        this function would be entirely replaced by the server_process factory owned
        by the port object.
        (Runner.run): Run all shards in the message_pool.
        (Runner.handle): Handle reports from child processes.
        (Runner.result_map_by_status): Return a mapping of tests to output for tests
        which exit with a specific status.
        (_Worker):
        (_Worker.__init__):
        (_Worker._filter_noisy_output): Filter out objc warnings since these polite the log.
        (_Worker._run_single_test): Runs a single test in a single child process.
        (_Worker._run_shard_with_binary): Attempts to run a group of tests in the same
        child process. If this technique fails, the remaining tests are run singly.
        (_Worker.handle): Run the specified shard.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.check_api_test_build): Check if TestWTF and TestWebKitAPI are built.
        (Port.environment_for_api_tests): Return the environment needed to run
        the TestWebKitAPI binary.
        (Port. path_to_api_test_binaries): Return a list of the path to all binaries
        used when running API tests.
        (Port._build_api_tests): Build TestWTF and TestWebKitAPI if required.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.environment_for_api_tests): Enable GuardMalloc for API tests.
        * Scripts/webkitpy/port/server_process.py: 
        (ServerProcess.pop_all_buffered_stdout):

2018-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Incorrect number of WebDriver test failures shown in the bots
        https://bugs.webkit.org/show_bug.cgi?id=184959

        Reviewed by Michael Catanzaro.

        The regular expression we are using to get the number of failures from the log is matching a particular test
        error output. Improve the regular expression to avoid matching other strings in the log. Ensure that only
        matches at the beginning of lines and add spaces after Unexpected and before the (<failures>).

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

2018-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=184913

        Reviewed by Žan Doberšek.

        Include the mouse buttons state in WTR synthesized events.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::createMouseButtonEvent):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):

2018-04-24  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK][WPE] Fix triggered bot name on the WPE Debug Build bot
        https://bugs.webkit.org/show_bug.cgi?id=184954

        Reviewed by Michael Catanzaro.

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

2018-04-24  Saam Barati  <sbarati@apple.com>

        Keep around a pre-warmed process when doing process swap on navigation
        https://bugs.webkit.org/show_bug.cgi?id=184765
        <rdar://problem/39685099>

        Reviewed by Ryosuke Niwa and Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-04-24  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] unit-tests fail when passwords.json is missing
        https://bugs.webkit.org/show_bug.cgi?id=180390

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        (loadBuilderConfig): Add support for test_mode. Load mock passwords in test_mode.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        (BuildBotConfigLoader._add_dependant_modules_to_sys_modules): Call _add_webkitpy_to_sys_path as well.
        (BuildBotConfigLoader._mock_open): Deleted.
        (BuildBotConfigLoader.load_config): Deleted.

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

        From-Origin: Support for 'same' and 'same-site' response header, nested frame origin check
        https://bugs.webkit.org/show_bug.cgi?id=184560
        <rdar://problem/38901344>

        Reviewed by Youenn Fablet and Daniel Bates.

        This patch implements significant parts of https://github.com/whatwg/fetch/issues/687.
        We consume the From-Origin response header and only load the resource if:
        - The header is non-existent, empty, or invalid.
        - The header specifies 'same' and the resource's origin matches the originating
          document's origin and the origins up the frame tree.
        - The header specifies 'same-site' and the resource's eTLD+1 matches the originating
          document's eTLD+1 and the eTLD+1 of the documents up the frame tree.

        This feature is experimental and off by default.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HTTPParsers.cpp: Added.
        (TestWebKitAPI::TEST):
            Tests for From-Origin header parsing.

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

        Unreviewed. Update W3C WebDriver imported tests.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__):

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Remove libgbm dependency
        https://bugs.webkit.org/show_bug.cgi?id=184906

        Reviewed by Carlos Garcia Campos.

        Stop searching for libgbm, using its compiler flags for the
        HeadlessViewBackend compilation and linking against the .so object.
        This is not necessary anymore after r230562 switched to a different
        backend implementation for testing.

        * wpe/HeadlessViewBackend/CMakeLists.txt:
        * wpe/install-dependencies:

2018-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Make it possible to use a different timeout for slow test cases in GLib tests
        https://bugs.webkit.org/show_bug.cgi?id=184816

        Reviewed by Michael Catanzaro.

        Pass a function from api test runner to glib test runner to check if a test is slow and use the given slow
        timeout.

        * TestWebKitAPI/glib/TestExpectations.json:
        * glib/api_test_runner.py:
        (TestRunner._run_test_glib.is_slow_test):
        (TestRunner._run_test_glib):
        * glib/glib_test_runner.py:
        (GLibTestRunner.__init__):
        (GLibTestRunner._stop_timeout):
        (GLibTestRunner._subtest_start):
        (GLibTestRunner._subtest_end):

2018-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] REGRESSION(230860) Unable to change time input values using UI
        https://bugs.webkit.org/show_bug.cgi?id=184901
        <rdar://problem/39664797>

        Reviewed by Tim Horton.

        Introduce a new UIScriptController method to set the value of a currently focused input of type time, by
        interacting with the UI. See WebKit ChangeLogs for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setTimePickerValue):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setTimePickerValue):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setTimePickerValue):

2018-04-23  Zalan Bujtas  <zalan@apple.com>

        [LayoutFormattingContext] Initial commit.
        https://bugs.webkit.org/show_bug.cgi?id=184896

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-04-23  Chris Dumez  <cdumez@apple.com>

        [WKTR] Move navigation policy decision from the injected bundle to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=184801

        Reviewed by Geoffrey Garen.

        Move navigation policy decision from the injected bundle to the UIProcess in WebKitTestRunner.
        This is a more common configuration and therefore should be the default testing configuration.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):
        Always respond with 'PassThrough' in the InjectedBundle so the UIProcess
        is now asked for the policy decision.

2018-04-23  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK][WPE] Add Debug bots (build and tests) for WPE
        https://bugs.webkit.org/show_bug.cgi?id=184887

        Reviewed by Carlos Alberto Lopez Perez.

        Deployed 2 new bots for WPE Debug: wpe-linux-bot-3 and
        wpe-linux-bot-4

        Both bots have already the credentials ready to authenticated against
        build.webkit.org. They provides the bots for the "debug" configuration over
        the "WPE" platform and building for the "x86_64" architecture:
        WPE Linux 64-bit Debug (Build) and WPE Linux 64-bit Debug (Tests) 

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

2018-04-23  Chris Dumez  <cdumez@apple.com>

        HTML String load cannot be prevented by responding 'Cancel' asynchronously in decidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=184848
        <rdar://problem/39145306>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (-[DecidePolicyForNavigationActionController webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2018-04-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK][WPE] TestSSL fails due to additional TLS errors returned
        https://bugs.webkit.org/show_bug.cgi?id=184860

        Reviewed by Carlos Garcia Campos.

        Add script and config file for regenerating the test certificate.
        Regenerate it. TestSSL no longer fails on my machine.

        I do see a ton of network process crashes and JavaScript errors, none of
        which prevent the test from passing, but this commit only claims to fix
        the certificate validation portion of the test.

        * TestWebKitAPI/Tests/WebKitGLib/resources/generate-test-cert.sh: Added.
        * TestWebKitAPI/Tests/WebKitGLib/resources/test-cert.conf: Added.
        * TestWebKitAPI/Tests/WebKitGLib/resources/test-cert.pem:

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] ERROR: Thread was unable to be detached when running /jsc/vm test in debug
        https://bugs.webkit.org/show_bug.cgi?id=184815

        Reviewed by Michael Catanzaro.

        This is because in the test we are calling both join and detach. We should only call join.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testsJSCVirtualMachine):

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Test /jsc/prototypes crashes in debug
        https://bugs.webkit.org/show_bug.cgi?id=184814

        Reviewed by Michael Catanzaro.

        We should also call the constructor/destructor of Bar struct to ensure Foo is constructed.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (barCreate):
        (barFree):

2018-04-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r228088): [SOUP] Check TLS errors for WebSockets on GTlsConnection::accept-certificate
        https://bugs.webkit.org/show_bug.cgi?id=184804

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (WebSocketTest::WebSocketTest):
        (WebSocketTest::~WebSocketTest):
        (WebSocketTest::serverWebSocketCallback):
        (WebSocketTest::webSocketTestResultCallback):
        (WebSocketTest::connectToServerAndWaitForEvents):
        (testWebSocketTLSErrors):
        (beforeAll):

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update 2 more API tests after r230876.

        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        (TestWebKitAPI::TEST):

2018-04-20  Tim Horton  <timothy_horton@apple.com>

        Adjust geolocation feature flag
        https://bugs.webkit.org/show_bug.cgi?id=184856

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229828): web view doesn’t update or respond to resizing until client calls policy decision handler
        https://bugs.webkit.org/show_bug.cgi?id=184210
        <rdar://problem/39072354>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit/large-red-square-image.html:
        * TestWebKitAPI/Tests/WebKitCocoa/dragstart-change-selection-offscreen.html:
        Add viewport meta tags.

        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFinishNavigation]):
        Update _test_waitForDidFinishNavigation to wait for the next presentation update
        to make iOS API tests happy without having to modify each of them.

2018-04-20  Timothy Hatcher  <timothy@apple.com>

        REGRESSION: API test WebKit.BackgroundColorSystemColor is failing

        https://bugs.webkit.org/show_bug.cgi?id=184849
        rdar://problem/39386405

        Reviewed by Brian Burg.

        * TestWebKitAPI/Tests/mac/BackgroundColor.mm:
        (TestWebKitAPI::TEST): Use CGColorEqualToColor since we might get a different
        CGColor pointer from NSColor each time.

2018-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Injected bundle form client should be notified when editing text fields
        https://bugs.webkit.org/show_bug.cgi?id=184822
        <rdar://problem/38807319>

        Reviewed by Tim Horton.

        Add WebKitTestRunner support for listening to form editing SPI hooks in the injected bundle. The new layout test
        installs callbacks that listen for "begin editing", "end editing", and "text changed" calls to injected bundle
        SPI. See other ChangeLogs for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::enterText):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:

        Add UIScriptController support for simulating text entry in the currently focused element.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::enterText):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:

        Add TestRunner bindings for registering injected bundle form client callbacks.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::handleTextDidChangeInTextField):
        (WTR::handleTextFieldDidBeginEditing):
        (WTR::handleTextFieldDidEndEditing):
        (WTR::InjectedBundle::didCreatePage):

        Set the injected bundle form editor client.

        (WTR::InjectedBundle::setUpInjectedBundleClients):
        (WTR::InjectedBundle::textDidChangeInTextField):
        (WTR::InjectedBundle::textFieldDidBeginEditing):
        (WTR::InjectedBundle::textFieldDidEndEditing):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installTextDidChangeInTextFieldCallback):
        (WTR::TestRunner::textDidChangeInTextFieldCallback):
        (WTR::TestRunner::installTextFieldDidBeginEditingCallback):
        (WTR::TestRunner::textFieldDidBeginEditingCallback):
        (WTR::TestRunner::installTextFieldDidEndEditingCallback):
        (WTR::TestRunner::textFieldDidEndEditingCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::enterText):

2018-04-20  Youenn Fablet  <youenn@apple.com>

        WebPage sometimes incorrectly rules out PDF as a mime type that can be showed
        https://bugs.webkit.org/show_bug.cgi?id=184369

        Reviewed by Chris Dumez.

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

2018-04-20  Daniel Bates  <dabates@apple.com>

        Remove Strong Password decoration when text field type changes
        https://bugs.webkit.org/show_bug.cgi?id=184795
        <rdar://problem/38325108>

        Reviewed by Antti Koivisto.

        Add a unit test to ensure the injected bundle API and WebKit UI delegate SPI is invoked
        when the field has the Strong Password button and its type changes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DidResignInputElementStrongPasswordAppearance.mm: Added.
        (didResignInputElementStrongPasswordAppearance):
        (-[DidResignInputElementStrongPasswordAppearance webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[DidResignInputElementStrongPasswordAppearanceDelegate _webView:didResignInputElementStrongPasswordAppearanceWithUserInfo:]):
        (-[DidResignInputElementStrongPasswordAppearanceDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2018-04-20  Brady Eidson  <beidson@apple.com>

        Add a test to verify load/unload/pageshow/pagehide all work with process swapping.
        https://bugs.webkit.org/show_bug.cgi?id=184807

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONMessageHandler userContentController:didReceiveScriptMessage:]):

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Mark TestJSC as slow in debug.

        Only /jsc/vm is slow, but GLib API test runner only checks the test binary for GLib tests.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Local cross references are broken in API documentation
        https://bugs.webkit.org/show_bug.cgi?id=184771

        Reviewed by Michael Catanzaro.

        The problem is that gtkdoc-fixxref expects the links to be in the form html/modulename (like the installed
        ones), but we generate the documentation as modulename/html. So, links to WebKitDOM or JSC are generated as
        ../html/Foo. The rebase command considers html to be the module name in this case, creating broken links in all
        the cases.

        * gtk/gtkdoc.py:
        (GTKDoc._copy_doc_files_to_output_dir): We don't have any html dir in the source tree so, we are not copying
        anything here.
        (GTKDoc._run_gtkdoc_mkhtml): Create the html dir here using html/modulename instead now.
        (GTKDoc._run_gtkdoc_fixxref): Pass the new directory as module dir to gtkdoc-fixxref and fix several links for
        which gtkdoc-fixxref always uses absolute paths.
        * gtk/manifest.txt.in: Update the documentation html paths and include the JSC GLib API in the tarball too.

2018-04-19  Brady Eidson  <beidson@apple.com>

        Make back forward cache work with process swapping.
        <rdar://problem/38676604> and https://bugs.webkit.org/show_bug.cgi?id=184793

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.
        * MiniBrowser/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.
        * TestWebKitAPI/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.
        * WebEditingTester/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_ARC): Re-order.
        * WebKitLauncher/Configurations/Base.xcconfig: Add newline at
        end of file.
        (CLANG_ENABLE_OBJC_WEAK): Enable.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-19  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229133): decidePolicyForNavigationAction not called for loading an HTML string
        https://bugs.webkit.org/show_bug.cgi?id=184209
        <rdar://problem/39145306>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

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

2018-04-18  Ross Kirsling  <ross.kirsling@sony.com>

        [WinCairo][EWS] Build bot should clean user temp directory each time.
        https://bugs.webkit.org/show_bug.cgi?id=184761

        Reviewed by Lucas Forschler.

        * EWSTools/Start-Queue.ps1:
        Clean user's temp directory before each build, so that Windows git doesn't fill it up over time.

2018-04-18  Ross Kirsling  <ross.kirsling@sony.com>

        Buildbots using Python zipfile should enable compression
        https://bugs.webkit.org/show_bug.cgi?id=184759

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/built-product-archive:
        (createZipManually):
        Default is to archive without compressing, so tell it to compress as well. 

2018-04-18  Nan Wang  <n_wang@apple.com>

        AX: [macOS] WebKit hangs when triggering an alert from an AOM increment event
        https://bugs.webkit.org/show_bug.cgi?id=184742

        Reviewed by Chris Fleizach.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::increment):
        (AccessibilityUIElement::decrement):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::AccessibilityUIElement::asyncIncrement):
        (WTR::AccessibilityUIElement::asyncDecrement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::asyncIncrement):
        (WTR::AccessibilityUIElement::asyncDecrement):

2018-04-18  Ross Kirsling  <ross.kirsling@sony.com>

        Fix archive step for WinCairo build bot.
        https://bugs.webkit.org/show_bug.cgi?id=184715

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):

2018-04-18  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION: Using the reload button while offline pushes identical pages onto the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=184570
        <rdar://problem/34807323>

        Reviewed by Chris Dumez.

        Add API test coverage.

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

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Add support for converting a local window to a remote window
        https://bugs.webkit.org/show_bug.cgi?id=184515
        <rdar://problem/39011318>

        Reviewed by Ryosuke Niwa.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController processSwapOnWindowOpenWithOpenerEnabled]):
        (-[SettingsController toggleProcessSwapOnWindowOpenWithOpener:]):
        Add menu entry in minibrowser to turn on process swap on cross-origin window.open().

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Turn on process swap on cross-origin window.open() for corresponding test and update
        test to expect that a new WebProcess is created.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForResponse):
        Add null checks for injectedBundle.testRunner(). When we swap process on navigation,
        the InjectedBundlePage::decidePolicyForResponse() gets called in the new process.
        In this new process, we have constructed a InjectedBundlePage for the page but we
        have not initialized the InjectedBundle members such as testRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        Add a way for layout tests to turn on process swap on navigation via a test header.

2018-04-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, reland r230697, r230720, and r230724.
        https://bugs.webkit.org/show_bug.cgi?id=184600

        * Scripts/run-jsc-stress-tests:

2018-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Make it possible to handle JSCClass external properties not added to the prototype
        https://bugs.webkit.org/show_bug.cgi?id=184687

        Reviewed by Michael Catanzaro.

        Add test cases for the new API.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (fooCreate):
        (fooFree):
        (fooGetProperty):
        (fooSetProperty):
        (testJSCPromises):
        (testJSCGarbageCollector):
        (testsJSCVirtualMachine):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (windowObjectClearedCallback):

2018-04-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Programmatically changing focus when an element already has focus is a confusing experience
        https://bugs.webkit.org/show_bug.cgi?id=184635
        <rdar://problem/39440642>

        Reviewed by Tim Horton.

        Add plumbing to support invoking `didHideKeyboardCallback` and `didShowKeyboardCallback` when (respectively)
        dismissing or presenting fullscreen input view controllers in extra zoom mode.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _invokeShowKeyboardCallbackIfNecessary]):
        (-[TestRunnerWKWebView _invokeHideKeyboardCallbackIfNecessary]):
        (-[TestRunnerWKWebView _keyboardDidShow:]):
        (-[TestRunnerWKWebView _keyboardDidHide:]):
        (-[TestRunnerWKWebView _webView:didPresentFocusedElementViewController:]):
        (-[TestRunnerWKWebView _webView:didDismissFocusedElementViewController:]):

2018-04-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Webkit should spoof as Safari on a Mac for Outlook.com
        https://bugs.webkit.org/show_bug.cgi?id=184573

        Reviewed by Carlos Alberto Lopez Perez.

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

2018-04-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][TestWebKitAPI] Implement PlatformWebView for TestWebKit
        https://bugs.webkit.org/show_bug.cgi?id=184524

        Reviewed by Alex Christensen.

        Resurrect PlatformWebView for Windows port which was removed in Bug 104607.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/win/InjectedBundleControllerWin.cpp: Added.
        (TestWebKitAPI::InjectedBundleController::platformInitialize):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp: Added.
        (TestWebKitAPI::Util::moduleDirectory):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        (TestWebKitAPI::Util::URLForNonExistentResource):
        (TestWebKitAPI::Util::isKeyDown):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp: Added.
        (TestWebKitAPI::PlatformWebView::registerWindowClass):
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::initialize):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::page const):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        (TestWebKitAPI::PlatformWebView::wndProc):
        * TestWebKitAPI/win/UtilitiesWin.cpp: Added.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::spinRunLoop):
        (TestWebKitAPI::Util::sleep):

2018-04-17  Jonathan Bedard  <jbedard@apple.com>

        Fix hasher tests for system with 32 bit longs
        https://bugs.webkit.org/show_bug.cgi?id=184708
        <rdar://problem/39459977>

        Reviewed by Mark Lam.

        Some systems have 32 bit longs. The Hasher WTF tests should handle this case.

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

2018-04-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r230697, r230720, and r230724.
        https://bugs.webkit.org/show_bug.cgi?id=184717

        These caused multiple failures on the Test262 testers.
        (Requested by mlewis13 on #webkit).

        Reverted changesets:

        "[WebAssembly][Modules] Prototype wasm import"
        https://bugs.webkit.org/show_bug.cgi?id=184600
        https://trac.webkit.org/changeset/230697

        "[WebAssembly][Modules] Implement function import from wasm
        modules"
        https://bugs.webkit.org/show_bug.cgi?id=184689
        https://trac.webkit.org/changeset/230720

        "[JSC] Rename runWebAssembly to runWebAssemblySuite"
        https://bugs.webkit.org/show_bug.cgi?id=184703
        https://trac.webkit.org/changeset/230724

2018-04-17  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed rollout of r230632. Regression in memory usage.

        That bug tracked in https://bugs.webkit.org/show_bug.cgi?id=184569.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        (shouldOverrideAndDisableCSSAnimationsAndCSSTransitionsBackedByWebAnimationsPreference): Deleted.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::TestOptions::TestOptions):
        (WTR::isLegacyAnimationEngineTestPath): Deleted.
        * WebKitTestRunner/TestOptions.h:

2018-04-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Rename runWebAssembly to runWebAssemblySuite
        https://bugs.webkit.org/show_bug.cgi?id=184703

        Reviewed by JF Bastien.

        * Scripts/run-jsc-stress-tests:

2018-04-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebAssembly][Modules] Implement function import from wasm modules
        https://bugs.webkit.org/show_bug.cgi?id=184689

        Reviewed by JF Bastien.

        Add runWebAssemblyDirect, which runs wasm file directly.

        * Scripts/run-jsc-stress-tests:

2018-04-17  Saam Barati  <sbarati@apple.com>

        Add system trace points for process launch and for initializeWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=184669

        Reviewed by Simon Fraser.

        * Tracing/SystemTracePoints.plist:

2018-04-17  Ross Kirsling  <ross.kirsling@sony.com>

        Add debug bots for WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=184663

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Add a debug build bot and two debug test bots.

        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py:
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:
        Add a WinCairo category to build.webkit.org.

2018-04-17  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Set inline-block box position.
        https://bugs.webkit.org/show_bug.cgi?id=184690

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._handleInlineBlock):
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):
        * LayoutReloaded/test/inline-block-with-fixed-width-height.html:

2018-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add API to clear JSCContext uncaught exception
        https://bugs.webkit.org/show_bug.cgi?id=184685

        Reviewed by Žan Doberšek.

        Add test cases for the new API.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCExceptions):

2018-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add API to query, delete and enumerate properties
        https://bugs.webkit.org/show_bug.cgi?id=184647

        Reviewed by Michael Catanzaro.

        Add test cases for the new API.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCObject):
        (testJSCClass):
        (testJSCPrototypes):

2018-04-16  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for replaced box.
        https://bugs.webkit.org/show_bug.cgi?id=184680

        Reviewed by Antti Koivisto.

        Basic support for inline replaced.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._handleInlineBox):
        (InlineFormattingContext.prototype._handleInlineBlock):
        (InlineFormattingContext.prototype._handleReplaced):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.lastLineBox):
        (Line.prototype.addInlineBox):
        (Line.prototype.addInlineContainerBox): Deleted.
        * LayoutReloaded/TreeBuilder.js:
        (TreeBuilder.prototype._createAndAttachBox):
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-simple-replaced.html: Added.

2018-04-16  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Minor InlineFormattingContext::layout() cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=184679

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineContainer):
        (InlineFormattingContext.prototype._handleInlineContent):
        (InlineFormattingContext.prototype._handleInlineBlock):
        (InlineFormattingContext.prototype._handleReplacedBox):
        (InlineFormattingContext.prototype._clearNeedsLayoutAndMoveToNextSibling):
        (InlineFormattingContext.prototype._handleInlineBlockContainer): Deleted.
        (InlineFormattingContext.prototype._clearAndMoveToNext): Deleted.

2018-04-16  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce fragmentation state/context.
        https://bugs.webkit.org/show_bug.cgi?id=184677

        Reviewed by Antti Koivisto.

        State/context for fragmented content (multicol, regions, pagination etc).

        * LayoutReloaded/FormattingContext/FragmentationContext.js: Added.
        (FragmentationContext):
        * LayoutReloaded/FormattingState/FragmentationState.js: Added.
        (FragmentationState):
        (FragmentationState.prototype.formattingState):

2018-04-16  Andy Estes  <aestes@apple.com>

        [iOS] Enable WKPDFView by default
        https://bugs.webkit.org/show_bug.cgi?id=184675
        <rdar://problem/27885452>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:

2018-04-16  Leo Balter  <leonardo.balter@gmail.com>

        Perl-based Test262 runner
        https://bugs.webkit.org/show_bug.cgi?id=183343

        Reviewed by Michael Saboff.

        * Scripts/test262-helpers/README.md: Added.
        * Scripts/test262-helpers/agent.js: Added.
        (262.getGlobal):
        (262.setGlobal):
        (262.destroy):
        (262.IsHTMLDDA):
        * Scripts/test262-helpers/cpanfile: Added.
        * Scripts/test262-helpers/cpanfile.snapshot: Added.
        * Scripts/test262-helpers/test262-runner.pl: Added.
        (main):
        (processFile):
        (getScenarios):
        (addScenario):
        (compileTest):
        (runTest):
        (processResult):
        (getTempFile):
        (getContents):
        (parseData):
        (getHarness):
        * Scripts/test262-helpers/tests.log: Added.

2018-04-15  Andy Estes  <aestes@apple.com>

        [iOS] Add API tests for PDF find-in-page
        https://bugs.webkit.org/show_bug.cgi?id=184634

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/find.pdf: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFView.mm:
        (-[TestFindDelegate findString]):
        (-[TestFindDelegate _webView:didCountMatches:forString:]):
        (-[TestFindDelegate _webView:didFindMatches:forString:withMatchIndex:]):
        (-[TestFindDelegate _webView:didFailToFindString:]):
        (loadWebView):
        (TEST):

2018-04-13  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Update class documentation
        https://bugs.webkit.org/show_bug.cgi?id=184625

        Reviewed by Antti Koivisto.

        * LayoutReloaded/DisplayTree/Box.js:
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockMarginCollapse.js:
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        * LayoutReloaded/FormattingState/BlockFormattingState.js:
        * LayoutReloaded/FormattingState/FloatingState.js:
        * LayoutReloaded/FormattingState/FormattingState.js:
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        * LayoutReloaded/LayoutState.js:
        * LayoutReloaded/LayoutTree/BlockContainer.js:
        * LayoutReloaded/LayoutTree/Box.js:
        * LayoutReloaded/LayoutTree/Container.js:
        * LayoutReloaded/LayoutTree/InlineBox.js:
        * LayoutReloaded/LayoutTree/InlineContainer.js:
        * LayoutReloaded/LayoutTree/Text.js:
        * LayoutReloaded/misc/headers/BlockContainer.h: Removed.
        * LayoutReloaded/misc/headers/BlockFormattingContext.h: Removed.
        * LayoutReloaded/misc/headers/BlockMarginCollapse.h: Removed.
        * LayoutReloaded/misc/headers/Box.h: Removed.
        * LayoutReloaded/misc/headers/Container.h: Removed.
        * LayoutReloaded/misc/headers/FloatingContext.h: Removed.
        * LayoutReloaded/misc/headers/FormattingContext.h: Removed.
        * LayoutReloaded/misc/headers/InitialBlockContainer.h: Removed.
        * LayoutReloaded/misc/headers/InlineBox.h: Removed.
        * LayoutReloaded/misc/headers/LayoutContext.h: Removed.
        * LayoutReloaded/misc/headers/Line.h: Removed.
        * LayoutReloaded/misc/headers/Text.h: Removed.

2018-04-13  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add simple implementation for FormattingState::markNeedsLayout()
        https://bugs.webkit.org/show_bug.cgi?id=184621

        Reviewed by Antti Koivisto.

        This is just a simple, mark ancestors dirty implementation.

        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState.prototype.markNeedsLayout):
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.markNeedsLayout):
        (LayoutState.prototype.setNeedsLayoutById): Deleted.
        (LayoutState.prototype.setNeedsLayout): Deleted.
        * LayoutReloaded/TreeBuilder.js:
        (TreeBuilder.prototype._createAndAttachBox):
        (TreeBuilder.prototype._findBox): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.layoutBoxById):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/simple-incremental-layout-with-static-content.html:

2018-04-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] [webkitpy] The driver requirements should be checked before starting the tests
        https://bugs.webkit.org/show_bug.cgi?id=184595

        Reviewed by Michael Catanzaro.

        Ensure Driver.check_driver() is checked at check_sys_deps() time.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.check_sys_deps):

2018-04-13  Zalan Bujtas  <zalan@apple.com>

        Rebaseline LayoutReloaded patch file (collectRenderersWithNeedsLayout).

        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:

2018-04-13  Jonathan Bedard  <jbedard@apple.com>

        Boot fewer simulators in CI/EWS machines
        https://bugs.webkit.org/show_bug.cgi?id=184594
        <rdar://problem/39188082>

        Reviewed by Alexey Proskuryakov.

        This is a temporary workaround fro <rdar://problem/39393590>.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager): Treat simulators as taking 6 gigs instead of 2.

2018-04-13  Brady Eidson  <beidson@apple.com>

        Introduce SuspendedPageProxy to keep old web processes around after their WebPageProxy has been swapped to a new one.
        https://bugs.webkit.org/show_bug.cgi?id=184559

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-04-13  Chris Dumez  <cdumez@apple.com>

        input.webkitEntries does not work as expected when folder contains accented chars
        https://bugs.webkit.org/show_bug.cgi?id=184517
        <rdar://problem/39265537>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-04-13  Thibault Saunier  <tsaunier@igalia.com>

        Update my emails ordering in contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=184587

        Rubber-stamped by Philippe Normand.

        Bugzilla seems to pick up tsaunier@igalia.com which is not the one I use there.

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

2018-04-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] xkbcommon: ERROR: failed to add default include path /home/mcatanzaro/Projects/WebKit/WebKitBuild/DependenciesWPE/Root/share/X11/xkb
        https://bugs.webkit.org/show_bug.cgi?id=184388

        Reviewed by Carlos Alberto Lopez Perez.

        Remove libxkbcommon from the JHBuild environment. We could alternatively add
        xkeyboard-config, but there doesn't seem to be any need to build libxkbcommon because I do
        not believe it depends on anything else in the JHBuild environment.

        * wpe/install-dependencies:
        * wpe/jhbuild.modules:

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn CSS Animations and CSS Transitions as Web Animations on by default
        https://bugs.webkit.org/show_bug.cgi?id=184569
        <rdar://problem/38671301>

        Reviewed by Jon Lee.

        We set the default value for the CSS Animations and CSS Transitions as Web Animations flag to true
        but override it to be false always in the LayoutTests/legacy-animation-engine directory.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldOverrideAndDisableCSSAnimationsAndCSSTransitionsBackedByWebAnimationsPreference):
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestOptions.cpp:
        (WTR::isLegacyAnimationEngineTestPath):
        (WTR::TestOptions::TestOptions):
        * WebKitTestRunner/TestOptions.h:

2018-04-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Tests WTF_RefPtr.ReleaseInNonMainThread and WTF_RefPtr.ReleaseInNonMainThreadDestroyInMainThread are crashing since they were added
        https://bugs.webkit.org/show_bug.cgi?id=184531

        Reviewed by Michael Catanzaro.

        It's not a bug in WebKit, but in the tests. The problem is that those tests are using RunLoop::main() but main
        run loop hasn't been initialized. ReleaseInNonMainThread doesn't really need to initialize the main run loop if
        we change Util::run() to always use RunLop::current() instead of RunLoop::main(). But
        ReleaseInNonMainThreadDestroyInMainThread ends up scheduling a task to the main thread, and the generic
        implementation fo that uses RunLoop::main(), so we need to initialize the main loop in this case.

        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST): Call RunLoop::initializeMainRunLoop().
        * TestWebKitAPI/glib/UtilitiesGLib.cpp:
        (TestWebKitAPI::Util::run): Use RunLop::current() to stop the current run loop.
        (TestWebKitAPI::Util::sleep): Ditto.

2018-04-12  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for incremental layout
        https://bugs.webkit.org/show_bug.cgi?id=184578

        Reviewed by Antti Koivisto.

        * LayoutReloaded/Layout.js:
        (layout):
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.rootContainer):
        (LayoutState.prototype.setNeedsLayoutById):
        * LayoutReloaded/Utils.js:
        (Utils.layoutTreeDump):
        * LayoutReloaded/test/TestHarness.js:
        (verifyLayout):
        (runLayout):
        (verifyLayoutTreeDump): Deleted.
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/simple-incremental-layout-with-static-content.html: Added.

2018-04-12  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Move root container ownership to layout state
        https://bugs.webkit.org/show_bug.cgi?id=184575

        Reviewed by Antti Koivisto.

        Now the root container is on the associated layout state (ICB only at this point though).

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype.layout):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._layoutOutOfFlowDescendants):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._handleInlineBlockContainer):
        (InlineFormattingContext.prototype._handleFloatingBox):
        * LayoutReloaded/Layout.js:
        (layout):
        * LayoutReloaded/LayoutState.js:
        (LayoutState):
        (LayoutState.prototype.formattingContext):
        (LayoutState.prototype.establishedFormattingState):
        (LayoutState.prototype.formattingStateForBox):
        (LayoutState.prototype.needsLayout):
        (LayoutState.prototype.displayBox):
        (LayoutState.prototype._formattingContext):
        (LayoutState.prototype.layout): Deleted.
        (LayoutState.prototype.formattingStates): Deleted.
        (LayoutState.prototype.initialDisplayBox): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):
        (Utils._findDisplayBox): Deleted.

2018-04-12  Jonathan Bedard  <jbedard@apple.com>

        Fix --build-directory flag for run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=184545
        <rdar://problem/39385080>

        Rubber-stamped by Aakash Jain.

        The --build-directory path does not work with iOS-Simulator.

        * Scripts/webkitpy/port/base.py:
        (Port._build_path): Use the port configuration to calculate the root directory.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_path): Test build directories for embedded configurations.

2018-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        pemfile.py should not assume POSIX line endings
        https://bugs.webkit.org/show_bug.cgi?id=184507

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/system/pemfile.py:
        (_parse_pem_format):
        * Scripts/webkitpy/common/system/pemfile_unittest.py:
        (PemFileTest.test_parse_crlf):
        (PemFileTest.test_parse_cr):

2018-04-12  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Minor cleanup in LayoutSate
        https://bugs.webkit.org/show_bug.cgi?id=184546

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.isInFormattingContext):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState.prototype.displayBoxes):
        (FormattingState.prototype.displayBox):
        (FormattingState.prototype._markSubTreeNeedsLayout):
        (FormattingState):
        (FormattingState.prototype.displayBoxMap): Deleted.
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.formattingStateForBox):
        (LayoutState.prototype.needsLayout):
        (LayoutState.prototype.displayBox):
        (LayoutState.prototype._createFormattingState):
        (LayoutState):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isFormattingContextDescendant): Deleted.
        * LayoutReloaded/LayoutTree/Container.js:
        (Layout.Container.prototype.isContainingBlockDescendant): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils._findDisplayBox):

2018-04-12  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce needsLayout to InlineFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=184538

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext):
        (BlockFormattingContext.prototype._firstInFlowChildWithNeedsLayout): Deleted.
        (BlockFormattingContext.prototype._nextInFlowSiblingWithNeedsLayout): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._firstInFlowChildWithNeedsLayout):
        (FormattingContext.prototype._nextInFlowSiblingWithNeedsLayout):
        (FormattingContext):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineContainer):
        (InlineFormattingContext.prototype._handleInlineBlockContainer):
        (InlineFormattingContext.prototype._handleInlineContent):
        (InlineFormattingContext.prototype._clearAndMoveToNext):
        (InlineFormattingContext):

2018-04-12  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Speed up GStreamer dependency build by removing examples compilation
        https://bugs.webkit.org/show_bug.cgi?id=184528

        Reviewed by Philippe Normand.

        * gstreamer/jhbuild.modules: Added --disable-examples for GStreamer package.

2018-04-12  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Switch testing process to using WPEBackend-fdo
        https://bugs.webkit.org/show_bug.cgi?id=184357

        Reviewed by Carlos Alberto Lopez Perez.

        Switch WPE testing to using the WPEBackend-fdo implementation that
        depends on the WL_bind_wayland_display EGL extension, as defined under
        the freedesktop.org project.
        https://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec

        HeadlessViewBackend is refactored to use the WPEBackend-fdo API, but
        otherwise is not changed in functionality.

        Unit tests now have to unconditionally use HeadlessViewBackend as a
        wpe_view_backend provider, since WPEBackend-fdo does not provide a
        default wpe_view_backend implementation. Unit tests covering that are
        adjusted to instead use a mock wpe_view_backend interface.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Fix the libWPEWebKit.so name to also include
        the API version that was added in r230449.
        * Scripts/webkitpy/port/waylanddriver.py:
        (WaylandDriver._setup_environ_for_test): Export EGL_PLATFORM=wayland.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._driver_class): Use WaylandDriver by default.
        * TestWebKitAPI/PlatformWebView.h:
        (): Deleted.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebBackend):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend):
        * TestWebKitAPI/wpe/PlatformWebViewWPE.cpp:
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::initialize):
        * wpe/HeadlessViewBackend/CMakeLists.txt:
        * wpe/HeadlessViewBackend/HeadlessViewBackend.cpp:
        (getEGLDisplay):
        (HeadlessViewBackend::HeadlessViewBackend):
        (HeadlessViewBackend::~HeadlessViewBackend):
        (HeadlessViewBackend::backend const):
        (HeadlessViewBackend::createSnapshot):
        (HeadlessViewBackend::performUpdate):
        (HeadlessViewBackend::makeCurrent): Deleted.
        * wpe/HeadlessViewBackend/HeadlessViewBackend.h:
        * wpe/jhbuild.modules: Module name cleanup. Dyz version is bumped.

2018-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use always complex text code path
        https://bugs.webkit.org/show_bug.cgi?id=183285

        Reviewed by Michael Catanzaro.

        Keep the auto mode for the layout tests to avoid having to rebaseline a lot of tests.

        * WebKitTestRunner/gtk/main.cpp:
        (main): Set WEBKIT_FORCE_COMPLEX_TEXT to 0 unless it's already present in the environment.

2018-04-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Handle strings containing null characters
        https://bugs.webkit.org/show_bug.cgi?id=184450

        Reviewed by Michael Catanzaro.

        Add test case for strings with null characters and update all calls to evaluate to pass the script length.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (testJSCBasic):
        (testJSCFunction):
        (testJSCObject):
        (testJSCClass):
        (testJSCPrototypes):
        (testJSCExceptions):
        (testJSCPromises):
        (testJSCGarbageCollector):
        (testJSCWeakValue):
        (testsJSCVirtualMachine):
        (testsJSCAutocleanups):
        * TestWebKitAPI/Tests/JavaScriptCore/glib/script.js: Added.
        * TestWebKitAPI/Tests/WebKitGLib/DOMElementTest.cpp:
        (DOMElementTest::testAutoFill):
        * TestWebKitAPI/Tests/WebKitGLib/EditorTest.cpp:
        (WebKitWebEditorTest::testSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (consoleMessageSentCallback):
        (methodCallCallback):

2018-04-11  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Make WebKitWebViewBackend object mandatory for webkit_web_view_new*() constructors
        https://bugs.webkit.org/show_bug.cgi?id=184513

        Reviewed by Michael Catanzaro.

        Update the WPE-specific testWebViewWebBackend() test case, removing the
        test that passes a null WebKitWebViewBackend object to the
        webkit_web_view_new() call.

        Helper createWebViewBackend() that's called via Test::createWebView()
        variations is updated to, in case of not using the headless backend,
        return a WebKitWebViewBackend instance that wraps around a
        default wpe_view_backend object.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebBackend):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend):

2018-04-11  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce needsLayout flag
        https://bugs.webkit.org/show_bug.cgi?id=184527

        Reviewed by Antti Koivisto.

        Use the formatting state to mark boxes dirty.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._firstInFlowChildWithNeedsLayout):
        (BlockFormattingContext.prototype._nextInFlowSiblingWithNeedsLayout):
        (BlockFormattingContext):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._layoutOutOfFlowDescendants):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState):
        (FormattingState.prototype.markNeedsLayout):
        (FormattingState.prototype.clearNeedsLayout):
        (FormattingState.prototype.needsLayout):
        (FormattingState.prototype.layoutNeeded):
        (FormattingState.prototype._markSubTreeNeedsLayout):
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.formattingStateForBox):
        (LayoutState.prototype.setNeedsLayout):
        (LayoutState.prototype.needsLayout):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isFormattingContextDescendant):
        * LayoutReloaded/LayoutTree/Container.js:
        (Layout.Container.prototype.isContainingBlockDescendant):

2018-04-11  Jonathan Bedard  <jbedard@apple.com>

        Fix TestInvocation class for newer versions of clang.
        https://bugs.webkit.org/show_bug.cgi?id=184508
        <rdar://problem/39328648>

        Reviewed by Alexey Proskuryakov.

        Declare TestInvocation to be final so it does not require a virtual destructor.

        * WebKitTestRunner/TestInvocation.h:

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

        IDN spoofing with Hebrew combining characters
        https://bugs.webkit.org/show_bug.cgi?id=184472
        <rdar://problem/39148687>

        Reviewed by Brent Fulgham.

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

2018-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Missing label when focusing a <select> with a title attribute but no associated <label>
        https://bugs.webkit.org/show_bug.cgi?id=184352
        <rdar://problem/39237683>

        Reviewed by Andy Estes.

        Add support for UIScriptController::selectFormPopoverTitle, which returns the title of the current select
        popover's UITableViewController (for testing purposes).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectFormPopoverTitle const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::selectFormPopoverTitle const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectFormPopoverTitle const):

2018-04-10  Nan Wang  <n_wang@apple.com>

        AX: Expose strong password fields on iOS
        https://bugs.webkit.org/show_bug.cgi?id=184465
        <rdar://problem/39325104>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::boolAttributeValue):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::boolAttributeValue):

2018-04-10  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for out-of-flow descendants in inline formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=184454

        Reviewed by Antti Koivisto.

        When the containing block of an out-of-flow positioned element establishes an inline formatting context.
        This is mostly about moving out-of-flow logic from BlockFormattingContext to the base class.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext):
        (BlockFormattingContext.prototype._layoutOutOfFlowDescendants): Deleted.
        (BlockFormattingContext.prototype._computeOutOfFlowWidth): Deleted.
        (BlockFormattingContext.prototype._computeInFlowWidth): Deleted.
        (BlockFormattingContext.prototype._computeOutOfFlowHeight): Deleted.
        (BlockFormattingContext.prototype._computeOutOfFlowPosition): Deleted.
        (BlockFormattingContext.prototype._shrinkToFitWidth): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._placeInFlowPositionedChildren):
        (FormattingContext.prototype._computeInFlowWidth):
        (FormattingContext.prototype._layoutOutOfFlowDescendants):
        (FormattingContext.prototype._computeOutOfFlowWidth):
        (FormattingContext.prototype._computeOutOfFlowHeight):
        (FormattingContext.prototype._computeOutOfFlowPosition):
        (FormattingContext.prototype._shrinkToFitWidth):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineContainer):
        (InlineFormattingContext.prototype._handleInlineBlockContainer):
        (InlineFormattingContext.prototype._placeOutOfFlowDescendants): Deleted.
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-out-of-flow-descendant.html: Added.

2018-04-09  Zan Dobersek  <zdobersek@igalia.com>

        WKTR: Enable DOM cache, SW registration directory cleanup on non-Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=184414

        Reviewed by Michael Catanzaro.

        Enable clearServiceWorkerRegistrations(), clearDOMCache() and
        clearDOMCaches() implementations in WebKitTestRunner's TestController
        class for non-Cocoa platforms. Implementations depend on the generic
        WK2 C API that other ports can leverage as well.

        The clearDOMCache() and clearDOMCaches() calls are now operational for
        tests that invoke them. clearServiceWorkerRegistrations() and
        clearDOMCaches() are also called between each test, cleaning up relevant
        resources.

        The TestController::getAllStorageAccessEntries() stub for non-Cocoa
        platforms is moved into the main !PLATFORM(COCOA) block.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::getAllStorageAccessEntries):
        (WTR::clearServiceWorkerRegistrationsCallback):
        (WTR::TestController::clearServiceWorkerRegistrations):
        (WTR::clearDOMCacheCallback):
        (WTR::TestController::clearDOMCache):
        (WTR::TestController::clearDOMCaches):

2018-04-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for relatively positioned containers in inline formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=184439

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren): Deleted.
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._computeInFlowPositionedPosition):
        (FormattingContext.prototype._placeInFlowPositionedChildren):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._placeInFlowPositionedChildren): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):
        (Utils._dumpLines.):
        (Utils._dumpLines):
        (Utils.precisionRoundWithDecimals):
        (Utils.precisionRound):
        (Utils):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-relative-positioning.html: Added.

2018-04-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Remove Layout.InitialContainingBlock class
        https://bugs.webkit.org/show_bug.cgi?id=184436

        Reviewed by Antti Koivisto.

        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.establishesBlockFormattingContext):
        * LayoutReloaded/LayoutTree/InitialBlockContainer.js: Removed.
        * LayoutReloaded/TreeBuilder.js:
        (TreeBuilder.prototype.createTree):
        * LayoutReloaded/test/index.html:

2018-04-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for inline-block.
        https://bugs.webkit.org/show_bug.cgi?id=184434

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineContainer):
        (InlineFormattingContext.prototype._handleInlineBlockContainer):
        (InlineFormattingContext.prototype._handleInlineContent):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.addInlineContainerBox):
        (Line.prototype.addTextLineBox):
        (Line):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isInlineBlockBox):
        * LayoutReloaded/Utils.js:
        (LayoutRect.prototype.growHorizontally):
        (Utils.isBlockContainerElement):
        (Utils.isInlineBlockElement):
        (Utils._dumpLines.):
        (Utils._dumpLines):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-block-with-fixed-width-height.html: Added.

2018-04-09  Timothy Hatcher  <timothy@apple.com>

        Add support for setting a background color on WKWebView and WKView
        https://bugs.webkit.org/show_bug.cgi?id=184426

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/BackgroundColor.mm: Added.

2018-04-09  Charlie Turner  <cturner@igalia.com>

        [WPE] Add some missing install dependencies
        https://bugs.webkit.org/show_bug.cgi?id=184383

        Reviewed by Michael Catanzaro.

        * wpe/install-dependencies:

2018-04-09  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION(r229929): localStorage is broken for WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=184382
        <rdar://problem/39257355>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/localstorage-empty-string-value.html:

2018-04-09  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r230389.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformAdjustContext): Use the 'ServiceWorkers'
        subdirectory for the temporary testing-purpose SW registration directory
        like it's used in Cocoa's TestController, addressing the review comment
        that I forgot about.

2018-04-08  Zan Dobersek  <zdobersek@igalia.com>

        Non-Cocoa ports use default directory for ServiceWorker data during testing
        https://bugs.webkit.org/show_bug.cgi?id=183784

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformAdjustContext): Set the service worker registration
        directory through the new WKWebsiteDataStore API for non-Cocoa ports.

2018-04-08  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Adjust line with inline container's margin border and padding
        https://bugs.webkit.org/show_bug.cgi?id=184409

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleFloatingBox):
        (InlineFormattingContext.prototype._adjustLineForInlineContainerStart):
        (InlineFormattingContext.prototype._adjustLineForInlineContainerEnd):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.shrink):
        (Line.prototype.adjustWithOffset):
        (Line.prototype.moveContentHorizontally):
        (Line.prototype.addTextLineBox):
        (Line):
        (Line.prototype.addFloatingBox): Deleted.
        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-padding-border-margin-offsets.html: Added.

2018-04-07  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for InlineContainer
        https://bugs.webkit.org/show_bug.cgi?id=184394

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._addToLayoutQueue):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineContent):
        (InlineFormattingContext.prototype._handleFloatingBox):
        (InlineFormattingContext.prototype._adjustLineForInlineContainerStart):
        (InlineFormattingContext.prototype._adjustLineForInlineContainerEnd):
        (InlineFormattingContext.prototype._placeInFlowPositionedChildren):
        (InlineFormattingContext.prototype._placeOutOfFlowDescendants):
        (InlineFormattingContext.prototype._createNewLine):
        (InlineFormattingContext.prototype._handleContent): Deleted.
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype._createFormattingState):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isContainer):
        (Layout.Box.prototype.isInlineContainer):
        (Layout.Box.prototype.isInlineBox):
        * LayoutReloaded/LayoutTree/Container.js:
        (Layout.Container.prototype.isContainer): Deleted.
        * LayoutReloaded/LayoutTree/InlineContainer.js: Added.
        (Layout.InlineContainer):
        * LayoutReloaded/TreeBuilder.js:
        (TreeBuilder.prototype._createAndAttachBox):
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):
        (Utils.precisionRound):
        (Utils):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-content-simple2.html: Added.
        * LayoutReloaded/test/inline-floating1.html: Added.
        * LayoutReloaded/test/inline-formatting-context-floats1.html: Added.
        * LayoutReloaded/test/inline-formatting-context-floats2.html: Added.

2018-04-07  Timothy Hatcher  <timothy@apple.com>

        Use the system's link color when system appearance is desired for a WebView.

        https://bugs.webkit.org/show_bug.cgi?id=184353
        rdar://problem/9420053

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm: Added.
        (TestWebKitAPI::WebKit::LinkColor):
        (TestWebKitAPI::WebKit::LinkColorWithSystemAppearance):

2018-04-06  Zalan Bujtas  <zalan@apple.com>

        Rebaseline LayoutReloaded patch file.

        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:

2018-04-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebCore] Expose a constant for scrollbar pixels per line (cScrollbarPixelsPerLine)
        https://bugs.webkit.org/show_bug.cgi?id=184296

        Reviewed by Alex Christensen.

        * DumpRenderTree/win/EventSender.cpp:
        (mouseScrollBy): Removed the duplicated cScrollbarPixelsPerLine
        definition. Use WebCore::cScrollbarPixelsPerLine.

2018-04-06  Zalan Bujtas  <zalan@apple.com>

        Rebaseline LayoutReloaded patch file.

        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:

2018-04-05  Youenn Fablet  <youenn@apple.com>

        Test expectation updater should handle Win bot results
        https://bugs.webkit.org/show_bug.cgi?id=184274

        Reviewed by Ryosuke Niwa.

        Add processing of win bot results.
        They will update platform/win results.

        Updated the script so that if there is no mac-wk2 results, it will still process specific results.

        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater.py:
        (TestExpectationUpdater.__init__):
        (TestExpectationUpdater._bot_type):
        (TestExpectationUpdater.do_update):
        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater_unittest.py:
        (MockAttachment):
        (MockAttachment.__init__):
        (MockAttachment.contents):
        (MockBugzilla):
        (MockBugzilla.__init__):
        (MockBugzilla.fetch_bug):
        (MockBugzilla.attachments):
        (MockZip):
        (MockZip.__init__):
        (MockZip.unzip):
        (MockZip.read):
        (TestExpectationUpdaterTest.test_update_test_expectations):
        (TestExpectationUpdaterTest):
        (TestExpectationUpdaterTest.test_update_win_future_test_expectations):

2018-04-05  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Fix static position for floating boxes when they don't fit the current line
        https://bugs.webkit.org/show_bug.cgi?id=184354

        Reviewed by Antti Koivisto.

        Do not shrink the current line with the floating box unless it is on the current line.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._handleFloatingBox):
        (InlineFormattingContext.prototype._mapFloatingVerticalPosition):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.addFloatingBox):
        (Line):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-right-floats3.html: Added.

2018-04-05  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add support for right floating boxes in inline formatting context
        https://bugs.webkit.org/show_bug.cgi?id=184351

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._handleFloatingBox):
        (InlineFormattingContext.prototype._mapFloatingVerticalPosition):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.addFloatingBox):
        (Line):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-right-float-simple.html: Added.
        * LayoutReloaded/test/inline-with-right-floats2.html: Added.

2018-04-05  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Move floating box to the next line when needed
        https://bugs.webkit.org/show_bug.cgi?id=184349

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleContent):
        (InlineFormattingContext.prototype._handleText):
        (InlineFormattingContext.prototype._handleFloatingBox):
        (InlineFormattingContext.prototype._mapFloatingHorizontalPosition):
        (InlineFormattingContext):
        (InlineFormattingContext.prototype._handleFloatingBoxes): Deleted.
        (InlineFormattingContext.prototype._floatingBoxes): Deleted.
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.addTextLineBox):
        (Line.prototype.addFloatingBox):
        (Line):
        * LayoutReloaded/Utils.js:
        (LayoutRect.prototype.moveHorizontally):
        (LayoutRect.prototype.moveVertically):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-floats-when-they-dont-fit.html: Added.

2018-04-05  Brady Eidson  <beidson@apple.com>

        Process Swap on Navigation causes many webpages to hang due to attempted process swap for iframe navigations.
        <rdar://problem/39162236> and https://bugs.webkit.org/show_bug.cgi?id=184318

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[PSONScheme addMappingFromURLString:toData:]):
        (-[PSONScheme webView:startURLSchemeTask:]):

2018-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove StaticLock
        https://bugs.webkit.org/show_bug.cgi?id=184332

        Reviewed by Mark Lam.

        * DumpRenderTree/JavaScriptThreading.cpp:

2018-04-05  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Find the correct left edge for a line when floating boxes are in parent formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=184330

        Reviewed by Antti Koivisto.

        In inline formatting context, the floating boxes can come from the parent (block) formatting context. Let's
        take them into account when computing the line edges.

        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype.left):
        (FloatingContext.prototype.right):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._createNewLine):
        (InlineFormattingContext.prototype._mapFloatingVerticalPosition):
        (InlineFormattingContext.prototype._mapFloatingHorizontalPosition):
        (InlineFormattingContext.prototype._mapFloatingPosition): Deleted.
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/multiple-left-floats-on-line-from-parent-formatting-context.html: Added.

2018-04-05  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Collect floating boxes in inline formatting context and layout them first.
        https://bugs.webkit.org/show_bug.cgi?id=184329

        Reviewed by Antti Koivisto.

        Let's do this for now. There might be some cases where this violates layout.

        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._outOfFlowDescendants):
        (FormattingContext):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleFloatingBoxes):
        (InlineFormattingContext.prototype._handleFloatingBox):
        (InlineFormattingContext.prototype._floatingBoxes):
        (InlineFormattingContext):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/multiple-left-floats-on-line-simple.html: Added.

2018-04-04  Youenn Fablet  <youenn@apple.com>

        WebRTC data channel only applications require capture permissions for direct connections
        https://bugs.webkit.org/show_bug.cgi?id=174500
        <rdar://problem/34134281>

        Reviewed by Eric Carlson.

        Adding options to enable MDNS ICE candidates.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMediaDevicesEnabled):
        (WTR::TestRunner::setMDNSICECandidatesEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-04-04  Ryan Haddad  <ryanhaddad@apple.com>

        Disable failing WKWebViewAutofillTests
        https://bugs.webkit.org/show_bug.cgi?id=184196

        Unreviewed test gardening.

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

2018-04-04  Youenn Fablet  <youenn@apple.com>

        Introduce a ThreadSafeRefCounted parameter to ensure being destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183988

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::ThreadSafeRefCountedObject::create):
        (TestWebKitAPI::ThreadSafeRefCountedObject::~ThreadSafeRefCountedObject):
        (TestWebKitAPI::MainThreadSafeRefCountedObject::create):
        (TestWebKitAPI::MainThreadSafeRefCountedObject::~MainThreadSafeRefCountedObject):
        (TestWebKitAPI::TEST):

2018-04-04  Ms2ger  <Ms2ger@igalia.com>

        Test gardening for GTK.
        https://bugs.webkit.org/show_bug.cgi?id=184298

        Unreviewed test gardening.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Add pointer to
        https://bugs.webkit.org/show_bug.cgi?id=184295.

2018-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        ASSERTION FAILED: !m_mainFrame->coreFrame()->loader().frameHasLoaded() || !m_pendingNavigationID when reloading page while a page is loading
        https://bugs.webkit.org/show_bug.cgi?id=153210

        Reviewed by Alex Christensen.

        Add unit tests to WebKit C API and WebKitGLib.

        * TestWebKitAPI/Tests/WebKit/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (LoadTwiceAndReloadTest::reloadOnFinishLoad):
        (LoadTwiceAndReloadTest::LoadTwiceAndReloadTest):
        (LoadTwiceAndReloadTest::~LoadTwiceAndReloadTest):
        (LoadTwiceAndReloadTest::waitUntilFinished):
        (testWebViewLoadTwiceAndReload):
        (beforeAll):

2018-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit/WebKitWebPage/context-menu is failing since r229831
        https://bugs.webkit.org/show_bug.cgi?id=184260

        Reviewed by Michael Catanzaro.

        This is not a regression introduced in r229831, though, it's a bug in the test itself revealed by r229831. We
        should wait for the load to complete before trying to show the context menu.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (testContextMenuWebExtensionMenu):

2018-04-03  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce floating to InlineFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=184288

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeFloatingWidth): Deleted.
        (BlockFormattingContext.prototype._computeFloatingHeight): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._computeFloatingWidth):
        (FormattingContext.prototype._computeFloatingHeight):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleFloatingBox):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.addFloatingBox):
        (Line):
        * LayoutReloaded/test/float-is-inside-inline-formatting-context-simple.html: Added.
        * LayoutReloaded/test/index.html:

2018-04-03  Youenn Fablet  <youenn@apple.com>

        NetworkResourceLoader does not need to expose all redirect response headers
        https://bugs.webkit.org/show_bug.cgi?id=184114
        <rdar://problem/39010557>

        Reviewed by Ryosuke Niwa.

        Add an option to dump the number of headers in a response.
        This allows validating that filtering does happen or not.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::responseHeaderCount):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpAllHTTPRedirectedResponseHeaders):
        (WTR::TestRunner::shouldDumpAllHTTPRedirectedResponseHeaders const):
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::responseHeaderCount):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-04-03  Andy Estes  <aestes@apple.com>

        [Mac] Prioritize file promises over filenames during drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=184237
        <rdar://problem/38278076>

        Reviewed by Wenson Hsieh.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController beginDragWithFilePromises:]):

2018-04-03  Brady Eidson  <beidson@apple.com>

        Make SessionStorage work with process swapping.
        https://bugs.webkit.org/show_bug.cgi?id=184270

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONMessageHandler userContentController:didReceiveScriptMessage:]):

2018-04-03  Chris Dumez  <cdumez@apple.com>

        Drop MainFrame class
        https://bugs.webkit.org/show_bug.cgi?id=184191

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:

2018-04-03  Charlie Turner  <cturner@igalia.com>

        [WPE] Add WPE port to garden-o-matic
        https://bugs.webkit.org/show_bug.cgi?id=182998

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        Add WPE as a port to check.
        (config.kPlatforms.string_appeared_here._builderApplies): Use less
        surprising equality operator.
        (config.kPlatforms.string_appeared_here.resultsDirectoryNameFromBuilderName):
        Ditto.
        (config.kPlatforms.string_appeared_here.resultsDirectoryForBuildNumber):
        Ditto.

2018-04-03  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][JHBuild] Tools/gtk/install-dependencies: Replace libxfont with libxfont2 in Arch Linux
        https://bugs.webkit.org/show_bug.cgi?id=184258

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/install-dependencies: Use libxfont2 on Arch Linux as well.

2018-04-02  Brady Eidson  <beidson@apple.com>

        Process swapping on navigation needs to handle server redirects.
        <rdar://problem/38690465> and https://bugs.webkit.org/show_bug.cgi?id=184142

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didFinishNavigation:]):
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[PSONNavigationDelegate webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[PSONScheme addRedirectFromURLString:toURLString:]):
        (-[PSONScheme webView:startURLSchemeTask:]):

2018-04-02  Daniel Bates  <dabates@apple.com>

        Add infrastructure to relax SSL for allowed hosts in DumpRenderTree and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=184239

        Reviewed by Alexey Proskuryakov.

        Adds a new optional command line option --allow-any-certificate-for-allowed-hosts (defaults to disabled)
        to allow the allowed hosts to accept any HTTPS certificate. You can specify an allowed host
        by using the existing command line option --allowed-host.

        Currently both DumpRenderTree and WebKitTestRunner relax SSL certificate validation
        for 127.0.0.1 and localhost so that we can run HTTPS tests from these hosts using
        a self-signed certificate. They do not relax these restrictions for any allowed host,
        specified using the optional command line option --allowed-host. For testing purposes
        it is useful to be able to run a local HTTPS server with a self-signed certificate and
        mimic a non-localhost hostname (by adding an alias(es) for 127.0.0.1 to /etc/hosts).
        We should support relaxing SSL restrictions for such testing purposes.

        For example, to allow host example.test to present any HTTPS certificate when running
        tests you would invoke:

            run-webkit-tests --allowed-host example.test --additional-drt-flag '--allow-any-certificate-for-allowed-hosts'

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions): Parse the command line option --allow-any-certificate-for-allowed-hosts.
        (dumpRenderTree): Allow any HTTPS certificate from each allowed host.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): Clear out the existing list of allowed hosts
        before appending entries to it to avoid growing the list of allowed hosts without bound. Call
        platformAllowAnyHTTPSCertificateForAllowedHosts() to apply SSL relaxation for each allowed host.
        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionAllowAnyHTTPSCertificateForAllowedHosts): Added.
        (WTR::handleOptionAllowedHost): Update code as needed now that Options::allowedHosts is a std::set.
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h: Change the data type of allowedHosts from a std::vector to a std::set
        so that we can make use of the convenience functon std::set::find() in TestController::canAuthenticateAgainstProtectionSpace().
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::canAuthenticateAgainstProtectionSpace): Allow any HTTPS certificate from each allowed host.
        * WebKitTestRunner/TestController.h:

2018-04-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230174.

        Caused LayoutTests to exit early with assertion failures.

        Reverted changeset:

        "Process swapping on navigation needs to handle server
        redirects."
        https://bugs.webkit.org/show_bug.cgi?id=184142
        https://trac.webkit.org/changeset/230174

2018-04-02  Daniel Bates  <dabates@apple.com>

        Remove pre-Network Session code path for allowing any HTTPS certificate on Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=184242

        Reviewed by Alexey Proskuryakov.

        Following r227364 we use the Network Session (NSURLSession) code path by default in
        modern WebKit on Mac and iOS. That is, we no longer use {CF, NS}URLConnection in modern
        WebKit on these platforms. So, we can remove code that used NSURLRequest SPI to allow
        any HTTPS certificate from localhost and 127.0.0.1 when using {CF, NS}URLConnection.
        The equivalent functionality is implemented in TestController::canAuthenticateAgainstProtectionSpace().

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2018-04-02  Brady Eidson  <beidson@apple.com>

        Process swapping on navigation needs to handle server redirects.
        <rdar://problem/38690465> and https://bugs.webkit.org/show_bug.cgi?id=184142

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didFinishNavigation:]):
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[PSONNavigationDelegate webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[PSONScheme addRedirectFromURLString:toURLString:]):
        (-[PSONScheme webView:startURLSchemeTask:]):

2018-04-02  Thibault Saunier  <tsaunier@igalia.com>

        webkitpy: Use current environment value for GST_DEBUG(_FILE) and DOT_DIR env vars
        https://bugs.webkit.org/show_bug.cgi?id=184036

        Reviewed by Philippe Normand.

        Those variables are for debug purpose and should not change the behaviour
        itself, and developers expect them to have effect.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):

2018-04-02  Daniel Bates  <dabates@apple.com>

        Remove Options constructor and use internal linkage for option handlers
        https://bugs.webkit.org/show_bug.cgi?id=184229

        Reviewed by Andy Estes.

        Use C++11 default initializer syntax to remove the need to explicitly have a constructor
        for the struct Options. Use internal linkage for option handler functions as these
        are never invoked outside the translation unit they are defined in.

        * WebKitTestRunner/Options.cpp:
        (WTR::handleOptionNoTimeout):
        (WTR::handleOptionVerbose):
        (WTR::handleOptionGcBetweenTests):
        (WTR::handleOptionPixelTests):
        (WTR::handleOptionPrintSupportedFeatures):
        (WTR::handleOptionComplexText):
        (WTR::handleOptionAcceleratedDrawing):
        (WTR::handleOptionRemoteLayerTree):
        (WTR::handleOptionShowWebView):
        (WTR::handleOptionShowTouches):
        (WTR::handleOptionAllowedHost):
        (WTR::handleOptionUnmatched):
        (WTR::Options::Options): Deleted.
        * WebKitTestRunner/Options.h:

2018-04-02  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed GTK port dependencies fix after r230152.

        Add alsa library dependency for gtk.

        * gtk/install-dependencies:

2018-04-02  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Make libwebrtc backend buildable for GTK  port
        https://bugs.webkit.org/show_bug.cgi?id=178860

        Reviewed by Youenn Fablet.

        * gstreamer/jhbuild.modules: Modified the libvpx module for the
        libwebrtc compilation.
        * gtk/install-dependencies: Add libevent as a system requirement.
        * Scripts/webkitpy/style/checker.py: Added libwebrtc to the list of third
        party libraries with reduced style checks.

2018-04-01  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Use containing block's contentBox left edge when the float is to the right.
        https://bugs.webkit.org/show_bug.cgi?id=184230

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._mapFloatingPosition):
        (InlineFormattingContext):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-formatting-context-with-floats2.html: Added.

2018-04-01  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Right floating box reduces available line width.
        https://bugs.webkit.org/show_bug.cgi?id=184226

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._createNewLine):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-with-floats-right-left-simple.html: Added.

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Floating box reduces line with in inline formatting context
        https://bugs.webkit.org/show_bug.cgi?id=184223

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype.left):
        (FloatingContext.prototype.right):
        (FloatingContext.prototype._mapDisplayMarginBoxToFormattingRoot):
        (FloatingContext.prototype._mapBorderBoxToFormattingRoot):
        (FloatingContext.prototype._mapContentBoxToFormattingRoot):
        (FloatingContext.prototype.formattingRoot):
        (FloatingContext.prototype._floatingState):
        (FloatingContext.prototype._formattingRoot): Deleted.
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._createNewLine):
        (InlineFormattingContext.prototype._mapFloatingPosition):
        (InlineFormattingContext):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState.prototype.displayBox):
        (FormattingState):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/inline-formatting-context-with-floats.html: Added.

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] InlineFormattingState should inherit the floating state from its parent formatting state
        https://bugs.webkit.org/show_bug.cgi?id=184220

        Reviewed by Antti Koivisto.

        If the block container box that initiates an inline formatting context also establishes a block context,
        create a new float state, otherwise use the existing one.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._contentHeight):
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        (InlineFormattingState):
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.establishedFormattingState):
        (LayoutState.prototype.formattingStateForBox):
        (LayoutState.prototype.formattingState): Deleted.
        * LayoutReloaded/Utils.js:

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] FloatingContext does not need a parent formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=184219

        Reviewed by Antti Koivisto.

        We don't need the formatting context in the FloatingContext now that margins are moved over to Display.Box.
        This is in preparation for being able to create a FloatingContext for an inline formatting context,
        when the inline context actually inherits the floating state from its formatting root.

        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext):
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._adjustedFloatingPosition):
        (FloatingContext.prototype._addFloatingBox):
        (FloatingContext.prototype._formattingContext): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Do not clone Display.Box for FloatingState stacks.
        https://bugs.webkit.org/show_bug.cgi?id=184218

        Reviewed by Antti Koivisto.

        Now that Display.Box is in a tree context, we can't just clone it for the purpose of caching its absolute position.

        * LayoutReloaded/DisplayTree/Box.js:
        (Display.Box.prototype.clone): Deleted.
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype._positionForFloating):
        (FloatingContext.prototype._moveToNextVerticalPosition):
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._findFloatingAtVerticalPosition):
        (FloatingContext.prototype._adjustedFloatingPosition):
        (FloatingContext.prototype._bottom):
        (FloatingContext.prototype._addFloatingBox):
        (FloatingContext.prototype._mapMarginBoxToFormattingRoot):
        (FloatingContext.prototype._mapDisplayMarginBoxToFormattingRoot):
        * LayoutReloaded/FormattingState/FloatingState.js:
        (FloatingState.prototype.addFloating):

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Remove all FormattingContext::absolute*Box functions.
        https://bugs.webkit.org/show_bug.cgi?id=184215

        Reviewed by Antti Koivisto.

        Use Display.Box instead.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._adjustedFloatingPosition):
        (FloatingContext.prototype._mapBorderBoxToFormattingRoot):
        (FloatingContext.prototype._mapContentBoxToFormattingRoot):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.absoluteBorderBox): Deleted.
        (FormattingContext.prototype.absolutePaddingBox): Deleted.
        (FormattingContext.prototype.absoluteContentBox): Deleted.
        (FormattingContext.prototype._toAbsolutePosition): Deleted.
        (FormattingContext.prototype._toRootAbsolutePosition): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.mapPosition):
        (Utils.marginBox):
        (Utils.borderBox):
        (Utils.contentBox):

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Remove FormattingContext::absoluteMarginBox
        https://bugs.webkit.org/show_bug.cgi?id=184213

        Reviewed by Antti Koivisto.

        Display.Box already has the margin values.

        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype._positionForFloating):
        (FloatingContext.prototype._addFloatingBox):
        (FloatingContext.prototype._mapMarginBoxToFormattingRoot):
        (FloatingContext.prototype._formattingRoot):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.absoluteMarginBox): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.marginBox):

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [layoutReloaded] Introduce margin to Display.Box
        https://bugs.webkit.org/show_bug.cgi?id=184212

        Reviewed by Antti Koivisto.

        This is in preparation for moving margin box out of formatting context to Display.Box.

        * LayoutReloaded/DisplayTree/Box.js:
        (Display.Box):
        (Display.Box.prototype.setRect):
        (Display.Box.prototype.setTopLeft):
        (Display.Box.prototype.setTop):
        (Display.Box.prototype.setLeft):
        (Display.Box.prototype.setSize):
        (Display.Box.prototype.setWidth):
        (Display.Box.prototype.setHeight):
        (Display.Box.prototype.width):
        (Display.Box.prototype.setMarginTop):
        (Display.Box.prototype.setMarginLeft):
        (Display.Box.prototype.setMarginBottom):
        (Display.Box.prototype.setMarginRight):
        (Display.Box.prototype.marginTop):
        (Display.Box.prototype.marginLeft):
        (Display.Box.prototype.marginBottom):
        (Display.Box.prototype.marginRight):
        (Display.Box.prototype.marginBox):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype._addToLayoutQueue):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState.prototype.createDisplayBox):

2018-03-31  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add tree context to Display.Box
        https://bugs.webkit.org/show_bug.cgi?id=184211

        Reviewed by Antti Koivisto.

        This is preparation for using the Display.Box tree to resolve absolute coordinates.

        * LayoutReloaded/DisplayTree/Box.js:
        (Display.Box):
        (Display.Box.prototype.setParent):
        (Display.Box.prototype.setNextSibling):
        (Display.Box.prototype.setPreviousSibling):
        (Display.Box.prototype.setFirstChild):
        (Display.Box.prototype.setLastChild):
        (Display.Box.prototype.parent):
        (Display.Box.prototype.nextSibling):
        (Display.Box.prototype.previousSibling):
        (Display.Box.prototype.firstChild):
        (Display.Box.prototype.lastChild):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState.prototype.createDisplayBox):

2018-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Copying a list from Microsoft Word to TinyMCE fails when mso-list is the first property
        https://bugs.webkit.org/show_bug.cgi?id=182938
        <rdar://problem/37683007>

        Reviewed by Wenson Hsieh.

        Added more assertions to PasteHTML.PreservesMSOList for preserving an inline style which starts with mso-list
        or the one which line-breaks right before it.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/mso-list.html:

2018-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Copying a list from Microsoft Word to TinyMCE fails when mso-list is on tags other than P
        https://bugs.webkit.org/show_bug.cgi?id=182954
        <rdar://problem/37713141>

        Reviewed by Wenson Hsieh.

        Added a test case for a HTML generated by Microsoft Word which sets mso-list on h4.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/mso-list-compat-mode.html: Fixed the file path.
        * TestWebKitAPI/Tests/WebKitCocoa/mso-list-on-h4.html: Added.

2018-03-29  Ross Kirsling  <ross.kirsling@sony.com>

        run-jsc-benchmarks should recognize Windows-style build directory structure.
        https://bugs.webkit.org/show_bug.cgi?id=184117

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-benchmarks:
        Allow not only bin/jsc but also bin64/jsc.exe.

2018-03-29  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Decouple formatting state and context lifetime.
        https://bugs.webkit.org/show_bug.cgi?id=184136

        Reviewed by Antti Koivisto.

        FormattingContext is about the layout logic. We don't need to hold on to it.

        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext):
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._computePositionToAvoidIntrudingFloats):
        (FloatingContext.prototype._addFloatingBox):
        (FloatingContext.prototype._formattingContext):
        (FloatingContext.prototype._formattingState):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        * LayoutReloaded/FormattingState/BlockFormattingState.js:
        (BlockFormattingState):
        * LayoutReloaded/FormattingState/FloatingState.js:
        (FloatingState):
        (FloatingState.prototype.addFloating):
        (FloatingState.prototype.formattingState):
        (FloatingState.prototype.formattingContext): Deleted.
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState):
        (FormattingState.prototype.formattingContext): Deleted.
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        (InlineFormattingState):
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.layout):
        (LayoutState.prototype.formattingContext):

2018-03-28  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce FloatingState.
        https://bugs.webkit.org/show_bug.cgi?id=184126

        Reviewed by Antti Koivisto.

        It holds the floating state (left/right floating stack) for a given formatting state (Block or Inline).
        (FormattingState -> FloatingState/FormattingContext -> FloatingContext)

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext):
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype.bottom):
        (FloatingContext.prototype._positionForFloating):
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._findInnerMostLeftAndRight):
        (FloatingContext.prototype._isEmpty):
        (FloatingContext.prototype._floatingState):
        (FloatingContext.prototype._formattingContext):
        (FloatingContext.prototype._lastFloating):
        (FloatingContext.prototype._leftFloatingStack):
        (FloatingContext.prototype._rightFloatingStack):
        (FloatingContext.prototype._addFloating): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        * LayoutReloaded/FormattingState/BlockFormattingState.js:
        (BlockFormattingState):
        * LayoutReloaded/FormattingState/FloatingState.js: Copied from Tools/LayoutReloaded/FormattingState/InlineFormattingState.js.
        (FloatingState):
        (FloatingState.prototype.addFloating):
        (FloatingState.prototype.leftFloatingStack):
        (FloatingState.prototype.rightFloatingStack):
        (FloatingState.prototype.lastFloating):
        (FloatingState.prototype.formattingContext):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState):
        (FormattingState.prototype.floatingState):
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        (InlineFormattingState):
        * LayoutReloaded/test/index.html:

2018-03-28  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Convert floating left/right stack display boxes absolute to the formatting context's root.
        https://bugs.webkit.org/show_bug.cgi?id=184123

        Reviewed by Antti Koivisto.

        1. The left/right floating array should hold the Display.Box (and not the Layout.Box)
        2. Clone the Display.Box and convert its rect absolute to the formatting context's root so that we
        don't have to keep converting the coordinates while computing the positions. 

        * LayoutReloaded/DisplayTree/Box.js:
        (Display.Box.prototype.clone):
        (Display.Box.prototype.setRect):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype._positionForFloating):
        (FloatingContext.prototype._addFloating):
        (FloatingContext.prototype._moveToNextVerticalPosition):
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._findFloatingAtVerticalPosition):
        (FloatingContext.prototype._adjustedFloatingPosition):
        (FloatingContext.prototype._bottom):

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r230060.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, disable new window.open() API tests introduced in r230051 on iOS.

        I will investigate if this is testable on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Do process swap when opening a cross-origin URL via window.open(url, '_blank', 'noopener')
        https://bugs.webkit.org/show_bug.cgi?id=183962
        <rdar://problem/38817833>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONUIDelegate initWithNavigationDelegate:]):
        (-[PSONUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):

2018-03-28  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        Add Carlos Eduardo Ramalho as contributor
        https://bugs.webkit.org/show_bug.cgi?id=184082

        Reviewed by Carlos Alberto Lopez Perez.

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

2018-03-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Make boosted text autosizing values switchable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=184092
        <rdar://problem/38939917>

        Reviewed by Tim Horton.

        Add an API test to check that toggling the boosted text autosizing preference causes text to lay out larger than
        it would with normal text autosizing.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm: Added.
        (TEST):

2018-03-28  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] InlineFormattingContext::_handleText should support runs on multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=184101

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleText):
        (InlineFormattingContext.prototype._createNewLine):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/simple-multiline-text.html: Added.

2018-03-28  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add InlineTextBreaker::skipLeadingWhitespaceIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=184099

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:

2018-03-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add JSCWeakValue to JavaScriptCore GLib API
        https://bugs.webkit.org/show_bug.cgi?id=184041

        Reviewed by Michael Catanzaro.

        Add test case for JSCWeakValue.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (weakValueClearedCallback):
        (testJSCWeakValue):
        (main):

2018-03-27  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Start using window.collectTextRuns() to layout text lines in inline formatting context
        https://bugs.webkit.org/show_bug.cgi?id=184070

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype._handleText):
        (InlineFormattingContext.prototype._commitLine):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line.prototype.addTextLineBox):
        (Line):
        (Line.prototype.addLineBox): Deleted.
        * LayoutReloaded/FormattingState/BlockFormattingState.js:
        (BlockFormattingState):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState.prototype.displayBox):
        (FormattingState):
        (FormattingState.prototype._setFormattingContext): Deleted.
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        (InlineFormattingState):
        * LayoutReloaded/LayoutTree/Text.js:
        (Text.prototype.content):
        * LayoutReloaded/Utils.js:
        (Utils.textRuns):
        (Utils.textRunsForLine):
        (Utils._dumpLines.):
        (Utils._dumpLines):
        * LayoutReloaded/test/simple-inline-text.html:

2018-03-27  Eric Carlson  <eric.carlson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=183876
        <rdar://problem/38726459>
        
        Unreviewed, fix for the test added in r229995 in the iOS simulator.

        * TestWebKitAPI/Tests/WebKitCocoa/AVFoundationPreference.mm:
        (TestWebKitAPI::AVFoundationPref::testWithPreference):

2018-03-27  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement authenticatorGetAssertion
        https://bugs.webkit.org/show_bug.cgi?id=183881
        <rdar://problem/37258628>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:
        (TestWebKitAPI::getTestKey):
        (TestWebKitAPI::addTestKeyToKeychain):
        (TestWebKitAPI::LAEvaluatePolicyFailedSwizzler::evaluatePolicyFailed):
        (TestWebKitAPI::LAEvaluatePolicyPassedSwizzler::evaluatePolicyPassed):
        (TestWebKitAPI::LAEvaluateAccessControlFailedSwizzler::LAEvaluateAccessControlFailedSwizzler):
        (TestWebKitAPI::LAEvaluateAccessControlFailedSwizzler::evaluateAccessControlFailed):
        (TestWebKitAPI::LAEvaluateAccessControlPassedSwizzler::LAEvaluateAccessControlPassedSwizzler):
        (TestWebKitAPI::LAEvaluateAccessControlPassedSwizzler::evaluateAccessControlPassed):
        (TestWebKitAPI::TEST):

2018-03-27  Brian Burg  <bburg@apple.com>

        REGRESSION(r229937): WebDriver tests no longer run, test runner hangs when launching wpt web server
        https://bugs.webkit.org/show_bug.cgi?id=184056
        <rdar://problem/38925058>

        Reviewed by Timothy Hatcher and Youenn Fablet.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer.start):
        The config key used in upstream WPT has changed from 'host' to 'browser_host'.

2018-03-27  Timothy Hatcher  <timothy@hatcher.name>

        Update my email address in contributors.json and scripts
        https://bugs.webkit.org/show_bug.cgi?id=184054

        * Scripts/validate-committer-lists:
        (CommitterListFromGit):
        * Scripts/webkitpy/common/config/contributors.json:

2018-03-27  Eric Carlson  <eric.carlson@apple.com>

        Make AVFoundationEnabled preference available on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183876
        <rdar://problem/38726459>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/video.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/AVFoundationPreference.mm: Added.
        (-[PreferenceTestMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::AVFoundationPref::SetUp):
        (TestWebKitAPI::AVFoundationPref::testWithPreference):
        (TestWebKitAPI::TEST_F):

2018-03-26  Brent Fulgham  <bfulgham@apple.com>

        Warn against cookie access in the WebContent process using ProcessPrivilege assertions
        https://bugs.webkit.org/show_bug.cgi?id=183911
        <rdar://problem/38762306>

        Reviewed by Youenn Fablet.

        Add a set of ProcessPrivilege assertions to enforce the rule that the WebContent process
        should never call Cookie API directly. That should only happen in the Networking or
        UIProcess. 

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain):
        * TestWebKitAPI/TestsController.cpp:
        (TestWebKitAPI::TestsController::TestsController):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2018-03-26  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add InlineText DOM interface and dependencies
        https://bugs.webkit.org/show_bug.cgi?id=184010

        Reviewed by Antti Koivisto.

        to help inline text layout.

        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:

2018-03-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to convert between DOM and JSCValue
        https://bugs.webkit.org/show_bug.cgi?id=183448

        Reviewed by Michael Catanzaro.

        Add unit tests for non-deprecated DOM API and switch existing tests to use non-deprecated API except for the
        ones that test the deprecated API.

        * TestWebKitAPI/Tests/WebKitGLib/DOMElementTest.cpp: Added.
        (DOMElementTest::create):
        (DOMElementTest::testAutoFill):
        (registerTests):
        * TestWebKitAPI/Tests/WebKitGLib/EditorTest.cpp: Added.
        (WebKitWebEditorTest::create):
        (WebKitWebEditorTest::selectionChangedCallback):
        (WebKitWebEditorTest::testSelectionchanged):
        (registerTests):
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testJavaScriptValues):
        (registerTests):
        * TestWebKitAPI/Tests/WebKitGLib/TestDOMElement.cpp: Renamed from Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMObjectPrivate.h.
        (testWebKitDOMElementAutoFill):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestEditor.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKitGtk/TestEditor.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameJavaScriptValues):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (inputElementIsUserEdited):
        (testWebExtensionInputElementIsUserEdited):
        (testWebExtensionFormSubmissionSteps):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (documentLoadedCallback):
        (serializeNode):
        (contextMenuCallback):
        (consoleMessageSentCallback):
        (formControlsAssociatedCallback):
        (willSubmitFormCallback):
        (pageCreatedCallback):
        (methodCallCallback):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (checkLeaks):
        (webProcessTestRunnerFinalize):
        (checkLeaksAtExit):
        * TestWebKitAPI/Tests/WebKitGtk/AutocleanupsTest.cpp:
        (AutocleanupsTest::testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/DOMClientRectTest.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeFilterTest.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeTest.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/DOMXPathNSResolverTest.cpp:
        * TestWebKitAPI/Tests/WebKitGtk/EditorTest.cpp: Removed.
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/PlatformGTK.cmake:
        * TestWebKitAPI/glib/PlatformWPE.cmake:

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

        webkitpy: Unrecognized mac versions always use WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=183681
        <rdar://problem/38509162>

        Reviewed by Daniel Bates.

        When an unrecognized version is used, we were unconditionally adding '-wk2'
        to the mac version name. This would mean that the port object would always
        use WebKitTestRunner as the driver, even if DumpRenderTree was explicitly
        requested.

        * Scripts/webkitpy/port/apple.py:
        (ApplePort.determine_full_port_name): Only add wk2 to port names if
        WebKitTestRunner is specified.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.__init__): Compare length of split string, and do not treat wk2 as a
        version name.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_factory_with_future_version): Confirm that future versions correctly
        assign the driver and have undefined version names.
        (MacTest.test_factory_with_portname_version): Confirm that general versions correctly assign
        the driver and have defined versions.
        (MacTest.test_factory_with_portname_wk2): Ensure that mac ports ending in 'wk2' set
        the driver to be WebKitTestRunner even if webkit_test_runner=False.

2018-03-23  Zan Dobersek  <zdobersek@igalia.com>

        Fix the run-benchmark script, properly specifying the plan directory
        where the Skipped file is located.

        Rubber-stamped by Carlos Alberto Lopez Perez.

        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (start):

2018-03-23  Tim Horton  <timothy_horton@apple.com>

        Fix the build with no pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=183973

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-03-23  Youenn Fablet  <youenn@apple.com>

        Update WPT tools to a1ec330
        https://bugs.webkit.org/show_bug.cgi?id=183934

        Reviewed by Chris Dumez.

        Update script to run WPT server  according updated WPT tools.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (main):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (base_http_url):
        (base_https_url):

2018-03-23  Sihui Liu  <sihui_liu@apple.com>

        Local storage getItem() for an empty string returned UNDEFINED value.
        https://bugs.webkit.org/show_bug.cgi?id=69138
        <rdar://problem/13410974>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm: Added.
        (-[LocalStorageMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/localstorage-empty-string-value.html: Added.

2018-03-23  Chris Dumez  <cdumez@apple.com>

        Promptly terminate service worker processes when they are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=183873
        <rdar://problem/38676995>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-03-23  Brady Eidson  <beidson@apple.com>

        Go to back/forward list items after a process-swapped navigation.
        <rdar://problem/38690544> and https://bugs.webkit.org/show_bug.cgi?id=183920

        Reviewed by Andy Estes.

        Add a new API test that does some process-swapping navigations (including a back navigation)
        and verifies the state of the engine afterwards.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[PSONScheme initWithBytes:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        (log):
        (function):
        (TEST): Deleted.

2018-03-23  Brendan McLoughlin  <brendan@bocoup.com>

        Lint web-platform-tests changes with the wpt linter before exporting
        https://bugs.webkit.org/show_bug.cgi?id=183796

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (TestExporter.__init__):
        (TestExporter.do_export):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py:
        (TestExporterTest.MockWPTLinter):
        (TestExporterTest.MockWPTLinter.__init__):
        (TestExporterTest.MockWPTLinter.lint):
        (TestExporterTest.test_export):
        (TestExporterTest.test_export_with_specific_branch):
        * Scripts/webkitpy/w3c/wpt_linter.py: Added.
        (WPTLinter):
        (WPTLinter.__init__):
        (WPTLinter.lint):

2018-03-23  David Kilzer  <ddkilzer@apple.com>

        Stop using dispatch_set_target_queue()
        <https://webkit.org/b/183908>
        <rdar://problem/33553533>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add check for use of
        dispatch_set_target_queue().
        (CppChecker): Add 'runtime/dispatch_set_target_queue' category.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest): Add test.

2018-03-23  Youenn Fablet  <youenn@apple.com>

        Allow fully whitelisted plug-ins to match non HTTP URLs
        https://bugs.webkit.org/show_bug.cgi?id=183938
        rdar://problem/38534312

        Reviewed by Chris Dumez.

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

2018-03-23  JF Bastien  <jfbastien@apple.com>

        dump-class-layout is just wrong
        https://bugs.webkit.org/show_bug.cgi?id=183939

        Reviewed by Yusuke Suzuki.

        Looks like r229291 contained a half-renamed variable in it, so it
        just doesn't work.

        * Scripts/dump-class-layout:
        (verify_type):
        (verify_type_recursive):

2018-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Run JSC GLib API tests in GTK+ and WPE bots.

        The test runners were still considering the JSC tests as google tests, but they are now GLib tests.

        * Scripts/run-gtk-tests:
        (GtkTestRunner.is_glib_test):
        (GtkTestRunner.is_google_test):
        * Scripts/run-wpe-tests:
        (WPETestRunner.is_glib_test):
        (WPETestRunner.is_google_test):

2018-03-22  Daniel Bates  <dabates@apple.com>

        Expose SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest() as WebKit SPI
        https://bugs.webkit.org/show_bug.cgi?id=183907
        <rdar://problem/38759127>

        Reviewed by Alex Christensen.

        Adds unit tests for the modern Objective-C and C SPI to ensure we do not regress it.

        We use the deprecated -[WKBrowsingContextController registerSchemeForCustomProtocol:]
        in both the modern Objective-C API and C API tests to share code. Once we no longer
        need to support the C API we should remove the tests and transition the modern Objective-
        C tests to use -[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:].

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeRegistry.mm: Added.
        (+[EchoURLProtocol canInitWithRequest:]):
        (+[EchoURLProtocol canonicalRequestForRequest:]):
        (+[EchoURLProtocol requestIsCacheEquivalent:toRequest:]):
        (-[EchoURLProtocol startLoading]):
        (-[EchoURLProtocol stopLoading]):
        (-[WKContextRegisterURLSchemeAsCanDisplayOnlyIfCanRequestLoadDelegate browsingContextController:didFailProvisionalLoadWithError:]):
        (-[WKContextRegisterURLSchemeAsCanDisplayOnlyIfCanRequestLoadDelegate browsingContextControllerDidFinishLoad:]):
        (TestWebKitAPI::TEST):

2018-03-22  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Enable WOFF2 support
        https://bugs.webkit.org/show_bug.cgi?id=178158

        Reviewed by Frédéric Wang.

        * wpe/jhbuild.modules: Add "brotli" and "woff2" to the JHBuild moduleset.

2018-03-22  Brendan McLoughlin  <brendan@bocoup.com>

        Do not export web-platform-test files generated by the wpt importer to assist the webkit test runner
        https://bugs.webkit.org/show_bug.cgi?id=183916

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (TestExporter.create_branch_with_patch):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py:
        (TestExporterTest.test_export):
        (TestExporterTest.test_export_with_specific_branch):

2018-03-22  Tim Horton  <timothy_horton@apple.com>

        Improve readability of WebCore's OTHER_LDFLAGS
        https://bugs.webkit.org/show_bug.cgi?id=183909
        <rdar://problem/38760992>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-03-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed. Marked myself as a committer.

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

2018-03-21  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        Unreviewed, make the email address of Yoshiaki Jitsukawa all lower case.

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

2018-03-21  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Unreviewed, add myself as a WebKit committer.

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

2018-03-21  Chris Dumez  <cdumez@apple.com>

        ScrollViewInsetTests.RestoreInitialContentOffsetAfterCrash API test is failing with async delegates
        https://bugs.webkit.org/show_bug.cgi?id=183787

        Reviewed by Wenson Hsieh.

        Add API test coverage.

        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        (-[AsyncPolicyDelegateForInsetTest webView:didFinishNavigation:]):
        (-[AsyncPolicyDelegateForInsetTest webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[AsyncPolicyDelegateForInsetTest webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[AsyncPolicyDelegateForInsetTest webViewWebContentProcessDidTerminate:]):
        (TestWebKitAPI::TEST):

2018-03-21  Chris Dumez  <cdumez@apple.com>

        Fix DataInteractionTests.InjectedBundleAllowPerformTwoStepDrop to use synchronouslyLoadTestPageNamed
        https://bugs.webkit.org/show_bug.cgi?id=183858

        Reviewed by Wenson Hsieh.

        Fix DataInteractionTests.InjectedBundleAllowPerformTwoStepDrop to use synchronouslyLoadTestPageNamed
        instead of loadTestPageNamed because injecting script.

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

2018-03-21  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Enable formatting state for InlineFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=183853

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._contentHeight):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._createNewLine):
        * LayoutReloaded/LayoutState.js:
        (LayoutState.prototype.formattingState):
        * LayoutReloaded/README.md:
        * LayoutReloaded/Utils.js:
        (Utils._dumpTree):
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/simple-inline-text.html: Added.

2018-03-21  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Move inline lines to InlineFormattingState.
        https://bugs.webkit.org/show_bug.cgi?id=183814

        Reviewed by Antti Koivisto.

        InlineFormattingContext is not supposed to hold state.

        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype._commitLine):
        (InlineFormattingContext.prototype._createNewLine):
        (InlineFormattingContext.prototype.lines): Deleted.
        (InlineFormattingContext.prototype._initializeLine): Deleted.
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        (InlineFormattingState):
        (InlineFormattingState.prototype.lines):
        (InlineFormattingState.prototype.appendLine):

2018-03-21  Ms2ger  <Ms2ger@igalia.com>

        [WPE] Disable most of TestWebKitFaviconDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=183813

        Unreviewed test gardening.

        The relevant APIs were mostly removed in r223953, making this test
        time out consistently.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:

2018-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] JSC bindings not introspectable
        https://bugs.webkit.org/show_bug.cgi?id=136989

        Reviewed by Michael Catanzaro.

        Use the new API instead of the deprecated one.

        * MiniBrowser/gtk/main.c:
        (aboutDataScriptMessageReceivedCallback):
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testJavaScriptContext):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewRunJavaScript):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (consoleMessageSentCallback):
        (echoCallback):
        (windowObjectCleared):
        (methodCallCallback):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (runTest):
        (webProcessTestRunnerFinalize):
        (windowObjectClearedCallback):
        * TestWebKitAPI/glib/PlatformGTK.cmake:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::javascriptResultToCString):
        (WebViewTest::javascriptResultToNumber):
        (WebViewTest::javascriptResultToBoolean):
        (WebViewTest::javascriptResultIsNull):
        (WebViewTest::javascriptResultIsUndefined):

2018-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Initial implementation of JavaScriptCore glib bindings
        https://bugs.webkit.org/show_bug.cgi?id=164061

        Reviewed by Michael Catanzaro.

        Add unit tests for the new API and generate the API documentation with generate-gtkdoc.

        * Scripts/webkitpy/style/checker.py: Ignore some style errors in public GLib API headers.
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp: Added.
        (LeakChecker::~LeakChecker):
        (LeakChecker::watch):
        (ExceptionHandler::ExceptionHandler):
        (ExceptionHandler::~ExceptionHandler):
        (ExceptionHandler::push):
        (ExceptionHandler::pop):
        (jscContextGarbageCollect):
        (testJSCBasic):
        (testJSCTypes):
        (foo):
        (callback):
        (doubleAndSetInResult):
        (sumFunction):
        (testJSCFunction):
        (testJSCObject):
        (fooCreate):
        (fooCreateWithFoo):
        (fooFree):
        (setFoo):
        (getFoo):
        (setSibling):
        (getSibling):
        (multiplyFoo):
        (getMultiplyFoo):
        (getMultiplyFooAsync):
        (bazCreate):
        (testJSCClass):
        (barCreate):
        (barFree):
        (setBar):
        (getBar):
        (testJSCPrototypes):
        (createError):
        (testJSCExceptions):
        (testJSCPromises):
        (fooFreeAndLog):
        (testJSCGarbageCollector):
        (testsJSCVirtualMachine):
        (testsJSCAutocleanups):
        (main):
        * gtk/generate-gtkdoc:
        (get_generator_for_config):

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

        Enable the minimal simulator feature flag when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=183807

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-03-20  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Disconnect Display.Box from Layout.Box
        https://bugs.webkit.org/show_bug.cgi?id=183805

        Reviewed by Antti Koivisto.

        Display.Box is only accessed through the FormattingState.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext):
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        (BlockFormattingContext.prototype._layoutOutOfFlowDescendants):
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        (FormattingContext.prototype.formattingRoot):
        (FormattingContext.prototype.formattingState):
        (FormattingContext.prototype.layoutState):
        (FormattingContext.prototype._toAbsolutePosition):
        (FormattingContext.prototype._toRootAbsolutePosition):
        (FormattingContext.prototype._addToLayoutQueue):
        (FormattingContext.prototype.displayBox):
        (FormattingContext.prototype._outOfFlowDescendants):
        (FormattingContext.prototype.rootContainer): Deleted.
        (FormattingContext.prototype.layoutContext): Deleted.
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._initializeLine):
        * LayoutReloaded/FormattingState/BlockFormattingState.js:
        (BlockFormattingState):
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState):
        (FormattingState.prototype.formattingRoot):
        (FormattingState.prototype.layoutState):
        (FormattingState.prototype.createDisplayBox):
        (FormattingState.prototype.displayBoxMap):
        (FormattingState.prototype.displayBox):
        (FormattingState.prototype.layoutContext): Deleted.
        * LayoutReloaded/FormattingState/InlineFormattingState.js:
        (InlineFormattingState):
        * LayoutReloaded/Layout.js:
        (layout):
        * LayoutReloaded/LayoutReloaded.xcworkspace/contents.xcworkspacedata:
        * LayoutReloaded/LayoutState.js: Renamed from Tools/LayoutReloaded/LayoutContext.js.
        (LayoutState):
        (LayoutState.prototype.layout):
        (LayoutState.prototype._createFormattingState):
        (LayoutState.prototype.formattingStates):
        (LayoutState.prototype.initialDisplayBox):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isOutOfFlowPositioned):
        (Layout.Box.prototype.containingBlock):
        (Layout.Box.prototype.setDisplayBox): Deleted.
        (Layout.Box.prototype.displayBox): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.layoutTreeDump):
        (Utils._findDisplayBox):
        (Utils._dumpBox):
        (Utils._dumpTree):
        * LayoutReloaded/misc/headers/BlockFormattingContext.h:
        * LayoutReloaded/misc/headers/FormattingContext.h:
        * LayoutReloaded/misc/headers/LayoutContext.h:
        * LayoutReloaded/test/index.html:

2018-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Expose content attributes on _WKLinkIconParameters
        https://bugs.webkit.org/show_bug.cgi?id=183768

        Reviewed by Alex Christensen.

        Expanded the basic test case for _WKLinkIconParameters's properties including newly added "attributes".

        * TestWebKitAPI/Tests/WebKitCocoa/IconLoadingDelegate.mm:
        (IconLoading.DefaultFavicon):

2018-03-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add AssistedNodeInformation plumbing for form control placeholder text and label text
        https://bugs.webkit.org/show_bug.cgi?id=183802
        <rdar://problem/38686273>

        Reviewed by Tim Horton.

        Adds a new API test to exercise new placeholder and label SPI on _WKFocusedFormElement.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        (-[InputDelegate _webView:focusShouldStartInputSession:]):
        (-[InputDelegate shouldStartInputSessionHandler]):
        (-[InputDelegate setShouldStartInputSessionHandler:]):
        (TEST):
        (-[FormSubmissionDelegate webView:startURLSchemeTask:]): Deleted.
        (-[FormSubmissionDelegate webView:stopURLSchemeTask:]): Deleted.
        (-[FormSubmissionDelegate _webView:willSubmitFormValues:userObject:submissionHandler:]): Deleted.

2018-03-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix to run-webkit-httpd from native Windows.
        https://bugs.webkit.org/show_bug.cgi?id=183605

        Reviewed by Daniel Bates.

        This fix is to run Apache HTTP server from native Windows. The environment is different
        from cygwin, which is used for AppleWin, in following points:
        - A temporary file behaves differently. It cannot reopen by anybody when indicated as 
          delete on close. To solve this situation, filesystem.mkdtemp() is used instead.
        - It's not unix so that `tail` command is not available. Replaced with python equivalent
          function.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.mkdtemp.TemporaryDirectory.__init__):
        (FileSystem.mkdtemp.TemporaryDirectory.__exit__): The existing contents would be deleted.
        (FileSystem.mkdtemp):
        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        (parse_args):
        (run_server):
        (run_server_with_log_file):
        (follow_file):

2018-03-20  Brady Eidson  <beidson@apple.com>

        First piece of process swapping on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=183665

        Reviewed by Andy Estes.

        Expose the "swaps processes on navigation" setting in MiniBrowser UI for testing:

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController processSwapOnNavigationEnabled]):
        (-[SettingsController toggleProcessSwapOnNavigation:]):

        Makes sure the current behavior is tested:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Added.
        (-[PSONNavigationDelegate webView:didFinishNavigation:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        (-[PSONScheme webView:stopURLSchemeTask:]):
        (TEST):

2018-03-20  Chris Dumez  <cdumez@apple.com>

        QuickLook.NavigationDelegate API test is failing on iOS with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183791

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookAsyncNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[QuickLookAsyncNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookAsyncNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

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

        Add and adopt WK_PLATFORM_NAME and adjust default feature defines
        https://bugs.webkit.org/show_bug.cgi?id=183758
        <rdar://problem/38017644>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-03-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r229726 and r229763.

        Caused some API test failures on iOS

        Reverted changesets:

        "Make policy decisions asynchronous"
        https://bugs.webkit.org/show_bug.cgi?id=180568
        https://trac.webkit.org/changeset/229726

        "Rebaseline three webarchive tests for WK2 after r229726."
        https://bugs.webkit.org/show_bug.cgi?id=180568
        https://trac.webkit.org/changeset/229763

2018-03-20  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Move Display.Box handling from FormattingContext to FormattingState
        https://bugs.webkit.org/show_bug.cgi?id=183779

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeFloatingWidth):
        (BlockFormattingContext.prototype._computeInFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._computeFloatingHeight):
        (BlockFormattingContext.prototype._computeInFlowHeight):
        (BlockFormattingContext.prototype._horizontalConstraint):
        (BlockFormattingContext.prototype._contentHeight):
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._computePositionToAvoidIntrudingFloats):
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._adjustedFloatingPosition):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        (FormattingContext.prototype._toAbsolutePosition):
        (FormattingContext.prototype._toRootAbsolutePosition):
        (FormattingContext.prototype._addToLayoutQueue):
        (FormattingContext.prototype.displayBox):
        (FormattingContext.prototype._createDisplayBox): Deleted.
        (FormattingContext.prototype.toDisplayBox): Deleted.
        (FormattingContext.prototype.toLayoutBox): Deleted.
        * LayoutReloaded/FormattingState/FormattingState.js:
        (FormattingState):
        (FormattingState.prototype.createDisplayBox):
        (FormattingState.prototype.displayBox):

2018-03-20  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce FormattingState (Block/Inline/etc)
        https://bugs.webkit.org/show_bug.cgi?id=183777

        Reviewed by Antti Koivisto.

        This is in preparation for moving out states from the formatting contexts.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        (FormattingContext.prototype.layoutState):
        (FormattingContext.prototype.layoutContext):
        (FormattingContext.prototype.layout):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        * LayoutReloaded/FormattingState/BlockFormattingState.js: Copied from Tools/LayoutReloaded/LayoutContext.js.
        (BlockFormattingState):
        * LayoutReloaded/FormattingState/FormattingState.js: Copied from Tools/LayoutReloaded/LayoutContext.js.
        (FormattingState):
        (FormattingState.prototype.formattingContext):
        (FormattingState.prototype.layoutContext):
        (FormattingState.prototype._setFormattingContext):
        * LayoutReloaded/FormattingState/InlineFormattingState.js: Copied from Tools/LayoutReloaded/LayoutContext.js.
        (InlineFormattingState):
        * LayoutReloaded/LayoutContext.js:
        (LayoutContext):
        (LayoutContext.prototype.layout):
        (LayoutContext.prototype._createFormattingState):
        (LayoutContext.prototype._createFormattingContext): Deleted.
        * LayoutReloaded/LayoutReloaded.xcworkspace/contents.xcworkspacedata:
        * LayoutReloaded/test/index.html:

2018-03-19  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Layout.Box should not create the formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=183766

        Reviewed by Antti Koivisto.

        Since the formattingContext's lifetime is tied to the layout, the LayoutContext
        should construct it instead.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext):
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._layoutOutOfFlowDescendants):
        (BlockFormattingContext.prototype._contentHeight):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        (FormattingContext.prototype.layoutContext):
        (FormattingContext.prototype.toDisplayBox):
        (FormattingContext.prototype._outOfFlowDescendants):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        * LayoutReloaded/Layout.js:
        (layout):
        * LayoutReloaded/LayoutContext.js:
        (LayoutContext.prototype.layout):
        (LayoutContext.prototype._createFormattingContext):
        (LayoutContext):
        (LayoutContext.prototype.layoutFormattingContext): Deleted.
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box):
        (Layout.Box.prototype.establishedFormattingContext): Deleted.
        * LayoutReloaded/misc/headers/Box.h:

2018-03-19  Chris Dumez  <cdumez@apple.com>

        Have one service worker process per security origin
        https://bugs.webkit.org/show_bug.cgi?id=183600
        <rdar://problem/35280128>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-03-19  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Remove border/padding/contentBox() functions from Layout.Box
        https://bugs.webkit.org/show_bug.cgi?id=183761

        Reviewed by Antti Koivisto.

        Display.Box has them.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._horizontalConstraint):
        (BlockFormattingContext.prototype._contentHeight):
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype._availableSpace):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isDescendantOf):
        (Layout.Box):
        (Layout.Box.prototype.borderBox): Deleted.
        (Layout.Box.prototype.paddingBox): Deleted.
        (Layout.Box.prototype.contentBox): Deleted.

2018-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, another quick fix for r229699

        Restricts ENABLE_WEB_AUTHN to only macOS and iOS.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/ios/LocalAuthenticator.mm:

2018-03-19  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Move statically positioned absolute box positioning to _computeOutOfFlowPosition
        https://bugs.webkit.org/show_bug.cgi?id=183750

        Reviewed by Antti Koivisto.

        * LayoutReloaded/DisplayTree/Box.js:
        (Display.Box.prototype.setTop):
        (Display.Box.prototype.paddingBox):
        (Display.Box.prototype.contentBox):
        (Display.Box):
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._layoutOutOfFlowDescendants):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        (FormattingContext.prototype._toAbsolutePosition):
        (FormattingContext.prototype._toRootAbsolutePosition):
        (FormattingContext.prototype.toDisplayBox):
        * LayoutReloaded/LayoutTree/InitialBlockContainer.js:
        (Layout.InitialBlockContainer.prototype.establishesBlockFormattingContext):
        (Layout.InitialBlockContainer):
        (Layout.InitialBlockContainer.prototype.paddingBox): Deleted.
        (Layout.InitialBlockContainer.prototype.contentBox): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.isStaticallyPositioned):

2018-03-19  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsitePoliciesAutoplayQuirks API test times out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183702
        <rdar://problem/38566060>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[AsyncAutoplayPoliciesDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[AsyncAutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[AsyncAutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]):
        (TEST):

2018-03-19  Daniel Bates  <dabates@apple.com>

        test-webkitpy no longer runs WebKit2 tests
        https://bugs.webkit.org/show_bug.cgi?id=183724

        Reviewed by Alexey Proskuryakov.

        The WebKit2 tests have seen been moved from Source/WebKit2/Scripts/webkit2 to Source/WebKit/Scripts/webkit.

        * Scripts/webkitpy/test/main.py:
        (main):

2018-03-19  Daniel Bates  <dabates@apple.com>

        Make run-webkit-app work for non-GUI apps
        https://bugs.webkit.org/show_bug.cgi?id=183701

        Reviewed by Lucas Forschler.

        Launch the app directly if it is an executable file. Otherwise, assume it is an app bundle
        and launch it using open(1) as we currently do.

        Note that open(1) is meant for launching GUI apps. Standard output and standard error are
        not sent to the tty when using open(1) to launch a non-GUI app.

        * Scripts/run-webkit-app: We make the assumption that 
        * Scripts/webkitdirs.pm:
            - Define and export constant DO_NOT_USE_OPEN_COMMAND.

2018-03-19  Daniel Bates  <dabates@apple.com>

        run-webkit-app -g does not work
        https://bugs.webkit.org/show_bug.cgi?id=183699

        Reviewed by Lucas Forschler.

        Check for the optional command line argument -g/--guard-malloc before taking the
        first argument passed to be the path to the app to run.

        * Scripts/run-webkit-app:

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

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

        Causes fast/loader/inner-iframe-loads-data-url-into-parent-on-
        unload-crash.html to fail with async delegates (Requested by
        cdumez_ on #webkit).

        Reverted changeset:

        "WebKit.WebsitePoliciesAutoplayQuirks API test times out with
        async policy delegates"
        https://bugs.webkit.org/show_bug.cgi?id=183702
        https://trac.webkit.org/changeset/229689

2018-03-18  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Remove left/right width/height getters from Layout.Box
        https://bugs.webkit.org/show_bug.cgi?id=183734

        Reviewed by Antti Koivisto.

        ...and use Display.Box instead.

        * LayoutReloaded/DisplayTree/Box.js:
        (Display.Box.prototype.bottomRight):
        (Display.Box.prototype.size):
        (Display.Box.prototype.height):
        (Display.Box.prototype.width):
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._computePositionToAvoidIntrudingFloats):
        (FloatingContext.prototype._adjustedFloatingPosition):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        (FormattingContext.prototype._toAbsolutePosition):
        (FormattingContext.prototype._toRootAbsolutePosition):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.rect): Deleted.
        (Layout.Box.prototype.topLeft): Deleted.
        (Layout.Box.prototype.bottomRight): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):
        (Utils.mapToContainer): Deleted.

2018-03-18  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Remove left/right width/height setters from Layout.Box
        https://bugs.webkit.org/show_bug.cgi?id=183731

        Reviewed by Antti Koivisto.

        ...and use Display.Box instead.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeFloatingWidth):
        (BlockFormattingContext.prototype._computeInFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._computeFloatingHeight):
        (BlockFormattingContext.prototype._computeInFlowHeight):
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype.computePosition):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._toDisplayBox):
        (FormattingContext.prototype._toLayoutBox):
        * LayoutReloaded/Layout.js:
        (layout):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.setTopLeft): Deleted.
        (Layout.Box.prototype.setSize): Deleted.
        (Layout.Box.prototype.setWidth): Deleted.
        (Layout.Box.prototype.setHeight): Deleted.

2018-03-18  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Collect out-of-flow positioned boxes for a given formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=183730

        Reviewed by Antti Koivisto.

        Collect and layout out-of-flow positioned boxes as the final step of the formatting context layout.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        (BlockFormattingContext.prototype._layoutOutOfFlowDescendants):
        (BlockFormattingContext.prototype._placePositionedDescendants): Deleted.
        (BlockFormattingContext.prototype._placeOutOfFlowDescendants): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype._toAbsolutePosition):
        (FormattingContext.prototype._outOfFlowDescendants):
        (FormattingContext):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.nextInFlowOrFloatSibling):
        (Layout.Box.prototype.isDescendantOf):
        * LayoutReloaded/LayoutTree/Container.js:
        (Layout.Container.prototype.firstInFlowOrFloatChild):
        (Layout.Container.prototype.hasInFlowOrFloatChild):
        (Layout.Container.prototype.outOfFlowDescendants):
        (Layout.Container):
        * LayoutReloaded/Utils.js:
        (Utils.isDescendantOf): Deleted.
        (Utils.collectOutOfFlowDescendants): Deleted.

2018-03-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement authenticatorMakeCredential
        https://bugs.webkit.org/show_bug.cgi?id=183527
        <rdar://problem/35275886>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/LocalAuthenticator.mm: Added.
        (TestWebKitAPI::getTestKey):
        (TestWebKitAPI::cleanUpKeychain):
        (TestWebKitAPI::LACantEvaluatePolicySwizzler::LACantEvaluatePolicySwizzler):
        (TestWebKitAPI::LACantEvaluatePolicySwizzler::cantEvaluatePolicy):
        (TestWebKitAPI::LACanEvaluatePolicySwizzler::LACanEvaluatePolicySwizzler):
        (TestWebKitAPI::LACanEvaluatePolicySwizzler::canEvaluatePolicy):
        (TestWebKitAPI::LAEvaluatePolicyFailedSwizzler::LAEvaluatePolicyFailedSwizzler):
        (TestWebKitAPI::LAEvaluatePolicyFailedSwizzler::evaluatePolicyFailed):
        (TestWebKitAPI::LAEvaluatePolicyPassedSwizzler::LAEvaluatePolicyPassedSwizzler):
        (TestWebKitAPI::LAEvaluatePolicyPassedSwizzler::evaluatePolicyPassed):
        (TestWebKitAPI::TestLocalAuthenticator::setFailureFlag):
        (TestWebKitAPI::TEST):

2018-03-17  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] BlockFormattingContext::placePositionedDescendants takes care of both in- and out-of-flow placement
        https://bugs.webkit.org/show_bug.cgi?id=183727

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._placePositionedDescendants):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        (BlockFormattingContext.prototype._placeOutOfFlowDescendants):
        * LayoutReloaded/test/absolute-position-when-containing-block-is-not-in-the-formatting-context.html: Added.
        * LayoutReloaded/test/absolute-position-when-containing-block-is-not-in-the-formatting-context2.html: Added.
        * LayoutReloaded/test/index.html:
        * LayoutReloaded/test/relative-position-when-containing-block-is-not-in-the-formatting-context.html: Added.

2018-03-17  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Ensure that positioning happens within the formatting context
        https://bugs.webkit.org/show_bug.cgi?id=183722

        Reviewed by Antti Koivisto.

        All sizing and positioning need to happen in the formatting context that the box lives in
        including the final position of in- and out-of-flow descendants.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.establishesBlockFormattingContext):
        (Layout.Box.prototype.isPositioned):
        (Layout.Box.prototype.isRelativelyPositioned):
        (Layout.Box.prototype.isAbsolutelyPositioned):
        (Layout.Box.prototype.isOutOfFlowPositioned):
        (Layout.Box.prototype.containingBlock):
        (Layout.Box.prototype.isRelativePositioned): Deleted.
        (Layout.Box.prototype.isAbsolutePositioned): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.isRelativelyPositioned):
        (Utils.isAbsolutelyPositioned):
        (Utils.isRelativePositioned): Deleted.
        (Utils.isAbsolutePositioned): Deleted.
        * LayoutReloaded/misc/headers/Box.h:

2018-03-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r229688.

        There's a solution that doesn't require this SPI.

        Reverted changeset:

        "Add SPI to expose width and height anchors for WKWebView's
        content view"
        https://bugs.webkit.org/show_bug.cgi?id=183711
        https://trac.webkit.org/changeset/229688

2018-03-16  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Move move functions to the base class from BlockFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=183719

        Reviewed by Antti Koivisto.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext):
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._shrinkToFitWidth):
        (BlockFormattingContext.prototype._toAbsolutePosition): Deleted.
        (BlockFormattingContext.prototype._needsLayout): Deleted.
        (BlockFormattingContext.prototype._addToLayoutQueue): Deleted.
        (BlockFormattingContext.prototype._nextInLayoutQueue): Deleted.
        (BlockFormattingContext.prototype._removeFromLayoutQueue): Deleted.
        (BlockFormattingContext.prototype._createDisplayBox): Deleted.
        (BlockFormattingContext.prototype._toDisplayBox): Deleted.
        (BlockFormattingContext.prototype._toLayoutBox): Deleted.
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext):
        (FormattingContext.prototype._toAbsolutePosition):
        (FormattingContext.prototype._descendantNeedsLayout):
        (FormattingContext.prototype._addToLayoutQueue):
        (FormattingContext.prototype._nextInLayoutQueue):
        (FormattingContext.prototype._removeFromLayoutQueue):
        (FormattingContext.prototype._createDisplayBox):
        (FormattingContext.prototype._toDisplayBox):
        (FormattingContext.prototype._toLayoutBox):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):

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

        WebKit.WebsitePoliciesAutoplayQuirks API test times out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183702

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[AsyncAutoplayPoliciesDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[AsyncAutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[AsyncAutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]):
        (TEST):

2018-03-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add SPI to expose width and height anchors for WKWebView's content view
        https://bugs.webkit.org/show_bug.cgi?id=183711
        <rdar://problem/38562899>

        Reviewed by Tim Horton.

        Adds an API test exercising the new SPI.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (checkCGRect):
        (TEST):

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

        WebKit.RestoreSessionStateContainingScrollRestorationDefault API test is failing with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183679

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (TestWebKitAPI::decidePolicyForResponse):
        (TestWebKitAPI::TEST):

2018-03-16  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce Display.Box
        https://bugs.webkit.org/show_bug.cgi?id=183700

        Reviewed by Antti Koivisto.

        Display.Box objects will end up in the display(box) tree. Currently
        they are just hanging off of the Layout.Box objects.

        * LayoutReloaded/DisplayTree/Box.js: Added.
        (Display.Box):
        (Display.Box.prototype.rect):
        (Display.Box.prototype.top):
        (Display.Box.prototype.left):
        (Display.Box.prototype.bottom):
        (Display.Box.prototype.right):
        (Display.Box.prototype.topLeft):
        (Display.Box.prototype.bottomRight):
        (Display.Box.prototype.setTopLeft):
        (Display.Box.prototype.setSize):
        (Display.Box.prototype.setWidth):
        (Display.Box.prototype.setHeight):
        (Display.Box.prototype.borderBox):
        (Display.Box.prototype.paddingBox):
        (Display.Box.prototype.contentBox):
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext):
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype._toAbsolutePosition):
        (BlockFormattingContext.prototype._needsLayout):
        (BlockFormattingContext.prototype._addToLayoutQueue):
        (BlockFormattingContext.prototype._nextInLayoutQueue):
        (BlockFormattingContext.prototype._removeFromLayoutQueue):
        (BlockFormattingContext.prototype._createDisplayBox):
        (BlockFormattingContext.prototype._toDisplayBox):
        (BlockFormattingContext.prototype._toLayoutBox):
        * LayoutReloaded/Layout.js:
        (layout):
        * LayoutReloaded/LayoutReloaded.xcworkspace/contents.xcworkspacedata:
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box):
        (Layout.Box.prototype.setDisplayBox):
        (Layout.Box.prototype.displayBox):
        (Layout.Box.prototype.rect):
        (Layout.Box.prototype.setTopLeft):
        (Layout.Box.prototype.setSize):
        (Layout.Box.prototype.setWidth):
        (Layout.Box.prototype.setHeight):
        (Layout.Box.prototype.borderBox):
        (Layout.Box.prototype.paddingBox):
        (Layout.Box.prototype.contentBox):
        * LayoutReloaded/test/index.html:

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

        URLSchemeHandler.Basic API test fails with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183678

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
        (-[URLSchemeHandlerAsyncNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[URLSchemeHandlerAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (TEST):

2018-03-16  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Utils.computed* functions should just take node instead of box.
        https://bugs.webkit.org/show_bug.cgi?id=183697

        Reviewed by Antti Koivisto.

        This is in preparation for introducing the display tree.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeFloatingWidth):
        (BlockFormattingContext.prototype._computeInFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._computeFloatingHeight):
        (BlockFormattingContext.prototype._computeInFlowHeight):
        (BlockFormattingContext.prototype._shrinkToFitWidth):
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockMarginCollapse.js:
        (BlockMarginCollapse._nonCollapsedMarginTop):
        (BlockMarginCollapse._nonCollapsedMarginBottom):
        (BlockMarginCollapse._collapsedMarginTopFromFirstChild):
        (BlockMarginCollapse._collapsedMarginBottomFromLastChild):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.marginTop):
        (FormattingContext.prototype.marginLeft):
        (FormattingContext.prototype.marginBottom):
        (FormattingContext.prototype.marginRight):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.paddingBox):
        (Layout.Box.prototype.contentBox):
        (Layout.Box):
        * LayoutReloaded/Utils.js:
        (Utils.computedMarginTop):
        (Utils.computedMarginLeft):
        (Utils.computedMarginBottom):
        (Utils.computedMarginRight):
        (Utils.computedBorderTopLeft):
        (Utils.computedBorderBottomRight):
        (Utils.computedPaddingTopLeft):
        (Utils.computedPaddingBottomRight):
        (Utils.computedBorderAndPaddingTop):
        (Utils.computedBorderAndPaddingLeft):
        (Utils.computedBorderAndPaddingBottom):
        (Utils.computedBorderAndPaddingRight):
        (Utils.computedHorizontalBorderAndPadding):
        (Utils.computedVerticalBorderAndPadding):
        (Utils.computedLineHeight):
        (Utils.hasClearLeft):
        (Utils.hasClearRight):
        (Utils.hasClearBoth):

2018-03-15  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Should never need to go beyond the root container when asking for the containing block.
        https://bugs.webkit.org/show_bug.cgi?id=183691

        Reviewed by Antti Koivisto.

        While laying out the boxes in a block formatting context, if we happen to need
        to get to the containing block of a box to compute geometry, it should always be a
        descendant of the root container (or the root container itself).
        Nothing outside of the formatting context should be able to impact the boxes inside.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        (BlockFormattingContext.prototype._toAbsolutePosition):
        (BlockFormattingContext):
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockMarginCollapse.js:
        (BlockMarginCollapse._isMarginTopCollapsedWithParent):
        (BlockMarginCollapse._isMarginBottomCollapsedWithParent):
        * LayoutReloaded/LayoutTree/Box.js:
        (Layout.Box.prototype.isRootBox):
        (Layout.Box.prototype.isRootElement): Deleted.
        * LayoutReloaded/Utils.js:
        (Utils.isDescendantOf):
        (Utils.mapStaticToAbsolute): Deleted.
        * LayoutReloaded/misc/headers/Box.h:

2018-03-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Hit-testing fails when specifying a large top content inset
        https://bugs.webkit.org/show_bug.cgi?id=183648
        <rdar://problem/38421894>

        Reviewed by Tim Horton.

        Adds four new API tests to verify that adding top or bottom content insets to the WKWebView's scroll view does
        not cause the DOMWindow's innerHeight to shrink. Currently, doing so would cause the innerHeight to be reported
        as (viewHeight - inset.top) or (viewHeight - inset.bottom).

        See WebKit ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm: Added.
        (TestWebKitAPI::TEST):

2018-03-15  Aakash Jain  <aakash_jain@apple.com>

        Add unit-test for NetworkTransaction URLError handling
        https://bugs.webkit.org/show_bug.cgi?id=183664

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        (NetworkTransactionTest._raise_URLError): Method to raise URLError.
        (NetworkTransactionTest.test_retry_on_HTTPError): Renamed from test_retry.
        (NetworkTransactionTest.test_retry_on_URLError): unit-test for testing URLError handling.

2018-03-15  Aakash Jain  <aakash_jain@apple.com>

        EWS should print the URL in logs on URLError
        https://bugs.webkit.org/show_bug.cgi?id=183651

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.open_url): Pass the url.
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run): Accept optional url parameter and print it on URLError.

2018-03-15  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Introduce Layout namespace
        https://bugs.webkit.org/show_bug.cgi?id=183659

        Reviewed by Antti Koivisto.

        This is in preparation for introducing the display tree.
        Box -> Layout.Box

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype.computeWidth):
        (BlockFormattingContext.prototype.computeHeight):
        (BlockFormattingContext.prototype.marginTop):
        (BlockFormattingContext.prototype.marginBottom):
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        (BlockFormattingContext.prototype._placeOutOfFlowDescendants):
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeFloatingWidth):
        (BlockFormattingContext.prototype._computeInFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._computeFloatingHeight):
        (BlockFormattingContext.prototype._computeInFlowHeight):
        (BlockFormattingContext.prototype._horizontalConstraint):
        (BlockFormattingContext.prototype._contentHeight):
        (BlockFormattingContext.prototype._adjustBottomWithFIXME):
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        (BlockFormattingContext.prototype._shrinkToFitWidth):
        (BlockFormattingContext):
        (BlockFormattingContext.prototype._computeHorizontalConstraint): Deleted.
        (BlockFormattingContext.prototype._computeContentHeight): Deleted.
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockMarginCollapse.js:
        (BlockMarginCollapse.marginTop):
        (BlockMarginCollapse.marginBottom):
        (BlockMarginCollapse._isMarginTopCollapsedWithSibling):
        (BlockMarginCollapse._isMarginBottomCollapsedWithSibling):
        (BlockMarginCollapse._isMarginTopCollapsedWithParent):
        (BlockMarginCollapse._isMarginBottomCollapsedWithParent):
        (BlockMarginCollapse._nonCollapsedMarginTop):
        (BlockMarginCollapse._nonCollapsedMarginBottom):
        (BlockMarginCollapse._collapsedMarginTopFromFirstChild):
        (BlockMarginCollapse._collapsedMarginBottomFromLastChild):
        (BlockMarginCollapse._hasAdjoiningMarginTopAndBottom):
        (BlockMarginCollapse):
        * LayoutReloaded/FormattingContext/FloatingContext.js:
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._computePositionToAvoidIntrudingFloats):
        * LayoutReloaded/FormattingContext/FormattingContext.js:
        (FormattingContext.prototype.computeWidth):
        (FormattingContext.prototype.computeHeight):
        (FormattingContext.prototype.marginTop):
        (FormattingContext.prototype.marginLeft):
        (FormattingContext.prototype.marginBottom):
        (FormattingContext.prototype.marginRight):
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        (FormattingContext):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext.prototype.layout):
        * LayoutReloaded/LayoutTree/BlockContainer.js:
        (BlockContainer): Deleted.
        (BlockContainer.prototype.establishesInlineFormattingContext): Deleted.
        * LayoutReloaded/LayoutTree/Box.js:
        (Box): Deleted.
        (Box.prototype.id): Deleted.
        (Box.prototype.setRendererName): Deleted.
        (Box.prototype.name): Deleted.
        (Box.prototype.node): Deleted.
        (Box.prototype.parent): Deleted.
        (Box.prototype.nextSibling): Deleted.
        (Box.prototype.nextInFlowSibling): Deleted.
        (Box.prototype.previousSibling): Deleted.
        (Box.prototype.previousInFlowSibling): Deleted.
        (Box.prototype.setParent): Deleted.
        (Box.prototype.setNextSibling): Deleted.
        (Box.prototype.setPreviousSibling): Deleted.
        (Box.prototype.rect): Deleted.
        (Box.prototype.topLeft): Deleted.
        (Box.prototype.bottomRight): Deleted.
        (Box.prototype.setTopLeft): Deleted.
        (Box.prototype.setSize): Deleted.
        (Box.prototype.setWidth): Deleted.
        (Box.prototype.setHeight): Deleted.
        (Box.prototype.isContainer): Deleted.
        (Box.prototype.isBlockLevelBox): Deleted.
        (Box.prototype.isBlockContainerBox): Deleted.
        (Box.prototype.isInlineLevelBox): Deleted.
        (Box.prototype.setIsAnonymous): Deleted.
        (Box.prototype.isAnonymous): Deleted.
        (Box.prototype.establishesFormattingContext): Deleted.
        (Box.prototype.establishedFormattingContext): Deleted.
        (Box.prototype.establishesBlockFormattingContext): Deleted.
        (Box.prototype.establishesInlineFormattingContext): Deleted.
        (Box.prototype.isPositioned): Deleted.
        (Box.prototype.isRelativePositioned): Deleted.
        (Box.prototype.isAbsolutePositioned): Deleted.
        (Box.prototype.isFixedPositioned): Deleted.
        (Box.prototype.isInFlow): Deleted.
        (Box.prototype.isOutOfFlowPositioned): Deleted.
        (Box.prototype.isInFlowPositioned): Deleted.
        (Box.prototype.isFloatingPositioned): Deleted.
        (Box.prototype.isFloatingOrOutOfFlowPositioned): Deleted.
        (Box.prototype.isRootElement): Deleted.
        (Box.prototype.containingBlock): Deleted.
        (Box.prototype.borderBox): Deleted.
        (Box.prototype.paddingBox): Deleted.
        (Box.prototype.contentBox): Deleted.
        * LayoutReloaded/LayoutTree/Container.js:
        (Container): Deleted.
        (Container.prototype.isContainer): Deleted.
        (Container.prototype.setFirstChild): Deleted.
        (Container.prototype.setLastChild): Deleted.
        (Container.prototype.firstChild): Deleted.
        (Container.prototype.firstInFlowChild): Deleted.
        (Container.prototype.lastChild): Deleted.
        (Container.prototype.lastInFlowChild): Deleted.
        (Container.prototype.hasChild): Deleted.
        (Container.prototype.hasInFlowChild): Deleted.
        * LayoutReloaded/LayoutTree/InitialBlockContainer.js:
        (InitialBlockContainer): Deleted.
        (InitialBlockContainer.prototype.establishesBlockFormattingContext): Deleted.
        (InitialBlockContainer.prototype.paddingBox): Deleted.
        (InitialBlockContainer.prototype.contentBox): Deleted.
        * LayoutReloaded/LayoutTree/InlineBox.js:
        (InlineBox): Deleted.
        (InlineBox.prototype.setText): Deleted.
        (InlineBox.prototype.text): Deleted.
        * LayoutReloaded/TreeBuilder.js:
        (TreeBuilder.prototype.createTree):
        (TreeBuilder.prototype._createAndAttachBox):
        * LayoutReloaded/Utils.js:
        (Utils._dumpBox):

2018-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement accessible dismiss action on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183352
        <rdar://problem/38161500>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::dismiss const):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::dismiss):

2018-03-14  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc up to 36af4e9614f707f733eb2340fae66d6325aaac5b
        https://bugs.webkit.org/show_bug.cgi?id=183481

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/style/checker.py: Do not check style.

2018-03-14  Brendan McLoughlin  <brendan@bocoup.com>

        Add label on github when exporting wpt tests to w3c/web-platform-test repo
        https://bugs.webkit.org/show_bug.cgi?id=183575

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (TestExporter.make_pull_request):
        (parse_args):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py:
        (TestExporterTest.test_export):

2018-03-14  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add InlineBox dump
        https://bugs.webkit.org/show_bug.cgi?id=183625

        Reviewed by Antti Koivisto.

        Right now line boxes live off of the inline formatting context but that's temporary and
        they will be moved over to the BoxTree.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js:
        (BlockFormattingContext.prototype._computeContentHeight):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js:
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.lines):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleText):
        (InlineFormattingContext.prototype._commitLine):
        (InlineFormattingContext.prototype._initializeLine):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js:
        (Line):
        (Line.prototype.isEmpty):
        (Line.prototype.rect):
        (Line.prototype.lineBoxes):
        (Line.prototype.addLineBox):
        (Line.prototype.appendFragment): Deleted.
        * LayoutReloaded/README.md:
        * LayoutReloaded/Utils.js:
        (Utils.computedLineHeight):
        (Utils.isBlockContainerElement):
        (Utils.textHeight):
        (Utils._dumpBox):
        (Utils._dumpLines.):
        (Utils._dumpLines):
        (Utils._dumpTree):
        (Utils.precisionRound):
        (Utils):
        * LayoutReloaded/misc/LayoutReloadedWebKit.patch:
        * LayoutReloaded/test/index.html:

2018-03-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r229567

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-03-13  Jer Noble  <jer.noble@apple.com>

        [iOS] Muted media playback can interrupt out-of-process audio
        https://bugs.webkit.org/show_bug.cgi?id=183606
        <rdar://problem/37466253>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-paused-audio-and-playing-muted.html: Added.

2018-03-13  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Layout Test fast/html/menuitem-element.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=179299

        Reviewed by Per Arne Vollan.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        Recognize test option "enableMenuItemElement".

2018-03-12  Tim Horton  <timothy_horton@apple.com>

        Stop using SDK conditionals to control feature definitions
        https://bugs.webkit.org/show_bug.cgi?id=183430
        <rdar://problem/38251619>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Configurations/WebKitTargetConditionals.xcconfig: Renamed.

2018-03-12  Ross Kirsling  <ross.kirsling@sony.com>

        [DRT] TestOptions should not be ObjC.
        https://bugs.webkit.org/show_bug.cgi?id=183487

        Reviewed by Per Arne Vollan.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/PlatformMac.cmake:
        Move TestOptions to platform-agnostic sources.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.cpp: Renamed from Tools/DumpRenderTree/TestOptions.mm.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        Remove NSURL dependency and align with WTR as much as possible.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        Consume TestOptions (recognizing just the ones that have WebPreferences defined for now).

2018-03-12  Yoav Weiss  <yoav@yoav.ws>

        Runtime flag for link prefetch and remove link subresource.
        https://bugs.webkit.org/show_bug.cgi?id=183540

        Reviewed by Chris Dumez.

        Remove the LINK_PREFETCH build time flag.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        REGRESSION(r211643): Dismissing WKActionSheet should not also dismiss its presenting view controller
        https://bugs.webkit.org/show_bug.cgi?id=183549
        <rdar://problem/34960698>

        Reviewed by Andy Estes.

        Add TestWebKitAPI support for testing WKWebViews embedded within presented view controllers, and use this to
        check that dismissing an action sheet does not additionally cause the view controller being used to present the
        web view to also dismiss.

        * TestWebKitAPI/ClassMethodSwizzler.h: Added.
        * TestWebKitAPI/ClassMethodSwizzler.mm: Added.
        (TestWebKitAPI::ClassMethodSwizzler::ClassMethodSwizzler):
        (TestWebKitAPI::ClassMethodSwizzler::~ClassMethodSwizzler):

        Add ClassMethodSwizzler, an RAII which swizzles an Objective-C class method over its lifetime.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:

        Add a new API test that loads a view controller which embeds a WKWebView, and verifies that presenting and then
        dismissing an action sheet from that web view does not cause the view controller to also dismiss.

        (TestWebKitAPI::setOverrideViewControllerForFullscreenPresentation):
        (TestWebKitAPI::overrideViewControllerForFullscreenPresentation):

        Mock +[UIViewController _viewControllerForFullScreenPresentationFromView:] to return the web view. This works
        around the fact that TestWebKitAPI is not a UI application, so certain pieces of UIKit API and SPI need to be
        stubbed or mocked to simulate being a UI application. We can remove these workarounds once
        https://webkit.org/b/175204 is addressed, and TestWebKitAPI becomes a UI application that can actually maintain
        a root view controller and key window.

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

        Add a new initializer for TestWKWebView that doesn't force the view to be hosted within a UIWindow. This is used
        by TestWKWebViewController to create a TestWKWebView in -loadView.

        * TestWebKitAPI/ios/TestWKWebViewController.h: Added.
        * TestWebKitAPI/ios/TestWKWebViewController.mm: Added.
        (-[TestWKWebViewControllerWindow _beginKeyWindowDeferral]):
        (-[TestWKWebViewControllerWindow _endKeyWindowDeferral]):

        Stub out these methods to prevent UIKit from hitting assertions when making this UIWindow the key window. This
        can also be removed once TestWebKitAPI is a UI application.

        (-[TestWKWebViewController initWithFrame:configuration:]):
        (-[TestWKWebViewController loadView]):
        (-[TestWKWebViewController webView]):
        (-[TestWKWebViewController dismissViewControllerAnimated:completion:]):
        (-[TestWKWebViewController dismissalHandler]):
        (-[TestWKWebViewController setDismissalHandler:]):

        Add a UIViewController helper subclass whose -view is a WKWebView. The new API test presents this view
        controller. Tests may also provide a dismissalHandler, which is invoked when the view controller is being
        dismissed. The new API test uses this hook to verify that the view controller containing the web view isn't also
        dismissed after the action sheet goes away.

        * TestWebKitAPI/ios/UIKitSPI.h:

2018-03-12  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy] Remove openssl command dependency.
        https://bugs.webkit.org/show_bug.cgi?id=183494

        Reviewed by Ryosuke Niwa.

        Added Python implementation of PEM file perser and switched to use that
        from external `openssl` command.

        * Scripts/webkitpy/common/system/pemfile.py: Added.
        (load):
        (BadFormatError):
        (Pem):
        (Pem.__init__):
        (Pem.get):
        (Pem.get_all):
        (Pem.certificate):
        (Pem.private_key):
        (Pem.csr):
        (Pem.certificate_request):
        (Pem.certificate_signing_request):
        (_parse_pem_format):
        (_parse_pem_format.find_begin):
        (_parse_pem_format.find_end):
        (_parse_pem_format.sections):
        * Scripts/webkitpy/common/system/pemfile_unittest.py: Added.
        (PemFileTest):
        (PemFileTest.test_parse):
        (PemFileTest.test_parse_bad_format):
        * Scripts/webkitpy/port/base.py:
        (Port.start_websocket_server):
        (Port._extract_certificate_from_pem): Deleted.
        (Port._extract_private_key_from_pem): Deleted.

2018-03-12  Javier Fernandez  <jfernandez@igalia.com>

        Remove GridLayout runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=183484

        Reviewed by Myles C. Maxfield.

        The Grid Layout feature has been enabled by default for almost a
        year, so I think it's time to remove the runtime flag and the
        codepath run when the feature is disabled.

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

2018-03-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement CSS Animations and CSS Transitions as Web Animations
        https://bugs.webkit.org/show_bug.cgi?id=183504
        <rdar://problem/38372965>

        Reviewed by Jon Lee.

        Add a new <!-- webkit-test-runner --> flag to enable the CSS Animations and CSS Transitions
        as Web Animations runtime flag in the new tests we've created for this feature.

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

2018-03-11  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Add Line class for InlineFormattingContext -and move files around.
        https://bugs.webkit.org/show_bug.cgi?id=183551

        Reviewed by Wenson Hsieh.

        * LayoutReloaded/FormattingContext/BlockFormatting/BlockFormattingContext.js: Renamed from Tools/LayoutReloaded/BlockFormattingContext.js.
        (BlockFormattingContext):
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype.computeWidth):
        (BlockFormattingContext.prototype.computeHeight):
        (BlockFormattingContext.prototype.marginTop):
        (BlockFormattingContext.prototype.marginBottom):
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        (BlockFormattingContext.prototype._placeOutOfFlowDescendants):
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeFloatingWidth):
        (BlockFormattingContext.prototype._computeInFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._computeFloatingHeight):
        (BlockFormattingContext.prototype._computeInFlowHeight):
        (BlockFormattingContext.prototype._computeHorizontalConstraint):
        (BlockFormattingContext.prototype._computeContentHeight):
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        (BlockFormattingContext.prototype._shrinkToFitWidth):
        * LayoutReloaded/FormattingContext/BlockFormatting/BlockMarginCollapse.js: Renamed from Tools/LayoutReloaded/BlockMarginCollapse.js.
        (BlockMarginCollapse.marginTop):
        (BlockMarginCollapse.marginBottom):
        (BlockMarginCollapse._isMarginTopCollapsedWithSibling):
        (BlockMarginCollapse._isMarginBottomCollapsedWithSibling):
        (BlockMarginCollapse._isMarginTopCollapsedWithParent):
        (BlockMarginCollapse._isMarginBottomCollapsedWithParent):
        (BlockMarginCollapse._nonCollapsedMarginTop):
        (BlockMarginCollapse._nonCollapsedMarginBottom):
        (BlockMarginCollapse._collapsedMarginTopFromFirstChild):
        (BlockMarginCollapse._collapsedMarginBottomFromLastChild):
        (BlockMarginCollapse._marginValue):
        (BlockMarginCollapse._hasAdjoiningMarginTopAndBottom):
        (BlockMarginCollapse):
        * LayoutReloaded/FormattingContext/FloatingContext.js: Renamed from Tools/LayoutReloaded/FloatingContext.js.
        (FloatingContext):
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype.bottom):
        (FloatingContext.prototype._positionForFloating):
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._computePositionToAvoidIntrudingFloats):
        (FloatingContext.prototype._addFloating):
        (FloatingContext.prototype._findInnerMostLeftAndRight):
        (FloatingContext.prototype._moveToNextVerticalPosition):
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._findFloatingAtVerticalPosition):
        (FloatingContext.prototype._isEmpty):
        (FloatingContext.prototype._adjustedFloatingPosition):
        (FloatingContext.prototype._bottom):
        (FloatingContext.prototype._formattingContext):
        * LayoutReloaded/FormattingContext/FormattingContext.js: Renamed from Tools/LayoutReloaded/FormattingContext.js.
        (FormattingContext):
        (FormattingContext.prototype.rootContainer):
        (FormattingContext.prototype.floatingContext):
        (FormattingContext.prototype.layout):
        (FormattingContext.prototype.computeWidth):
        (FormattingContext.prototype.computeHeight):
        (FormattingContext.prototype.marginTop):
        (FormattingContext.prototype.marginLeft):
        (FormattingContext.prototype.marginBottom):
        (FormattingContext.prototype.marginRight):
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        * LayoutReloaded/FormattingContext/InlineFormatting/InlineFormattingContext.js: Renamed from Tools/LayoutReloaded/InlineFormattingContext.js.
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineBox):
        (InlineFormattingContext.prototype._handleText):
        (InlineFormattingContext.prototype._commitLine):
        (InlineFormattingContext.prototype._line):
        * LayoutReloaded/FormattingContext/InlineFormatting/Line.js: Copied from Tools/LayoutReloaded/InitialBlockContainer.js.
        (Line):
        (Line.prototype.isEmpty):
        (Line.prototype.availableWidth):
        (Line.prototype.appendFragment):
        * LayoutReloaded/LayoutReloaded.xcworkspace/contents.xcworkspacedata:
        * LayoutReloaded/LayoutTree/BlockContainer.js: Renamed from Tools/LayoutReloaded/BlockContainer.js.
        (BlockContainer):
        (BlockContainer.prototype.establishesInlineFormattingContext):
        * LayoutReloaded/LayoutTree/Box.js: Renamed from Tools/LayoutReloaded/Box.js.
        (Box):
        (Box.prototype.id):
        (Box.prototype.setRendererName):
        (Box.prototype.name):
        (Box.prototype.node):
        (Box.prototype.parent):
        (Box.prototype.nextSibling):
        (Box.prototype.nextInFlowSibling):
        (Box.prototype.previousSibling):
        (Box.prototype.previousInFlowSibling):
        (Box.prototype.setParent):
        (Box.prototype.setNextSibling):
        (Box.prototype.setPreviousSibling):
        (Box.prototype.rect):
        (Box.prototype.topLeft):
        (Box.prototype.bottomRight):
        (Box.prototype.setTopLeft):
        (Box.prototype.setSize):
        (Box.prototype.setWidth):
        (Box.prototype.setHeight):
        (Box.prototype.isContainer):
        (Box.prototype.isBlockLevelBox):
        (Box.prototype.isBlockContainerBox):
        (Box.prototype.isInlineLevelBox):
        (Box.prototype.setIsAnonymous):
        (Box.prototype.isAnonymous):
        (Box.prototype.establishesFormattingContext):
        (Box.prototype.establishedFormattingContext):
        (Box.prototype.establishesBlockFormattingContext):
        (Box.prototype.establishesInlineFormattingContext):
        (Box.prototype.isPositioned):
        (Box.prototype.isRelativePositioned):
        (Box.prototype.isAbsolutePositioned):
        (Box.prototype.isFixedPositioned):
        (Box.prototype.isInFlow):
        (Box.prototype.isOutOfFlowPositioned):
        (Box.prototype.isInFlowPositioned):
        (Box.prototype.isFloatingPositioned):
        (Box.prototype.isFloatingOrOutOfFlowPositioned):
        (Box.prototype.isRootElement):
        (Box.prototype.containingBlock):
        (Box.prototype.borderBox):
        (Box.prototype.paddingBox):
        (Box.prototype.contentBox):
        * LayoutReloaded/LayoutTree/Container.js: Renamed from Tools/LayoutReloaded/Container.js.
        (Container):
        (Container.prototype.isContainer):
        (Container.prototype.setFirstChild):
        (Container.prototype.setLastChild):
        (Container.prototype.firstChild):
        (Container.prototype.firstInFlowChild):
        (Container.prototype.lastChild):
        (Container.prototype.lastInFlowChild):
        (Container.prototype.hasChild):
        (Container.prototype.hasInFlowChild):
        * LayoutReloaded/LayoutTree/InitialBlockContainer.js: Renamed from Tools/LayoutReloaded/InitialBlockContainer.js.
        (InitialBlockContainer):
        (InitialBlockContainer.prototype.establishesBlockFormattingContext):
        (InitialBlockContainer.prototype.paddingBox):
        (InitialBlockContainer.prototype.contentBox):
        * LayoutReloaded/LayoutTree/InlineBox.js: Renamed from Tools/LayoutReloaded/InlineBox.js.
        (InlineBox):
        (InlineBox.prototype.setText):
        (InlineBox.prototype.text):
        * LayoutReloaded/LayoutTree/Text.js: Renamed from Tools/LayoutReloaded/Text.js.
        (Text):
        (Text.prototype.node):
        (Text.prototype.content):
        (Text.prototype.length):
        * LayoutReloaded/Utils.js:
        (Utils.nextBreakingOpportunity):
        (Utils.measureText):
        * LayoutReloaded/misc/headers/Line.h: Copied from Tools/LayoutReloaded/misc/headers/Text.h.
        * LayoutReloaded/misc/headers/Text.h:
        * LayoutReloaded/test/border-simple.html:
        * LayoutReloaded/test/index.html:

2018-03-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Copying a table from the Numbers app and pasting into iCloud Numbers fails
        https://bugs.webkit.org/show_bug.cgi?id=183485
        <rdar://problem/38041984>

        Reviewed by Ryosuke Niwa.

        Add new API tests to cover scenarios in which we paste image data alongside text data.

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

2018-03-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutReloaded] Initial commit -block formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=183462

        Reviewed by Antti Koivisto.

        See README.md

        * LayoutReloaded/BlockContainer.js: Added.
        (BlockContainer):
        (BlockContainer.prototype.establishesInlineFormattingContext):
        * LayoutReloaded/BlockFormattingContext.js: Added.
        (BlockFormattingContext):
        (BlockFormattingContext.prototype.layout):
        (BlockFormattingContext.prototype.computeWidth):
        (BlockFormattingContext.prototype.computeHeight):
        (BlockFormattingContext.prototype.marginTop):
        (BlockFormattingContext.prototype.marginBottom):
        (BlockFormattingContext.prototype._computeStaticPosition):
        (BlockFormattingContext.prototype._placeInFlowPositionedChildren):
        (BlockFormattingContext.prototype._placeOutOfFlowDescendants):
        (BlockFormattingContext.prototype._computeOutOfFlowWidth):
        (BlockFormattingContext.prototype._computeFloatingWidth):
        (BlockFormattingContext.prototype._computeInFlowWidth):
        (BlockFormattingContext.prototype._computeOutOfFlowHeight):
        (BlockFormattingContext.prototype._computeFloatingHeight):
        (BlockFormattingContext.prototype._computeInFlowHeight):
        (BlockFormattingContext.prototype._computeHorizontalConstraint):
        (BlockFormattingContext.prototype._computeContentHeight):
        (BlockFormattingContext.prototype._computeInFlowPositionedPosition):
        (BlockFormattingContext.prototype._computeOutOfFlowPosition):
        (BlockFormattingContext.prototype._shrinkToFitWidth):
        * LayoutReloaded/BlockMarginCollapse.js: Added.
        (BlockMarginCollapse.marginTop):
        (BlockMarginCollapse.marginBottom):
        (BlockMarginCollapse._isMarginTopCollapsedWithSibling):
        (BlockMarginCollapse._isMarginBottomCollapsedWithSibling):
        (BlockMarginCollapse._isMarginTopCollapsedWithParent):
        (BlockMarginCollapse._isMarginBottomCollapsedWithParent):
        (BlockMarginCollapse._nonCollapsedMarginTop):
        (BlockMarginCollapse._nonCollapsedMarginBottom):
        (BlockMarginCollapse._collapsedMarginTopFromFirstChild):
        (BlockMarginCollapse._collapsedMarginBottomFromLastChild):
        (BlockMarginCollapse._marginValue):
        (BlockMarginCollapse._hasAdjoiningMarginTopAndBottom):
        (BlockMarginCollapse):
        * LayoutReloaded/Box.js: Added.
        (Box):
        (Box.prototype.id):
        (Box.prototype.setRendererName):
        (Box.prototype.name):
        (Box.prototype.node):
        (Box.prototype.parent):
        (Box.prototype.nextSibling):
        (Box.prototype.nextInFlowSibling):
        (Box.prototype.previousSibling):
        (Box.prototype.previousInFlowSibling):
        (Box.prototype.setParent):
        (Box.prototype.setNextSibling):
        (Box.prototype.setPreviousSibling):
        (Box.prototype.rect):
        (Box.prototype.topLeft):
        (Box.prototype.bottomRight):
        (Box.prototype.setTopLeft):
        (Box.prototype.setSize):
        (Box.prototype.setWidth):
        (Box.prototype.setHeight):
        (Box.prototype.isContainer):
        (Box.prototype.isBlockLevelBox):
        (Box.prototype.isBlockContainerBox):
        (Box.prototype.isInlineLevelBox):
        (Box.prototype.setIsAnonymous):
        (Box.prototype.isAnonymous):
        (Box.prototype.establishesFormattingContext):
        (Box.prototype.establishedFormattingContext):
        (Box.prototype.establishesBlockFormattingContext):
        (Box.prototype.establishesInlineFormattingContext):
        (Box.prototype.isPositioned):
        (Box.prototype.isRelativePositioned):
        (Box.prototype.isAbsolutePositioned):
        (Box.prototype.isFixedPositioned):
        (Box.prototype.isInFlow):
        (Box.prototype.isOutOfFlowPositioned):
        (Box.prototype.isInFlowPositioned):
        (Box.prototype.isFloatingPositioned):
        (Box.prototype.isFloatingOrOutOfFlowPositioned):
        (Box.prototype.isRootElement):
        (Box.prototype.containingBlock):
        (Box.prototype.borderBox):
        (Box.prototype.paddingBox):
        (Box.prototype.contentBox):
        * LayoutReloaded/Container.js: Added.
        (Container):
        (Container.prototype.isContainer):
        (Container.prototype.setFirstChild):
        (Container.prototype.setLastChild):
        (Container.prototype.firstChild):
        (Container.prototype.firstInFlowChild):
        (Container.prototype.lastChild):
        (Container.prototype.lastInFlowChild):
        (Container.prototype.hasChild):
        (Container.prototype.hasInFlowChild):
        * LayoutReloaded/FloatingContext.js: Added.
        (FloatingContext):
        (FloatingContext.prototype.computePosition):
        (FloatingContext.prototype.bottom):
        (FloatingContext.prototype._positionForFloating):
        (FloatingContext.prototype._positionForClear):
        (FloatingContext.prototype._computePositionToAvoidIntrudingFloats):
        (FloatingContext.prototype._addFloating):
        (FloatingContext.prototype._findInnerMostLeftAndRight):
        (FloatingContext.prototype._moveToNextVerticalPosition):
        (FloatingContext.prototype._availableSpace):
        (FloatingContext.prototype._findFloatingAtVerticalPosition):
        (FloatingContext.prototype._isEmpty):
        (FloatingContext.prototype._adjustedFloatingPosition):
        (FloatingContext.prototype._bottom):
        (FloatingContext.prototype._formattingContext):
        * LayoutReloaded/FormattingContext.js: Added.
        (FormattingContext):
        (FormattingContext.prototype.rootContainer):
        (FormattingContext.prototype.floatingContext):
        (FormattingContext.prototype.layout):
        (FormattingContext.prototype.computeWidth):
        (FormattingContext.prototype.computeHeight):
        (FormattingContext.prototype.marginTop):
        (FormattingContext.prototype.marginLeft):
        (FormattingContext.prototype.marginBottom):
        (FormattingContext.prototype.marginRight):
        (FormattingContext.prototype.absoluteMarginBox):
        (FormattingContext.prototype.absoluteBorderBox):
        (FormattingContext.prototype.absolutePaddingBox):
        (FormattingContext.prototype.absoluteContentBox):
        * LayoutReloaded/InitialBlockContainer.js: Added.
        (InitialBlockContainer):
        (InitialBlockContainer.prototype.establishesBlockFormattingContext):
        (InitialBlockContainer.prototype.paddingBox):
        (InitialBlockContainer.prototype.contentBox):
        * LayoutReloaded/InlineBox.js: Added.
        (InlineBox):
        (InlineBox.prototype.setText):
        (InlineBox.prototype.text):
        * LayoutReloaded/InlineFormattingContext.js: Added.
        (InlineFormattingContext):
        (InlineFormattingContext.prototype.layout):
        (InlineFormattingContext.prototype._handleInlineBox):
        (InlineFormattingContext.prototype._handleText):
        * LayoutReloaded/Layout.js: Added.
        (layout):
        * LayoutReloaded/LayoutContext.js: Added.
        (LayoutContext):
        (LayoutContext.prototype.layoutFormattingContext):
        * LayoutReloaded/LayoutReloaded.xcworkspace/contents.xcworkspacedata: Added.
        * LayoutReloaded/LayoutReloaded.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: Added.
        * LayoutReloaded/README.md: Added.
        * LayoutReloaded/Text.js: Added.
        (Text):
        * LayoutReloaded/TreeBuilder.js: Added.
        (TreeBuilder.prototype.createTree):
        (TreeBuilder.prototype._createAndAttachBox):
        (TreeBuilder.prototype._appendChild):
        (TreeBuilder.prototype._findBox):
        (TreeBuilder.prototype._findNode):
        (TreeBuilder):
        * LayoutReloaded/Utils.js: Added.
        (LayoutPoint):
        (LayoutPoint.prototype.setLeft):
        (LayoutPoint.prototype.setTop):
        (LayoutPoint.prototype.left):
        (LayoutPoint.prototype.top):
        (LayoutPoint.prototype.shiftLeft):
        (LayoutPoint.prototype.shiftTop):
        (LayoutPoint.prototype.moveBy):
        (LayoutPoint.prototype.equal):
        (LayoutPoint.prototype.clone):
        (LayoutSize):
        (LayoutSize.prototype.setWidth):
        (LayoutSize.prototype.setHeight):
        (LayoutSize.prototype.width):
        (LayoutSize.prototype.height):
        (LayoutSize.prototype.growBy):
        (LayoutSize.prototype.shrinkBy):
        (LayoutSize.prototype.isEmpty):
        (LayoutSize.prototype.equal):
        (LayoutSize.prototype.clone):
        (LayoutRect):
        (LayoutRect.prototype.setTop):
        (LayoutRect.prototype.setLeft):
        (LayoutRect.prototype.setBottom):
        (LayoutRect.prototype.setRight):
        (LayoutRect.prototype.left):
        (LayoutRect.prototype.top):
        (LayoutRect.prototype.bottom):
        (LayoutRect.prototype.right):
        (LayoutRect.prototype.setTopLeft):
        (LayoutRect.prototype.topLeft):
        (LayoutRect.prototype.topRight):
        (LayoutRect.prototype.bottomRight):
        (LayoutRect.prototype.setWidth):
        (LayoutRect.prototype.setHeight):
        (LayoutRect.prototype.setSize):
        (LayoutRect.prototype.size):
        (LayoutRect.prototype.width):
        (LayoutRect.prototype.height):
        (LayoutRect.prototype.growBy):
        (LayoutRect.prototype.shrinkBy):
        (LayoutRect.prototype.moveBy):
        (LayoutRect.prototype.isEmpty):
        (LayoutRect.prototype.equal):
        (LayoutRect.prototype.intersects):
        (LayoutRect.prototype.contains):
        (LayoutRect.prototype.clone):
        (ASSERT_NOT_REACHED):
        (ASSERT):
        (Utils.computedValue):
        (Utils.propertyIsAuto):
        (Utils.isWidthAuto):
        (Utils.isHeightAuto):
        (Utils.isTopAuto):
        (Utils.isLeftAuto):
        (Utils.isBottomAuto):
        (Utils.isRightAuto):
        (Utils.width):
        (Utils.height):
        (Utils.top):
        (Utils.bottom):
        (Utils.left):
        (Utils.right):
        (Utils.hasBorderTop):
        (Utils.hasBorderBottom):
        (Utils.hasPaddingTop):
        (Utils.hasPaddingBottom):
        (Utils.computedMarginTop):
        (Utils.computedMarginLeft):
        (Utils.computedMarginBottom):
        (Utils.computedMarginRight):
        (Utils.computedBorderTopLeft):
        (Utils.computedBorderBottomRight):
        (Utils.computedPaddingTopLeft):
        (Utils.computedPaddingBottomRight):
        (Utils.computedBorderAndPaddingTop):
        (Utils.computedBorderAndPaddingLeft):
        (Utils.computedBorderAndPaddingBottom):
        (Utils.computedBorderAndPaddingRight):
        (Utils.computedHorizontalBorderAndPadding):
        (Utils.computedVerticalBorderAndPadding):
        (Utils.hasClear):
        (Utils.hasClearLeft):
        (Utils.hasClearRight):
        (Utils.hasClearBoth):
        (Utils.isBlockLevelElement):
        (Utils.isBlockContainerElement):
        (Utils.isInlineLevelElement):
        (Utils.isTableElement):
        (Utils.isRelativePositioned):
        (Utils.isAbsolutePositioned):
        (Utils.isFixedPositioned):
        (Utils.isOverflowVisible):
        (Utils.isFloatingPositioned):
        (Utils.isFloatingLeft):
        (Utils.mapToContainer):
        (Utils.mapStaticToAbsolute):
        (Utils.collectOutOfFlowDescendants):
        (Utils.nextBreakingOpportunity):
        (Utils.measureText):
        (Utils.layoutTreeDump):
        (Utils._dumpBox):
        (Utils._dumpTree):
        (Utils):
        * LayoutReloaded/misc/LayoutReloadedWebKit.patch: Added.
        * LayoutReloaded/misc/headers/BlockContainer.h: Added.
        * LayoutReloaded/misc/headers/BlockFormattingContext.h: Added.
        * LayoutReloaded/misc/headers/BlockMarginCollapse.h: Added.
        * LayoutReloaded/misc/headers/Box.h: Added.
        * LayoutReloaded/misc/headers/Container.h: Added.
        * LayoutReloaded/misc/headers/FloatingContext.h: Added.
        * LayoutReloaded/misc/headers/FormattingContext.h: Added.
        * LayoutReloaded/misc/headers/InitialBlockContainer.h: Added.
        * LayoutReloaded/misc/headers/InlineBox.h: Added.
        * LayoutReloaded/misc/headers/LayoutContext.h: Added.
        * LayoutReloaded/misc/headers/Text.h: Added.
        * LayoutReloaded/test/TestHarness.js: Added.
        (verifyLayoutTreeDump):
        (runLayout):
        * LayoutReloaded/test/absolute-auto-with-sibling-margin-bottom.html: Added.
        * LayoutReloaded/test/absolute-bottom.html: Added.
        * LayoutReloaded/test/absolute-height-stretch.html: Added.
        * LayoutReloaded/test/absolute-left-auto.html: Added.
        * LayoutReloaded/test/absolute-left-right-top-bottom-auto.html: Added.
        * LayoutReloaded/test/absolute-nested.html: Added.
        * LayoutReloaded/test/absolute-nested2.html: Added.
        * LayoutReloaded/test/absolute-simple.html: Added.
        * LayoutReloaded/test/absolute-width-shrink-to-fit.html: Added.
        * LayoutReloaded/test/absolute-width-stretch.html: Added.
        * LayoutReloaded/test/absolute-with-inline-preferred-width.html: Added.
        * LayoutReloaded/test/absolute-with-static-block-position-nested.html: Added.
        * LayoutReloaded/test/almost-intruding-left-float-simple.html: Added.
        * LayoutReloaded/test/border-simple.html: Added.
        * LayoutReloaded/test/fixed-nested.html: Added.
        * LayoutReloaded/test/float-left-when-container-has-padding-margin.html: Added.
        * LayoutReloaded/test/floating-box-clear-both-simple.html: Added.
        * LayoutReloaded/test/floating-box-clear-right-simple.html: Added.
        * LayoutReloaded/test/floating-box-left-and-right-multiple-with-top-offset.html: Added.
        * LayoutReloaded/test/floating-box-left-and-right-multiple.html: Added.
        * LayoutReloaded/test/floating-box-right-simple.html: Added.
        * LayoutReloaded/test/floating-box-with-clear-siblings.html: Added.
        * LayoutReloaded/test/floating-box-with-clear-simple.html: Added.
        * LayoutReloaded/test/floating-box-with-new-formatting-context.html: Added.
        * LayoutReloaded/test/floating-box-with-relative-positioned-sibling.html: Added.
        * LayoutReloaded/test/floating-left-right-simple.html: Added.
        * LayoutReloaded/test/floating-left-right-with-all-margins.html: Added.
        * LayoutReloaded/test/floating-lefts-and-rights-simple.html: Added.
        * LayoutReloaded/test/floating-multiple-lefts-in-body.html: Added.
        * LayoutReloaded/test/floating-multiple-lefts-multiple-lines.html: Added.
        * LayoutReloaded/test/floating-multiple-lefts.html: Added.
        * LayoutReloaded/test/floating-sizing.html: Added.
        * LayoutReloaded/test/floating-sizing2.html: Added.
        * LayoutReloaded/test/floating-sizing3.html: Added.
        * LayoutReloaded/test/floating-with-new-block-formatting-context.html: Added.
        * LayoutReloaded/test/index.html: Added.
        * LayoutReloaded/test/inline-content-simple.html: Added.
        * LayoutReloaded/test/intruding-left-float-simple.html: Added.
        * LayoutReloaded/test/margin-collapse-bottom-bottom.html: Added.
        * LayoutReloaded/test/margin-collapse-bottom-nested.html: Added.
        * LayoutReloaded/test/margin-collapse-first-last-are-floating.html: Added.
        * LayoutReloaded/test/margin-collapse-simple.html: Added.
        * LayoutReloaded/test/margin-collapse-top-nested.html: Added.
        * LayoutReloaded/test/margin-collapse-when-child-has-padding-border.html: Added.
        * LayoutReloaded/test/margin-collapse-with-block-formatting-context.html: Added.
        * LayoutReloaded/test/margin-collapse-with-block-formatting-context2.html: Added.
        * LayoutReloaded/test/margin-left-right-sizing-out-of-flow.html: Added.
        * LayoutReloaded/test/margin-left-right-sizing.html: Added.
        * LayoutReloaded/test/margin-propagation-simple-content-height.html: Added.
        * LayoutReloaded/test/margin-sibling-collapse-propagated.html: Added.
        * LayoutReloaded/test/margin-simple.html: Added.
        * LayoutReloaded/test/negative-margin-simple.html: Added.
        * LayoutReloaded/test/padding-nested.html: Added.
        * LayoutReloaded/test/padding-simple.html: Added.
        * LayoutReloaded/test/relative-auto-with-parent-offset.html: Added.
        * LayoutReloaded/test/relative-auto.html: Added.
        * LayoutReloaded/test/relative-bottom.html: Added.
        * LayoutReloaded/test/relative-right.html: Added.
        * LayoutReloaded/test/relative-siblings.html: Added.
        * LayoutReloaded/test/relative-simple.html: Added.

2018-03-09  Stephan Szabo  <stephan.szabo@sony.com>

        WebKitTestRunner: Do not build accessibility files/idl when !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=183516

        Reviewed by Alex Christensen.

        * WebKitTestRunner/CMakeLists.txt:

2018-03-09  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy, WinCairo] Launch Apache HTTPD for HTTP Tests.
        https://bugs.webkit.org/show_bug.cgi?id=183265

        Reviewed by Daniel Bates.

        Launch apache httpd server from python script for WinCairo HTTP LayoutTests. By now, AppleWin uses
        Cygwin to launch httpd server. This patch enables native Windows to run HTTP LayoutTests by starting
        and stopping httpd server from the script.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._copy_apache_config_file):
        (LayoutTestApacheHttpd):
        (LayoutTestApacheHttpd.platform):
        (LayoutTestApacheHttpd._spawn_process):
        (LayoutTestApacheHttpd._stop_running_server):
        (LayoutTestApacheHttpd._run):
        (LayoutTestApacheHttpd._server_error):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase.aliases):
        (HttpServerBase):
        (HttpServerBase._build_alias_path_pairs):
        (HttpServerBase._build_alias_path_pairs._make_path):
        * Scripts/webkitpy/layout_tests/servers/http_server_base_unittest.py:
        (TestHttpServerBase.test_corrupt_pid_file):
        (TestHttpServerBase):
        (TestHttpServerBase.test_build_alias_path_pairs):
        * Scripts/webkitpy/port/base.py:
        (Port._apache_config_file_name_for_platform):
        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform):
        * Scripts/webkitpy/port/win.py:
        (WinPort._path_to_apache):
        (WinCairoPort.default_baseline_search_path):
        (WinCairoPort):
        (WinCairoPort.check_httpd):

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

        [GTK] Do not use WebKitDOMHTMLFormElement as argument of signal WebKitWebPage::will-submit-form
        https://bugs.webkit.org/show_bug.cgi?id=183510

        Reviewed by Michael Catanzaro.

        Update the test to use WebKitDOMElement instead and fix a memory leak.

        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (handleFormSubmissionCallback):
        (willSubmitFormCallback):

2018-03-08  Stephan Szabo  <stephan.szabo@sony.com>

        WebKitTestRunner: Don't use accessibility controller when !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=183475

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didClearWindowForFrame):

2018-03-08  Ms2ger  <Ms2ger@igalia.com>

        [WPE] Update expectations for API tests
        https://bugs.webkit.org/show_bug.cgi?id=183434

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-03-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Leak checker is not working in WebKitGLib web process tests
        https://bugs.webkit.org/show_bug.cgi?id=183404

        Reviewed by Michael Catanzaro.

        This might have regressed when we started to use the JSC garbage collector timers. The thing is that we expect
        that the WebProcessTester object that we expose to JavaScript is released when the web frame is destroyed, but
        that's no longer the case. On window object cleared a GC is scheduled, but JSC timers do the actual garbage
        collection later. In the case of tests that never happens because the web process finishes quickly after the
        test. We need to force a garbage collection at some point when the web page is destroyed. We can't use the
        WebKitWebPage destroy signal, since we are also checking that WebKitWebPage isn't leaked. The
        API::InjectedBundle::Client::willDestroyPage() always happen when the page is closed, even if WebKitWebPage is
        still alive, so we can force the GC at that point. The only problem is that the frame is detached right after
        that point, so we can't check WebKitFrame leaks. The only frame in the tests is the main one, so we can assume
        that if WebKitWebPage is released, the frame is too.

        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testMainFrame): Stop checking we don't leak WebKitFrame.
        (WebKitFrameTest::testURI): Ditto.
        (WebKitFrameTest::testJavaScriptContext): Ditto.
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameMainFrame): Use new WebViewTest::runWebProcessTest() API.
        (testWebKitFrameURI): Ditto.
        (testWebKitFrameJavaScriptContext): Ditto.
        (webkitFrameTestRun): Deleted.
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (runTest): We no longer need the special case for dom-cache test.
        (windowObjectClearedCallback): Only expose test runner object to JavaScript when loading tests.
        (webkit_web_extension_initialize): Call webkitWebExtensionSetGarbageCollectOnPageDestroy() to ensure a garbage
        collection is performed when the page is closing.
        * TestWebKitAPI/Tests/WebKitGtk/DOMClientRectTest.cpp:
        (WebKitDOMClientRectTest::testDivClientRectsPositionAndLength): Fix memory leak,
        webkit_dom_client_rect_list_item() returns a full reference.
        * TestWebKitAPI/Tests/WebKitGtk/TestAutocleanups.cpp:
        (testWebProcessAutocleanups):Use new WebViewTest::runWebProcessTest() API.
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMClientRect.cpp:
        (testWebKitDOMClientRectDivBoundingClientRectPosition): Use new WebViewTest::runWebProcessTest() API.
        (testWebKitDOMClientRectDivClientRectsPositionAndLength): Use new WebViewTest::runWebProcessTest() API.
        (prepareDOMForClientRectPositionTests): Deleted.
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNode.cpp:
        (testWebKitDOMNodeHierarchyNavigation): Use new WebViewTest::runWebProcessTest() API.
        (testWebKitDOMNodeInsertion): Ditto.
        (testWebKitDOMNodeTagNamesNodeList): Ditto.
        (testWebKitDOMNodeTagNamesHTMLCollection): Ditto.
        (testWebKitDOMObjectCache): We no longer need to run the test several times, since runWebProcessTest() loads
        about blank after every test.
        (prepareDOMForTagNamesTests): Deleted.
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNodeFilter.cpp:
        (testWebKitDOMNodeFilterTreeWalker): Use new WebViewTest::runWebProcessTest() API.
        (testWebKitDOMNodeFilterNodeIterator): Ditto.
        (runTest): Deleted.
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMXPathNSResolver.cpp:
        (testWebKitDOMXPathNSResolverNative): Use new WebViewTest::runWebProcessTest() API.
        (testWebKitDOMXPathNSResolverCustom): Ditto.
        * TestWebKitAPI/Tests/WebKitGtk/TestEditor.cpp:
        (testWebKitWebEditorSelectionChanged): Use new WebViewTest::runWebProcessTest() API.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::runWebProcessTest): It now receives the contents, so it automatically loads the view using
        "webprocess://test" as base URI, used to detect tests in the web process. It also loads about:blank after every
        test to ensure that window object is cleared.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2018-03-07  Youenn Fablet  <youenn@apple.com>

        Match unsupported plugins based on domains and not origin
        https://bugs.webkit.org/show_bug.cgi?id=183384

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::TEST_F):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setPluginSupportedMode): Update to whitelist
        localhost and not http://localhost:8080

2018-03-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Allow apple_additions() to define additional ports
        https://bugs.webkit.org/show_bug.cgi?id=183412
        <rdar://problem/38232353>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/factory.py:
        (PortFactory.get): Allow apple_additions to define port classes to be used
        in run-webkit-tests.

2018-03-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove obsolete function from MockAppleAdditions
        https://bugs.webkit.org/show_bug.cgi?id=183415
        <rdar://problem/38236407>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/port_testcase.py:
        (bind_mock_apple_additions.MockAppleAdditions):
        (bind_mock_apple_additions.MockAppleAdditions.ios_os_name): Deleted.
        (bind_mock_apple_additions.MockAppleAdditions.mac_os_name): Deleted.

2018-03-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: --dedicated-simulators does not boot the correct number of simulators
        https://bugs.webkit.org/show_bug.cgi?id=183409
        <rdar://problem/38224631>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.default_child_processes): When not using dedicated simulators,
        we should use the number of booted simulators as our default child processes.

2018-03-07  Alejandro G. Castro  <alex@igalia.com>

        Make NetworkRTCResolver port agnostic
        https://bugs.webkit.org/show_bug.cgi?id=178855

        Reviewed by Youenn Fablet.

        Added new unit tests for he resolve and stopResolve functions. We need to compile them for the
        other platforms when the APIs are supported.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/DNS.cpp:

2018-03-06  Youenn Fablet  <youenn@apple.com>

        didReceiveServerRedirectForProvisionalNavigation is not called in case of document redirection with service worker registration change
        https://bugs.webkit.org/show_bug.cgi?id=183299
        <rdar://problem/37547029>

        Reviewed by Alex Christensen.

        Add support for checking whether this callback is called.
        Used in the added layout test.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didReceiveServerRedirectForProvisionalNavigation):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestController::clearDidReceiveServerRedirectForProvisionalNavigation):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-03-06  Chris Dumez  <cdumez@apple.com>

        fast/loader/redirect-to-invalid-url-using-meta-refresh-disallowed.html fails with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183345

        Reviewed by Alex Christensen.

        Add layout test infrastructure so a test can know when didCancelClientRedirectForFrame has
        been called. The tests used to rely on a 0-timer but this does not work when the client
        responds to the navigation policy asynchronously.

        * DumpRenderTree/TestRunner.cpp:
        (getDidCancelClientRedirect):
        (TestRunner::staticValues):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::didCancelClientRedirect const):
        (TestRunner::setDidCancelClientRedirect):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:didCancelClientRedirectForFrame:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didCancelClientRedirectForFrame):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::didCancelClientRedirect const):
        (WTR::TestRunner::setDidCancelClientRedirect):

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r229309): s_exceptionInstructions allocation change causing crashes in LLInt on WPE
        https://bugs.webkit.org/show_bug.cgi?id=183366

        Reviewed by Michael Catanzaro.

        Have the TestRunnerInjectedBundle CMake library link against libraries
        in the WebKitTestRunnerInjectedBundle_LIBRARIES list, and not the
        WebKitTestRunner_LIBRARIES list, which is used for the WebKitTestRunner
        executable. This allows narrowing down the libraries to only those that
        are necessary for the injected bundle shared object.

        The GTK+ port already has this list specified, adding one for the WPE
        port.

        * WebKitTestRunner/CMakeLists.txt:
        Link the TestRunnerInjectedBundle library against the libraries in the
        WebKitTestRunnerInjectedBundle_LIBRARIES list.
        * WebKitTestRunner/PlatformWPE.cmake:
        Specify the WebKitTestRunnerInjectedBundle_LIBRARIES list, including the
        basic system dependencies, WebCoreTestSupport and WebKit. This follows
        the GTK+ port.

2018-03-06  Dominik Infuehr  <dinfuehr@igalia.com>

        [ARM] Disable tests that run out of memory
        https://bugs.webkit.org/show_bug.cgi?id=182699

        Reviewed by Žan Doberšek.

        Add run mode to allow running modules.yaml-tests without
        disabling LLInt for specific tests.

        * Scripts/run-jsc-stress-tests:

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix std::make_unique / new[] using system malloc
        https://bugs.webkit.org/show_bug.cgi?id=182975

        Reviewed by JF Bastien.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/UniqueArray.cpp: Copied from Source/WebKit/Platform/win/LoggingWin.cpp.
        (TestWebKitAPI::NonTrivialDestructor::NonTrivialDestructor):
        (TestWebKitAPI::NonTrivialDestructor::~NonTrivialDestructor):
        (TestWebKitAPI::NonTrivialDestructor::setLog):
        (TestWebKitAPI::TEST):

2018-03-05  Myles C. Maxfield  <mmaxfield@apple.com>

        DumpRenderTree build fix

        Unreviewed.

        * DumpRenderTree/mac/LayoutTestHelper.m:

2018-03-05  Andy Estes  <aestes@apple.com>

        [Mac] Teach WebCore::Pasteboard about file promise drags
        https://bugs.webkit.org/show_bug.cgi?id=183314
        <rdar://problem/38105493>

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTreeFileDraggingSource.h:
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.m:
        (-[DumpRenderTreeFileDraggingSource initWithPromisedFileURLs:]):
        (-[DumpRenderTreeFileDraggingSource dealloc]):

        Taught DumpRenderTreeFileDraggingSource to store the promised file URLs.

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

        Called +[DumpRenderTreeDraggingInfo clearAllFilePromiseReceivers] after running a test.

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeFilePromiseReceiver initWithPromisedUTIs:]):
        (-[DumpRenderTreeFilePromiseReceiver fileTypes]):
        (-[DumpRenderTreeFilePromiseReceiver fileNames]):
        (-[DumpRenderTreeFilePromiseReceiver dealloc]):
        (copyFile):
        (-[DumpRenderTreeFilePromiseReceiver receivePromisedFilesAtDestination:options:operationQueue:reader:]):

        We can't instantiate real NSFilePromiseReceivers in DumpRenderTree. They rely on the
        pasteboard server to generate unique file URLs, which is incompatible with our swizzled
        NSPasteboard.

        Instead, create a subclass of NSFilePromiseReceiver that implements its own promise resolution.
        -receivePromisedFilesAtDestination:... asks its DumpRenderTreeFileDraggingSource for the
        array of file URLs, then copies each to the destination directory on the specified operation
        queue. It emulates how NSPasteboard tries to find a unique destination name by appending
        numbers to the file name.

        All receivers are collected in a global array that is cleared when each test finishes.
        DumpRenderTreeFilePromiseReceiver will delete the files it copied in -dealloc.

        (+[DumpRenderTreeDraggingInfo clearAllFilePromiseReceivers]):
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        
        If NSFilesPromisePboardType is on the pasteboard and classArray contains
        NSFilePromiseReceiver, construct a DumpRenderTreeFilePromiseReceiver, add it to the array of
        all file promise receivers, then wrap it in an NSDraggingItem and call block.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController beginDragWithFilePromises:]):

        Implement eventSender.beginDragWithFilePromises() by placing file UTIs on the pasteboard
        with type NSFilesPromisePboardType, creating a DumpRenderTreeFileDraggingSource with the
        file URLs, and creating a new DumpRenderTreeDraggingInfo and passing it to
        -[WebView draggingEntered:].

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

        [webkitpy] Bugzilla class should use NetworkTransaction for network operations
        https://bugs.webkit.org/show_bug.cgi?id=183222

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.open_url): Method which uses NetworkTransaction for opening url.
        (Bugzilla.fetch_user): Used self.open_url instead of directly calling browser.open().
        (Bugzilla.add_user_to_groups): Ditto.
        (Bugzilla._fetch_bug_page): Ditto.
        (Bugzilla.fetch_attachment_contents): Ditto.
        (Bugzilla.get_bug_id_for_attachment_id): Ditto.
        (Bugzilla.authenticate): Ditto.
        (Bugzilla.add_attachment_to_bug): Ditto.
        (Bugzilla.add_patch_to_bug): Ditto.
        (Bugzilla.create_bug): Ditto.
        (Bugzilla.clear_attachment_flags): Ditto.
        (Bugzilla.set_flag_on_attachment): Ditto.
        (Bugzilla.obsolete_attachment): Ditto.
        (Bugzilla.add_cc_to_bug): Ditto.
        (Bugzilla.post_comment_to_bug): Ditto.
        (Bugzilla.close_bug_as_fixed): Ditto.
        (Bugzilla.reassign_bug): Ditto.
        (Bugzilla.reopen_bug): Ditto.
        (Bugzilla._fetch_bug_page_by_url): Deleted, not required anymore.
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run): Added a FIXME.

2018-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        dump-class-layout mishandles duplicates base classes and miscomputes padding
        https://bugs.webkit.org/show_bug.cgi?id=183311

        Reviewed by Simon Fraser.

        * Scripts/dump-class-layout:
        (verify_type):
        (verify_type_recursive):
        Keep a list of seen (offset, type) that we have output and don't re-output them.
        The Python types list the base classes as members multiple times as you iterate
        through the members, so just ignore them if we have seem them already at a
        specific offset.

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

        [GTK][Wayland] The GTK Wayland bot exits early because of assertions related with libsecret since r221925
        https://bugs.webkit.org/show_bug.cgi?id=183330

        Reviewed by Michael Catanzaro.

        Add libsecret to the JHBuild and build it only when the system version is
        less than 0.18.6 (unreleased as of writing this) in order to cherry pick
        a fix for a bug that causes crashes with layout tests.

        * gtk/jhbuild.modules:
        * gtk/patches/libsecret-secret-methods-Don-t-unref-NULL-when-search-fails.patch: Added.

2018-03-05  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Implement WTR's PlatformWebView::setWindowIsKey()
        https://bugs.webkit.org/show_bug.cgi?id=183143

        Reviewed by Carlos Garcia Campos.

        Implement ::setWindowIsKey() by keeping a second window to be
        presented when the webview's window is to lose its key status.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::setWindowIsKey):

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix Apple port build

        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix WPE build

        * WebKitTestRunner/InjectedBundle/wpe/TestRunnerWPE.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformRunUntil):

2018-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Move currentCPUTime and sleep(Seconds) to CPUTime.h and Seconds.h respectively
        https://bugs.webkit.org/show_bug.cgi?id=183312

        Reviewed by Mark Lam.

        Remove wtf/CurrentTime.h include pragma.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSWithinNPP_New.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/InvokeDestroysPluginWithinNPP_New.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/SlowNPPNew.cpp:
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/Signals.cpp:
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        * TestWebKitAPI/jsconly/PlatformUtilitiesJSCOnly.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:

2018-03-04  Tim Horton  <timothy_horton@apple.com>

        Make !ENABLE(DATA_DETECTION) iOS build actually succeed
        https://bugs.webkit.org/show_bug.cgi?id=183283
        <rdar://problem/38062148>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-03-02  Chris Dumez  <cdumez@apple.com>

        Converting a load to a download does not work with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183254
        <rdar://problem/38035334>

        Reviewed by Youenn Fablet.

        Add layout test infrastructure for responding to the decidePolicyForNavigationResponse
        delegate asynchronously.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForResponse):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldDecideResponsePolicyAfterDelay):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::shouldDecideResponsePolicyAfterDelay const):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::decidePolicyForNavigationResponse):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldDecideResponsePolicyAfterDelay):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2018-03-01  Youenn Fablet  <youenn@apple.com>

        Add API test to validate setting of service worker and cache storage directories
        https://bugs.webkit.org/show_bug.cgi?id=182543

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-03-01  Ross Kirsling  <ross.kirsling@sony.com>

        [Win][DRT] Implement setSpatialNavigationEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=183166

        Reviewed by Per Arne Vollan.

        * DumpRenderTree/TestRunner.cpp:
        (setSpatialNavigationEnabledCallback):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setSpatialNavigationEnabled):

2018-03-01  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy] Use shell=False to launch apache http server.
        https://bugs.webkit.org/show_bug.cgi?id=183191

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._run):

2018-03-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update WebKit.CustomHeaderFields API test after r229133.

        We no longer do policy checks for 'about:blank'.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]):
        (TEST):

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

        [webkitpy] Remove concept of 'future' versions (Follow-up fix 2)
        https://bugs.webkit.org/show_bug.cgi?id=183184
        <rdar://problem/37958594>

        Reviewed by Aakash Jain.

        Unlisted Apple versions can't run webkitpy tests because they don't
        have specified port names.

        * Scripts/webkitpy/port/apple.py:
        (ApplePort.determine_full_port_name): Return valid port name for unnamed
        versions.
        * Scripts/webkitpy/port/base.py:
        (Port.version_name): Check both public and internal version mapping
        when returning a version name.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.__init__): If no os version is defined, use the current version.

2018-02-28  John Wilander  <wilander@apple.com>

        Add a second tier of prevalence to facilitate telemetry on very prevalent domains
        https://bugs.webkit.org/show_bug.cgi?id=183218
        <rdar://problem/37992388>

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
            Added two new testRunner functions:
            - setStatisticsVeryPrevalentResource()
            - isStatisticsVeryPrevalentResource()
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsVeryPrevalentResource):
        (WTR::TestController::isStatisticsVeryPrevalentResource):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        [webkitpy] Remove concept of 'future' versions (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=183184
        <rdar://problem/37958594>

        Reviewed by David Kilzer.

        The factory also relies on future in a non-obvious way.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.os_version_name): Check both public and internal version mapping
        when returning a version name.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.os_version_name): Ditto.

2018-02-28  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE fixup after r229080.

        Add empty definitions for two AccessibilityUIElement methods,
        avoiding undefined symbols in the WKTR injected bundle.

        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):

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

        Remove concept of 'future'
        https://bugs.webkit.org/show_bug.cgi?id=183184
        <rdar://problem/37958594>

        Reviewed by Aakash Jain.

        Remove concept of 'future' from expectations and instead
        use a system of inheritance centered around the current version
        of an OS for Mac and iOS.

        Inheritance works like so:

        | ....
        V Future
        > High Sierra (mac)
        ^ mac-sierra
        | mac-elcapitan
        | ....

        This does not change expectation inheritance for any currently running
        configurations, it generalizes the logic already used.

        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.__init__): Remove all future versions.
        (VersionNameMap.mapping_for_platform): Return empty dicts instead of
        asserting.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort):
        (ApplePort._allowed_versions): Return all available versions.
        (ApplePort._generate_all_test_configurations): Instead of picking from a set
        of allowed versions, assume that every specified version is allowed.
        (ApplePort._port_name_with_version): Deleted.
        * Scripts/webkitpy/port/darwin.py: Add CURRENT_VERSION overridden by subclasses.
        (DarwinPort):
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort.default_baseline_search_path): Use system of inheritance centered around
        the current version.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.__init__): Use current version by default.
        (MacPort.default_baseline_search_path): Use system of inheritance centered around
        the current version.
        (MacPort.configuration_specifier_macros): Use the same set of version names
        supported in default_baseline_search_path.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_versions): Remove 'future' tests.

2018-02-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed GTK test gardening

        * TestWebKitAPI/glib/TestExpectations.json:

2018-02-27  Doug Russell  <doug@getitdownonpaper.com>

        AX: Spell check and style attributes should be optional when fetching attributed string
        https://bugs.webkit.org/show_bug.cgi?id=160744

        Reviewed by Chris Fleizach.

        The overhead of fetching a spell checked attributed string via AX API is substantial. 
        In some cases on the order of 7/8 of the total time spent fetching the string.

        This change introduces the new attribute AXAttributedStringForTextMarkerRangeWithOptions which accepts an NSDictionary as it's parameter with keys "AXTextMarkerRange" (AXTextMarkerRangeRef) and "AXSpellCheck" (NSNumber(BOOL)).

        AXAttributedStringForTextMarkerRange will remain unchanged.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (attributedStringForTextMarkerRangeCallback):
        (attributedStringForTextMarkerRangeWithOptionsCallback):
        (AccessibilityUIElement::attributedStringForTextMarkerRange):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::attributedStringForTextMarkerRange):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (createJSStringRef):
        (AccessibilityUIElement::attributedStringForTextMarkerRange):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::createJSStringRef):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):

2018-02-27  Daniel Bates  <dabates@apple.com>

        Standardize terminology for marked text
        https://bugs.webkit.org/show_bug.cgi?id=180999

        Reviewed by Zalan Bujtas.

        The name MarkerSubrange is a misnomer for a data structure that associates a text subrange with a type
        and optional document marker. In particular, a MarkerSubrange may not always correspond to a document
        marker. For instance, selected text is represented using a MarkerSubrange that does not have a
        corresponding document marker. Let's standardize on the phrase "marked text" as the canonical way to
        describe these tagged text subranges.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/MarkedText.cpp: Added.
        (WebCore::operator<<):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/MarkerSubrange.cpp: Removed.

2018-02-27  Aakash Jain  <aakash_jain@apple.com>

        webkitpy Bugzilla transactions should retry on URLError
        https://bugs.webkit.org/show_bug.cgi?id=183156

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla): Use NetworkTransaction.
        (Bugzilla._fetch_bug_page_by_url):
        (Bugzilla.bug_id_for_attachment_id):
        (Bugzilla.get_bug_id_for_attachment_id):

2018-02-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Implement additional SPI for adjusting viewport shrink-to-fit behavior
        https://bugs.webkit.org/show_bug.cgi?id=183100
        <rdar://problem/37840987>

        Reviewed by Tim Horton.

        Add API tests that exercise -_setMinimumAllowedLayoutWidth: and -_setForceHorizontalViewportShrinkToFit:. See
        WebKit ChangeLog for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ViewportSizingTests.mm: Added.
        (TestWebKitAPI::while):
        (viewportTestPageMarkup):
        (TestWebKitAPI::TEST):

2018-02-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, skip FTL tests if FTL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=183071

        * Scripts/run-jsc-stress-tests:

2018-02-26  Don Olmstead  <don.olmstead@sony.com>

        Fix WebCore includes within WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=183147

        Reviewed by Tim Horton.

        * MiniBrowser/win/ResourceLoadDelegate.cpp:

2018-02-26  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] WebKit2_C.h should be included for TestWebKit
        https://bugs.webkit.org/show_bug.cgi?id=182682

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/config.h:

2018-02-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WK2] http/tests/navigation/new-window-redirect-history.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=127683

        Reviewed by Dan Bernstein.

        m_previousTestBackForwardListItem was null for the new window.
        m_previousTestBackForwardListItem is initialized only for the main
        window in InjectedBundlePage::prepare.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpBackForwardList):
        Do null-check of m_previousTestBackForwardListItem.

2018-02-25  Alexey Proskuryakov  <ap@apple.com>

        Various crashes in WebKitTestRunner, especially when system is under heavy load
        https://bugs.webkit.org/show_bug.cgi?id=183109

        Reviewed by Tim Horton.

        WebKitTestRunner had many places where it sent messages to WebContent with a timeout,
        but it didn't handle the timeout when it did occur. Nearly all of those would result
        in logic errors and failing tests, and most would even result in stack corruption,
        as the response handler modified local variables.

        There is only one timeout scenario that we actually mean to handle in WKTR. That's
        when a test freezes after it is done (e.g. an infinite loop in beforeunload) - we don't
        want to blame the next test for freezing, so we silently relaunch WebContent.
        Everything else is cargo cult code that never worked.

        This patch addresses the crashes, and actually makes tests pass a lot more on an
        overloaded system.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Moved m_doneResetting assignment
        to where it's actually needed, for clarity.
        (WTR::TestController::reattachPageToWebProcess): This function used to always hit
        and ignore message timeout, as m_doneResetting is only updated by navigation callback
        when the state is Resetting. This change makes it faster.
        (WTR::TestController::platformResetStateToConsistentValues): Style fix.
        (WTR::TestController::clearServiceWorkerRegistrations): Timing out here wasn't
        handled in a meaningful manner, and would even corrupt the stack.
        (WTR::TestController::clearDOMCache): Ditto.
        (WTR::TestController::clearDOMCaches): Ditto.
        (WTR::TestController::hasDOMCache): Ditto.
        (WTR::TestController::domCacheSize): Ditto.
        (WTR::TestController::isStatisticsPrevalentResource): Ditto.
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder): Ditto.
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo): Ditto.
        (WTR::TestController::isStatisticsHasHadUserInteraction): Ditto.
        (WTR::TestController::isStatisticsGrandfathered): Ditto.
        (WTR::TestController::statisticsUpdateCookiePartitioning): Ditto.
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost): Ditto.
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore): Ditto.
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours): Ditto.
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval): Ditto.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::shortTimeout const): Made shortTimeout shorter (on a hunch).
        (WTR::TestInvocation::invoke): Removed a timeout waiting for initial response. There
        is never a logical reason for such a timeout, as we always have a new or responsive
        WebContent process here.
        (WTR::TestInvocation::dumpResults): Removed another timeout that we don't know how to
        properly handle.
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Removed assignment to
        m_errorMessage, which had no effect in this context.

        * WebKitTestRunner/TestInvocation.h: Removed no longer used code.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues): Use a named constant for
        no timeout.
        
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest): Removed a useless timeout.
        Not sure if timing out here would corrupt the stack or not, but there is no reason
        to impose arbitrary limits on individual steps of a test.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest): Use a named constant for
        no timeout.

2018-02-25  Ali Juma  <ajuma@chromium.org>

        Unreviewed. Change my status to committer.

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

2018-02-25  Chris Dumez  <cdumez@apple.com>

        Service workers do not work well inside Web.app
        https://bugs.webkit.org/show_bug.cgi?id=183105
        <rdar://problem/37864140>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-02-25  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] unit-tests fail if buildbot 0.8.6p1 is not installed locally
        https://bugs.webkit.org/show_bug.cgi?id=183103

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Removed extra imports.

2018-02-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the TestWebKitAPI build after r228825.

        I removed a `>= iOS 11` check in r228825, but forgot that this was also neeed to guard against tvOS and watchOS
        builds. This fixes the build by restoring the compile-time guard and also makes it explicit for these platforms.

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove currentTime() / currentTimeMS()
        https://bugs.webkit.org/show_bug.cgi?id=183052

        Reviewed by Mark Lam.

        * DumpRenderTree/TestRunner.cpp:
        (preciseTimeCallback):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::setPosition):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::preciseTime):

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove sleep(double) and sleepMS(double) interfaces
        https://bugs.webkit.org/show_bug.cgi?id=183038

        Reviewed by Mark Lam.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        (PluginTest::indicateTestFailure):
        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSWithinNPP_New.cpp:
        (EvaluteJSWithinNPP_New::NPP_New):
        * DumpRenderTree/TestNetscapePlugIn/Tests/InvokeDestroysPluginWithinNPP_New.cpp:
        (InvokeDestroysPluginWithinNPP_New::NPP_New):
        * DumpRenderTree/TestNetscapePlugIn/Tests/SlowNPPNew.cpp:
        * TestWebKitAPI/Tests/WTF/Signals.cpp:
        (TEST):
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::testThreadGroup):
        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/jsconly/PlatformUtilitiesJSCOnly.cpp:
        (TestWebKitAPI::Util::sleep):

2018-02-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use cmakeconfig.h rather than config.h and Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=182883

        Reviewed by Per Arne Vollan.

        * DumpRenderTree/config.h:
        * TestWebKitAPI/config.h:

2018-02-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unsafe g_setenv use in MiniBrowser main
        https://bugs.webkit.org/show_bug.cgi?id=182978

        Reviewed by Carlos Garcia Campos.

        setenv (and g_setenv) will randomly crash if called too late.

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

2018-02-21  Aakash Jain  <aakash_jain@apple.com>

        webkitpy NetworkTransaction should retry on URLError
        https://bugs.webkit.org/show_bug.cgi?id=182987

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run): Retry on urllib2.URLError.

2018-02-21  Ms2ger  <Ms2ger@igalia.com>

        [WTR][WPE] Correct the process names in TestController.
        https://bugs.webkit.org/show_bug.cgi?id=178700

        Reviewed by Michael Catanzaro.

        Similar to r228731 for GTK.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._get_crash_log): removed the code to convert WebProcess name.
        * WebKitTestRunner/TestController.cpp: return the correct process names for WPE.
        (WTR::TestController::webProcessName):
        (WTR::TestController::networkProcessName):
        (WTR::TestController::databaseProcessName):

2018-02-21  Ms2ger  <Ms2ger@igalia.com>

        [ATK] Remove attributeSet variable from AccessibilityUIElement::attributedStringForRange().
        https://bugs.webkit.org/show_bug.cgi?id=183000

        Reviewed by Joanmarie Diggs.

        It is never initialized, but is passed to atk_attribute_set_free.
        This caused a crash in accessibility/content-editable-as-textarea.html on the debug bots.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::attributedStringForRange):

2018-02-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Make system-ui obey the user-installed-font policy
        https://bugs.webkit.org/show_bug.cgi?id=182860
        <rdar://problem/36158249>

        Reviewed by Antti Koivisto.

        Create a font, FakeHelvetica-ArmenianCharacter.ttf, which supports a particular Armenian
        character which isn't isn't supported by any other font on the system.

        * WebKitTestRunner/FakeHelvetica-ArmenianCharacter.ttf:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2018-02-20  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the 32-bit build after r228857

        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::firstResponderSuppressionForWebView):

2018-02-20  Nan Wang  <n_wang@apple.com>

        AX: Keyboard focus not following VoiceOver cursor into web content or within web content.
        https://bugs.webkit.org/show_bug.cgi?id=182752
        <rdar://problem/37518233>

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::firstResponderSuppressionForWebView):
        (WTR::UIScriptController::makeWindowContentViewFirstResponder):
        (WTR::UIScriptController::isWindowContentViewFirstResponder const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::firstResponderSuppressionForWebView):
        (WTR::UIScriptController::makeWindowContentViewFirstResponder):
        (WTR::UIScriptController::isWindowContentViewFirstResponder const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::firstResponderSuppressionForWebView):
        (WTR::UIScriptController::makeWindowContentViewFirstResponder):
        (WTR::UIScriptController::isWindowContentViewFirstResponder const):

2018-02-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] jhbuild: Remove gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=182956

        Reviewed by Michael Catanzaro.

        jhbuild doesn't need to build gtk-doc because major LTS Linux
        distributions have gtk-doc v1.25, and
        Tools/gtk/install-dependencies installs gtk-doc.

        * gtk/jhbuild.modules: Removed gtk-doc.

2018-02-20  Tim Horton  <timothy_horton@apple.com>

        Introduce HAVE(IOSURFACE_ACCELERATOR)
        https://bugs.webkit.org/show_bug.cgi?id=182955
        <rdar://problem/37699510>

        Reviewed by Sam Weinig.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage):

2018-02-20  Chris Dumez  <cdumez@apple.com>

        Provisional load may get committed before receiving the decidePolicyForNavigationResponse response
        https://bugs.webkit.org/show_bug.cgi?id=182720
        <rdar://problem/37515204>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/AsyncPolicyForNavigationResponse.mm:
        (-[TestAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (TestWebKitAPI::TEST):

2018-02-20  Nan Wang  <n_wang@apple.com>

        AX: AOM: Dispatch accessibleclick event
        https://bugs.webkit.org/show_bug.cgi?id=180898
        <rdar://problem/36086710>

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::AccessibilityUIElement::syncPress):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::syncPress):

2018-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 11.3 Beta] Can't copy a URL from Safari and paste it into the Gmail app
        https://bugs.webkit.org/show_bug.cgi?id=182952
        <rdar://problem/37636190>

        Reviewed by Tim Horton.

        Adds a new iOS copy/paste test that copies an anchor element via action sheet, and checks that upon pasting,
        both "text/plain" and "text/uri-list" are provided. Additionally tweaks an existing iOS drag and drop test to
        check for the same behavior.

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2018-02-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MiniBrowser] Honor GStreamer command line parameters in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=173655

        Reviewed by Xabier Rodriguez-Calvar.

        The FIXME in GStreamerUtilities.cpp asks to pass the command line
        parameters to the GStreamer initialization function.

        Based on initial patch by: Vanessa Chipirrás Navalón  <vchipirras@igalia.com>

        * MiniBrowser/gtk/main.c:
        (main): Add the group containing the Gstreamer options that the console displays.

2018-02-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTR][GTK] crash log backtrace doesn't show symbol names for DatabaseProcess and NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=182953

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._get_crash_log): Removed the code to convert WebProcess name.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName): Return the correct program name for GTK+ port.
        (WTR::TestController::networkProcessName): Ditto.
        (WTR::TestController::databaseProcessName): Ditto.

2018-02-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r228696.

        The API test added with this change is timing out on macOS.

        Reverted changeset:

        "Null pointer dereference in
        WebPageProxy::urlSchemeHandlerForScheme()"
        https://bugs.webkit.org/show_bug.cgi?id=182905
        https://trac.webkit.org/changeset/228696

2018-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add an entitlement check for service worker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=182865
        <rdar://problem/37505903>

        Reviewed by Brady Eidson.

        Added the service worker entitlements to WebKitTestRunner and TestWebKitAPI on iOS.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp-iOS.entitlements:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2018-02-16  Youenn Fablet  <youenn@apple.com>

        Allow specifying which plug-ins are supported
        https://bugs.webkit.org/show_bug.cgi?id=182748

        Reviewed by Chris Dumez.

        Add support for a test runner API to specificy supported plug-ins.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPluginsAsUnsupported):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setPluginsAsUnsupported):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2018-02-16  Per Arne Vollan  <pvollan@apple.com>

        Implement stopping of run loop in the WebContent process when using NSRunLoop.
        https://bugs.webkit.org/show_bug.cgi?id=182499
        <rdar://problem/37247424>

        Reviewed by Brent Fulgham.

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

2018-02-15  Alexey Proskuryakov  <ap@apple.com>

        Speed up dSYM generation on build.webkit.org with -gline-tables-only
        https://bugs.webkit.org/show_bug.cgi?id=182841
        rdar://problem/34579649

        Reviewed by Aakash Jain.

        Build speed and binary size improvements are so substantial that I'm willing to make
        CI builds less suitable for debugging, which is not a common scenario anyway.
        Crash logs will still have line numbers in them.

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

2018-02-15  Don Olmstead  <don.olmstead@sony.com>

        WebCore headers should not be included relatively within dependent projects
        https://bugs.webkit.org/show_bug.cgi?id=182805

        Reviewed by Chris Dumez.

        * TestWebKitAPI/win/TestWebCoreStubs.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityControllerWPE.cpp:
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:

2018-02-15  Tomas Popela  <tpopela@redhat.com>

        run-jsc-stress-tests - skip a test if any of the run commands evals to skip
        https://bugs.webkit.org/show_bug.cgi?id=182729

        If multiple run commands are specified and one of them evals to skip,
        then the test is not skipped, because the run is scheduled while
        evaluating other commands.

        Remember if the test is going to be skipped - if yes, just stop
        evaluating the other run commands.

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2018-02-14  Charlie Turner  <cturner@igalia.com>

        Get Garden-O-Matic running again.
        https://bugs.webkit.org/show_bug.cgi?id=179089

        Reviewed by Carlos Alberto Lopez Perez.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/Trac.js:
        (parseCommitData): Author field is not always spelled 'author' these days.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        No longer have a 32-bit builder.
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/perf.js:
        (ui.perf.View.base.init): createElement has a required parameter these days.
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        (GardenOMatic): Override use_globs so that platform lookup in config.js works.

2018-02-14  Don Olmstead  <don.olmstead@sony.com>

        Remove unused ForwardingHeaders directories from Tools
        https://bugs.webkit.org/show_bug.cgi?id=182813

        Reviewed by Konstantin Tokarev.

        * DumpRenderTree/ForwardingHeaders/runtime/ArrayBufferView.h: Removed.
        * DumpRenderTree/ForwardingHeaders/runtime/JSArrayBufferView.h: Removed.
        * DumpRenderTree/ForwardingHeaders/runtime/JSExportMacros.h: Removed.
        * DumpRenderTree/ForwardingHeaders/runtime/TypedArrayInlines.h: Removed.
        * TestWebKitAPI/ForwardingHeaders/WebCore/LayoutUnit.h: Removed.

2018-02-14  Daniel Bates  <dabates@apple.com>

        Disallow cross-origin subresources from asking for credentials
        https://bugs.webkit.org/show_bug.cgi?id=182579
        <rdar://problem/36162271>

        Reviewed by Andy Estes.

        Add test option allowCrossOriginSubresourcesToAskForCredential (defaults to false)
        so that tests can toggle between the old behavior and new behavior.

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

2018-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r223440): Copying & pasting a list from Microsoft Word to TinyMCE fails
        https://bugs.webkit.org/show_bug.cgi?id=182564

        Reviewed by Wenson Hsieh.

        Updated assertions to make sure the trailing "}" of @list rules is includd in the style, the "style" element
        is wrapped by "head" element (not present in the pasted markup since the fragment parsing algorithm strips away),
        and the style content is enclosed in "<!--" and "-->".

        Also use execCommand('insertHTML', ~) to insert the HTML obtained via dataTransfer.getData instead of innerHTML
        to make sure our pasting code preserves the special style element for MSO list quirks.

        Finally, added two more test cases for pasting content from Microsoft Word's compatibility mode.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:
        (TEST):

2018-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        [Tools] --wincairo should imply --64-bit by default.
        https://bugs.webkit.org/show_bug.cgi?id=182753

        Reviewed by Daniel Bates.

        WinCairo does not currently support 32-bit and `--wincairo` itself should refer to a working platform.
        This patch ensures x64 is determined correctly for `build-webkit --no-ninja` and `run-webkit-tests`.

        * Scripts/webkitdirs.pm:
        (determinePassedArchitecture):
        (shouldBuild32Bit):
        (determineShouldBuild32Bit):
        (determineIsWin64):
        * Scripts/webkitpy/common/config/ports.py:
        (WinCairoPort.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_wincairo_port):
        * Scripts/webkitpy/port/win.py:
        (WinCairoPort):

2018-02-13  Commit Queue  <commit-queue@webkit.org>

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

        Regressed CMake build stability (Requested by dolmstead on
        #webkit).

        Reverted changeset:

        "[CMake] Make WebCore headers copies"
        https://bugs.webkit.org/show_bug.cgi?id=182512
        https://trac.webkit.org/changeset/228431

2018-02-13  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512

        Reviewed by Keith Miller.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/win/TestWebCoreStubs.cpp:
        (loadResourceIntoBuffer):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityControllerWPE.cpp:
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:

2018-02-13  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r228299): Broke reader mode in Safari
        https://bugs.webkit.org/show_bug.cgi?id=182697
        <rdar://problem/37399012>

        Reviewed by Ryosuke Niwa.

        Add API test coverage for responding asynchronously to the decidePolicyForNavigationResponse
        delegate.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/AsyncPolicyForNavigationResponse.mm: Added.
        (-[TestAsyncNavigationDelegate webView:didFinishNavigation:]):
        (-[TestAsyncNavigationDelegate webView:didFailNavigation:withError:]):
        (-[TestAsyncNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestAsyncNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[TestAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (TestWebKitAPI::TEST):

2018-02-12  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Classify resources as prevalent based on redirects to other prevalent resources
        https://bugs.webkit.org/show_bug.cgi?id=182664
        <rdar://problem/37372572>

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectFrom):
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectTo):
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectFrom):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectFrom):
        (WTR::TestController::setStatisticsTopFrameUniqueRedirectTo):
        (WTR::TestController::setStatisticsTopFrameUniqueRedirectFrom):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-02-12  Ross Kirsling  <ross.kirsling@sony.com>

        download-latest-github-release .py should not use "browser download URL".
        https://bugs.webkit.org/show_bug.cgi?id=182646

        Reviewed by Per Arne Vollan.

        * Scripts/download-latest-github-release.py:
        Download request should be a proper GitHub API call and should actually include the token when applicable.
        (Also clean up usage of args and print while we're in here.)

2018-02-12  Per Arne Vollan  <pvollan@apple.com>

        EWS should run Windows tests.
        https://bugs.webkit.org/show_bug.cgi?id=177967

        Reviewed by Lucas Forschler.

        This will help catch regressions at an early stage.

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

2018-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r223440): Copying & pasting a list from Microsoft Word to TinyMCE fails
        https://bugs.webkit.org/show_bug.cgi?id=182564

        Reviewed by Wenson Hsieh.

        Added tests for pasting HTML with list items generated by Microsoft Word as well as HTML which looks like
        the one generated by Microsoft Word but missing a proper "html" element at the beginning.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm: Added test cases.
        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm: Added test cases.
        (msoListMarkupWithoutProperHTMLElement): Added.
        * TestWebKitAPI/Tests/WebKitCocoa/mso-list.html: Added.

2018-02-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make PAL headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182645

        Reviewed by Alex Christensen.

        * TestWebKitAPI/CMakeLists.txt:

2018-02-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pasting from Excel no longer provides text/html data
        https://bugs.webkit.org/show_bug.cgi?id=182636
        <rdar://problem/37087060>

        Reviewed by Ryosuke Niwa.

        Add new API tests to exercise pasting images with various other content types on macOS, and when dropping images
        and HTML markup on iOS. See the WebCore ChangeLog for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DataTransfer.html: Added.

        Add a new API test harness that dumps various bits of information about a DataTransfer upon paste and drop.
        While somewhat similar to some existing harnesses, this makes a distinction between the raw HTML data on the
        pasteboard and the actual result of inserting said HTML into the DOM. This allows us to check that the HTML has
        been sanitized, while making checks for the actual content of the HTML robust against inline style changes.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm: Added.

        Add a new test suite to exercise pasting mixed content types. In these test cases, the pasteboard contains a
        file, with some combination of plain text, rich text, and URLs.

        (imagePath):
        (writeTypesAndDataToPasteboard):

        Add a helper to write a var-arg list of content types and data to the general NSPasteboard.

        (setUpWebView):
        (markupString):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::testIconImageData):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

        Move a private declaration of -[WKWebView paste:] out to TestWKWebView.h, so that it can be shared across
        multiple tests. Currently, it only resides in PasteImage.mm, but I need it in PasteMixedContent.mm as well.

2018-02-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a way to check if a host is an IP address
        https://bugs.webkit.org/show_bug.cgi?id=182427

        Reviewed by Alex Christensen.

        Add unit test for URL::hostIsIPAddress().

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

2018-02-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Layout test fast/replaced/border-radius-clip.html crashes with GStreamer-CRITICAL **: gst_segment_to_stream_time: assertion 'segment->format == format' failed in gst_segment_to_stream_time()
        https://bugs.webkit.org/show_bug.cgi?id=176802

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0001-gstgdkpixbufdec-stop-pretending-to-decode-gifs.patch: Added.

2018-02-09  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update Mesa to version 17
        https://bugs.webkit.org/show_bug.cgi?id=182599

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/jhbuild.modules: Update Mesa (and its dependencies, hopefully) to version 17.3.3.

2018-02-08  Chris Dumez  <cdumez@apple.com>

        There should be a way to disable [OverrideBuiltins] behavior in a given DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=182524
        <rdar://problem/9057327>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior_Bundle.cpp: Added.
        (TestWebKitAPI::InjectedBundleDisableOverrideBuiltinsBehaviorTest::InjectedBundleDisableOverrideBuiltinsBehaviorTest):
        (TestWebKitAPI::InjectedBundleDisableOverrideBuiltinsBehaviorTest::initialize):
        * TestWebKitAPI/Tests/WebKit/override-builtins-test.html: Added.

2018-02-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        TestController should not exercise cocoa-specific resource load statistics APIs
        https://bugs.webkit.org/show_bug.cgi?id=182355

        Reviewed by Alex Christensen.

        Remove unnecessary use of platform-specific APIs in the TestController, since there are
        cross-platform APIs to do the same thing.

        Also, ensure callbacks execute before returning from TestController's functions, since
        otherwise the tests are guaranteed to be flaky at best, and also since there's nothing to
        prevent the TestController from being destroyed before the callbacks execute.

        * WebKitTestRunner/TestController.cpp:
        (WTR::resourceStatisticsVoidResultCallback):
        (WTR::resourceStatisticsBooleanResultCallback):
        (WTR::TestController::isStatisticsPrevalentResource):
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestController::isStatisticsHasHadUserInteraction):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::statisticsUpdateCookiePartitioning):
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval):
        (WTR::resourceStatisticsCallback): Deleted.
        (WTR::TestController::statisticsClearThroughWebsiteDataRemovalCallback): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::toNSString): Deleted.
        (WTR::TestController::setStatisticsLastSeen): Deleted.
        (WTR::TestController::setStatisticsPrevalentResource): Deleted.
        (WTR::TestController::isStatisticsPrevalentResource): Deleted.
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder): Deleted.
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo): Deleted.
        (WTR::TestController::setStatisticsHasHadUserInteraction): Deleted.
        (WTR::TestController::setStatisticsHasHadNonRecentUserInteraction): Deleted.
        (WTR::TestController::isStatisticsHasHadUserInteraction): Deleted.
        (WTR::TestController::setStatisticsGrandfathered): Deleted.
        (WTR::TestController::isStatisticsGrandfathered): Deleted.
        (WTR::TestController::setStatisticsSubframeUnderTopFrameOrigin): Deleted.
        (WTR::TestController::setStatisticsSubresourceUnderTopFrameOrigin): Deleted.
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectTo): Deleted.
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction): Deleted.
        (WTR::TestController::setStatisticsTimeToLiveCookiePartitionFree): Deleted.
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords): Deleted.
        (WTR::TestController::statisticsUpdateCookiePartitioning): Deleted.
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost): Deleted.
        (WTR::TestController::statisticsSubmitTelemetry): Deleted.
        (WTR::TestController::setStatisticsNotifyPagesWhenDataRecordsWereScanned): Deleted.
        (WTR::TestController::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval): Deleted.
        (WTR::TestController::setStatisticsNotifyPagesWhenTelemetryWasCaptured): Deleted.
        (WTR::TestController::setStatisticsMinimumTimeBetweenDataRecordsRemoval): Deleted.
        (WTR::TestController::setStatisticsGrandfatheringTime): Deleted.
        (WTR::TestController::setStatisticsMaxStatisticsEntries): Deleted.
        (WTR::TestController::setStatisticsPruneEntriesDownTo): Deleted.
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore): Deleted.
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours): Deleted.
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval): Deleted.
        (WTR::TestController::statisticsResetToConsistentState): Deleted.

2018-02-08  Jonathan Bedard  <jbedard@apple.com>

        webkit-patch suggest-reviewers dies with AttributeError: 'NoneType' object has no attribute 'revision'
        https://bugs.webkit.org/show_bug.cgi?id=182584

        Reviewed by Daniel Bates.

        It is possible that a specific revision has an empty ChangeLog. In this case, Checkout.commit_info_for_revision
        will return 'None'. Checkout.recent_commit_infos_for_files should never return a set with 'None' in it.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.recent_commit_infos_for_files): Remove any empty commit information from the set.
        * Scripts/webkitpy/common/checkout/checkout_unittest.py: Add a file which references an empty ChangeLog.

2018-02-08  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228261.

        This broke an internal build

        Reverted changeset:

        "Add a way to check if a host is an IP address"
        https://bugs.webkit.org/show_bug.cgi?id=182427
        https://trac.webkit.org/changeset/228261

2018-02-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r228267, r228268, and r228269.
        https://bugs.webkit.org/show_bug.cgi?id=182601

        jhbuild socks (Requested by philn on #webkit).

        Reverted changesets:

        "[JHBuild] Update Mesa to version 17"
        https://bugs.webkit.org/show_bug.cgi?id=182599
        https://trac.webkit.org/changeset/228267

        "Unreviewed, GTK build fix attempt after r228267."
        https://trac.webkit.org/changeset/228268

        "Unreviewed, final GTK build fix attempt after r228267."
        https://trac.webkit.org/changeset/228269

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, final GTK build fix attempt after r228267.

        * gtk/jhbuild.modules: sha256sum for libdrm was for the tar.gz archive. Oops.

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix attempt after r228267.

        * gtk/jhbuild.modules: Update to libdrm version 2.4.89, Mesa 17 requires at least version 2.4.75.

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update Mesa to version 17
        https://bugs.webkit.org/show_bug.cgi?id=182599

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/jhbuild.modules: Update Mesa to version 17.3.3.

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a way to check if a host is an IP address
        https://bugs.webkit.org/show_bug.cgi?id=182427

        Reviewed by Alex Christensen.

        Add unit test for URL::hostIsIPAddress().

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

2018-02-07  Tim Horton  <timothy_horton@apple.com>

        Evernote device management web view sometimes displays at the wrong scale
        https://bugs.webkit.org/show_bug.cgi?id=182590
        <rdar://problem/36633687>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegate.mm: Renamed from Tools/TestWebKitAPI/Tests/ios/WKScrollViewDelegateCrash.mm.
        (-[TestDelegateForScrollView dealloc]):
        (TestWebKitAPI::TEST):
        (-[WKScrollViewDelegateWithViewForZoomingOverridden viewForZoomingInScrollView:]):
        Add a test that failed before the change that ensures that we don't
        consult the external delegate for viewForZoomingInScrollView:, and that
        we succesfully update the scale even if it matches that of the view
        the external delegate returns for viewForZoomingInScrollView:.

2018-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r226396): File paths are inserted when dropping image files
        https://bugs.webkit.org/show_bug.cgi?id=182557
        <rdar://problem/37294120>

        Reviewed by Ryosuke Niwa.

        Tweak some image pasting API tests to ensure that file paths are not inserted when pasting images backed by
        file paths on disk.

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

2018-02-07  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Enable WebKit.GeolocationTransitionTo{High,Low}Accuracy tests
        https://bugs.webkit.org/show_bug.cgi?id=125068

        Unreviewed test gardening.

        They do not appear to have failed since we started running them again in r226944.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-02-07  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Enable WebKit.InjectedBundleFrameHitTest test
        https://bugs.webkit.org/show_bug.cgi?id=120303

        Unreviewed test gardening.

        It does not appear to have failed since we started running it again in r226944.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-02-07  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Enable WebKit.ForceRepaint test
        https://bugs.webkit.org/show_bug.cgi?id=105532

        Unreviewed test gardening.

        It does not appear to have failed since we started running it again in r226944.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-02-07  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Add libva in moduleset
        https://bugs.webkit.org/show_bug.cgi?id=182384

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Add libva and disable spurious message output.
        * gtk/install-dependencies: Remove libva from dependencies.
        * wpe/install-dependencies: Ditto.

2018-02-07  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Enable WebKit.NewFirstVisuallyNonEmptyLayoutFrames test
        https://bugs.webkit.org/show_bug.cgi?id=85037

        Unreviewed test gardening.

        It does not appear to have failed since we started running it again in r226944.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-02-06  Leo Balter  <leonardo.balter@gmail.com>

        Nit fix for ruby script called through Perl
        https://bugs.webkit.org/show_bug.cgi?id=182552

        Reviewed by Yusuke Suzuki.

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

2018-02-06  Don Olmstead  <don.olmstead@sony.com>

        Remove WebCore/ForwardingHeaders directory
        https://bugs.webkit.org/show_bug.cgi?id=182347

        Reviewed by Keith Miller.

        * WebKitTestRunner/TestController.cpp:

2018-02-06  Ross Kirsling  <ross.kirsling@sony.com>

        webkit-patch upload should ask for confirmation before creating a new bug
        https://bugs.webkit.org/show_bug.cgi?id=182551

        Reviewed by Daniel Bates.

        It is quite easy to paste unintended text into the bug number prompt. This creates a junk bug with an uneditable
        first comment, which could result in embarrassment or potentially even a proprietary information leak.

        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_prepare):
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        (PromptForBugOrTitle):
        (PromptForBugOrTitle.options):
        (PromptForBugOrTitle.run):

2018-02-06  Youenn Fablet  <youenn@apple.com>

        HasServiceWorkerRegistration bit should be sent when creating a new page
        https://bugs.webkit.org/show_bug.cgi?id=182410

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-02-06  Andres Gomez  <agomez@igalia.com>

        [GTK][WPE] Add dependencies watching lists for WKGTK+ and WPE
        https://bugs.webkit.org/show_bug.cgi?id=182346

        Reviewed by Michael Catanzaro.

        Loren, Carlos and Andres are interested on the WKGTK+ dependencies
        watchlist since they are running WKGTK+ EWS.

        Similarly, Adrian and Carlos are running a WPE EWS.

        * Scripts/webkitpy/common/config/watchlist: Added WPEDependencies
          and WebKitGTKDependencies watchlists with the proper people.

2018-02-06  Andres Gomez  <agomez@igalia.com>

        Unreviewed, canonicalize contributors.json

        After Thibault's addition, automatic checks complain about
        contributors.json with:

        "[...] Use "validate-committer-lists --canonicalize" to reformat
        it. [...]"

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

2018-02-06  Andres Gomez  <agomez@igalia.com>

        Unreviewed, add Lorenzo Tilve to contributors.json

        We need to add Loren to the contributors list in order to CC him
        in Bugzilla.

        * Scripts/webkitpy/common/config/contributors.json: Added Lorenzo
          Tilve.

2018-02-05  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Refine WebKitLegacy and WebKit build for wincairo
        https://bugs.webkit.org/show_bug.cgi?id=182478

        Reviewed by Alex Christensen.

        For TestWebKitAPI, sources related to WebKitLegacy are built
        at WebKit build. Those files should be reffered for WebKitLegacy build.

        * TestWebKitAPI/PlatformWin.cmake:

2018-02-05  Daniel Bates  <dabates@apple.com>

        REGRESSION (r217572): run-webkit-tests exits without emitting newline character
        https://bugs.webkit.org/show_bug.cgi?id=182360

        Rubber-stamped by Aakash Jain.

        Fixes an annoyance where run-webkit-tests always exits without printing a newline character.
        In the terminal this looks like:

            $ Tools/Scripts/run-webkit-tests
            Expected to fail, but passed: (7)
            ...
            Stopping WebSocket server ...$

        This bug was caused by code added in r217572 to stop all run-webkit-tests started servers (e.g. an HTTP
        server) from an at-exit handler. When run-webkit-tests runs successfully (i.e. without error or
        control-C interruption) we would stop all such servers twice: once as part of ending the test
        run and once from the at-exit handler. The latter never prints a trailing newline character hence
        the state of the terminal (as depicted above). Instead LayoutTestRunner.stop_servers() should only
        stop servers that it started in LayoutTestRunner.start_servers().

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__):
        (LayoutTestRunner.start_servers):
        (LayoutTestRunner.stop_servers):
        Only start servers that run-webkit-tests has not already started and only stop servers that
        run-webkit-tests started.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests.test_servers_started.is_websocket_server_running):
        (LayoutTestRunnerTests.test_servers_started):
        (LayoutTestRunnerTests.test_servers_started.is_websocket_servers_running): Deleted.
        Update due to rename below.

        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (is_web_socket_server_running): Added.
        (PyWebSocket.is_running): Deleted.

        * Scripts/webkitpy/port/base.py:
        (Port.is_http_server_running): Check if we already started the server ourself.
        (Port.is_websocket_server_running): Formerly named is_websocket_servers_running. Modified
        to check if we already started the server ourself. Take a similar approach as the other
        Port.is_*_running methods and only check if an existing WebSocket server is running on the
        non-secure server port. This is a simple heuristic and should be sufficient in practice.
        (Port.is_wpt_server_running): Check if we already started the server ourself.
        (Port.is_websocket_servers_running): Deleted; renamed to is_websocket_server_running().

2018-02-05  Daniel Bates  <dabates@apple.com>

        prepare-ChangeLog gets confused about Python docstrings that contain the word "class" or "def"
        https://bugs.webkit.org/show_bug.cgi?id=182405

        Reviewed by David Kilzer.

        String literal statements, including docstrings, do not demarcate a new scope in Python.
        So, do not treat them like they do when building up the list of modified functions.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_python):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests-expected.txt:
        The expected ending line number for the last "pass" statement inside the scope of Class5 changed
        from 97 to 98 because empty lines do not effect scope. This is consistent with the parsing
        of the second "pass" statement in the scope of class Class5. A "pass" is a null operation that
        is used as a syntactic placeholder when a statement is required. Ideally we would make
        the parsing code smarter so as to avoid emitting ranges for "pass" statements that serve
        not syntactic purpose.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/python_unittests.py:
        (Class5):
        (Class6):
        (Class6.__init__):
        (Class7):
        (Class7.__init__):
        (Class8):
        (Class8.__init__):
        Add some more tests.

2018-02-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228086.

        This introduced a failure with API test
        URLTest.HostIsIPAddress.

        Reverted changeset:

        "Add a way to check if a host is an IP address"
        https://bugs.webkit.org/show_bug.cgi?id=182427
        https://trac.webkit.org/changeset/228086

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

        Storage Access API: Add testRunner.getAllStorageAccessEntries() to make testing easier and more explicit
        https://bugs.webkit.org/show_bug.cgi?id=181601
        <rdar://problem/36475837>

        Reviewed by Alex Christensen.

        http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access.html
        was found to be flaky. With the testRunner.hasStorageAccessEntry() getter
        it's possible to check access even if a frame doesn't respond timely to
        postMessage after detach and attach.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStorageAccessAPIEnabled):
            Just moved for source file grouping.
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::callDidReceiveAllStorageAccessEntriesCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::getAllStorageAccessEntries):
            Note that this is just stubbed out, i.e. not implemented.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveAllStorageAccessEntries):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::getAllStorageAccessEntries):
            This is the Cocoa-specific version of this test infrastructure.

2018-02-05  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Enable multi CPU building on MSBuild.
        https://bugs.webkit.org/show_bug.cgi?id=182446

        Compiling itself already uses multi cores, but other stuff is still on single core.
        This patch enables that by passing an argument to MSBuild.exe.

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs):
        (buildVisualStudioProject):

2018-02-05  Alicia Boya García  <aboya@igalia.com>

        Fix bug in MediaTime comparison for negative values with different scale.
        https://bugs.webkit.org/show_bug.cgi?id=182433

        Improved test coverage for MediaTime::compare().

        Reviewed by Xabier Rodriguez-Calvar.

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

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebSockets must use system proxy settings
        https://bugs.webkit.org/show_bug.cgi?id=126384

        Reviewed by Michael Catanzaro.

        Check also WebSockets in /webkit2/WebKitWebContext/proxy.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (ProxyTest::webSocketProxyServerCallback):
        (ProxyTest::ProxyTest):
        (ProxyTest::webSocketConnected):
        (ProxyTest::createWebSocketAndWaitUntilConnected):
        (webSocketServerCallback):
        (testWebContextProxySettings):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::~WebKitTestServer):
        (WebKitTestServer::addWebSocketHandler):
        (WebKitTestServer::removeWebSocketHandler):
        (WebKitTestServer::getWebSocketURIForPath const):
        (WebKitTestServer::getURIForPath const):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h:
        (WebKitTestServer::baseURI const):
        (WebKitTestServer::baseWebSocketURI const):

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a way to check if a host is an IP address
        https://bugs.webkit.org/show_bug.cgi?id=182427

        Reviewed by Alex Christensen.

        Add unit test for URL::hostIsIPAddress().

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

2018-02-03  Charlie Turner  <cturner@igalia.com>

        Add libmount to WPE dependencies
        https://bugs.webkit.org/show_bug.cgi?id=182345

        Reviewed by Michael Catanzaro.

        * wpe/install-dependencies:

2018-02-02  Youenn Fablet  <youenn@apple.com>

        W3C test exporter should allow exporting newly added files
        https://bugs.webkit.org/show_bug.cgi?id=182369

        Reviewed by Ryosuke Niwa.

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

2018-02-02  David Quesada  <david_quesada@apple.com>

        WebAppManifest scope should default to the containing directory of start_url if 'scope' is not specified
        https://bugs.webkit.org/show_bug.cgi?id=182363
        rdar://problem/37093498

        Reviewed by Ryosuke Niwa.

        Updated ApplicationManifestParserTests to account for the new default scope behavior.

        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (assertManifestHasDefaultValues):
        (TEST_F):

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Clearing all service worker registrations should wait for importing service worker registration to finish
        https://bugs.webkit.org/show_bug.cgi?id=182407

        Reviewed by Chris Dumez.

        Make sure we finish clearing service worker registrations before running tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::ClearServiceWorkerRegistrationsCallbackContext::ClearServiceWorkerRegistrationsCallbackContext):
        (WTR::clearServiceWorkerRegistrationsCallback):
        (WTR::TestController::clearServiceWorkerRegistrations):
        * WebKitTestRunner/TestController.h:

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Configure serviceWorkerRegistrationDirectory on the web site data store and move it to a Caches subfolder as a default
        https://bugs.webkit.org/show_bug.cgi?id=182403

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

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

        [GTK] WebDriver: tests step always times out in the bot
        https://bugs.webkit.org/show_bug.cgi?id=182437

        Reviewed by Carlos Alberto Lopez Perez.

        The process itself is not timing out, but the buildbot step is. This is because we are leaking the Xvfb
        processes. We should ensure that only one driver is executed and it's stopped before the process finishes.

        * Scripts/run-webdriver-tests: Call teardown() after run().
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.__init__): Receive the env directly instead of the display driver.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__): Use the driver class directly instead of using the DriverProxy. Get the env from
        the display driver once and pass it to the test runners.
        (WebDriverTestRunner.teardown): Stop the display server.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.__init__): Receive the env directly instead of the display driver.
        (WebDriverTestRunnerSelenium.collect_tests): Pass the env to the executor.
        (WebDriverTestRunnerSelenium.run): Ditto.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.__init__): Receive the env directly instead of the display driver.
        (WebDriverTestRunnerW3C.run): Pass the env to the executor.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__): Receive the env directly instead of the display driver.

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

        Unreviewed, rolling out r227999.

        It didn't fix the problem

        Reverted changeset:

        "Unreviewed. Try to avoid webdriver tests step timing out in
        the bots."
        https://trac.webkit.org/changeset/227999

2018-02-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Start timeout for the run-buildbot-test script is too aggressive
        https://bugs.webkit.org/show_bug.cgi?id=182429

        Reviewed by Carlos Garcia Campos.

        15 seconds is not enough waiting for the update database process
        to complete on a system backed with rotational HDDs. Raise it to 60.

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

2018-02-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        re-add ARM JSCOnly bots on buildbot waterfall
        https://bugs.webkit.org/show_bug.cgi?id=182428

        Reviewed by Csaba Osztrogonác.

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

2018-02-02  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ARM JSCOnly bots from buildbot waterfall
        https://bugs.webkit.org/show_bug.cgi?id=182398

        Reviewed by Alexey Proskuryakov.

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

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

        Unreviewed. Try to avoid webdriver tests step timing out in the bots.

        This is another speculative workaround. Carlos Lopez suggested to use os._exit() instead of sys.exit() as a
        workaround for a bug in python2.7 when using multiprocess module.

        * Scripts/run-webdriver-tests:

2018-02-01  Youenn Fablet  <youenn@apple.com>

        Delay service worker process creation until actually needed by SWServer
        https://bugs.webkit.org/show_bug.cgi?id=182301

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (function):

2018-02-01  Aakash Jain  <aakash_jain@apple.com>

        Bubbles intermittently disappear from bot watchers dashboard
        https://bugs.webkit.org/show_bug.cgi?id=182085

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.failureLogURL): failureLogURL doesn't depend on step in Buildbot 0.9.
        Return the Build Page URL for Buildbot Buildbot 0.9. Earlier code was also doing the same using a
        confusing if (!this._firstFailedStep.logs) statement which is always false for Buildbot 0.9.

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Problem with Washington Post images
        https://bugs.webkit.org/show_bug.cgi?id=181421

        Reviewed by Carlos Alberto Lopez Perez.

        Add test case for the new user agent quirk.

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

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser settings are just a list of names
        https://bugs.webkit.org/show_bug.cgi?id=182005

        Reviewed by Sergio Villar Senin.

        The default size we are using is too small to show the values column, and the window is not resizable because
        GObjectClass::constructed() is not called in the parent class.

        * MiniBrowser/gtk/BrowserSettingsDialog.c:
        (browser_settings_dialog_init): Use 600x400 as default size.
        (browserSettingsDialogConstructed): Chain up to parent constructed.

2018-01-31  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Remove WebInspectorUI watchlist and remove myself from 2 watchlists more

        * Scripts/webkitpy/common/config/watchlist:

2018-01-31  Per Arne Vollan  <pvollan@apple.com>

        Layout Test fast/events/beforeunload-dom-manipulation-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=181204
        <rdar://problem/36256274>

        Reviewed by Ryosuke Niwa.

        Implement 'testRunner.forceImmediateCompletion()' for WK1.

        * DumpRenderTree/TestRunner.cpp:
        (forceImmediateCompletionCallback):
        (TestRunner::staticFunctions):

2018-01-31  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r227942.

        r227875 should not have been rolled out.

        Reverted changeset:

        "Unreviewed, rolling out r227875."
        https://bugs.webkit.org/show_bug.cgi?id=182357
        https://trac.webkit.org/changeset/227942

2018-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

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

        Missing cross-platform TestController implementation

        Reverted changeset:

        "Add callbacks to testRunner.statisticsSetShouldPartitionCookiesForHost() and testRunner.statisticsUpdateCookiePartitioning()"
        https://bugs.webkit.org/show_bug.cgi?id=181958
        https://trac.webkit.org/changeset/227875

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsUpdateCookiePartitioning):
        (WTR::TestRunner::statisticsSetShouldPartitionCookiesForHost):
        (WTR::TestRunner::statisticsCallDidSetPartitionOrBlockCookiesForHostCallback): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didSetPartitionOrBlockCookiesForHost): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::statisticsUpdateCookiePartitioning):
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost):

2018-01-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r227223): http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-one-hour.html, http/tests/resourceLoadStatistics/grandfathering.html timing out on GTK, WPE
        https://bugs.webkit.org/show_bug.cgi?id=182222

        Reviewed by Alex Christensen.

        Use the new API to notify when resource load statistics deletion is complete.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsClearThroughWebsiteDataRemovalCallback):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):

2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Add the support for running StyleBench to run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=182323

        Reviewed by Antti Koivisto.

        Added the plan file and the patch needed to run StyleBench using run-benchmark as of r227863.

        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/StyleBench.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/stylebench.plan: Added.

2018-01-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] API test DataInteractionTests.ExternalSourceDataTransferItemGetFolderAsEntry is failing after an SDK update
        https://bugs.webkit.org/show_bug.cgi?id=182339
        <rdar://problem/36041396>

        Reviewed by Andy Estes.

        This API test wasn't meant to be dependent on the size of an image generated using UIImagePNGRepresentation().
        To make this test robust against changes to image encoding, write the raw data to the test folder instead and
        check against the length of the data written.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (testIconImageData):
        (runTestWithTemporaryFolder):
        (TestWebKitAPI::TEST):

2018-01-31  Dan Bernstein  <mitz@apple.com>

        [macOS] MiniBrowser isn’t app-sandboxed
        https://bugs.webkit.org/show_bug.cgi?id=182147

        Reviewed by Sam Weinig.

        Enable App Sandbox and add a temporary exception allowing read access to all files.

        * MiniBrowser/Configurations/Base.xcconfig: Enabled ad-hoc code signing.
        * MiniBrowser/Configurations/MiniBrowser.xcconfig: Specified the entitlements file to use.
        * MiniBrowser/MiniBrowser.entitlements: Added. Enables App Sandbox with outbound networking
          and read access from /.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Added reference to new file.

2018-01-31  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Add gstreamer-vaapi in moduleset
        https://bugs.webkit.org/show_bug.cgi?id=182283

        Reviewed by Carlos Alberto Lopez Perez.

        GStreamer-VAAPI is required for hardware-accelerated video
        playback support on Intel and AMD (using radeosi driver)
        platforms.

        * gstreamer/jhbuild.modules: Add gstreamer-vaapi.
        * gtk/install-dependencies: Install libva.
        * wpe/install-dependencies: Ditto.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Disable va-api support when
        testing because it's incompatible with Mesa's softGL driver.

2018-01-31  Charlie Turner  <cturner@igalia.com>

        [WPE] Update jhbuild dependencies
        https://bugs.webkit.org/show_bug.cgi?id=182286

        This upgrades the following packages,
        glib 2.44.1 -> 2.54.3
        glib-networking 2.42.0 -> 2.54.1
        libsoup 2.48.0 -> 2.60.3

        The initial reason for performing these upgrades was that when
        visiting https://youtube.com, WPE was getting TLS certificate
        errors. After upgrading glib-networking, these were fixed, but the
        upgrade introduced dependencies on newer versions of the other
        packages upgraded in this commit.

        The upgrade to glib caused a linking error in gstreamer, the
        following errors were being logged during linking,

        //usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0: undefined reference to `hb_glib_script_from_script'
        //usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0: undefined reference to `hb_glib_get_unicode_funcs'
        //usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0: undefined reference to `hb_glib_script_to_script'

        This was fixed by adding the glib package built in the jhbuild to
        harfbuzz.

        Finally, the upgrade of glib caused the glib-warning-fix.patch to
        no longer apply, so this patch was removed.

        Reviewed by Michael Catanzaro.

        * wpe/jhbuild.modules: Added dependecies.
        * wpe/patches/glib-warning-fix.patch: Removed.

2018-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r227782.

        It didn't fix the problem

        Reverted changeset:

        "Unreviewed. Try to avoid webdriver tests step timing out in
        the bots."
        https://trac.webkit.org/changeset/227782

2018-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add domains to server config in w3c tests
        https://bugs.webkit.org/show_bug.cgi?id=182294

        Reviewed by Carlos Alberto Lopez Perez.

        Several cookie tests expect server_config to have a domains key.

        Fixes: imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_domain_cookie
               imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_session_cookie_with_leading_dot_character_in_domain

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__):

2018-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update W3C WebDriver imported tests.

        Show full pytest failure logs.

        pytest truncates long lists when printing a failed assertion.
        This is not great for debugging and arguably it should be the
        default to show the full diff when comparing lists.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (run):

2018-01-30  John Wilander  <wilander@apple.com>

        Add callbacks to testRunner.statisticsSetShouldPartitionCookiesForHost() and testRunner.statisticsUpdateCookiePartitioning()
        https://bugs.webkit.org/show_bug.cgi?id=181958
        https://bugs.webkit.org/show_bug.cgi?id=182072
        <rdar://problem/36801804>
        <rdar://problem/36845795>

        Reviewed by Brent Fulgham.

        Because of the asynchronous nature of XPC and cookies,
        we need callbacks in these TestRunner functions so that
        the layout tests can wait for state changes to finish
        before checking test conditions.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsUpdateCookiePartitioning):
        (WTR::TestRunner::statisticsSetShouldPartitionCookiesForHost):
        (WTR::TestRunner::statisticsCallDidSetPartitionOrBlockCookiesForHostCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didSetPartitionOrBlockCookiesForHost):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::statisticsUpdateCookiePartitioning):
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost):

2018-01-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy] Config file for apache is copied twice.
        https://bugs.webkit.org/show_bug.cgi?id=182131

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._copy_apache_config_file):
        (LayoutTestApacheHttpd._get_apache_config_file_path): Deleted.

2018-01-30  Don Olmstead  <don.olmstead@sony.com>

        JSExports.h should be included as <JavaScriptCore/JSExportMacros.h>
        https://bugs.webkit.org/show_bug.cgi?id=182312

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/config.h:
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2018-01-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] API test UIPasteboardTests.DataTransferGetDataWhenPastingPlatformRepresentations fails after r223440
        https://bugs.webkit.org/show_bug.cgi?id=182307
        <rdar://problem/36041485>

        Reviewed by Ryosuke Niwa.

        Adjusts a failing API test that we forgot to rebaseline after r223440, which ensures that the result of reading
        "text/html" from the DataTransfer is sanitized markup. To do this, teach the test harness
        (dump-datatransfer-types.html) to ignore inline styles in markup if a flag is set, and then set that flag in
        UIPasteboardTests.DataTransferGetDataWhenPastingPlatformRepresentations.

        * TestWebKitAPI/Tests/WebKitCocoa/dump-datatransfer-types.html:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::TEST):

2018-01-30  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][GTK][WPE] Exclude OpenVR from tarballs
        https://bugs.webkit.org/show_bug.cgi?id=182284

        Reviewed by Michael Catanzaro.

        * gtk/manifest.txt.in: Added ThirdParty/openvr to exclusions.
        * wpe/manifest.txt.in: Ditto.

2018-01-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, try to fix JSCOnly build
        https://bugs.webkit.org/show_bug.cgi?id=177202

        * CMakeLists.txt:

2018-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Try to avoid webdriver tests step timing out in the bots.

        The process itself doesn't seem to be timing out, but the buildbot is always reporting the step as finished
        after timeout. I think there's a race condition or something in buildbot, and it keeps watching the json log
        file even when it has already been written. This is a speculative workaround, assuming that's the problem, that
        creates the json file before running the tests. I'll revert this if it doesn't fix the issue in the end.

        * Scripts/run-webdriver-tests:
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.dump_results_to_json_file):

2018-01-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix forwarding header conflict of WebKit on WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=177202

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2018-01-29  Alex Christensen  <achristensen@webkit.org>

        Clean up API after bugs 178240 and 176474
        https://bugs.webkit.org/show_bug.cgi?id=182259

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (-[PinnedStateObserver observeValueForKeyPath:ofObject:change:context:]):

2018-01-29  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a compile-time feature flag
        https://bugs.webkit.org/show_bug.cgi?id=182211
        <rdar://problem/36936365>

        Reviewed by Brent Fulgham.

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

2018-01-29  Brady Eidson  <beidson@apple.com>

        Make the API test added in r227737 be Mac-only.

        Unreviewed gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/MessagePortProviders.mm:

2018-01-29  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r227731.

        This caused and assertion failure in API tests.

        Reverted changeset:

        "Layout Test fast/events/beforeunload-dom-manipulation-
        crash.html is crashing"
        https://bugs.webkit.org/show_bug.cgi?id=181204
        https://trac.webkit.org/changeset/227731

2018-01-29  Youenn Fablet  <youenn@apple.com>

        WPT test exporter should add WebKit export in its PR description
        https://bugs.webkit.org/show_bug.cgi?id=182246

        Reviewed by Chris Dumez.

        Updating PR description body to contain the words 'WebKit export'.
        That way, WPT PR bot will mark the PR as reviewed downstream.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (TestExporter.__init__):
        (TestExporter.make_pull_request):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py:
        (TestExporterTest.test_export):

2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        Add the support for running Speedometer 2.0 to run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=182231

        Reviewed by Antti Koivisto.

        Made it possible to run Speedometer 2.0 using run-benchmark. To do this, this patch adds the ability to
        aggregate results using the differently aggregated values of subtests. In particular, Speedometer 2.0
        requires aggregating the geometric mean out of total time spent in each suite.

        Also added --show-iteration-values to show individual measured values in each iteration.

        * Scripts/webkitpy/benchmark_runner/benchmark_results.py:
        (BenchmarkResults.format): Added show_iteration_values as an option.
        (BenchmarkResults._format_tests): Ditto.
        (BenchmarkResults._format_values): Ditto. Added the code to show the measured values for each iteration
        when show_iteration_values is set to True. We don't emit the unit in each value so that the list of values
        is easily parsable as a JSON array.
        (BenchmarkResults._format_values.format_scaled): Added. A helper function.
        (BenchmarkResults._subtest_values_by_config_iteration): Added the support for aggregating values using
        the aggregated values of a subtest even when they were computed using a different aggregator if the subtest
        had exactly one aggregator.
        (BenchmarkResults._lint_results):
        (BenchmarkResults._lint_subtest_results): Replaced parent_needing_aggregation, which is set to the parent
        test's name only when the parent test had an aggregator, by self-explanatory parent_test and
        parent_aggregator_list.
        (BenchmarkResults._lint_aggregator_list): Ditto. Added raise an exception when a test has an aggregator but
        its subtest doesn't specify the same aggregator or it has more than one aggregators, making it ambiguous.
        (BenchmarkResults._lint_configuration):
        * Scripts/webkitpy/benchmark_runner/benchmark_results_unittest.py:
        (test_format_values_with_no_unit_scaling): Added.
        (test_format_values_with_iteration_values): Added.
        (test_format_values_with_no_unit_scaling_and_iteration_values): Added.
        (test_aggregate_results_from_another_aggregator): Added.
        (test_lint_results): Added a test case.
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__): Added show_iteration_values as an argument.
        (BenchmarkRunner._run_benchmark): Ditto.
        (BenchmarkRunner.show_results): Ditto.
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/Speedometer2.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer2.plan: Added.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args): Added --show-iteration-values as a boolean argument.
        (run_benchmark_plan): Ditto.
        (start): Ditto.
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner.__init__): Ditto.

2018-01-29  Brady Eidson  <beidson@apple.com>

        Make it possible for apps that use both WK1 and WK2 to use MessagePorts.
        https://bugs.webkit.org/show_bug.cgi?id=182229

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MessagePortProviders.mm: Added.

2018-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: properly recover w3c tests after a webdriver server crash
        https://bugs.webkit.org/show_bug.cgi?id=182242

        Reviewed by Carlos Alberto Lopez Perez.

        When a test makes the webdriver server crash, all other subsequent tests fail because they still try to send
        messages to the server, gettin connection refused errors all the time. Selenium tests handle this correctly by
        relaunching the server after every test failure, because other failures, even when not crashing the server,
        might leave it in an bad state. WPT runner does the same for test files, it uses a subprocess to run the tests
        and when any subtest fails, a new subsprocess is used for the following test file. We could do the same.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.run): Restart the executor if any subtest failed.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__): Save timeout and expectations and do not import pytest.
        (WebDriverW3CExecutor.setup): Create a subprocess to run the tests.
        (WebDriverW3CExecutor.teardown): Send a message to the subprocess to terminate.
        (WebDriverW3CExecutor._runner): Run the tests using pytest runner.
        (WebDriverW3CExecutor.run): Send a message to the subprocess to run the given test and return the results message.

2018-01-29  Per Arne Vollan  <pvollan@apple.com>

        Layout Test fast/events/beforeunload-dom-manipulation-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=181204
        <rdar://problem/36256274>

        Reviewed by Ryosuke Niwa.

        Implement 'testRunner.forceImmediateCompletion()' for WK1.

        * DumpRenderTree/TestRunner.cpp:
        (forceImmediateCompletionCallback):
        (TestRunner::staticFunctions):

2018-01-29  Frederic Wang  <fwang@igalia.com>

        Unreviewed, add myself to some watch lists.

        * Scripts/webkitpy/common/config/watchlist:

2018-01-27  Dan Bernstein  <mitz@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        * DumpRenderTree/mac/Configurations/Base.xcconfig:

2018-01-26  Chris Dumez  <cdumez@apple.com>

        Make sure service worker code does not launch a StorageProcess unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=182192
        <rdar://problem/36927427>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-01-26  Chris Dumez  <cdumez@apple.com>

        Offlined content does not work for apps on home screen
        https://bugs.webkit.org/show_bug.cgi?id=182070
        <rdar://problem/36843906>

        Reviewed by Youenn Fablet.

        Add API test coverage to make sure an already registered service worker is able to intercept
        the very first load.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerWithExpectedMessage userContentController:didReceiveScriptMessage:]):

2018-01-26  Chris Nardi  <cnardi@chromium.org>

        Addressing post-review comments after r226614
        https://bugs.webkit.org/show_bug.cgi?id=182151

        Reviewed by Myles C. Maxfield.

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

2018-01-25  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed, rolling out r224920.

        Some Win EWS bots are not coming back up after starting reboot.

        * EWSTools/start-queue-win.sh:

2018-01-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: simplify the tests json report
        https://bugs.webkit.org/show_bug.cgi?id=182171

        Reviewed by Carlos Alberto Lopez Perez.

        We are duplicating the test name in every subtest name. WPT already changed the format to remove the test name
        form the subtest name. We should do the same for simplicity and compatibility with WPT.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.dump_results_to_json_file):

2018-01-25  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r221899): Web Content process hangs when webpage tries to make a new window if the WKWebView doesn’t have a UI delegate
        https://bugs.webkit.org/show_bug.cgi?id=182152

        Reviewed by Joseph Pecoraro.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[NoUIDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2018-01-25  Youenn Fablet  <youenn@apple.com>

        WebPluginInfoProvider should handle null host queries
        https://bugs.webkit.org/show_bug.cgi?id=182112

        Reviewed by Chris Dumez.

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

2018-01-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy] Stop modifying path information only when running on Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=182136

        On LayoutTestApacheHttpd, some path configuration is modified when platform
        is Windows. This modification is only required for AppleWin running on Cygwin.
        WinCairo uses native Windows environment, so the condition should be changed.

        Reviewed by Per Arne Vollan.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        (LayoutTestApacheHttpd._get_apache_config_file_path):

2018-01-25  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r227457): Release assert in updateLayout while destructing a media element
        https://bugs.webkit.org/show_bug.cgi?id=182038
        <rdar://problem/36812083>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        (TestWebKitAPI::TEST): Show/hide page so controls are always updated.

2018-01-24  Daniel Bates  <dabates@apple.com>

        webkit-patch upload emits irrelevant simulator warnings
        https://bugs.webkit.org/show_bug.cgi?id=181702
        <rdar://problem/36556359>

        Reviewed by Aakash Jain.

        Remove warning when a person explicitly passes --child-processes with a value greater than
        the default number of simulator instances webkitpy would have used had --child-processes
        been omitted. Moreover, the placement of the warning logic to support printing such a message
        (in the IOSSimulatorPort constructor) caused side effects that may print other warning messages.

        By default, webkitpy will parallelize running tests using the maximum number of simulator
        instances that can be supported based on available system resources at the time run-webkit-tests
        is invoked. It seems reasonable to assume that a person that explicitly overrides this default
        by specifying --child-processes knows what they are doing. The effects of picking a large
        value be obvious, the system may become sluggish.

        As a side benefit of this change we no longer will emit simulator warnings whenever the iOS
        simulator port is instantiated by non-layout test related code (e.g. check-webkit-style).

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.__init__):

2018-01-25  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][GTK][WPE] Remove the WebVR public API added in r227518
        https://bugs.webkit.org/show_bug.cgi?id=182102

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (main): Removed the call to set_enable_webvr().

2018-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for slow tests
        https://bugs.webkit.org/show_bug.cgi?id=182095

        Reviewed by Carlos Alberto Lopez Perez.

        Add timeout mark to slow tests.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (TestExpectationsMarker.__init__): Save the timeout.
        (TestExpectationsMarker.pytest_collection_modifyitems): If test is slow use timeout * 5.
        (run): Pass timeout to TestExpectationsMarker constructor.

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Gracefully recover from NetworkProcess crashes in private browsing
        https://bugs.webkit.org/show_bug.cgi?id=182073
        <rdar://problem/36572023>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcessCrashNonPersistentDataStore.mm: Added.
        (-[CrashDelegate webView:didFinishNavigation:]):
        (-[CrashDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[CrashDelegate webView:didFailNavigation:withError:]):
        (TEST):

2018-01-24  Ali Juma  <ajuma@chromium.org>

        REGRESSION (r227430): ASSERTION FAILED: !self.zoomToScaleCompletionHandler in TestRunnerWKWebView::zoomToScale
        https://bugs.webkit.org/show_bug.cgi?id=182052

        Reviewed by Simon Fraser.

        Don't set zoomToScaleCompletionHandler in zoomToScale:animated when calling the completion handler
        immediately.

        Test: fast/visual-viewport/viewport-dimensions.html

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView zoomToScale:animated:completionHandler:]):

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove pre-Sierra-OS-specific code in Tools
        https://bugs.webkit.org/show_bug.cgi?id=182034

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        (-[BrowserWindowController share:]):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm:
        (-[EventStreamPlayer playbackTimerFired:]):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FontCache.cpp: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/RunOpenPanel.mm:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2018-01-24  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r226485): Many new wasm leaks detected by the leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=181400
        <rdar://problem/36358768>

        Reviewed by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove incorrect option.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: (_set_up_derived_options):
        Always disable poisoning when running with --leaks, as this should work locally,
        not just on bots.

2018-01-24  Daniel Bates  <dabates@apple.com>

        REGRESSION (r226138): Selecting a line that ends with zero-width joiner (ZWJ) may cause text transformation
        https://bugs.webkit.org/show_bug.cgi?id=181993
        <rdar://problem/36421080>

        Reviewed by David Hyatt.

        Remove unit test for overlap strategy FrontmostWithLongestEffectiveRange
        as we no longer support this strategy.

        * TestWebKitAPI/Tests/WebCore/MarkerSubrange.cpp:

2018-01-24  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style reports false-positive whitespace/braces warning about blocks with return types as arguments in Objective-C
        <https://webkit.org/b/182015>
        <rdar://problem/36449728>

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (regex_for_lambdas_and_blocks): Update regex to include
        optional return type for block argument in Objective-C.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_braces): Add test.

2018-01-24  Ms2ger  <Ms2ger@igalia.com>

        WPE-focused test gardening.
        https://bugs.webkit.org/show_bug.cgi?id=182051

        Unreviewed test gardening.

        * TestWebKitAPI/glib/TestExpectations.json: TestWebKitFindController failure was fixed in r227418.

2018-01-23  Mark Lam  <mark.lam@apple.com>

        Update Poisoned pointers to take a Poison class instead of a uintptr_t&.
        https://bugs.webkit.org/show_bug.cgi?id=182017
        <rdar://problem/36795513>

        Reviewed by Filip Pizlo and JF Bastien.

        * TestWebKitAPI/Tests/WTF/Poisoned.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::passWithRef):
        * TestWebKitAPI/Tests/WTF/PoisonedRefPtr.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::f1):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::poisonedPtrFoo):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp:
        (TestWebKitAPI::TEST):

2018-01-18  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Add OpenVR to the tree and to the build
        https://bugs.webkit.org/show_bug.cgi?id=177298

        Reviewed by Žan Doberšek.

        * Scripts/webkitpy/style/checker.py: Added openvr to the list of third party libraries
        with reduced style checks.

2018-01-24  Chris Nardi  <cnardi@chromium.org>

        Add Chris Nardi to contributors list
        https://bugs.webkit.org/show_bug.cgi?id=182029

        Reviewed by Antti Koivisto.

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

2018-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Mac Sierra perf bots have been failing due to CG errors
        https://bugs.webkit.org/show_bug.cgi?id=181955

        Reviewed by Antti Koivisto.

        Ignore the CoreGraphics error messages on macOS Sierra.

        Also added tests for ignoring lines in stdout and stderr.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest.run_failed): Refactored for clarity.
        (PerfTest):
        (PerfTest.filter_ignored_lines): Added.
        (PerfTest._lines_to_ignore): Renamed from _lines_to_ignore_in_parser_result since these regular expressions
        are now used to ignore lines in other kinds of tests than parser tests.
        (PerfTest._errors_to_ignore_in_sierra): Added.
        (PerfTest._filter_output): Added the code to ignore errors only on macOS Sierra.
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (test_parse_output_with_ignored_stdout): Added.
        (test_parse_output_with_ignored_stderr): Added.
        (test_parse_output_with_ignored_stderr.MockPortWithSierraName): Added.

2018-01-23  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView hasActiveNowPlayingSession]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/large-video-test-now-playing.html:

2018-01-23  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [WinCairo] Use 64-bit toolset
        https://bugs.webkit.org/show_bug.cgi?id=181979

        Reviewed by Alex Christensen.

        Use 64-bit toolset for 64-bit build in order to improve build time. 

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2018-01-23  Simon Fraser  <simon.fraser@apple.com>

        Element with position:fixed stops scrolling at the bottom of the page, but is painted in the right place on Chacos.com.
        https://bugs.webkit.org/show_bug.cgi?id=181741
        rdar://problem/36593581

        Reviewed by Tim Horton.
        
        If zoomToScale:animated: is called with the current zoom level, call the callback
        rather than doing nothing.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView zoomToScale:animated:completionHandler:]):

2018-01-23  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Add ignore_errors keyword argument to Executive.run_command() for replacing the common pattern of error_handler usage
        https://bugs.webkit.org/show_bug.cgi?id=180820

        Reviewed by David Kilzer.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.in_working_directory):
        (Git.clone):
        (Git.read_git_config):
        (Git.apply_reverse_diff):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.run):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVNRepository.has_authorization_for_realm):
        * Scripts/webkitpy/common/net/credentials_unittest.py:
        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive.run_command):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_process.is):
        (Executive.running_pids):
        (Executive.kill_all):
        (Executive.run_command):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.run_command):
        (MockExecutive2.run_command):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.test_run_command_with_bad_command.run_bad_command):
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.xcode_sdk_version):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._check_and_kill):
        * Scripts/webkitpy/port/base.py:
        (Port._symbols_string):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/win.py:
        (WinPort._runtime_feature_list):
        (WinPort.read_registry_value):
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_runtime_feature_list):
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        * Scripts/webkitpy/tool/commands/analyzechangelog_unittest.py:

2018-01-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r227279 and r227373.
        https://bugs.webkit.org/show_bug.cgi?id=181988

        The LayoutTest crash fix introduced an API test failure.
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Resign NowPlaying status when no media element is eligible"
        https://bugs.webkit.org/show_bug.cgi?id=181914
        https://trac.webkit.org/changeset/227279

        "Resign NowPlaying status when no media element is eligible"
        https://bugs.webkit.org/show_bug.cgi?id=181914
        https://trac.webkit.org/changeset/227373

2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add test case for slow in test_expectations.py.

        I forgot to also check slow tests in test_expectations.py unit tests.

        * Scripts/webkitpy/common/test_expectations_unittest.py:
        (assert_slow):
        (test_build_type):
        (test_slow):

2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Mark test WTF_Lock.ManyContendedShortSections as slow.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Blob conversion and sanitization doesn't work with Microsoft Word for Mac 2011
        https://bugs.webkit.org/show_bug.cgi?id=181616
        <rdar://problem/36484908>

        Reviewed by Wenson Hsieh.

        Added tests to make sure we sanitize plain HTML, not just web archives,
        when and only when custom pasteboard data is enabled.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm: Added.
        (writeHTMLToPasteboard): Added.
        (createWebViewWithCustomPasteboardDataSetting): Added.

2018-01-22  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r226485): Many new wasm leaks detected by the leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=181400
        rdar://problem/36358768

        Reviewed by JF Bastien.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Disable poisoning on the leaks bot.

2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit/WebKitWebsiteData/resource-load-statistics is failing since r227223
        https://bugs.webkit.org/show_bug.cgi?id=181929

        Reviewed by Michael Catanzaro.

        The test is checking that the resource load stats file is deleted after clearing website data. Since r227223,
        the website data completion callback is not called immediately, and a new file is created when the operation
        finishes. We need to check that the file was removing after calling clear.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (fileChangedCallback):
        (testWebsiteDataResourceLoadStatistics):

2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed GTK gardening. Mark /webkit/WebKitWebView/mouse-target as fail too.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed GTK+ gardening. Fix /webkit/WebKitConsoleMessage/network-error.

        Partially revert r226782, the fix was wrong for the GLib version we currently use.

        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
        (testWebKitConsoleMessageNetworkError):

2018-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Remove unused verbose mode from GLib API tests runner.

        * glib/api_test_runner.py:
        (add_options):

2018-01-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new feature flag for EXTRA_ZOOM_MODE and reintroduce AdditionalFeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=181918

        Reviewed by Tim Horton.

        Add EXTRA_ZOOM_MODE to FeatureDefines.xconfig (off by default).

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-01-21  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView hasActiveNowPlayingSession]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/large-video-test-now-playing.html:

2018-01-21  Aakash Jain  <aakash_jain@apple.com>

        Fix broken unit-tests after r227192
        https://bugs.webkit.org/show_bug.cgi?id=181909

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2018-01-20  Chris Dumez  <cdumez@apple.com>

        API test URLSchemeHandler.Leaks1 is timing out on iOS simulator debug
        https://bugs.webkit.org/show_bug.cgi?id=174984
        <rdar://problem/33665676>

        Reviewed by Alexey Proskuryakov.

        Disable URLSchemeHandler.Leaks1 API test on iOS as it sometimes times out.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        (TEST):

2018-01-20  Brian Burg  <bburg@apple.com>

        WebDriver: fix some nits that prevent running W3C tests on Mac
        https://bugs.webkit.org/show_bug.cgi?id=181864

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer.__init__): _wsout needs to always be defined,
        as we assume that the property exists later.

        (WebDriverW3CWebServer.stop): If the temporary file doesn't
        exist for some reason, the remove call will raise and exception.
        Gracefully handle the case where the file isn't created due to
        a problem/exception that happened elsewhere.

2018-01-19  Ling Ho  <lingcherd_ho@apple.com>

        Move Bingdings EWS and Webkitpy EWS queues to High Sierra on buildbot dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=181881

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.mac-os-x-elcapitan img.logo): Deleted.

2018-01-19  Youenn Fablet  <youenn@apple.com>

        Do not go to the storage process when registering a service worker client if there is no service worker registered
        https://bugs.webkit.org/show_bug.cgi?id=181740
        <rdar://problem/36650400>

        Reviewed by Chris Dumez.

        Add support for internals inside API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/InjectInternals_Bundle.cpp: Added.
        (TestWebKitAPI::InternalsInjectedBundleTest::InternalsInjectedBundleTest):
        (TestWebKitAPI::InternalsInjectedBundleTest::initialize):
        (TestWebKitAPI::InternalsInjectedBundleTest::didCreatePage):
        (TestWebKitAPI::InternalsInjectedBundleTest::didClearWindowForFrame):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (setConfigurationInjectedBundlePath):
        (-[RegularPageMessageHandler userContentController:didReceiveScriptMessage:]):

2018-01-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Implement callback support for removal of WebsiteDataType::ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=181822
        https://bugs.webkit.org/show_bug.cgi?id=175263
        https://bugs.webkit.org/show_bug.cgi?id=178536
        https://bugs.webkit.org/show_bug.cgi?id=181223
        https://bugs.webkit.org/show_bug.cgi?id=181482
        <rdar://problem/33491222>
        <rdar://problem/33805293>
        <rdar://problem/36332683>
        <rdar://problem/36549026>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):

2018-01-19  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests fails when there is a curly brace in Xcode build output
        https://bugs.webkit.org/show_bug.cgi?id=181254
        <rdar://problem/36453374>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/base.py:
        (Port._run_script): Encode script output before logging it.

2018-01-19  Chris Dumez  <cdumez@apple.com>

        Service worker registrations restored from disk may not be reused when the JS calls register() again
        https://bugs.webkit.org/show_bug.cgi?id=181810
        <rdar://problem/36591711>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForRestoreFromDiskTest initWithExpectedMessage:]):
        (-[SWMessageHandlerForRestoreFromDiskTest userContentController:didReceiveScriptMessage:]):

2018-01-19  Ryan Haddad  <ryanhaddad@apple.com>

        Remove El Capitan queues from flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=181860

        Reviewed by Aakash Jain.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

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

2018-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: driver environment not passed to pytest when running w3c tests
        https://bugs.webkit.org/show_bug.cgi?id=181852

        Reviewed by Carlos Alberto Lopez Perez.

        That's why color codes are not used in the bots log for selenium tests but they appear in w3c tests.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.run):

2018-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: wayland display no used in wayland bot
        https://bugs.webkit.org/show_bug.cgi?id=181851

        Reviewed by Carlos Alberto Lopez Perez.

        We need to handle the additionalArguments property in the WebDriverTests step.

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

2018-01-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] TERM environment variable is not passed to the test driver.
        https://bugs.webkit.org/show_bug.cgi?id=181847

        Rubber-stamped by by Carlos Garcia Campos.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server):

2018-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: run-webdriver-tests is crashing in the bots when creating results json file
        https://bugs.webkit.org/show_bug.cgi?id=181844

        Reviewed by Carlos Alberto Lopez Perez.

        We always try to create the directory where to store the json file, but when the filename is given directly,
        like in the bots, the current dir is used.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.dump_results_to_json_file): Do not try to create the directory if dirname() returns an
        empty string.

2018-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver tests are running outside the jhbuild env
        https://bugs.webkit.org/show_bug.cgi?id=181842

        Reviewed by Žan Doberšek.

        We need to enter jhbuild env in run-webdriver-tests.

        * Scripts/run-webdriver-tests:

2018-01-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Run WebDriver tests in the bots
        https://bugs.webkit.org/show_bug.cgi?id=181787

        Reviewed by Michael Catanzaro.

        Add a step to run WebDriver tests in the GTK test bots. The new step is not GTK specific, but only added to the
        factory for the GTK port for now.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (TestFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (RunWebDriverTests):
        (RunWebDriverTests.start):
        (RunWebDriverTests.commandComplete):
        (RunWebDriverTests.evaluateCommand):
        (RunWebDriverTests.getText):
        (RunWebDriverTests.getText2):

2018-01-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Pass correct url for http test to test driver.
        https://bugs.webkit.org/show_bug.cgi?id=181814

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/port/driver.py:
        (Driver):
        (Driver.http_test_path_to_uri):
        (Driver.is_secure_path):
        (Driver.http_base_url):
        (Driver.uri_to_test):

2018-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, update the triggerable name for 'sierra-release-perf-tests'

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

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Updated.
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig: Ditto.
        * ImageDiff/cg/Configurations/Base.xcconfig: Ditto.
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig: Ditto.
        * MiniBrowser/Configurations/Base.xcconfig: Ditto.
        * MiniBrowser/Configurations/DebugRelease.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Adopted macOSTargetConditionals
          helpers.
        * TestWebKitAPI/Configurations/macOSTargetConditionals.xcconfig: Added. Defines helper build
          settings useful for defining settings that depend on the target macOS version.
        * WebKitTestRunner/Configurations/Base.xcconfig: Updated.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig: Updated.

2018-01-18  Ling Ho  <lingcherd_ho@apple.com>

        Remove Opensource El Capitan queues from buildbot
        https://bugs.webkit.org/show_bug.cgi?id=181712

        Reviewed by Aakash Jain.

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

2018-01-18  Chris Dumez  <cdumez@apple.com>

        Service Workers restored from persistent storage have 'redundant' state
        https://bugs.webkit.org/show_bug.cgi?id=181749
        <rdar://problem/36556486>

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForFetchTest userContentController:didReceiveScriptMessage:]):

2018-01-18  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] AX: Two layout tests crash with error 'g_strstr_len: assertion 'haystack != NULL' failed' in Accessibility::UIElement::url
        https://bugs.webkit.org/show_bug.cgi?id=176796

        Reviewed by Chris Fleizach.

        Add sanity check that we have a URL before calling g_strstr_len().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::url):

2018-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Add triggers for Sierra test262 and perf queues
        https://bugs.webkit.org/show_bug.cgi?id=181799

        Reviewed by Aakash Jain.

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

2018-01-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Specify -[NSURL _title] for the associated URL when copying an image element
        https://bugs.webkit.org/show_bug.cgi?id=181783
        <rdar://problem/35785445>

        Reviewed by Ryosuke Niwa.

        Augments an existing API test and adds a new test to make sure that the resulting NSItemProvider's NSURL when
        copying an image contains a relevant title.

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: ignore the driver in selenium test names when getting expectations
        https://bugs.webkit.org/show_bug.cgi?id=181738

        Reviewed by Carlos Alberto Lopez Perez.

        In selenium tests, the driver is added as a parameter to every test which results in tests names like
        foo[DriverName] or foo[DriverName-param2] in case of tests using more parameters. We don't want to include the
        driver name in the test expectations file, so we need to remove it when querying the expectations.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (TestExpectationsMarker.__init__): Save the param to ignore.
        (TestExpectationsMarker._item_name): Return the name of the test without the para to ignore.
        (TestExpectationsMarker.pytest_collection_modifyitems): Use _item_name().
        (run): Pass param to ignore to TestExpectationsMarker().
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.__init__): Save the driver name.
        (WebDriverSeleniumExecutor.run): Pass the driver name as param to ignore.

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Show unit tests unexpectedly passing in the bots
        https://bugs.webkit.org/show_bug.cgi?id=181726

        Reviewed by Michael Catanzaro.

        Now that we have the info, let's show it also in the bots.

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

2018-01-17  Ling Ho  <lingcherd_ho@apple.com>

        Fix broken unittest after r227048
        https://bugs.webkit.org/show_bug.cgi?id=181760

        Reviewed by Aakash Jain.


2018-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        WEBKIT_FRAMEWORK should not modify file-global include directories
        https://bugs.webkit.org/show_bug.cgi?id=181656

        Reviewed by Konstantin Tokarev.

        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/glib/CMakeLists.txt:

2018-01-17  Alicia Boya García  <aboya@igalia.com>

        Unreviewed, mark Alicia as committer in contributors.json

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

2018-01-17  Youenn Fablet  <youenn@apple.com>

        Put fetch Request.keepalive behind a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=181592

        Reviewed by Chris Dumez.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add injected bundle SPI to replace subresource URLs when dropping or pasting rich content
        https://bugs.webkit.org/show_bug.cgi?id=181637
        <rdar://problem/36508471>

        Reviewed by Tim Horton.

        Add 2 new API tests to exercise injected bundle SPI for supplying replacement URLs when pasting an image, and an
        attributed string containing multiple NSTextAttachments. See WebKit and WebCore ChangeLogs for more detail.

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

        Implement the new Objective-C bundle SPI to look up the incoming MIME type in the dictionary supplied via the
        "MIMETypeToReplacementURLMap" bundle initialization parameter, and return it.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (webViewForTestingAttachments):
        (-[TestWKWebView tagsInBody]):
        (-[TestWKWebView expectElementTagsInOrder:]):
        (-[TestWKWebView expectElementTag:toComeBefore:]):

        Add a test helper to check that the given list of element tags appears in the document body. Also, reimplement
        the existing -expectElementTag:toComeBefore: as a special case of -expectElementTagsInOrder:.

        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for test expectations
        https://bugs.webkit.org/show_bug.cgi?id=180420

        Reviewed by Carlos Alberto Lopez Perez.

        Add support for parsing test expectations from a JSON file and mark tests on collection accordingly.

        * Scripts/run-webdriver-tests: Get the retval from process_results().
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pytest): Install also py because pytest needs it.
        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (TestExpectationsMarker): Plugin to mark tests based on given expectations.
        (TestExpectationsMarker.__init__): Initialize expectations.
        (TestExpectationsMarker.pytest_collection_modifyitems): Mark tests if needed,
        (run): Create and use TestExpectationsMarker plugin.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.run): Pass expectations to pytest_runner.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__): Create a TestExpectations and pass it to the runners.
        (WebDriverTestRunner.run): Do not count results here.
        (WebDriverTestRunner.process_results): Rename print_results() as process_results() since it now returns the
        amount of failures. Printing the test summary while processing results will be made optional in a follow up
        patch.
        (WebDriverTestRunner.process_results.report): Return the amount of failures.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.__init__): Initialize _expectations.
        (WebDriverTestRunnerSelenium.collect_tests): Do not include skipped tests.
        (WebDriverTestRunnerSelenium.run): Stop returning the tests count.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.__init__): Initialize _expectations.
        (WebDriverTestRunnerW3C.collect_tests): Do not include skipped tests.
        (WebDriverTestRunnerW3C._scan_directory): Ditto.
        (WebDriverTestRunnerW3C.run): Stop returning the tests count.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.run): Pass expectations to pytest_runner.

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed WPE gardening. Mark some known unit test failures.

        * TestWebKitAPI/glib/TestExpectations.json:

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Use the same subtest names in GTK and WPE unit tests
        https://bugs.webkit.org/show_bug.cgi?id=181724

        Reviewed by Philippe Normand.

        We currently use /webkit2/foo/bar for GTK and /wpe/foo/bar for WPE. Many of the tests are common, so there's no
        reason to use different names. This way we can refer to the same test names for both and we can share the
        expectations in the TestExpectations.json file.

        * TestWebKitAPI/glib/TestExpectations.json:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h: Use /webkit/foo/bar in GTK and WPE.

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Increase the slow timeout of GTK and WPE unit tests.

        We are using now a lower default timeout, so multiplying by 5 is no longer enough for some of the WTF
        tests. Multiply by 10 so that we get the same slow timeout as before, 50.

        * glib/api_test_runner.py:
        (TestRunner._run_test_glib):
        (TestRunner._run_google_test):

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
        https://bugs.webkit.org/show_bug.cgi?id=179914

        Reviewed by Žan Doberšek.

        Add two scripts to be run by dist-check step when releasing. One is to detect symbols duplicated in
        libjavascriptcoregtk and libwebkit2gtk that should be included to the version script. The other one is to ensure
        all symbols listed in the script are present in the library.

        * Scripts/check-for-global-bss-symbols-in-webkigtk-libs: Added.
        (bss_symbols):
        * Scripts/check-for-invalid-symbols-in-version-script: Added.
        (script_symbols):
        * Scripts/make-dist:
        (Distcheck.build):
        (Distcheck):
        (Distcheck.check_symbols):
        (Distcheck.check):

2018-01-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Propagate the parameters when restarting glib api tests after a crash
        https://bugs.webkit.org/show_bug.cgi?id=181722

        Reviewed by Žan Doberšek.

        I forgot to pass the parameters to run() when restarting.

        * glib/glib_test_runner.py:
        (GLibTestRunner.run):

2018-01-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Remove WebCoreDerivedSources library target
        https://bugs.webkit.org/show_bug.cgi?id=181664

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformWPE.cmake: Do not link WebCoreDerivedSources.
        * TestWebKitAPI/PlatformWin.cmake: Ditto.

2018-01-16  Ling Ho  <lingcherd_ho@apple.com>

        Move Debug Test262, Release Test262 and Performance queues to Sierra
        https://bugs.webkit.org/show_bug.cgi?id=181692

        Unreviewed

2018-01-16  Zach Li  <zachli@apple.com>

        Add pop-up policy support in website policies.
        https://bugs.webkit.org/show_bug.cgi?id=181544.
        rdar://problem/30521400.

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Added pop-up-check.html.

        * TestWebKitAPI/Tests/WebKit/pop-up-check.html: Added.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[PopUpPoliciesDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[PopUpPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[PopUpPoliciesDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2018-01-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Provide the `src` of an attachment to the UI delegate when an attachment is inserted
        https://bugs.webkit.org/show_bug.cgi?id=181638
        <rdar://problem/36508702>

        Reviewed by Dan Bernstein.

        Tweak an existing API test to check that the `src` of an attachment element inserted via script matches the
        `source` provided to the UI delegate via -[WKUIDelegate _webView:didInsertAttachment:withSource:].

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[AttachmentUpdateObserver init]):
        (-[AttachmentUpdateObserver sourceForIdentifier:]):
        (-[AttachmentUpdateObserver _webView:didInsertAttachment:withSource:]):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::expectSourceForIdentifier):
        (TestWebKitAPI::TEST):
        (-[AttachmentUpdateObserver _webView:didInsertAttachment:]): Deleted.

2018-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK unit tests execution in the bots after r226967.

        I forgot to pass the environment to the GLibTestRunner and Xvfb was not used in the bots.

        * glib/api_test_runner.py:
        (TestRunner._run_test_glib): Pass env to GLibTestRunner.
        * glib/glib_test_runner.py:
        (GLibTestRunner.run): Use given env.

2018-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Stop passing --verbose to run-api-tests from the bots
        https://bugs.webkit.org/show_bug.cgi?id=181676

        Reviewed by Carlos Alberto Lopez Perez.

        The option was removed in r226967.

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

2018-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Temporarily bring back --verbose option of api_test_runner.py.

        The bots are still passing that option and the step is failing because it was removed in r226967.

        * glib/api_test_runner.py:
        (add_options):

2018-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Improve the way glib tests are run
        https://bugs.webkit.org/show_bug.cgi?id=181674

        Reviewed by Žan Doberšek.

        Stop using gtester external program and use our own tester from python directly. This way we no longer need to
        parse the tests output to get the results which is causing problems in WPE bot. We can now differentiate between
        tests failing due to an expected assert in the test and unexpected crashes.
        This also fixes a bug in previous code where we failed to properly detect tests timing out, because gtester was
        not showing the subtest name in stdout in case of timeouts.
        I've lowered the default timeout from 10 to 5, since we are now properly handling the timeout for every test
        case. I've also removed the verbose option, since it was only used by gtester and we now always show the result
        of every test case.

        * glib/api_test_runner.py:
        (TestRunner._run_test_glib): Use GLibTestRunner.
        (TestRunner._run_google_test): Wrote tests timing out to stdout too.
        (add_options):
        * glib/glib_test_runner.py: Added.
        (TestTimeout):
        (Message):
        (Message.__init__):
        (Message.create):
        (Message.create.read_unsigned):
        (Message.create.read_double):
        (Message.create.read_string):
        (GLibTestRunner):
        (GLibTestRunner.__init__):
        (GLibTestRunner._process_data):
        (GLibTestRunner._process_message):
        (GLibTestRunner._read_from_pipe):
        (GLibTestRunner._read_from_stderr):
        (GLibTestRunner._start_timeout):
        (GLibTestRunner._start_timeout._alarm_handler):
        (GLibTestRunner._stop_timeout):
        (GLibTestRunner._subtest_start):
        (GLibTestRunner._subtest_message):
        (GLibTestRunner._subtest_stderr):
        (GLibTestRunner._subtest_end):
        (GLibTestRunner.run):

2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, add Thibault to contributors.json

        It's a bit weird to add someone here before their first contribution, but this affects
        Bugzilla autocomplete, and that is serious business.

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

2018-01-15  JF Bastien  <jfbastien@apple.com>

        Remove makePoisonedUnique
        https://bugs.webkit.org/show_bug.cgi?id=181630
        <rdar://problem/36498623>

        Reviewed by Mark Lam.

        Update tests.

        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp:
        (TestWebKitAPI::TEST):

2018-01-15  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][JHBuild] Tools/gtk/install-dependencies: Package libxfont does not exist anymore in Arch Linux
        https://bugs.webkit.org/show_bug.cgi?id=181476

        Reviewed by Michael Catanzaro.

        Update to xorg-server 1.19.6 which depends on libxfont2, and change
        the lists of packages to install libxfont2-devel (or equivalent).

        * gtk/install-dependencies:
        * gtk/jhbuild.modules:

2018-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add support for unit test expectations
        https://bugs.webkit.org/show_bug.cgi?id=181589

        Reviewed by Michael Catanzaro.

        We currently have a way to skip tests by annotating them in the api test runner script. The main problem of this
        approach is that we skip tests when they fail in the bots and we never notice if they stop failing, keeping the
        tests skipped forever. This is indeed the case of several WebKit2 C API tests. Annotating skipped tests in the
        script itself is not a good idea either.

        This patch adds a generic TestExpectations class for simple tests based on tests with subtests, like our unit
        tests, but also WebDriver tests. It parses a json file with the tests and subtests expectations and provides
        convenient methods to query them.

        * Scripts/run-gtk-tests:
        (GtkTestRunner): Remove all Skipped and Slow tests marked here.
        * Scripts/run-wpe-tests:
        (WPETestRunner): Ditto.
        * Scripts/webkitpy/common/test_expectations.py: Added.
        (TestExpectations):
        (TestExpectations.__init__):
        (TestExpectations._port_name_for_expected):
        (TestExpectations._expected_value):
        (TestExpectations.skipped_tests):
        (TestExpectations.skipped_subtests):
        (TestExpectations._expectation_value):
        (TestExpectations.is_slow):
        (TestExpectations.get_expectation):
        * Scripts/webkitpy/common/test_expectations_unittest.py: Added.
        (MockTestExpectations):
        (MockTestExpectations.__init__):
        (MockTestExpectations.is_skip):
        (ExpectationsTest):
        (assert_exp):
        (assert_not_exp):
        (assert_bad_exp):
        (assert_skip):
        (test_basic):
        (test_skip):
        (test_flaky):
        (test_build_type):
        * TestWebKitAPI/glib/TestExpectations.json: Added.
        * glib/api_test_runner.py:
        (TestRunner): Remove SkippedTest implementation.
        (TestRunner.__init__): Create a TestExpectations.
        (TestRunner._test_cases_to_skip): Use TestExpectations to check skipped tests.
        (TestRunner._should_run_test_program): Ditto.
        (TestRunner._run_test_glib): Use TestExpectations to check if test suite is slow.
        (TestRunner._run_test_glib.parse_line.set_test_result): Register also tests passing.
        (TestRunner._run_google_test): Use TestExpectations to check if test cases is slow and register tests passing.
        (TestRunner.run_tests): Check if actual result is the expected one and register also unexpected passes.
        (TestRunner.run_tests.report): Helper to write report to stdout.

2018-01-13  Mark Lam  <mark.lam@apple.com>

        Replace all use of ConstExprPoisoned with Poisoned.
        https://bugs.webkit.org/show_bug.cgi?id=181542
        <rdar://problem/36442138>

        Reviewed by JF Bastien.

        1. Converted tests to using new uintptr_t& poison type.
        2. Added tests for Poisoned comparison operators.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ConstExprPoisoned.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::initializeTestPoison): Deleted.
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::passWithRef):
        * TestWebKitAPI/Tests/WTF/PoisonedRefPtr.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::f1):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::poisonedPtrFoo):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp:
        (TestWebKitAPI::TEST):

2018-01-13  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: false positive for [whitespace/braces] with os_log format string
        <https://webkit.org/b/181606>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing): Modify regular expression to ignore
        os_log format strings like '%{public}'.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_before_braces): Add os_log
        format string test.

2018-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] API tests ChangeAttachmentDataUpdatesWithInPlaceDisplay and InPlaceVideoAttachmentInsertionWithinList are failing
        https://bugs.webkit.org/show_bug.cgi?id=181626

        Reviewed by Joseph Pecoraro.

        Make the web view for WKAttachmentTests slightly bigger to avoid size clamping behavior introduced in r226915.
        Additionally, write a new API test covering the change in r226915.

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

2018-01-12  Alex Christensen  <achristensen@webkit.org>

        History state should be updated during client redirects with asynchronous policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=181358
        <rdar://problem/35547689>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit/WKBackForwardList.mm:
        (-[AsyncPolicyDecisionDelegate webView:didFinishNavigation:]):
        (-[AsyncPolicyDecisionDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2018-01-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Refactor simulator code (Part 4)
        https://bugs.webkit.org/show_bug.cgi?id=180555
        <rdar://problem/36131381>

        Reviewed by Aakash Jain.

        Move new_simulated_device.py to simulated_device.py.

        * Scripts/webkitpy/port/ios_simulator.py: Update import statement.
        * Scripts/webkitpy/xcode/new_simulated_device.py: Removed.
        * Scripts/webkitpy/xcode/new_simulated_device_unittest.py: Removed.
        * Scripts/webkitpy/xcode/simulated_device.py: Copied from Tools/Scripts/webkitpy/xcode/new_simulated_device.py.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py: Copied from Tools/Scripts/webkitpy/xcode/new_simulated_device_unittest.py.

2018-01-12  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r226818): API test WebKitLegacy.LoadInvalidURLRequest is failing
        https://bugs.webkit.org/show_bug.cgi?id=181595

        This test was testing behavior of an invalid URL that WebCore parses but NSURL does not.
        It was using example.com<> but after r226479 < and > are considered invalid by WebCore.
        I change the < and > to $ to make this test pass and continue to test what it used to.

        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.html:
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):

2018-01-11  Keith Miller  <keith_miller@apple.com>

        Rename ENABLE_ASYNC_ITERATION to ENABLE_JS_ASYNC_ITERATION
        https://bugs.webkit.org/show_bug.cgi?id=181573

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-01-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import a CBOR coder from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=181522
        <rdar://problem/36055729>

        Reviewed by Brent Fulgham.

        This patch also imports all unit tests into our API tests to ensure all
        workarounds and modification against the original codebase doesn't change
        any original functionalities.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CBORWriterTest.cpp: Added.
        (TestWebKitAPI::eq):
        Workarounds applied.
        (TestWebKitAPI::TEST):

2018-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use partially disambiguated type in SimulatedDeviceManager._disambiguate_device_type
        https://bugs.webkit.org/show_bug.cgi?id=181538
        <rdar://problem/36440580>

        Reviewed by Aakash Jain.

        When disambiguating a device type, it is possible that the provided device type is sufficiently
        ambiguous that the comparisons against complete device types without a disambiguated hardware_family
        will result in a failure to disambiguate the type.

        * Scripts/webkitpy/xcode/new_simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type):

2018-01-11  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r219530): ResourceLoadStatisticsPersistentStorage should be read-only in ephemeral sessions
        https://bugs.webkit.org/show_bug.cgi?id=181136
        <rdar://problem/36116604>

        Reviewed by Chris Dumez.

        Add a new API test to confirm that ResourceLoadStatistics can be turned on safely for ephemeral
        browsing sessions.

        * Scripts/run-gtk-tests:
        (GtkTestRunner): Unskip test now that it passes.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST): Add new WebsiteDataStoreEphemeral test.

2018-01-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r226816.

        This change broke LayoutTests on the bots.

        Reverted changeset:

        "run-webkit-tests fails when there is a curly brace in Xcode
        build output"
        https://bugs.webkit.org/show_bug.cgi?id=181254
        https://trac.webkit.org/changeset/226816

2018-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Fix flakey webserver tests
        https://bugs.webkit.org/show_bug.cgi?id=181555
        <rdar://problem/36448273>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests.test_servers_started): Add and bind custom checks to
        determine if a specific server is running.

2018-01-11  Jonathan Bedard  <jbedard@apple.com>

        Commit queue failed to land a bug, 'NoneType' object has no attribute 'strip'
        https://bugs.webkit.org/show_bug.cgi?id=181561
        <rdar://problem/36452652>

        Reviewed by Aakash Jain.

        BeautifulSoup.find may return None, this case should be gracefully handled.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries._parse_result_count):
        (BugzillaQueries._fetch_bugs_from_advanced_query): Added logging.

2018-01-11  Alexey Proskuryakov  <ap@apple.com>

        run-webkit-tests fails when there is a curly brace in Xcode build output
        https://bugs.webkit.org/show_bug.cgi?id=181254

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write):

2018-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Reimplement simulator code (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=180555
        <rdar://problem/36131381>

        Reviewed by Aakash Jain.

        Remove old simulator code.

        * Scripts/webkitpy/xcode/__init__.py: Remove import statement.
        * Scripts/webkitpy/xcode/simulated_device.py: Removed.
        * Scripts/webkitpy/xcode/simulator.py: Removed.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Removed.

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support moving attachment elements in editable areas using drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=181337
        <rdar://problem/36324813>

        Reviewed by Tim Horton.

        Add 3 new API tests for attachment element dragging.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView expectElementTag:toComeBefore:]):
        (-[NSItemProvider expectType:withData:]):
        (TestWebKitAPI::TEST):

2018-01-11  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION(r225856): Incorrectly managing 'future' baseline_search_paths. 
        https://bugs.webkit.org/show_bug.cgi?id=179621
        <rdar://problem/35589585>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Include 'future' in the version_fallback
        list if we are the VERSION_MAX, which usually corresponds with future.

2018-01-11  Filip Pizlo  <fpizlo@apple.com>

        CodeBlocks should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=180884

        Reviewed by Saam Barati.
        
        Remove some less important benchmarks from the default run. Doing run-jsc-benchmarks
        shouldn't take a long time due to benchmarks we don't optimize for.
        
        * Scripts/run-jsc-benchmarks:

2018-01-11  Ms2ger  <Ms2ger@igalia.com>

        Test gardening for GTK.
        https://bugs.webkit.org/show_bug.cgi?id=181477

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp: Correct the file name.
        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp: Adjust the expected console message.

2018-01-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Add the new JSCOnly bot to the scheduler.
        https://bugs.webkit.org/show_bug.cgi?id=181487

        Unreviewed follow-up patch after r226729

        On r226729 I missed to add the new JSCOnly bot the default scheduler.
        This is needed to make the bot automatically pick each commit for testing.

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

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support dragging attachment elements out as files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=181199
        <rdar://problem/36299316>

        Reviewed by Tim Horton, Andy Estes and Joseph Pecoraro.

        Add support in the drag and drop simulator for testing blob-backed attachment element dragging, and also add new
        attachment API tests.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[NSItemProvider expectType:withData:]):
        (TestWebKitAPI::TEST):

        Add two new WKAttachmentTests to exercise dragging data- and file-backed blobs via attachment elements. These
        tests first insert attachments via drop or WKWebView SPI, and then drag these attachments out and use the
        -expectType:withData: helper to inspect the item providers created from the drag source.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[MockDragSession localContext]):
        (-[MockDragSession setLocalContext:]):
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator simulateAllTouchesCanceled:]):
        (-[DataInteractionSimulator _concludeDataInteractionAndPerformOperationIfNecessary]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator endDataTransfer]):

        Make some tweaks to the iOS drag and drop simulator. In particular, this patch (1) adds a new hook to tell
        WebKit that data transfers have been completed, (2) fixes incorrect drop proposal handling when returning
        UIDropOperationForbidden by replacing _shouldPerformOperation with a UIDropProposal, and (3) teach the
        MockDragSession to hold on to a localContext.

2018-01-11  Ali Juma  <ajuma@chromium.org>

        Unreviewed. Add Ali Juma as contributor

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

2018-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update Selenium WebDriver imported tests.

        New version of selenium uses command line options to pass driver and browser binaries to pytest instead of
        environment variables.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (collect): Reorder the arguments to make pytest happy.
        (run): Ditto.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.__init__): Add driver binary, browser binary and browser args as arguments.

2018-01-11  Ling Ho  <lingcherd_ho@apple.com>

        Move Commit Queue and EWS Queues to Sierra on Bot Watcher's Dasboard
        https://bugs.webkit.org/show_bug.cgi?id=181492
        <rdar://problem/36359679>

        Reviewed by Alexey Proskuryakov. 

2018-01-10  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Tools/gtk/install-dependencies: Packages geoclue, ruby-highline, xorg-utils do not exist in Arch Linux
        https://bugs.webkit.org/show_bug.cgi?id=181475

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: Update package list for Arch Linux, extend
        message shown at end of installation with additional tips.

2018-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r222507): Composition highlight doesn't render when using IME
        https://bugs.webkit.org/show_bug.cgi?id=181485
        <rdar://problem/35896516>

        Reviewed by Ryosuke Niwa.

        Add a `suppressUnderline` argument to TextInputController.setMarkedText. This suppresses the custom underlines
        rendered when testing IME on iOS in WebKit2. In this new test, suppressing underline rendering is needed to
        allow rendering composition backgrounds (see InlineTextBox::paint).

        * DumpRenderTree/ios/TextInputControllerIOS.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController setMarkedText:selectedFrom:length:suppressUnderline:]):
        (-[TextInputController setMarkedText:selectedFrom:length:]): Deleted.
        * DumpRenderTree/mac/TextInputControllerMac.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController setMarkedText:selectedFrom:length:suppressUnderline:]):
        (-[TextInputController setMarkedText:selectedFrom:length:]): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl:
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp:
        (WTR::TextInputController::setMarkedText):
        * WebKitTestRunner/InjectedBundle/TextInputController.h:

2018-01-10  JF Bastien  <jfbastien@apple.com>

        Poison small JSObject derivatives which only contain pointers
        https://bugs.webkit.org/show_bug.cgi?id=181483
        <rdar://problem/36407127>

        Reviewed by Mark Lam.

        Test the new move-assign and move-copy from unique_ptr, as well as
        nullptr_t ctors.

        * TestWebKitAPI/Tests/WTF/Poisoned.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp:
        (TestWebKitAPI::TEST):

2018-01-10  Chris Dumez  <cdumez@apple.com>

        Multiple http/wpt/beacon/contentextensions/ test are flaky.
        https://bugs.webkit.org/show_bug.cgi?id=179256
        <rdar://problem/35401978>

        Reviewed by Alex Christensen.

        Update WebKitTestRunner to set a temporary path for content extensions so that its WKTR
        instance gets its own folder to avoid conflicts and flakiness.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformConfigureViewForTest):

2018-01-10  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r213590): Swipe from edge to go to previous page is significantly slower than tapping back button on Twitter
        https://bugs.webkit.org/show_bug.cgi?id=181269
        <rdar://problem/35110344>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        (WTR::UIScriptController::overridePreference):
        (WTR::UIScriptController::replaceTextAtRange):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::setNavigationGesturesEnabled):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        Implement beginBackSwipe and completeBackSwipe on iOS (they already
        exist on Mac) in terms of the new WKWebView testing SPI.

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

        REGRESSION (r226715): ignore WARNING output in linter tests
        https://bugs.webkit.org/show_bug.cgi?id=181486
        <rdar://problem/36408847>

        Reviewed by Aakash Jain.

        Linter unit tests should not be interested in logs at the the INFO or WARNING levels.

        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCapture.__init__): Pass logging level to be captured.
        * Scripts/webkitpy/style/main_unittest.py:
        (ExpectationLinterInStyleCheckerTest.test_no_linter_errors): Capture logging at the ERROR level.
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line): Ditto.
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line_no_edit): Ditto.
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line_edit_in_file): Ditto.
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line_only_deletes): Ditto.
        (ExpectationLinterInStyleCheckerTest.test_linter_added_file_with_error): Ditto.
        (ExpectationLinterInStyleCheckerTest.test_linter_deleted_file): Ditto.
        (ExpectationLinterInStyleCheckerTest.test_linter_deleted_file_no_edit): Ditto.

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

        Add a JSCOnly MIPS buildbot
        https://bugs.webkit.org/show_bug.cgi?id=181487

        Reviewed by Michael Catanzaro.

        Add the new bot configs definitions for the master and update the unit tests.

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

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

        REGRESSION (r226715): don't re-check number of simulators in child processes
        https://bugs.webkit.org/show_bug.cgi?id=181484
        <rdar://problem/36407151>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.__init__): Skip the number of simulators check if simulators
        are already initialized.

2018-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r226667 and r226673.
        https://bugs.webkit.org/show_bug.cgi?id=181488

        This caused a flaky crash. (Requested by mlewis13 on #webkit).

        Reverted changesets:

        "CodeBlocks should be in IsoSubspaces"
        https://bugs.webkit.org/show_bug.cgi?id=180884
        https://trac.webkit.org/changeset/226667

        "REGRESSION (r226667): CodeBlocks should be in IsoSubspaces"
        https://bugs.webkit.org/show_bug.cgi?id=180884
        https://trac.webkit.org/changeset/226673

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

        Follow-up fix to r226715
        https://bugs.webkit.org/show_bug.cgi?id=180555
        <rdar://problem/36131381>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/new_simulated_device.py:
        (SimulatedDeviceManager._create_or_find_device_for_request): Use _delete instead
        of delete.

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

        webkitpy: Refactor simulator code (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=180555
        <rdar://problem/36131381>

        Reviewed by Aakash Jain.

        The patch leverages the SimulatedDeviceManager when running layout tests.
        This patch is primarily code removal, since much of the IOSSimulatorPort
        was dedicated to managing simulators. The removed code is either now owned by the
        SimulatedDeviceManager (and committed in Part 1) or supported a technique to
        boot multiple simulators which was made obsolete in Xcode 9.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._custom_device_for_test.in): Device names now have spaces in them,
        strip those spaces.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Remove '--runtime' flag, this is achieved with the --version flag.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.__init__): The _current_device idiom is no longer required since the
        SimulatedDeviceManager keeps track of any previously booted devices.
        (IOSPort.target_host): Even when only a single device is used, it will be accessed
        through the array of managed devices.
        (IOSPort.using_multiple_devices): Deleted.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.using_multiple_devices): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Remove constants required to manage simulators, change device
        class strings so they can be parsed by the DeviceType class.
        (IOSSimulatorPort.__init__): Determine the number of processes to use by checking
        the number of simulators currently booted, the number of child processes specified
        and the maximum number of simulators supported by this system.
        (IOSSimulatorPort._device_for_worker_number_map):Return the array of initialized
        devices owned by the SimulatedDeviceManager.
        (IOSSimulatorPort.ios_version): Remove support for the --runtime option.
        (IOSSimulatorPort.default_child_processes): Use the SimulatedDeviceManager to check
        the maximum number of supported simulators on this system.
        (IOSSimulatorPort._create_devices): Construct a list of device requests with a
        request for each child process and send this list to the SimulatedDeviceManager to
        initialize the devices.
        (IOSSimulatorPort.clean_up_test_run):
        (IOSSimulatorPort.check_sys_deps): Check that there are simulators running the
        specified version of iOS.
        (IOSSimulatorPort.reset_preferences):
        (IOSSimulatorPort.simulator_runtime): Deleted.
        (IOSSimulatorPort.simulator_device_type): Deleted.
        (IOSSimulatorPort._teardown_managed_simulators): Deleted.
        (IOSSimulatorPort.use_multiple_simulator_apps): Deleted.
        (IOSSimulatorPort._create_simulators): Deleted.
        (IOSSimulatorPort._quit_ios_simulator): Deleted.
        (IOSSimulatorPort._using_dedicated_simulators): Deleted.
        (IOSSimulatorPort.using_multiple_devices): Deleted.
        (IOSSimulatorPort._create_device): Deleted.
        (IOSSimulatorPort.get_simulator_path): Deleted.
        (IOSSimulatorPort._createSimulatorApps): Deleted.
        (IOSSimulatorPort._createSimulatorApp): Deleted.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline): Filter out commands run when determining the
        maximum number of simulators run on this system.
        (TestRebaselineExpectations.test_rebaseline_expectations): Ditto.
        * Scripts/webkitpy/xcode/new_simulated_device.py:
        (SimulatedDeviceManager._does_fulfill_request): Fixed log statement.

2018-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: run-webdriver-tests doesn't handle test names with a '/' correctly
        https://bugs.webkit.org/show_bug.cgi?id=181474

        Reviewed by Carlos Alberto Lopez Perez.

        We use os.path.basename() to get the subtest name. If the test name contains a slash we get part of the subtest
        name as the name.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C._subtest_name): Helper function to get the subtest name.
        (WebDriverTestRunnerW3C.run): Use _subtest_name() instead of os.path.basename().

2018-01-09  Andy Estes  <aestes@apple.com>

        [Xcode] Use the Apple Internal SDK if available when building ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=181459

        Reviewed by Dan Bernstein.

        * ImageDiff/cg/Configurations/Base.xcconfig:

2018-01-09  Myles C. Maxfield  <mmaxfield@apple.com>

        font-display:fallback can cause a visual flash (which is supposed to be impossible)
        https://bugs.webkit.org/show_bug.cgi?id=181374

        Reviewed by Simon Fraser.

        The test requires Palatino.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2018-01-09  Saam Barati  <sbarati@apple.com>

        Give some slack in display-profiler-outputs computation of the terminal window's number of columns
        https://bugs.webkit.org/show_bug.cgi?id=181449

        Reviewed by JF Bastien.

        This allows me to Cmd+f in my terminal to search for things without
        having the results become misaligned.

        * Scripts/display-profiler-output:

2018-01-09  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy] PlatformInfo should have default argument for casual use
        https://bugs.webkit.org/show_bug.cgi?id=180827

        Reviewed by David Kilzer.

        PlatformInfo should be the only way to check platform specific thing instead
        of sys.platform or other various checks. If there is something you want to check,
        it should be placed in PlatformInfo.

        Currently to instantiate PlatformInfo, it requires arguments, which is usually
        sys, platform and Executive(). They are straight forward and should be handled
        by default arguments. Then we can instantiate PlatformInfo more casual.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo): Use relative module path import
        (PlatformInfo.__init__):
        (PlatformInfo.executive): Lazy instantiation of Executive()
        (PlatformInfo.total_bytes_memory): Accessing via above property
        (PlatformInfo.xcode_sdk_version): Ditto
        (PlatformInfo.xcode_simctl_list): Ditto
        (PlatformInfo.xcode_version): Ditto
        (PlatformInfo._win_version_str): Ditto
        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.__init__):
        * Scripts/webkitpy/common/system/user.py:
        (User.__init__):

2018-01-09  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Win] Remove workaround for Bug 176442 after stopping MSVC 2015 support
        https://bugs.webkit.org/show_bug.cgi?id=176443

        Reviewed by Darin Adler.

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

2018-01-09  Frederic Wang  <fwang@igalia.com.fr>

        check-webkit-style: Verify syntax for WK_API_AVAILABLE
        https://bugs.webkit.org/show_bug.cgi?id=181394

        Reviewed by Darin Adler.

        A common syntax error for WK_API_AVAILABLE is to write ios(WK_MAC_TBA)
        as the second parameter instead of ios(WK_IOS_TBA). This generally
        builds for iOS on EWS but not when using the public SDK. See r224057,
        r223207 and r226211 for example. This patch adds a basic style check
        for that macro to prevent this kind of mistake.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_min_versions_of_wk_api_available): New function to verify the parameters of WX_API_AVAILABLE.
        (check_style): Run new style check.
        (CppChecker): Add build type for the new style check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_min_versions_of_wk_api_available): Add tests for the new style check.

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Expose HTMLAttachmentElement.uniqueIdentifier to bindings
        https://bugs.webkit.org/show_bug.cgi?id=181420
        <rdar://problem/36365827>

        Reviewed by Alex Christensen.

        Adjusts some existing API tests to verify that attachment elements' uniqueIdentifiers match the uniqueIdentifier
        of corresponding _WKAttachments.

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

2018-01-08  Alex Christensen  <achristensen@webkit.org>

        Add WKNavigationDelegate SPI exposing WebProcess crash reason
        https://bugs.webkit.org/show_bug.cgi?id=181410
        <rdar://problem/36167199>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[CrashReasonDelegate _webView:webContentProcessDidTerminateWithReason:]):
        (TEST):

2018-01-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI for WKOpenPanelParameters._acceptedMIMETypes and _acceptedFileExtensions
        https://bugs.webkit.org/show_bug.cgi?id=181408
        <rdar://problem/35884960>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/RunOpenPanel.mm:
        (-[RunOpenPanelUIDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Expose file name and content type of WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=181390
        <rdar://problem/36336837>

        Reviewed by Tim Horton.

        Adjusts some existing tests in WKAttachmentTests to exercise -requestInfo:.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[_WKAttachment synchronouslyRequestInfo:]):
        (-[_WKAttachment synchronouslyRequestData:]):

        Reimplement this in terms of -synchronouslyRequestInfo:.

        (-[_WKAttachment expectRequestedDataToBe:]):
        (TestWebKitAPI::TEST):

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Copying, pasting, and then deleting an attachment element breaks attachment data requests
        https://bugs.webkit.org/show_bug.cgi?id=181365
        <rdar://problem/36340647>

        Reviewed by Tim Horton.

        Adds two new attachment API tests to verify that copying and pasting an existing attachment inserts an
        attachment element that may be edited independently of the original attachment. See WebCore/ChangeLog for more
        detail.

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

2018-01-08  Youenn Fablet  <youenn@apple.com>

        navigator.onLine does not work inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=181079
        <rdar://problem/36178606>

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize): Setting service worker creation callback to inject ServiceWorkerInternals object.

2018-01-07  Saam Barati  <sbarati@apple.com>

        Add total exits and total compilations sorting mode to the "full" command in display-profiler-output
        https://bugs.webkit.org/show_bug.cgi?id=181372

        Reviewed by Filip Pizlo.

        Adding these sorting modes makes it easier to analyze functions
        that recompile a lot and exit a lot.

        * Scripts/display-profiler-output:

2018-01-06  Julien Brianceau  <julien.brianceau@gmail.com>

        Unreviewed, remove my Cisco email from contributors.json

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

2018-01-05  JF Bastien  <jfbastien@apple.com>

        WebAssembly: poison JS object's secrets
        https://bugs.webkit.org/show_bug.cgi?id=181339
        <rdar://problem/36325001>

        Reviewed by Mark Lam.

        Update tests for swap(Poisoned<k, T>, T*)

        * TestWebKitAPI/Tests/WTF/ConstExprPoisoned.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp:
        (TestWebKitAPI::TEST):

2018-01-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r226396) DataInteractionTests: ContentEditableToContentEditable and ContentEditableToTextarea are failing
        https://bugs.webkit.org/show_bug.cgi?id=181359

        Reviewed by Tim Horton.

        Ensure that these tests still pass using older SDKs.

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

2018-01-05  Alex Christensen  <achristensen@webkit.org>

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

        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        A URL with < or > in it is now recognized as invalid by WebKit.  This is intentional, and matches our behavior before enabling the new URLParser.

2018-01-05  Alex Christensen  <achristensen@webkit.org>

        Restrict navigation-time WKWebsiteDataStore swapping to main frame navigations
        https://bugs.webkit.org/show_bug.cgi?id=181217

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2018-01-05  Alex Christensen  <achristensen@webkit.org>

        Add WKBundleFrameCreateFrameHandle
        https://bugs.webkit.org/show_bug.cgi?id=181232
        <rdar://problem/35926696>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FrameHandleSerialization.mm: Added.
        (mouseDidMoveOverElement):
        (-[FrameHandleSerialization webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[MouseMoveOverElementDelegate _webView:mouseDidMoveOverElement:withFlags:userInfo:]):
        (TEST):

2018-01-05  Chris Fleizach  <cfleizach@apple.com>

        iOS: Build fix after r226432.
        
        Unreviewed. Stop duplicating speakAs symbols for iOS.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::speakAs):

2018-01-05  Javier Fernandez  <jfernandez@igalia.com>

        Unreviewed, added myself as WebKit reviewer

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

2018-01-05  Claudio Saavedra  <csaavedra@igalia.com>

        WPE: Build fix after r226432.

        Unreviewed. Rename ::speak() to ::speakAs().
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::speak): Deleted.

2018-01-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement updated CSS3 Speech for 'speak' and 'speak-as' properties
        https://bugs.webkit.org/show_bug.cgi?id=180361

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (speakAsCallback):
        (AccessibilityUIElement::speakAs):
        (AccessibilityUIElement::getJSClass):
        (speakCallback): Deleted.
        (AccessibilityUIElement::speak): Deleted.
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::speakAs):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::speakAs):
        (AccessibilityUIElement::speak): Deleted.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::speak): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::speak): Deleted.

2018-01-04  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r226395): test-webkitperl test expectations incorrect
        https://bugs.webkit.org/show_bug.cgi?id=181307
        <rdar://problem/36306558>

        Rubber-stamped by Aakash Jain.

        r226395 added two lines towards the beginning of
        Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl, the line
        numbers in the test expectations need to update.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests-expected.txt:

2018-01-04  Tim Horton  <timothy_horton@apple.com>

        WKWebView loses minimum layout size overrides that happen while the process is terminated
        https://bugs.webkit.org/show_bug.cgi?id=181306
        <rdar://problem/34398288>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        (TEST):
        Add a test that calling _overrideLayoutParametersWithMinimumLayoutSize
        while the process is terminated results in the page getting the correct
        minimum layout size.

2018-01-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add Mock screen capture source
        https://bugs.webkit.org/show_bug.cgi?id=181291
        <rdar://problem/36298164>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new test.
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        * TestWebKitAPI/Tests/WebKit/getDisplayMedia.html:

2018-01-04  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/36300930> Change proxy server setting on master config to reach s3 servers

        Reviewed by Ling Ho.

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

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

        [Attachment Support] Create attachment elements when dropping files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=181192
        <rdar://problem/36280945>

        Reviewed by Tim Horton.

        Adds 3 new API tests to exercise different use cases of dropping content as attachment elements when the runtime
        switch is enabled. See below for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[NSItemProvider registerData:type:]):
        (platformCopyPNG):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:

        Fix some currently failing iOS drag and drop tests. In this case, there's no reason RTFD should appear in the
        source item provider when dragging rich text *without* attachments, so this should have been a check for just
        kUTTypeRTF instead.

        (TestWebKitAPI::TEST):

        Tests a few cases of inserting attachment elements via drop:
        1.  We should distinguish between drops containing rich/plain text files from just dropping rich/plain text.
            Instead of inserting the contents as inline web content, this should generate attachment elements.
        2.  Test the fallback mechanism for inserting attachment elements. If the preferred presentation style is not
            explicitly set, but there's nothing WebKit would otherwise do with the dropped content, then we should fall
            back to inserting the content as an attachment.
        3.  Test that if multiple attachments and inline item providers are present, WebKit will respect the order in
            which they were inserted by the source (as opposed to, for instance, putting all of the attachments in front
            or at the end).

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView objectByEvaluatingJavaScript:]):

        Add a helper method to return an object that represents the result of evaluating some given script, and rewrite
        -stringByEvaluatingJavaScript to just turn around and call this.

        (-[TestWKWebView stringByEvaluatingJavaScript:]):

2018-01-03  Ting-Wei Lan  <lantw44@gmail.com>

        Replace hard-coded paths in shebangs with #!/usr/bin/env
        https://bugs.webkit.org/show_bug.cgi?id=181040

        Reviewed by Alex Christensen.

        * BuildSlaveSupport/build-launcher-app:
        * BuildSlaveSupport/build-launcher-dmg:
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * BuildSlaveSupport/built-product-archive:
        * BuildSlaveSupport/clean-build:
        * BuildSlaveSupport/delete-stale-build-files:
        * BuildSlaveSupport/download-built-product:
        * BuildSlaveSupport/gtk/buildbot/log/run:
        * BuildSlaveSupport/gtk/buildbot/run:
        * BuildSlaveSupport/gtk/pulseaudio/run:
        * BuildSlaveSupport/kill-old-processes:
        * BuildSlaveSupport/test-result-archive:
        * BuildSlaveSupport/win/kill-old-processes:
        * Scripts/SpacingHeuristics.pm:
        * Scripts/add-include:
        * Scripts/build-api-tests:
        * Scripts/build-dumprendertree:
        * Scripts/build-imagediff:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/check-Xcode-source-file-types:
        * Scripts/check-dom-results:
        * Scripts/check-for-exit-time-destructors:
        * Scripts/check-for-global-initializers:
        * Scripts/check-for-inappropriate-objc-class-names:
        * Scripts/check-for-weak-vtables-and-externals:
        * Scripts/clean-header-guards:
        * Scripts/compare-timing-files:
        * Scripts/configure-xcode-for-ios-development:
        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/create-exports:
        * Scripts/debug-minibrowser:
        * Scripts/debug-safari:
        * Scripts/debug-test-runner:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/dump-webkit-tests-run:
        * Scripts/ensure-valid-python:
        * Scripts/execAppWithEnv:
        * Scripts/extract-localizable-js-strings:
        * Scripts/filter-build-webkit:
        * Scripts/find-extra-includes:
        * Scripts/fix-blink-patch:
        * Scripts/generate-coverage-data:
        * Scripts/git-add-reviewer:
        * Scripts/jsc-stress-test-helpers/js-exception-fuzz:
        * Scripts/jsc-stress-test-helpers/js-executable-allocation-fuzz:
        * Scripts/jsc-stress-test-helpers/js-osr-exit-fuzz:
        * Scripts/make-new-script-test:
        * Scripts/make-script-test-wrappers:
        * Scripts/package-root:
        * Scripts/parse-malloc-history:
        * Scripts/report-include-statistics:
        * Scripts/resolve-ChangeLogs:
        * Scripts/run-api-tests:
        * Scripts/run-bindings-tests:
        * Scripts/run-content-extension-tester:
        * Scripts/run-iexploder-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc:
        * Scripts/run-leaks:
        * Scripts/run-mangleme-tests:
        * Scripts/run-minibrowser:
        * Scripts/run-pageloadtest:
        * Scripts/run-regexp-tests:
        * Scripts/run-safari:
        * Scripts/run-sunspider:
        * Scripts/run-test-runner:
        * Scripts/run-webkit-app:
        * Scripts/run-webkit-httpd:
        * Scripts/run-webkit-websocketserver:
        * Scripts/set-webkit-configuration:
        * Scripts/show-pretty-diff:
        * Scripts/sort-Xcode-project-file:
        * Scripts/split-file-by-class:
        * Scripts/sunspider-compare-results:
        * Scripts/svn-apply:
        * Scripts/svn-unapply:
        * Scripts/test-webkit-scripts:
        * Scripts/test-webkitperl:
        * Scripts/update-iexploder-cssproperties:
        * Scripts/update-javascriptcore-test-results:
        * Scripts/update-webkit:
        * Scripts/update-webkit-auxiliary-libs:
        * Scripts/update-webkit-dependency:
        * Scripts/update-webkit-libs-jhbuild:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/update-webkit-support-libs:
        * Scripts/update-webkitgtk-libs:
        * Scripts/update-webkitwpe-libs:
        * Scripts/webkit-build-directory:
        * Scripts/webkitperl/LoadAsModule.pm:
        * Scripts/webkitperl/VCSUtils_unittest/decodeGitBinaryPatch.pl:
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatch.pl:
        * Scripts/webkitperl/VCSUtils_unittest/fixChangeLogPatchThenSetChangeLogDateAndReviewer.pl:
        * Scripts/webkitperl/VCSUtils_unittest/fixSVNPatchForAdditionWithHistory.pl:
        * Scripts/webkitperl/VCSUtils_unittest/generatePatchCommand.pl:
        * Scripts/webkitperl/VCSUtils_unittest/mergeChangeLogs.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseFirstEOL.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parsePatch.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseUnifiedDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/prepareParsedPatch.pl:
        * Scripts/webkitperl/VCSUtils_unittest/removeEOL.pl:
        * Scripts/webkitperl/VCSUtils_unittest/runCommand.pl:
        * Scripts/webkitperl/VCSUtils_unittest/runPatchCommand.pl:
        * Scripts/webkitperl/VCSUtils_unittest/setChangeLogDateAndReviewer.pl:
        * Scripts/webkitperl/auto-version_unittest/autoVersionTests.pl:
        * Scripts/webkitperl/auto-version_unittest/versionStampTests.pl:
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/extractLineRangeBeforeAndAfterChange.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/fetchRadarURLFromBugXMLData.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/generateFunctionLists.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/perl_unittests.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl:
        * Scripts/webkitperl/webkitdirs_unittest/appendToEnvironmentVariableList.pl:
        * Scripts/webkitperl/webkitdirs_unittest/checkForArgumentAndRemoveFromArrayRef.pl:
        * Scripts/webkitperl/webkitdirs_unittest/checkForArgumentAndRemoveFromArrayRefGettingValue.pl:
        * Scripts/webkitperl/webkitdirs_unittest/extractNonMacOSHostConfiguration.pl:
        * Scripts/webkitperl/webkitdirs_unittest/prependToEnvironmentVariableList.pl:
        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        * ccache/ccache-clang:
        * ccache/ccache-clang++:
        * ccache/ccache-wrapper:
        * gtk/install-dependencies:
        * iExploder/iexploder-1.3.2/htdocs/iexploder.cgi:
        * iExploder/iexploder-1.3.2/htdocs/webserver.rb:
        * iExploder/iexploder-1.3.2/tools/lasthit.rb:
        * iExploder/iexploder-1.3.2/tools/osx_last_crash.rb:
        * iExploder/iexploder-1.3.2/tools/showtest.rb:
        * iExploder/iexploder-1.7.2/src/browser_harness.rb:
        * iExploder/iexploder-1.7.2/src/iexploder.cgi:
        * iExploder/iexploder-1.7.2/src/webserver.rb:
        * iExploder/iexploder-1.7.2/tools/lasthit.rb:
        * iExploder/iexploder-1.7.2/tools/osx_last_crash.rb:
        * wpe/install-dependencies:

2018-01-03  Simon Fraser  <simon.fraser@apple.com>

        filter-build-webkit filters out useful compiler error lines
        https://bugs.webkit.org/show_bug.cgi?id=179864

        Reviewed by Tim Horton.

        Don't filter out lines that contain information about build errors by always showing lines
        after a line that contains "note:" or "error:".

        * Scripts/filter-build-webkit:
        (shouldShowSubsequentLine):
        (shouldIgnoreLine):

2018-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r226366): [GTK] Broke TestBackForwardList and TestWebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=173915

        Unreviewed follow-up. Fix /webkit2/WebKitWebView/session-state-with-form-data and
        /webkit2/WebKitWebView/submit-form. The form ID may be NULL, but we can't put NULL into a
        GVariant unless we use maybe types, and maybe types are incompatible with D-Bus. So use an
        empty string in this case.

        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (emitFormSubmissionEvent):

2018-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add web process API to detect when form is submitted via JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=173915

        Reviewed by Carlos Garcia Campos.

        Test it.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (FormSubmissionTest::FormSubmissionTest):
        (FormSubmissionTest::~FormSubmissionTest):
        (FormSubmissionTest::testFormSubmissionResult):
        (FormSubmissionTest::willSendDOMEventCallback):
        (FormSubmissionTest::willCompleteCallback):
        (FormSubmissionTest::runJavaScriptAndWaitUntilFormSubmitted):
        (testWebExtensionFormSubmissionSteps):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (DelayedSignal::DelayedSignal):
        (emitFormSubmissionEvent):
        (handleFormSubmissionCallback):
        (willSubmitFormCallback):
        (pageCreatedCallback):

2018-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, skip broken API test /webkit2/WebKitWebsiteData/databases
        https://bugs.webkit.org/show_bug.cgi?id=181251

        * Scripts/run-gtk-tests:
        (GtkTestRunner):

2018-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, skip broken API test /webkit2/WebKitWebsiteData/ephemeral
        https://bugs.webkit.org/show_bug.cgi?id=181136

        * Scripts/run-gtk-tests:
        (GtkTestRunner):

2018-01-02  Brent Fulgham  <bfulgham@apple.com>

        [macOS, iOS] Adopt new secure coding APIs in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=181085
        <rdar://problem/34837397>

        Reviewed by Tim Horton.

        Update API tests to use secure coding wherever possible. Currently, NSView/UIView-based classes are not
        capable of supporting NSSecureCoding, so pass through the current coding routines.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm: Updated for NSSecureCoding.
        * TestWebKitAPI/Tests/WebKitCocoa/Coding.mm:
        (encodeAndDecode): Check if class supports the NSSecureCoding protocol and use non-secure coding
        routines if necessary.
        (TEST): Updated for NSSecureCoding.
        * TestWebKitAPI/Tests/mac/EarlyKVOCrash.mm:
        (TestWebKitAPI::TEST): Updated for NSSecureCoding.

2017-12-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove std::chrono completely
        https://bugs.webkit.org/show_bug.cgi?id=181186

        Reviewed by Alex Christensen.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformRunUntil):

2018-01-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r223253): Broke ResourceLoadStatistics layout tests for non-Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=181231

        Reviewed by Alex Christensen.

        Implement TestController APIs needed by ResourceLoadStatistics tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo):

2018-01-02  Tim Horton  <timothy_horton@apple.com>

        Disable WKAttachmentTests if UIPasteboard.itemProviders is not available
        https://bugs.webkit.org/show_bug.cgi?id=181219

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2018-01-02  Jiewen Tan  <jiewen_tan@apple.com>

        Add a WebAuthentication runtime feature flag
        https://bugs.webkit.org/show_bug.cgi?id=181220
        <rdar://problem/36055305>

        Reviewed by Brent Fulgham.

        Renames the CredentialManagement runtime feature flag into WebAuthentication.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Don't Blob-convert images and attachments with https:, http: or data: urls
        https://bugs.webkit.org/show_bug.cgi?id=181143
        <rdar://problem/36200381>

        Reviewed by Tim Horton.

        Add a new API test to ensure that a copied image with a data URL does not get pasted as an attachment when
        attachment elements are enabled.

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

2018-01-02  Jiewen Tan  <jiewen_tan@apple.com>

        Update Credential Management API for WebAuthentication
        https://bugs.webkit.org/show_bug.cgi?id=181082
        <rdar://problem/36055239>

        Reviewed by Brent Fulgham.

        Enable Credential Management API for testing.

        * DumpRenderTree/TestOptions.h:
        * WebKitTestRunner/TestOptions.h:

2018-01-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Test /webkit2/WebKitWebExtension/form-controls-associated-signal is flaky
        https://bugs.webkit.org/show_bug.cgi?id=168194

        Reviewed by Carlos Garcia Campos.

        Fix an assertion and unskip the test. The order that form controls are associated is not
        guaranteed.

        * Scripts/run-gtk-tests:
        (GtkTestRunner):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (didAssociateFormControlsCallback):

2018-01-02  Alex Christensen  <achristensen@webkit.org>

        Use new WebsiteDataStore passed in through decidePolicyForNavigation SPI
        https://bugs.webkit.org/show_bug.cgi?id=180897
        <rdar://problem/35535328>

        Reviewed by Brent Fulgham.

        Test two forms of storage to be sure we are using a different WebsiteDataStore: cookies and sessionStorage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:startURLSchemeTask:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (websiteDataStoreTestWebView):
        (TEST):

== Rolled over to ChangeLog-2018-01-01 ==
