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

        Use WordLock instead of std::mutex for Threading
        https://bugs.webkit.org/show_bug.cgi?id=185121

        Reviewed by Geoffrey Garen.

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

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