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

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

        Reviewed by Carlos Garcia Campos.

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

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

        [Cocoa] Set HTTPOnly flag when converting Cookie to NSHTTPCookie
        https://bugs.webkit.org/show_bug.cgi?id=185052

        Reviewed by Geoffrey Garen.

        Modified API test to provide correct test cases for HTTPOnly flag.

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

2018-04-28  Rick Waldron  <waldron.rick@gmail.com>

        Token misspelled "tocken" in error message string
        https://bugs.webkit.org/show_bug.cgi?id=185030

        Reviewed by Saam Barati.

        * Scripts/test262/test262-expectations.yaml: Fix typo "tocken" => "token"

2018-04-27  Stephan Szabo  <stephan.szabo@sony.com>

        [WinCairo] Support --no-copy for jsc tests in wincairo tests, add copying of dlls for copy case
        https://bugs.webkit.org/show_bug.cgi?id=185049

        Reviewed by Keith Miller.

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

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

        PSON: Triggering a navigation to an invalid URL creates a new WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=185066

        Reviewed by Youenn Fablet.

        Added a new test case (ProcessSwap.NavigateToInvalidURL) for navigating to an invalid URL.
        WebKit should not swap WebContent process in this case.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[PSONUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

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

        AX: Accessibility needs to know which part of the content view is visible on iOS
        https://bugs.webkit.org/show_bug.cgi?id=185085
        <rdar://problem/39801363>

        Reviewed by Chris Fleizach.

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

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

        [Extra zoom mode] Add a mechanism to override default viewport behaviors in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        Remove a test that's no longer useful, now that the SPI it was testing is gone. This functionality is now
        tested by the layout test added in this patch.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ViewportSizingTests.mm: Removed.

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