2019-05-17  Justin Michaud  <justin_michaud@apple.com>

        [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.
        https://bugs.webkit.org/show_bug.cgi?id=197969

        Run wasm tests additionally with wasmBBQUsesAir=0.

        Reviewed by Keith Miller.

        * Scripts/run-jsc-stress-tests:

2019-05-17  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use builtin FindICU
        https://bugs.webkit.org/show_bug.cgi?id=197934

        Reviewed by Michael Catanzaro.

        Remove uses of ICU_INCLUDE_DIRS and ICU_LIBRARIES.

        * TestWebKitAPI/PlatformMac.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/CMakeLists.txt:

2019-05-17  Alex Christensen  <achristensen@webkit.org>

        Enable legacy EME for iOS WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=197964
        <rdar://problem/50625666>

        Reviewed by Wenson Hsieh.

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

2019-05-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add clickable url in UI for uploaded S3 archive
        https://bugs.webkit.org/show_bug.cgi?id=197996

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

2019-05-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should not turn orange when any build step has warnings
        https://bugs.webkit.org/show_bug.cgi?id=198000

        Reviewed by Jonathan Bedard.

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

2019-05-17  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        (expectLegacyHeaders):
        (expectHeaders):
        (-[CustomHeaderFieldsDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]):
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.

2019-05-17  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix.

        Teach generate-xcfilelists about iphonesimulator.

        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
        (JavaScriptCoreGenerator):
        (WebCoreGenerator):
        (WebKitGenerator):

2019-05-17  Keith Rollin  <krollin@apple.com>

        Re-enable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197933
        <rdar://problem/50831677>

        Reviewed by Jonathan Bedard.

        The following two tasks have been completed, and we can re-enable
        generate-xcfilelists:

        Bug 197619 <rdar://problem/50507392> Temporarily disable generate-xcfilelists (197619)
        Bug 197622 <rdar://problem/50508222> Rewrite generate-xcfilelists in Python (197622)

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:

2019-05-17  Commit Queue  <commit-queue@webkit.org>

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

        Causing internal build failures (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "Add SPI to set a list of hosts to which to send custom header
        fields cross-origin"
        https://bugs.webkit.org/show_bug.cgi?id=197397
        https://trac.webkit.org/changeset/245401

2019-05-17  Commit Queue  <commit-queue@webkit.org>

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

        New API test causing crashes on Mojave testers (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Add a unit test for client certificate authentication"
        https://bugs.webkit.org/show_bug.cgi?id=197800
        https://trac.webkit.org/changeset/245418

2019-05-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to Transfer archive to S3
        https://bugs.webkit.org/show_bug.cgi?id=197922

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (TransferToS3):
        (TransferToS3.finished): Invoke triggers after transfer is successful.
        (TransferToS3.getResultSummary): Create more readable failure string.
        (UploadBuiltProduct.finished): Deleted. Moved the trigger invocation after TransferToS3.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Added unit-tests.

2019-05-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Need WebKitContextMenuItemType to open emoji picker
        https://bugs.webkit.org/show_bug.cgi?id=176760

        Reviewed by Michael Catanzaro.

        Update context menu test to check insert emoji action is included in default context menu for editable content.

        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:

2019-05-16  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Download archives from S3
        https://bugs.webkit.org/show_bug.cgi?id=197949

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (DownloadBuiltProduct): Updated to use S3 URL.
        (DownloadBuiltProduct.getResultSummary): Method to display custom failure string.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-tests.

2019-05-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r15133): Fix leak of JSStringRef in minidom
        <https://webkit.org/b/197968>
        <rdar://problem/50872430>

        Reviewed by Joseph Pecoraro.

        * TestWebKitAPI/Tests/WebKitObjC/UserContentTest.mm:
        (expectScriptValueIsString): Drive-by fix to use adopt() instead
        of JSRetainPtr<JSStringRef> string(Adopt, JSValueToStringCopy(...)).

2019-05-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r84160): Leak of OpaqueJSString under WTR::JSTestRunner::pathToLocalResource (32 bytes) in com.apple.WebKit.WebContent running layout tests
        <https://webkit.org/b/197965>

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::pathToLocalResource): Don't call
        JSStringRetain() here because the JSRetainPtr<JSStringRef>
        return type will increment the retain count for us.

2019-05-16  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        Make better abstractions for reading and writing from/to TCPServer.
        Add a unit test that causes a client certificate authentication challenge to happen.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::read):
        (TestWebKitAPI::TCPServer::write):
        (TestWebKitAPI::TCPServer::respondWithChallengeThenOK):
        (TestWebKitAPI::TCPServer::respondWithOK):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (credentialWithIdentity):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):
        (-[ClientCertificateDelegate webView:didFinishNavigation:]):
        (-[ClientCertificateDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[ClientCertificateDelegate challengeCount]):
        (TestWebKitAPI::TEST):
        (respondWithChallengeThenOK): Deleted.
        (credentialWithIdentityAndKeychainPath): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):
        (readRequest): Deleted.
        (writeResponse): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::respondWithChallengeThenOK): Deleted.

2019-05-16  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        (expectLegacyHeaders):
        (expectHeaders):
        (-[CustomHeaderFieldsDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]):
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.

2019-05-15  Aakash Jain  <aakash_jain@apple.com>

        Replace double-quotes with single quotes in steps.py
        https://bugs.webkit.org/show_bug.cgi?id=197921

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:

2019-05-15  Keith Rollin  <krollin@apple.com>

        Rewrite generate-xcfilelists in Python
        https://bugs.webkit.org/show_bug.cgi?id=197622
        <rdar://problem/50508222>

        Reviewed by Jonathan Bedard, Alex Christensen.

        For a number of reasons, rewrite generate-xcfilelists in Python:

        - The previous bash script was large and unmaintainable.
        - We have more internal expertise with Python than with bash.
        - The bash script used temporary files in /tmp that got stranded and
          were owned by root, making them awkward to clear out.
          <rdar://problem/49490262>
        - We needed to complete support for engineers that built with Xcode
          rather than the command line.
        - There are some bugs leading to mildly corrupted .xcfilelist files.
          It's not apparent the source of the bugs, but one general reason
          might be due to approaches born of using bash. Rewriting in Python
          may clear these up.

        * Scripts/generate-xcfilelists:
        * Scripts/webkitpy/common/attribute_saver.py: Added.
        (AttributeSaver):
        (AttributeSaver.__init__):
        (AttributeSaver.__enter__):
        (AttributeSaver.__exit__):
        * Scripts/webkitpy/common/attribute_saver_unittest.py: Added.
        (AttributeSaverTest):
        (AttributeSaverTest.SimpleTestClass):
        (AttributeSaverTest.SimpleTestClass.__init__):
        (AttributeSaverTest.test_class):
        (AttributeSaverTest.test_normal_default):
        (AttributeSaverTest.test_normal_value):
        (AttributeSaverTest.test_normal_value_on_exception):
        (AttributeSaverTest.test_normal_value_on_normal_exit):
        (AttributeSaverTest.test_normal_value_with_finally_on_exception):
        (AttributeSaverTest.test_normal_value_with_finally_on_normal_exit):
        (AttributeSaverTest.test_normal_value_with_else_on_exception):
        (AttributeSaverTest.test_normal_value_with_else_on_normal_exit):
        * Scripts/webkitpy/generate_xcfilelists_lib/__init__.py: Added.
        * Scripts/webkitpy/generate_xcfilelists_lib/application.py: Added.
        (Application):
        (Application.__init__):
        (Application.run):
        (Application._initialize):
        (Application._initialize.collect_attributes):
        (Application._create_parser):
        (_validate_args):
        (_cmd_generate):
        (_cmd_check):
        (_cmd_subgenerate):
        (_cmd_help):
        (_do_generate):
        (_do_merge):
        (_report_results):
        (_report_merge_results):
        (_report_remediation_steps):
        (_report_remediation_steps.add_to_message):
        (_any_have_errors):
        (_any_have_actions):
        (_log_progress):
        (_log_results):
        (get_generate_xcfilelists_script_path):
        (_get_root_dir):
        (get_opensource_dir):
        (get_build_scripts_dir):
        (get_extract_dependencies_from_makefile_script):
        (get_xcode_built_products_dir):
        (_getenv):
        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py: Added.
        (BaseGenerator):
        (BaseGenerator.__init__):
        (BaseGenerator.__str__):
        (BaseGenerator.generate):
        (BaseGenerator._sublaunch_under_xcode):
        (BaseGenerator.subgenerate):
        (BaseGenerator.merge):
        (BaseGenerator.pickle_to_file):
        (BaseGenerator.has_action):
        (BaseGenerator.has_error):
        (BaseGenerator.is_valid):
        (BaseGenerator.report_error):
        (BaseGenerator._generate_derived):
        (BaseGenerator._merge_derived):
        (BaseGenerator._generate_unified):
        (BaseGenerator._merge_unified):
        (BaseGenerator._replace):
        (BaseGenerator._unexpand):
        (BaseGenerator._find_added_lines):
        (BaseGenerator._merge_added_lines):
        (BaseGenerator._get_file_lines):
        (BaseGenerator._getenv):
        (BaseGenerator._get_project_file_path):
        (BaseGenerator._get_project_dir):
        (BaseGenerator._get_project_file_name):
        (BaseGenerator._get_project_name):
        (BaseGenerator._get_sym_root):
        (BaseGenerator._get_obj_root):
        (BaseGenerator._get_shared_precomps_dir):
        (BaseGenerator._get_build_dirs):
        (BaseGenerator._get_build_dirs.define_xcode_build_dirs):
        (BaseGenerator._get_build_dirs.define_xcode_build_dirs.read_xcode_user_default):
        (BaseGenerator._get_build_dirs.define_command_line_build_dirs):
        (BaseGenerator._get_derived_sources_dir):
        (BaseGenerator._get_xcfilelist_dir):
        (BaseGenerator._get_input_derived_xcfilelist_project_path):
        (BaseGenerator._get_output_derived_xcfilelist_project_path):
        (BaseGenerator._get_input_unified_xcfilelist_project_path):
        (BaseGenerator._get_output_unified_xcfilelist_project_path):
        (BaseGenerator._get_generate_derived_sources_script):
        (BaseGenerator._get_generate_unified_sources_script):
        (JavaScriptCoreGenerator):
        (JavaScriptCoreGenerator._get_project_file_path):
        (JavaScriptCoreGenerator._get_generate_derived_sources_script):
        (JavaScriptCoreGenerator._get_generate_unified_sources_script):
        (WebCoreGenerator):
        (WebCoreGenerator._get_project_file_path):
        (WebCoreGenerator._get_generate_derived_sources_script):
        (WebCoreGenerator._get_generate_unified_sources_script):
        (WebKitGenerator):
        (WebKitGenerator._get_project_file_path):
        (WebKitGenerator._get_derived_sources_dir):
        (WebKitGenerator._get_generate_derived_sources_script):
        (WebKitGenerator._get_generate_unified_sources_script):
        (DumpRenderTreeGenerator):
        (DumpRenderTreeGenerator._get_project_file_path):
        (DumpRenderTreeGenerator._get_generate_derived_sources_script):
        (WebKitTestRunnerGenerator):
        (WebKitTestRunnerGenerator._get_project_file_path):
        (WebKitTestRunnerGenerator._get_generate_derived_sources_script):
        * Scripts/webkitpy/generate_xcfilelists_lib/util.py: Added.
        (debug_log):
        (LogEntryHelper):
        (LogEntryHelper.__init__):
        (LogEntryHelper.log_entry):
        (LogEntryHelper.log_result):
        (LogEntryHelper.log_exception):
        (LogEntryHelper._print):
        (LogEntryExit):
        (LogEntryExit._show_debug_logging):
        (LogEntryExitClass):
        (LogEntryExitClass._show_debug_logging):
        (LogEntryExitGlobal):
        (LogEntryExitGlobal._show_debug_logging):
        (subprocess_run):
        (is_running_under_xcode):
        (CheckValidItemAction):
        (CheckValidItemAction.__init__):
        (CheckValidItemAction.__call__):
        (CheckValidItemAction.validate_item):
        (CheckCommandAction):
        (CheckCommandAction.__call__):
        (InvalidCommandError):
        (InvalidArgumentError):
        (InvalidConfigurationError):
        (CalledProcessError):
        (CalledProcessError.__str__):
        * Scripts/webkitpy/xcode/__init__.py:
        (xcode_hash_for_path):
        (xcode_hash_for_path.convert_to_string):
        * Scripts/webkitpy/xcode/sdk.py: Added.
        (SDK):
        (SDK.__init__):
        (SDK.__repr__):
        (SDK.as_xcode_specification):
        (SDK.get_preferred_sdk_for_platform):
        (SDK._parse_sdk):
        * Scripts/webkitpy/xcode/sdk_unittest.py: Added.
        (SDKTest):

2019-05-15  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enabling uploading EWS archives to S3
        https://bugs.webkit.org/show_bug.cgi?id=197914

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/Shared: Added.
        * BuildSlaveSupport/Shared/transfer-archive-to-s3: Moved from Tools/BuildSlaveSupport/build.webkit.org-config/transfer-archive-to-s3.
        (archiveExists): Replace tab with space.
        (main): Added main method.
        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (TransferToS3): Updated path to the script.
        * BuildSlaveSupport/build.webkit.org-config/transfer-archive-to-s3: Moved to Shared folder.

2019-05-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        inputmode="numeric" should show a number pad with digits 0-9, instead of the numeric keyplane
        https://bugs.webkit.org/show_bug.cgi?id=197916
        <rdar://problem/50815427>

        Reviewed by Timothy Hatcher.

        Re-enable this previously flaky test, and rebaseline the result to to expect UIKeyboardTypeNumberPad for
        inputmode="numeric".

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

2019-05-15  Youenn Fablet  <youenn@apple.com>

        Reuse existing WebPageProxy quota handler for NetworkProcessProxy quota requests
        https://bugs.webkit.org/show_bug.cgi?id=197463
        <rdar://problem/47403621>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm: Added.
        (-[QuotaDelegate init]):
        (-[QuotaDelegate _webView:decideDatabaseQuotaForSecurityOrigin:currentQuota:currentOriginUsage:currentDatabaseUsage:expectedUsage:decisionHandler:]):
        (-[QuotaDelegate quotaDelegateCalled]):
        (-[QuotaDelegate grantQuota]):
        (-[StorageSchemes webView:startURLSchemeTask:]):
        (-[StorageSchemes webView:stopURLSchemeTask:]):
        (-[QuotaMessageHandler userContentController:didReceiveScriptMessage:]):
        (doTest):

2019-05-15  Youenn Fablet  <youenn@apple.com>

        Constant crashes under WebPage::isThrottleable() after r245299
        https://bugs.webkit.org/show_bug.cgi?id=197902
        <rdar://problem/50793796>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-05-15  Philippe Normand  <pnormand@igalia.com>

        [GTK][jhbuild] misc cleanups and bumps
        https://bugs.webkit.org/show_bug.cgi?id=197913

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Bump to libva 2.4.1 and switch to Meson.
        * gtk/jhbuild.modules: Bump to Brotli 1.0.5 and Wayland 1.16.

2019-05-15  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses
        https://bugs.webkit.org/show_bug.cgi?id=195102
        <rdar://problem/48456786>

        Reviewed by Alex Christensen.

        Try to wait longer for the number of processes to reach the expected number
        and before failing.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-05-15  Alex Christensen  <achristensen@webkit.org>

        Allow NSFileCoordinator to be called from WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=197895
        <rdar://problem/50107679>

        Reviewed by Brent Fulgham.

        Add a unit test that verifies calling the block succeeds.

        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLsPlugin.mm:
        (-[AdditionalReadAccessAllowedURLsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):

2019-05-14  Andy Estes  <aestes@apple.com>

        [Apple Pay] Payment APIs should be completely disabled in web views into which clients have injected user scripts
        https://bugs.webkit.org/show_bug.cgi?id=197751
        <rdar://problem/50631563>

        Reviewed by Alex Christensen.

        Added new API tests.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
        (-[TestApplePayScriptMessageHandler initWithAPIsAvailableExpectation:canMakePaymentsExpectation:]):
        (-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        (-[TestApplePayScriptMessageHandler initWithExpectation:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html:

2019-05-14  Youenn Fablet  <youenn@apple.com>

        A service worker process should app nap when all its clients app nap
        https://bugs.webkit.org/show_bug.cgi?id=185626
        <rdar://problem/46785908>

        Reviewed by Alex Christensen.

        Allow to enable app nap through test header.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-05-14  Commit Queue  <commit-queue@webkit.org>

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

        Broke API Test TestWebKitAPI.Challenge.ClientCertificate
        (Requested by aakashjain on #webkit).

        Reverted changeset:

        "Add a unit test for client certificate authentication"
        https://bugs.webkit.org/show_bug.cgi?id=197800
        https://trac.webkit.org/changeset/245281

2019-05-14  Youenn Fablet  <youenn@apple.com>

        Add support for webkit-test-runner options to WPT importer
        https://bugs.webkit.org/show_bug.cgi?id=197826

        Reviewed by Alex Christensen.

        In case of overwriting an existing test, check if the existing test
        contains a <!-- webkit-test-runner --> comment and insert it back if
        needed in the new test.

        For exporter, forbid creating a WPT PR if there are changes containing
        the webkit-test-runner string.

        * Scripts/webkitpy/w3c/test_converter.py:
        (convert_for_webkit):
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.add_webkit_test_runner_options_if_needed):
        (_W3CTestConverter.handle_starttag):
        (_W3CTestConverter.handle_comment):
        (_W3CTestConverter.handle_decl):
        (_W3CTestConverter.handle_pi):
        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter.write_git_patch_file):
        (WebPlatformTestExporter.make_pull_request):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.webkit_test_runner_options):
        (TestImporter):
        (TestImporter.add_webkit_test_runner_options_to_content):
        (TestImporter.copy_html_file):
        (TestImporter.write_html_template):
        (TestImporter.write_html_files_for_templated_js_tests):
        (TestImporter.import_tests):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (test_manual_slow_test):
        (test_webkit_test_runner_options):

2019-05-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should turn orange when any build step fails
        https://bugs.webkit.org/show_bug.cgi?id=197812

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Turn status-bubble orange if there is any failed step in the on-going build.
        (StatusBubble._does_build_contains_any_failed_step): Method to check if build contains any failed step.

2019-05-14  Alex Christensen  <achristensen@webkit.org>

        Add a unit test for client certificate authentication
        https://bugs.webkit.org/show_bug.cgi?id=197800

        Reviewed by Youenn Fablet.

        Make better abstractions for reading and writing from/to TCPServer.
        Add a unit test that causes a client certificate authentication challenge to happen.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::read):
        (TestWebKitAPI::TCPServer::write):
        (TestWebKitAPI::TCPServer::respondWithChallengeThenOK):
        (TestWebKitAPI::TCPServer::respondWithOK):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (credentialWithIdentity):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):
        (-[ClientCertificateDelegate webView:didFinishNavigation:]):
        (-[ClientCertificateDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (-[ClientCertificateDelegate challengeCount]):
        (TestWebKitAPI::TEST):
        (respondWithChallengeThenOK): Deleted.
        (credentialWithIdentityAndKeychainPath): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):
        (readRequest): Deleted.
        (writeResponse): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::respondWithChallengeThenOK): Deleted.

2019-05-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Adding support for HEIF-sequence ('public.heics') images
        https://bugs.webkit.org/show_bug.cgi?id=197384

        Reviewed by Simon Fraser.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        Parse the new webkit-test-runner paramter: additionalSupportedImageTypes.
        Make DRT call setAdditionalSupportedImageTypesForTesting() before starting
        the test.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::stringForKey):
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::createTestSettingsDictionary):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        Parse the new webkit-test-runner paramter: additionalSupportedImageTypes.
        Make WTR call setAdditionalSupportedImageTypesForTesting() before starting
        the test.

2019-05-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress Watchpoint size by using enum type and Packed<> data structure
        https://bugs.webkit.org/show_bug.cgi?id=197730

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Packed.cpp: Added.
        (TestWebKitAPI::TEST):

2019-05-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix ProcessSwap.OpenerLinkAfterAPIControlledProcessSwappingOfOpener API test

        It became flaky after r245198.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-05-10  Youenn Fablet  <youenn@apple.com>

        A service worker instance should be terminated when its SWServer is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=197801
        <rdar://problem/50587270>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-05-10  Chris Dumez  <cdumez@apple.com>

        Do not wait until requestPermission() is called to fire deviceorientation events if permission was already granted
        https://bugs.webkit.org/show_bug.cgi?id=197750

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2019-05-10  Keith Miller  <keith_miller@apple.com>

        Remove legacy test262 import script
        https://bugs.webkit.org/show_bug.cgi?id=197788

        Reviewed by Yusuke Suzuki.

        import-test262-tests doesn't work anymore. We should be using test262-import instead.

        * Scripts/import-test262-tests: Removed.

2019-05-10  Charlie Turner  <cturner@igalia.com>

        [WPE] Forward libepoxy cflags
        https://bugs.webkit.org/show_bug.cgi?id=197784

        Reviewed by Žan Doberšek.

        Patch by Zan Dobersek.

        * wpe/backends/CMakeLists.txt: This is required to keep
        -DMESA_EGL_NO_X11_HEADERS in the build, if we don't do this, EGL ends
        up trying to include X11 headers even when they're not present in the
        environment.

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix a bunch of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=197785

        Reviewed by Don Olmstead.

        Add preprocessor guards to avoid -Wunused-function warnings.

        * TestWebKitAPI/Tests/WebCore/FloatRect.cpp:
        * TestWebKitAPI/Tests/WebCore/IntRect.cpp:
        * TestWebKitAPI/Tests/WebCore/TransformationMatrix.cpp:

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add webkit_frame_get_id() API
        https://bugs.webkit.org/show_bug.cgi?id=197270

        Reviewed by Carlos Garcia Campos.

        This was hard, but I added a test to verify that two different WebKitFrames of the same
        WebKitWebPage return two different frame IDs.

        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::willSubmitFormCallback):
        (WebKitFrameTest::testSubframe):
        (registerTests):
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameSubframe):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (willSubmitFormCallback):
        * TestWebKitAPI/Tests/WebKitGLib/resources/form-in-frame.html: Added.
        * TestWebKitAPI/Tests/WebKitGLib/resources/webkitglib-tests.gresource.xml:

2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Add WebKitWebPage::did-associate-form-controls-for-frame and deprecate original did-associate-form-controls
        https://bugs.webkit.org/show_bug.cgi?id=197271

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (formControlsAssociatedForFrameCallback):
        (pageCreatedCallback):
        (formControlsAssociatedCallback): Deleted.

2019-05-10  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak] Use the safe PyYAML loader if available
        https://bugs.webkit.org/show_bug.cgi?id=197771

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (load_manifest): Use yaml.safe_load() if available, with yaml.load()
        still used as fallback when the former is not provided by the module.

2019-05-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        WinCairo WebKitTestRunner should take platform/wk2/TestExpectations into account
        https://bugs.webkit.org/show_bug.cgi?id=197734

        Reviewed by Don Olmstead.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort._search_paths): Add 'wk2' and
        additional_platform_directory to paths as well as other ports do.

2019-05-09  Daniel Bates  <dabates@apple.com>

        [iOS] Numpad comma key has incorrect keyIdentifier property
        https://bugs.webkit.org/show_bug.cgi?id=197753
        <rdar://problem/50636274>

        Reviewed by Brent Fulgham.

        Recognize "numpadComma" and return the appropriate HID usage code.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

2019-05-09  Eric Carlson  <eric.carlson@apple.com>

        Refine AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=197742
        <rdar://problem/50590818>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::TEST):

2019-05-09  Alex Christensen  <achristensen@webkit.org>

        Remove unnecessary test SPI after r244883
        https://bugs.webkit.org/show_bug.cgi?id=197575

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (TestWebKitAPI::TEST):

2019-05-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add migrations file to repository
        https://bugs.webkit.org/show_bug.cgi?id=197729

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews/migrations/0001_initial.py: Added. Auto-generated by Django based on models' information.

2019-05-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Fix formatting issues and typos
        https://bugs.webkit.org/show_bug.cgi?id=197737

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Removed extra empty line.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestRunWebKitPerlTests): Fixed typo.
        * BuildSlaveSupport/ews-app/ews/models/step.py:
        (Step.save_step): Changed log level to info so that it is logged in production.

2019-05-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Production and Development env should configure DEBUG appropriately
        https://bugs.webkit.org/show_bug.cgi?id=197700

        Reviewed by Jonathan Bedard.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2019-05-09  Xan López  <xan@igalia.com>

        [CMake] Detect SSE2 at compile time
        https://bugs.webkit.org/show_bug.cgi?id=196488

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Do not add SSE2 flags here
        for x86 builds. This is now handled in WebKitCompilerFlags.cmake.

2019-05-08  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Update dependencies to use libwpe + WPEBackend-fdo 1.3.0
        https://bugs.webkit.org/show_bug.cgi?id=197697

        Reviewed by Žan Doberšek.

        * flatpak/org.webkit.WPEModules.yaml: Bump version and update checksums.
        * wpe/jhbuild.modules: Ditto.

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=197676

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake:
        Remove unnecessary library linkage.

2019-05-08  Stephan Szabo  <stephan.szabo@sony.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] build-webkit should be ready for Visual Studio 2019
        https://bugs.webkit.org/show_bug.cgi?id=196622

        Reviewed by Ross Kirsling.

        1. Accommodated to the new msbuild.exe location of VS 2019.
        2. Removed the hard coded "Visual Studio 15" generator.

        build-webkit is going to choose a Visual Studio generator version
        matching with the latest installed VS. If you invoke vcvars.bat
        before build-webkit, it chooses the corresponding Visual Studio
        generator version by cheking 'VisualStudioVersion' env var which
        is set by vcvars.bat.

        * Scripts/webkitdirs.pm: Renamed $vcBuildPath to $msBuildPath. Removed $msBuildInstallDir.
        (msBuildPath): When looking for MSBuild, look in
        "MSBuild\Current\bin" (the new expected location) and fallback
        to "MSBuild\15.0\bin" if we can't find an MSBuild.exe in the
        first location.
        (msBuildInstallDir): Renamed to msBuildPath.
        (generateBuildSystemFromCMakeProject): Use -A switch to specify x64.
        Add -G "Visual Studio " switch if a env var 'VisualStudioVersion'

2019-05-08  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Update port options
        https://bugs.webkit.org/show_bug.cgi?id=197723

        Reviewed by Ross Kirsling.

        ICU headers were missing from TestWTF.

        * TestWebKitAPI/PlatformPlayStation.cmake:

2019-05-08  Alex Christensen  <achristensen@webkit.org>

        Don't crash when DOMNode.addEventListener:listener:useCapture: is called with a nil listener
        https://bugs.webkit.org/show_bug.cgi?id=197712
        <rdar://problem/50429770>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitLegacy/mac/DeallocWebViewInEventListener.mm:
        (TestWebKitAPI::TEST):

2019-05-08  Jonathan Bedard  <jbedard@apple.com>

        Change my status to be a WebKit reviewer.

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

2019-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244952.

        Caused inspector to appear blank.

        Reverted changeset:

        "Web Inspector: Provide UIString descriptions to improve
        localizations"
        https://bugs.webkit.org/show_bug.cgi?id=195132
        https://trac.webkit.org/changeset/244952

2019-05-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        TestRunnerWKWebView's menu callbacks should be cleared upon UI script completion
        https://bugs.webkit.org/show_bug.cgi?id=197685

        Reviewed by Alex Christensen.

        Fixes a bug in the test runner wherein didShowMenuCallback and didHideMenuCallback are not reset upon UI script
        completion. See LayoutTests/ChangeLog for more details.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformClearAllCallbacks):

2019-05-07  Oriol Brufau  <obrufau@igalia.com>

        Unreviewed. Add myself as a committer.

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

2019-05-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245038.

        Breaks internal builds.

        Reverted changeset:

        "Add SPI to set a list of hosts to which to send custom header
        fields cross-origin"
        https://bugs.webkit.org/show_bug.cgi?id=197397
        https://trac.webkit.org/changeset/245038

2019-05-07  Joonghun Park  <pjh0718@gmail.com>

        Unreviewed. Add myself as a committer.

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

2019-05-07  Eric Carlson  <eric.carlson@apple.com>

        Define media buffering policy
        https://bugs.webkit.org/show_bug.cgi?id=196979
        <rdar://problem/28383861>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm: Added.
        (waitUntilBufferingPolicyIsEqualTo):
        (TEST):

2019-05-07  Alex Christensen  <achristensen@webkit.org>

        Add SPI to set a list of hosts to which to send custom header fields cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=197397

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        (expectLegacyHeaders):
        (expectHeaders):
        (-[CustomHeaderFieldsDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
        (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]):
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted.

2019-05-07  Keith Rollin  <krollin@apple.com>

        Add option to build-webkit to control whether or not XCBuild is used
        https://bugs.webkit.org/show_bug.cgi?id=197668
        <rdar://problem/50549728>

        Reviewed by Tim Horton.

        Add --[no-]xcbuild to build-webkit to force the use of XCBuild or not.
        Also update build-webkit and the makefiles with the foundation for
        automatically using XCBuild when the conditions allow it. This latter
        facility is currently turned off until Xcode fully supports building
        WebKit with XCBuild.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (XcodeOptions):
        (canUseXCBuild):

2019-05-07  Andy Estes  <aestes@apple.com>

        run-bindings-tests should test global scope constructor generation
        https://bugs.webkit.org/show_bug.cgi?id=197669

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/bindings/main.py:
        Updated to specify --testGlobalContextName and --testGlobalScopeConstructorsFile when
        invoking preprocess-idls.pl.

2019-05-07  Youenn Fablet  <youenn@apple.com>

        Flaky API Test: TestWebKitAPI.ServiceWorkers.ServiceWorkerAndCacheStorageDefaultDirectories
        https://bugs.webkit.org/show_bug.cgi?id=195997
        <rdar://problem/50509884>

        Reviewed by Chris Dumez.

        Spin test until successful.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-05-07  Adrian Perez de Castro  <aperez@igalia.com>

        [Flatpak] webkit-build fails due to missing GTK2 in build environment
        https://bugs.webkit.org/show_bug.cgi?id=197352

        Reviewed by Philippe Normand.

        The Flatpak runtimes do not include GTK 2.x anymore, which means that we need
        to build it ourselves on top in order to be able to build the GTK 2.x plugin
        process.

        * flatpak/org.webkit.GTK.yaml: Add gtk2 package.

2019-05-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Avoid crashing the UI process when writing empty data to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=197644
        <rdar://problem/50526364>

        Reviewed by Tim Horton.

        Add a new API test to exercise a possible scenario where we may crash while writing data to the pasteboard.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:pasteboardDataForRange:]):

2019-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] MiniBrowser: load about:blank for new web views in automation mode
        https://bugs.webkit.org/show_bug.cgi?id=197651

        Reviewed by Žan Doberšek.

        This is required since the process creation was delayed until something is loaded in the view.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_get_or_create_web_view_for_automation):
        * MiniBrowser/wpe/main.cpp:
        (main):

2019-05-06  Tim Horton  <timothy_horton@apple.com>

        _overrideViewportWithArguments does not work when called before loading
        https://bugs.webkit.org/show_bug.cgi?id=197638
        <rdar://problem/50505111>

        Reviewed by Wenson Hsieh.

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

2019-05-04  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510

        Reviewed by Alex Christensen.

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

2019-05-06  Keith Rollin  <krollin@apple.com>

        Temporarily disable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197619
        <rdar://problem/50507392>

        Reviewed by Alex Christensen.

        We need to perform a significant update to the generate-xcfilelist
        scripts. This work involves coordinated work with another facility. If
        the work does not occur in tandem, the build will be broken. To avoid
        this, disable the invoking of the scripts during the transition. The
        checking will be restored once the new scripts are in place.

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:

2019-05-04  Alex Christensen  <achristensen@webkit.org>

        Revert r244953 and r244954 because they broke internal builds.
        https://bugs.webkit.org/show_bug.cgi?id=197534

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h: Added.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

2019-05-04  Alex Christensen  <achristensen@webkit.org>

        Merge the three UIKitSPI.h files into a single one in PAL
        https://bugs.webkit.org/show_bug.cgi?id=197534

        Reviewed by Darin Adler.

        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/UIKitSPI.h: Removed.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

2019-05-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Provide UIString descriptions to improve localizations
        https://bugs.webkit.org/show_bug.cgi?id=195132
        <rdar://problem/48457817>

        Reviewed by Devin Rousso.

        Allow WI.UIString to take:
        - WI.UIString(string, key, comment)
        - WI.UIString(string, comment)
        - WI.UIString(string)

        * Scripts/extract-localizable-js-strings:

2019-05-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r244897): Caret may appear wider than normal after zooming to focus an editable element
        https://bugs.webkit.org/show_bug.cgi?id=197579

        Reviewed by Tim Horton.

        Fixes a couple of flaky layout tests (ModifyInputAssistantItemBarButtonGroups and
        OverrideInputAssistantItemBarButtonGroups) by programmatically blurring focused elements and waiting for the
        input session to change, rather than relying on -resignFirstResponder and -waitForNextPresentationUpdate to
        ensure that the the focused element has been blurred.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

2019-05-02  Alexey Proskuryakov  <ap@apple.com>

        Add a tool to block spammer accounts
        https://bugs.webkit.org/show_bug.cgi?id=197537

        Reviewed by Darin Adler.

        Usage: block-spammers email1 email2 ...

        The tool finds and hides all bugs and comments from this account. Before any work
        is done, these bugs and comments are displayed for confirmation.

        * Scripts/block-spammers: Added.
        (get_bugzilla_token):
        (invalidate_bugzilla_token):
        (get_user_info):
        (get_user_info_self):
        (can_use_this_tool):
        (disable_user):
        (get_bugs_created_by_user):
        (get_bugs_commented_on_by_user):
        (get_comments):
        (hide_bug):
        (hide_comments):
        (ask_yes_no):
        (sanitized_string):
        (main):

2019-05-03  Jonathan Bedard  <jbedard@apple.com>

        run-apit-tests: Add --iterations and --repeat-each
        https://bugs.webkit.org/show_bug.cgi?id=197563

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager.run): Add --iterations and --repeat-each/
        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Duplicate the test list based on --iterations and --repeat-each.

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

        New EWS: Clicking on white bubble navigates to page with only bubbles
        https://bugs.webkit.org/show_bug.cgi?id=197520

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Disable clicking if bubble doesn't have any url.

2019-05-03  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Support adding pretty-printing for qualified types
        https://bugs.webkit.org/show_bug.cgi?id=197518

        Reviewed by Darin Adler.

        Remove all "::"s from the name of the specified type when computing the name for the Python classes
        that will provide summary and synthetic details as LLDB is not happy about registering such classes
        when they contain :: in their name.

        * lldb/lldb_webkit.py:
        (addSummaryAndSyntheticFormattersForRawBitmaskType):

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

        New EWS: patches on recently added queues listed as #1 for older bugs
        https://bugs.webkit.org/show_bug.cgi?id=197496

        Reviewed by Lucas Forschler.

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

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

        webkit-patch --no-review upload does not submit patch to New EWS
        https://bugs.webkit.org/show_bug.cgi?id=197519
        <rdar://problem/50424887>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/tool/steps/submittoews.py:
        (SubmitToEWS.run): Submit to both old and new EWS.
        * Scripts/webkitpy/common/config/urls.py: Added url for new EWS server.
        * Scripts/webkitpy/common/net/ewsserver.py: Added.
        (EWSServer._server_url): Method to return server url.
        (EWSServer._post_patch_to_ews): Method to post patch to ews.
        (EWSServer.submit_to_ews): Method to submit the patch to ews using NetworkTransaction.
        * Scripts/webkitpy/common/net/ewsserver_mock.py: Added Mock EWS Server.
        * Scripts/webkitpy/common/net/ewsserver_unittest.py: Added unit-test for EWS Server.
        * Scripts/webkitpy/common/net/statusserver_mock.py:
        (MockStatusServer.submit_to_ews): Updated the log text.
        * Scripts/webkitpy/tool/commands/queues_unittest.py: Updated unit-tests.
        * Scripts/webkitpy/tool/commands/upload_unittest.py: Ditto.
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch.__init__): Initialize ews_server. 
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.__init__): Ditto.

2019-05-03  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: [weakThis->m_view window] == weakThis->m_targetWindowForMovePreparation
        https://bugs.webkit.org/show_bug.cgi?id=197574
        <rdar://problem/50453181>

        Reviewed by Tim Horton.

        Add API test coverage.

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

2019-05-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Generator CodeBlock generation should be idempotent
        https://bugs.webkit.org/show_bug.cgi?id=197552

        Reviewed by Keith Miller.

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

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

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

        Breaks compilation of jsconly on linux, breaking compilation
        for jsc-i386-ews, jsc-mips-ews and jsc-armv7-ews (Requested by
        guijemont on #webkit).

        Reverted changeset:

        "[CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into
        WEBKIT_COPY_FILES"
        https://bugs.webkit.org/show_bug.cgi?id=197174
        https://trac.webkit.org/changeset/244881

2019-05-03  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix after r244898.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::abortModal): Add the missing (no-op) definition.

2019-05-02  Alex Christensen  <achristensen@webkit.org>

        Mark U+01C0 as a homograph of U+006C
        https://bugs.webkit.org/show_bug.cgi?id=197526
        <rdar://problem/50301904>

        Reviewed by Tim Horton.

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

2019-05-02  Chris Dumez  <cdumez@apple.com>

        Add test coverage for <rdar://problem/49731231>
        https://bugs.webkit.org/show_bug.cgi?id=196730
        <rdar://problem/49731231>

        Reviewed by Ryosuke Niwa.

        Add support for testRunner.abortModal() in macOS's WebKitTestRunner in order
        to match DumpRenderTree.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::abortModal):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runModal):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::abortModal):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::abortModal):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::abortModal):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::abortModal):

2019-05-02  Christopher Reid  <chris.reid@sony.com>

        [CMake] Add support for LTO builds
        https://bugs.webkit.org/show_bug.cgi?id=188986

        Reviewed by Don Olmstead.

        Add support to configure --lto-mode with cmake builds.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-05-02  John Wilander  <wilander@apple.com>

        Make both filterForRegistrableDomains() in WebKit::NetworkProcess use WebCore::RegistrableDomain::uncheckedCreateFromHost()
        https://bugs.webkit.org/show_bug.cgi?id=197521
        <rdar://problem/49651503>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp:
        (TestWebKitAPI::TEST):
           Added a test for host strings with leading dots since they are
           often used for the domain attribute in cookies.

2019-05-02  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:] doesn't delete _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=197510

        Reviewed by Alex Christensen.

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

2019-05-02  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into WEBKIT_COPY_FILES
        https://bugs.webkit.org/show_bug.cgi?id=197174

        Reviewed by Alex Christensen.

        Make TestJSC dependent on JavaScriptCorePrivateFrameworkHeaders.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:

2019-05-02  Alex Christensen  <achristensen@webkit.org>

        Build fix for internal branch.

        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        RetainPtr.h was not explicitly included.

2019-05-02  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore errors when shutting down an already shutdown simulator
        <https://bugs.webkit.org/show_bug.cgi?id=197514>
        <rdar://problem/50390247>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice._shut_down):

2019-05-02  Frederic Wang  <fwang@igalia.com>

        [GTK][WPE] Disable "thin", "thick", "medium" values of mfrac@linethickness at runtime
        https://bugs.webkit.org/show_bug.cgi?id=196142

        This patch introduces some experimental runtime flag to let users
        disable MathML features that are removed from MathML Core [1]. For now,
        these features are only disabled on GTK and WPE ports.

        [1] https://mathml-refresh.github.io/mathml-core/

        Reviewed by Rob Buis.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2019-05-01  Don Olmstead  <don.olmstead@sony.com>

        TestWebKitAPI config.h should be aware of what suite is being built
        https://bugs.webkit.org/show_bug.cgi?id=196583

        Reviewed by Konstantin Tokarev.

        Migrate to WEBKIT_EXECUTABLE to define the Test* executables. As an added
        benefit the macro defines BUILDING_* for the executable which allows the includes
        of the config.h to be tailored to the test suite being built. Because of that the
        dependencies of the Test* executable are specific to the test suite which may
        speed up the build.

        Some source files were including "PlatformUtilities.h" which includes WebKit headers
        when "Utilities.h" is what was needed.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformMac.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/LineBreaking.mm:
        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        * TestWebKitAPI/config.h:

2019-05-01  Jiewen Tan  <jiewen_tan@apple.com>

        Move Document::domainIsRegisterable to SecurityOrigin::isMatchingRegistrableDomainSuffix
        https://bugs.webkit.org/show_bug.cgi?id=181950
        <rdar://problem/43357371>

        Reviewed by Brent Fulgham.

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

2019-05-01  Aakash Jain  <aakash_jain@apple.com>

        Remove webkitpy and bindings EWS queues from dashboard
        https://bugs.webkit.org/show_bug.cgi?id=197475

        Reviewed by Alexey Proskuryakov.

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

2019-05-01  Aakash Jain  <aakash_jain@apple.com>

        Remove webkitpy and bindings test queues from old EWS
        https://bugs.webkit.org/show_bug.cgi?id=197468

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py:

2019-04-30  Tim Horton  <timothy_horton@apple.com>

        Fix the WebKitTestRunner build
        https://bugs.webkit.org/show_bug.cgi?id=197449
        <rdar://problem/50334169>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        (WTR::EventSenderProxy::mouseForceChanged):
        Use some SPI instead of IPI.

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) URL scheme handlers can no longer respond asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=197426
        <rdar://problem/50256169>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme setShouldRespondAsynchronously:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        (-[PSONScheme webView:stopURLSchemeTask:]):

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r244802.

        Caused an API test failure

        Reverted changeset:

        "Regression(PSON) URL scheme handlers can no longer respond
        asynchronously"
        https://bugs.webkit.org/show_bug.cgi?id=197426
        https://trac.webkit.org/changeset/244802

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) URL scheme handlers can no longer respond asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=197426
        <rdar://problem/50256169>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme setShouldRespondAsynchronously:]):
        (-[PSONScheme webView:startURLSchemeTask:]):
        (-[PSONScheme webView:stopURLSchemeTask:]):

2019-04-30  Chris Dumez  <cdumez@apple.com>

        Only use a related page's process if that page has not been closed yet
        https://bugs.webkit.org/show_bug.cgi?id=197393
        <rdar://problem/50302423>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-30  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable Bindings tests queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=197424

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * BuildSlaveSupport/ews-build/config.json:

2019-04-30  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Configure ews151 for running various tests
        https://bugs.webkit.org/show_bug.cgi?id=197419

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-04-30  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Parse and display bindings test failures
        https://bugs.webkit.org/show_bug.cgi?id=197423

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunBindingsTests.__init__): Set timeout of 5 minutes.
        (RunBindingsTests.start): Initialize log_observer for json output.
        (RunBindingsTests.getResultSummary): Update step and build summary based on bindings test results.
        (RunBindingsTests._addToLog): Method to add message to log.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-test accordingly.

2019-04-30  Pablo Saavedra  <psaavedra@igalia.com>

        Unreviewed. Add myself as a committer.

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

2019-04-30  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Enable webkitpy queue on new EWS
        https://bugs.webkit.org/show_bug.cgi?id=197396

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        * BuildSlaveSupport/ews-build/config.json:

2019-04-30  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Parse and display webkitpy failures
        https://bugs.webkit.org/show_bug.cgi?id=197395

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (RunWebKitPyTests.start): Initialize log_observer for json output.
        (RunWebKitPyTests.getResultSummary): Update step and build summary based on webkitpy results.
        (RunWebKitPyTests._addToLog): Method to add message to log.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Updated unit-test accordingly.

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2019-04-29  Youenn Fablet  <youenn@apple.com>

        Remove spurious GVA printf logging
        https://bugs.webkit.org/show_bug.cgi?id=197368
        <rdar://problem/35975256>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip):

2019-04-29  Youenn Fablet  <youenn@apple.com>

        getDisplayMedia should be called on user gesture
        https://bugs.webkit.org/show_bug.cgi?id=197356
        <rdar://problem/50296074>

        Reviewed by Eric Carlson.

        Update test configuration to inject internals
        so that we can use it to simulate a user click to call getDisplayMedia.

        * TestWebKitAPI/Tests/WebKit/getDisplayMedia.html:
        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::GetDisplayMediaTest::SetUp):

2019-04-26  Stephanie Lewis  <slewis@apple.com>

        run-benchmarks should have an intial prep and restore env call for tasks that are too expensive to do for every iteration
        https://bugs.webkit.org/show_bug.cgi?id=197339

        Reviewed by Dewei Zhu.

        Add two new functions prepare_inital_env and restore_env_after_all_testing around the entire
        test run for setup steps that are too expensive to do every iteration.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner._run_benchmark):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver):
        (BrowserDriver.prepare_initial_env):
        (BrowserDriver.restore_env_after_all_testing):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py:
        (LinuxBrowserDriver.prepare_initial_env):
        (LinuxBrowserDriver.restore_env_after_all_testing):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.prepare_initial_env):
        (OSXBrowserDriver.restore_env_after_all_testing):

2019-04-28  Andy Estes  <aestes@apple.com>

        Fix the watchOS engineering build.

        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
        (TestWebKitAPI::TEST): AVVideoPerformanceMetrics does not exist on watchOS.

2019-04-27  Chris Dumez  <cdumez@apple.com>

        [WKTR] Move test timeout handling to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=197333

        Reviewed by Darin Adler.

        Move test timeout handling in WebKitTestRunner to the UIProcess to play nicely with PSON. Previously,
        we'd start the timeout timer in the InjectedBundle, which would fail to account of the time spent in
        every WebContent process in the case of swapping.

        Also, because of process caching, the timeout timer would sometime fire in a cached process and it
        would lead to crashes when firing the timer.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::done):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        (WTR::InjectedBundle::shouldDumpPixels const):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        (WTR::TestRunner::waitUntilDone):
        (WTR::TestRunner::setWaitUntilDone):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
        * WebKitTestRunner/InjectedBundle/wpe/TestRunnerWPE.cpp:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::TestInvocation):
        (WTR::TestInvocation::createTestSettingsDictionary):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestInvocation::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestInvocation::waitToDumpWatchdogTimerFired):
        (WTR::TestInvocation::setWaitUntilDone):
        (WTR::TestInvocation::done):
        * WebKitTestRunner/TestInvocation.h:

2019-04-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] linkPolymorphicCall now does GC
        https://bugs.webkit.org/show_bug.cgi?id=197306

        Reviewed by Saam Barati.

        The test is sensitive to allocations and even adding $vm makes it non-reproducible.
        To add this test, we add `runWithoutBaseOption`.

        * Scripts/run-jsc-stress-tests:

2019-04-26  Alexey Proskuryakov  <ap@apple.com>

        Update inactive reviewers' status to 'contributor'.

        Accidentally skipped one at first.

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

2019-04-26  Alexey Proskuryakov  <ap@apple.com>

        Update inactive reviewers' status to 'contributor'.

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

        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        Sadly, regression tests operate on a crazy mix of mock and live data for
        contributors.json. It would be a substantial project to mock all code paths,
        so changing the tests instead.

2019-04-26  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: Added.
        (TestWebKitAPI::TEST):

2019-04-26  David Kilzer  <ddkilzer@apple.com>

        WebKitTestRunner leaks an NSDictionary and multiple JSStringRef objects
        <https://webkit.org/b/197314>
        <rdar://problem/50245252>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        - Use adopt(JSStringCreateWithCFString(...)) to fix leaks.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator sendEventStream:completionBlock:]):
        - Call -autorelease to fix leak of NSDictionary.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::accessibilitySpeakSelectionContent const):
        (WTR::UIScriptController::selectFormPopoverTitle const):
        (WTR::UIScriptController::textContentType const):
        (WTR::UIScriptController::formInputLabel const):
        (WTR::UIScriptController::scrollingTreeAsText const):
        - Use adopt(JSStringCreateWithCFString(...)) to fix leaks.

2019-04-26  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Running a single test will always use the default device
        https://bugs.webkit.org/show_bug.cgi?id=195472
        <rdar://problem/48724825>

        Reviewed by Lucas Forschler.

        It makes more sense to have the Manager class handle the case where a user specifically requests a test which is
        skipped on the current configuration. This changes the behavior when running part of a test shard, now tests explicitly
        requested will be run regardless of what shard they are in.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.skip_tests): Caller should manage running skipped tests which were explicitly requested.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): If a test is marked as skipped for the configuration, but was specifically requested, run it anyways
        on the default device type.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_run_chunk): Explicitly requesting a test will override sharing behavior.
        (RunTest.test_run_part): Ditto.

2019-04-26  Alex Christensen  <achristensen@webkit.org>

        Add ENABLE(CONTENT_EXTENSIONS) and namespace ContentExtensions to ResourceLoadInfo.h
        https://bugs.webkit.org/show_bug.cgi?id=197165

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:

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

        Replace iOS build queue hardware
        https://bugs.webkit.org/show_bug.cgi?id=197312

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        Use newer hardware that supports macOS Mojave.

2019-04-26  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        check-webkit-style complains the first block in while loop.
        https://bugs.webkit.org/show_bug.cgi?id=197307

        The style checker shouldn't complain about an open brace on
        its own line if the last non-whitespace character on the previous
        non-blank line is another open brace, because it's likely to
        indicate the begining of a nested code block.

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_braces):

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

        Stop IDB transactions to release locked database files when network process is ready to suspend
        https://bugs.webkit.org/show_bug.cgi?id=196372
        <rdar://problem/48930116>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBSuspendImminently.mm: Added.
        (-[IndexedDBSuspendImminentlyMessageHandler userContentController:didReceiveScriptMessage:]):
        (runTestAndCheckResult):
        (keepNetworkProcessActive):
        (TEST):

2019-04-25  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r234330): 3 legacy-animation-engine/compositing tests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=188357
        <rdar://problem/42986633>

        Reviewed by Dean Jackson.

        DumpRenderTree had no code that set page.setCompositingPolicyOverride() to Normal, so some
        tests would fall into low memory mode and have different behavior.
        
        Fix by moving the code that calls setCompositingPolicyOverride(Normal) from the WK2 layer
        to Internals, so it's shared by DRT and WTR.
        
        We no longer need the WK2 C SPI glue.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::prepare):

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

        webkitpy: Including skipped tests in the final count
        https://bugs.webkit.org/show_bug.cgi?id=197298
        <rdar://problem/49705424>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (BuildBotPrinter.print_run_results): The total number of tests run should exclude delibrately skipped tests.

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable date and time inputs on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197287
        rdar://problem/46794376

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix test-webkitpy after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        Also use C++17.

2019-04-25  Per Arne Vollan  <pvollan@apple.com>

        -[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:] never returns _WKWebsiteDataTypeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=196991
        <rdar://problem/45507423>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
        (-[NavigationTestDelegate init]):
        (-[NavigationTestDelegate waitForDidFinishNavigation]):
        (-[NavigationTestDelegate webView:didFinishNavigation:]):
        (-[NavigationTestDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):
        (TEST): Deleted.

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Revert some code accidentally committed with r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

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

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Start using C++17
        https://bugs.webkit.org/show_bug.cgi?id=197131

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2019-04-25  Commit Queue  <commit-queue@webkit.org>

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

        Causing internal build failures (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244627

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

        [GTK] Hardcoded text color in input fields
        https://bugs.webkit.org/show_bug.cgi?id=126907

        Reviewed by Michael Catanzaro.

        Add dark-mode command line option to MiniBrowser.

        * MiniBrowser/gtk/main.c:
        (main):

2019-04-24  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST):
        The expected order of incoming events is
        1. didInvalidateIntrinsicContentSize
        2. didFirstLayout
        At setRenderingProgressDidChange, we already check if didInvalidateIntrinsicContentSize comes in first.
        However it's not guaranteed that the milestone event is delayed until after TestWebKitAPI::Util::run() is finished
        (and remember, all we care about is ordering).

2019-04-24  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: Added.
        (TestWebKitAPI::TEST):

2019-04-24  Brady Eidson  <beidson@apple.com>

        XMLHTTPRequest POSTs to a custom WKURLSchemeHandler protocol are missing the HTTP body.
        https://bugs.webkit.org/show_bug.cgi?id=191362

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm: Add a test that POSTs all sorts of things
          from an XHR to a custom protocol.

2019-04-25  Simon Fraser  <simon.fraser@apple.com>

        DumpRenderTree doesn't call Internals::resetToConsistentState() before the first test
        https://bugs.webkit.org/show_bug.cgi?id=197273

        Reviewed by Dean Jackson.

        Reorder code so that we create gTestRunner before calling resetWebViewToConsistentStateBeforeTesting(),
        so that WebCoreTestSupport::resetInternalsObject() is always run.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):

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

        Age out unconverted Ad Click Attributions after one week.
        https://bugs.webkit.org/show_bug.cgi?id=197238
        <rdar://problem/50177349>

        Reviewed by Chris Dumez.

        This patch adds infrastructure to allow tests to expire all unconverted
        attributions early.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::markAdClickAttributionsAsExpiredForTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::markAdClickAttributionsAsExpiredForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-04-24  Chris Dumez  <cdumez@apple.com>

        Fix flaky crashes in a couple of PSON API tests
        https://bugs.webkit.org/show_bug.cgi?id=197239

        Reviewed by Tim Horton.

        Do not adopt the NSURLRequest returned by [NSURLRequest requestWithURL:].

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-24  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to control the renderTreeAsText output by setting options on testRunner
        https://bugs.webkit.org/show_bug.cgi?id=197133

        Reviewed by Sam Weinig.

        Add testRunner.setRenderTreeDumpOptions() and expose the subset of RenderAsTextFlag flags
        that make sense in testing (those that don't dump unstable data like addresses), and plumb
        these flags through the various framework layers.

        Convert RenderAsTextBehavior to an OptionSet<RenderAsTextFlag>.

        Fix code generation in WebKitTestRunner to generate bindings for IDL const values,
        and hand-code DumpRenderTree bindings.

        Some cleanup of the TestRunners, using member initializers.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (setRenderTreeDumpOptionsCallback):
        (TestRunner::staticFunctions):
        (TestRunner::setRenderTreeDumpOptions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::renderTreeDumpOptions const):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        (WTR::TestRunner::setRenderTreeDumpOptions):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::renderTreeDumpOptions const):

2019-04-24  Alex Christensen  <achristensen@webkit.org>

        WKContentRuleLists should have a maximum FileProtection of CompleteUnlessOpen
        https://bugs.webkit.org/show_bug.cgi?id=197078
        <rdar://problem/49564348>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (TEST_F):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]): Deleted.
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]): Deleted.
        Unfortunately, setting the NSFileProtectionKey attribute is only supported on iOS devices.

2019-04-24  Alex Christensen  <achristensen@webkit.org>

        Add unit test for r239322
        https://bugs.webkit.org/show_bug.cgi?id=197236

        Reviewed by Chris Dumez.

        I initially developed this as a unit test for rdar://problem/48797895 but it seems that isn't quite ready.
        May as well add the test infrastructure which was needed before and will be needed in the future.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::downloadAtRate):
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Proxy.mm: Added.
        (-[ProxyDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ProxyDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):

2019-04-24  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is communicated with the WebPageProxy but not the WebFrameProxy
        https://bugs.webkit.org/show_bug.cgi?id=197214
        <rdar://problem/49237544>

        Reviewed by Alex Christensen.

        Extend API test coverage.

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

2019-04-24  Philippe Normand  <pnormand@igalia.com>

        [Build][GStreamer] Update to 1.16.0
        https://bugs.webkit.org/show_bug.cgi?id=197157

        Reviewed by Xabier Rodriguez-Calvar.

        The upstreamed patches were removed and a new one was added for a
        regression detected in the scaletempo GStreamer element. The GNOME
        Flatpak was migrated to 3.32 and I switched a few modules to Meson
        on the way, as it is the preferred build system now in GStreamer
        1.16.

        * flatpak/files/httpd-autogen.sh:
        * flatpak/flatpakutils.py:
        (FlatpakPackage.install):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/org.webkit.CommonModules.yaml:
        * flatpak/org.webkit.WebKit.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-aomenc-Add-support-for-10-12bit-decoding.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0002-aomenc-Handle-8-bit_depth-images-with-AOM_IMG_FMT_HI.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0003-fdkaacenc-Remove-MODE_2_1.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0004-fdkaacdec-Use-WAV-channel-mapping-instead-of-interleave-setting.patch: Removed.
        * gstreamer/patches/gst-plugins-bad-0005-mssdemux-fix-protection-data-double-free.patch: Removed.
        * gstreamer/patches/gst-plugins-base-0001-parsebin-Post-STREAM_COLLECTION-on-EVENT_STREAM_COLL.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Detect-and-expose-CEA-608-708-Closed-Caption.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Do-not-run-the-preferred-decryptor-context-q.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0002-qtdemux-Do-not-unref-a-NULL-stream_tags.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0002-qtdemux-add-context-for-a-preferred-protection.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0003-qtdemux-Clarify-field-name-about-stream-encryption-s.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0003-qtdemux-also-push-buffers-without-encryption-info-in.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0004-qtdemux-Add-initial-support-for-AV1-demuxing.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0005-qtdemux-Extract-AV1-codec_data-and-put-it-in-the-cap.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-Recognize-more-AV1-atoms.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0011-matroska-Add-the-WebM-encrypted-content-support-in-m.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0012-matroskdemux-do-not-use-MapInfo.data-after-unmapping.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0013-Avoid-warning-when-reporting-about-decryptors.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0014-pulse-Mark-default-devices-as-default.patch: Removed.
        * gstreamer/patches/gst-plugins-good-scaletempo-Advertise-interleaved-layout-in-caps-temp.patch: Added.
        * gstreamer/patches/gstreamer-0001-protection-Add-a-new-definition-for-unspecified-syst.patch: Removed.
        * gstreamer/patches/gstreamer-0002-protection-Fix-the-string-to-define-unspecified-syst.patch: Removed.

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

        [GTK] MiniBrowser: also set the passed bg-color when receiving arguments
        https://bugs.webkit.org/show_bug.cgi?id=197156

        Reviewed by Michael Catanzaro.

        The background color is only set when MiniBrowser is launched without arguments. This regressed when tabs
        support was added.

        * MiniBrowser/gtk/BrowserTab.c:
        (browser_tab_set_background_color): Set the passed in color as web view background color.
        * MiniBrowser/gtk/BrowserTab.h:
        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init): Initialize backgroundColor.
        (browser_window_append_view): Call browser_tab_set_background_color().
        (browser_window_set_background_color): Save the passed in color. This function should now be called before tabs
        are added.
        * MiniBrowser/gtk/main.c:
        (main): Call browser_window_set_background_color() before creating the tabs.

2019-04-23  John Wilander  <wilander@apple.com>

        Move Ad Click Attribution from internal feature to experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=197218
        <rdar://problem/47651691>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):

2019-04-23  Andy Estes  <aestes@apple.com>

        [iOS] QuickLook documents loaded from file: URLs should be allowed to perform same-document navigations
        https://bugs.webkit.org/show_bug.cgi?id=196749
        <rdar://problem/35773454>

        Reviewed by Daniel Bates.

        Added a new QuickLook API test and added new expectations to existing QuickLook tests.

        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (-[QuickLookDelegate webView:didStartProvisionalNavigation:]):
        (-[QuickLookDelegate webView:didFinishNavigation:]):
        (-[QuickLookDelegate _webView:didFailNavigation:withError:userInfo:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (runTest):
        (runTestDecideBeforeLoading):
        (runTestDecideAfterLoading):
        (TEST):

2019-04-23  John Wilander  <wilander@apple.com>

        Remove Ad Click Attribution data when removing website data
        https://bugs.webkit.org/show_bug.cgi?id=197215
        <rdar://problem/47668988>

        Reviewed by Chris Dumez.

        This patch adds test infrastructure to delete Ad Click Attribution data
        through WebsiteDataStore::removeData().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearAdClickAttribution):
        (WTR::TestRunner::clearAdClickAttributionsThroughWebsiteDataRemoval):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::clearAdClickAttributionsThroughWebsiteDataRemoval):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-04-23  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Kill unresponsive worker processes
        https://bugs.webkit.org/show_bug.cgi?id=197205
        <rdar://problem/50104388>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool.__init__): Add close timeout.
        (_MessagePool._close): Send termination before joining workers, kill unresponsive workers.

2019-04-23  Alex Christensen  <achristensen@webkit.org>

        Add unit tests for WKWebView.serverTrust
        https://bugs.webkit.org/show_bug.cgi?id=197202

        Reviewed by Youenn Fablet

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::deleter<BIO>::operator()):
        (TestWebKitAPI::deleter<SSL>::operator()):
        (TestWebKitAPI::deleter<X509>::operator()):
        (TestWebKitAPI::deleter<SSL_CTX>::operator()):
        (TestWebKitAPI::deleter<EVP_PKEY>::operator()):
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::listenForConnections):
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (TestWebKitAPI::TEST):
        (verifyCertificateAndPublicKey):
        (-[ServerTrustDelegate webView:didFinishNavigation:]):
        (-[ServerTrustDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::downloadAtRate):
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (TEST):

2019-04-23  Commit Queue  <commit-queue@webkit.org>

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

        Causing build failures on multiple builders (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Create AVFoundationSoftLink.{h,mm} to reduce duplicate code"
        https://bugs.webkit.org/show_bug.cgi?id=197171
        https://trac.webkit.org/changeset/244556

2019-04-23  Alex Christensen  <achristensen@webkit.org>

        Fix iOS build.
        https://bugs.webkit.org/show_bug.cgi?id=195537

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFilesMediaIcon):
        AdoptWK constructor is private now.  Use adoptWK instead.

2019-04-23  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility text search and selection API enhancements.
        https://bugs.webkit.org/show_bug.cgi?id=197095
        <rdar://problem/48181791>

        Reviewed by Chris Fleizach.

        Added new API JS binding code for searchTextWithCriteria to both WTR and DRT.

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (searchTextWithCriteriaCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (convertVectorToObjectArray):
        (convertNSArrayToVector):
        (searchTextParameterizedAttributeForCriteria):
        (AccessibilityUIElement::getLinkedUIElements):
        (AccessibilityUIElement::getDocumentLinks):
        (AccessibilityUIElement::getChildren):
        (AccessibilityUIElement::getChildrenWithRange):
        (AccessibilityUIElement::rowHeaders const):
        (AccessibilityUIElement::columnHeaders const):
        (AccessibilityUIElement::uiElementArrayAttributeValue const):
        (AccessibilityUIElement::searchTextWithCriteria):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertVectorToObjectArray):
        (WTR::convertNSArrayToVector):
        (WTR::searchTextParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getUIElementsWithAttribute const):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::searchTextWithCriteria):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::convertElementsToObjectArray): Deleted.

2019-04-23  Guy Lewin  <guy@lewin.co.il>

        Multiple File Input Icon Set Regardless of File List
        https://bugs.webkit.org/show_bug.cgi?id=195537

        Reviewed by Alexey Proskuryakov.

        Add setOpenPanelFilesMediaIcon to TestRunner in order to test icon and
        display string in iOS file inputs

        * DumpRenderTree/TestRunner.cpp:
        (SetOpenPanelFilesMediaIconCallback):
        (TestRunner::staticFunctions):
        (TestRunner::setOpenPanelFilesMediaIcon):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::openPanelFilesMediaIcon const):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOpenPanelFilesMediaIcon):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::runOpenPanel):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::openPanelFileURLsMediaIcon const):
        (WTR::TestController::setOpenPanelFileURLsMediaIcon):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2019-04-23  Eric Carlson  <eric.carlson@apple.com>

        Create AVFoundationSoftLink.{h,mm} to reduce duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=197171
        <rdar://problem/47454979>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: Added.
        (TestWebKitAPI::TEST):

2019-04-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit tests for UnApplyPatchIfRequired
        https://bugs.webkit.org/show_bug.cgi?id=197197

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestUnApplyPatchIfRequired):
        (TestUnApplyPatchIfRequired.test_success):
        (TestUnApplyPatchIfRequired.test_failure):
        (TestUnApplyPatchIfRequired.test_skip):

2019-04-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit tests for CleanWorkingDirectory
        https://bugs.webkit.org/show_bug.cgi?id=197195

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestCleanWorkingDirectory):
        (TestCleanWorkingDirectory.test_success):
        (TestCleanWorkingDirectory.test_failure):

2019-04-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use explicit imports instead of wildcard imports
        https://bugs.webkit.org/show_bug.cgi?id=197194

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2019-04-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit tests for DownloadBuiltProduct
        https://bugs.webkit.org/show_bug.cgi?id=197193

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestDownloadBuiltProduct):
        (TestDownloadBuiltProduct.setUp):
        (TestDownloadBuiltProduct.tearDown):
        (TestDownloadBuiltProduct.test_success):
        (TestDownloadBuiltProduct.test_failure):

2019-04-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Exception while loading status-bubble when no build step has started
        https://bugs.webkit.org/show_bug.cgi?id=196676

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.get_build_timestamp): Check if build step is present before accessing its timestamp.

2019-04-23  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Support running of JSC tests on remote playstation devices
        https://bugs.webkit.org/show_bug.cgi?id=197170

        Reviewed by Ross Kirsling.

        Script changes

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Pass arguments for playstation to
        run-jsc-stress-tests
        * Scripts/run-jsc-stress-tests:
        Handle $hostOS=="playstation" for determineArchitecture, turning
        off $isFTLPlatform and runProfiler and defaulting test writer.
        * Scripts/webkitdirs.pm:
        (jscPath): PlayStation WebKit executables have .elf extension
        (executableProductDir): PlayStation builds on Windows hosts but
        uses bin directory rather than bin64/bin32 for executable output
        location.
        * Scripts/webkitruby/jsc-stress-test-writer-playstation.rb: Added.

2019-04-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use target oriented design for WebKit
        https://bugs.webkit.org/show_bug.cgi?id=197173

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake: Add WebKitFrameworkHeaders as a dependency.
        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp: Remove unused header.

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

        [Process-Swap-On-Navigation] WebKit hangs when going back to a form submission's page due to Process-Swap-On-Navigation on iOS 12.2 and higher
        https://bugs.webkit.org/show_bug.cgi?id=197097
        <rdar://problem/50048318>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONScheme webView:startURLSchemeTask:]):

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

        [ATK] Implement AtkComponentIface scroll_to methods
        https://bugs.webkit.org/show_bug.cgi?id=196856

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::scrollToMakeVisible): Call atk_component_scroll_to().
        (WTR::AccessibilityUIElement::scrollToGlobalPoint): Call atk_component_scroll_to_point().
        * gtk/jhbuild.modules: Bump atk, at-spi2-core and at-spi2-atk to their latest stable version.

2019-04-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Improve summary for UploadBuiltProduct step
        https://bugs.webkit.org/show_bug.cgi?id=197182

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (UploadBuiltProduct): Added descriptionDone.
        (UploadBuiltProduct.getResultSummary): Overrided getResultSummary.
        * BuildSlaveSupport/ews-build/steps_unittest.py:
        (TestUploadBuiltProduct.test_success): Updated unit-test.
        (TestUploadBuiltProduct.test_failure): Added unit-test for failure case.

2019-04-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Trigger queues only after uploading the archive
        https://bugs.webkit.org/show_bug.cgi?id=197180

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__):
        (BuildFactory.__init__): Remove trigger step from factories.
        (BuildFactory.propertiesToPassToTriggers): Deleted.
        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.__init__): Confiure triggers property.
        (Trigger): Step to trigger other queues.
        (Trigger.propertiesToPassToTriggers): Method to construct properties to pass to triggerred builds.
        (UploadBuiltProduct.finished): Trigger builds after upload is successful.

2019-04-22  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKContextCreateWithInjectedBundlePath
        https://bugs.webkit.org/show_bug.cgi?id=197169

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        Use WKContextCreateWithConfiguration instead of WKContextCreateWithInjectedBundlePath after having set its injected bundle path.

2019-04-22  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r230681) Do not use stored credentials if WKBundlePageResourceLoadClient.shouldUseCredentialStorage returns false
        https://bugs.webkit.org/show_bug.cgi?id=197093
        <rdar://problem/49708268>

        Reviewed by Chris Dumez.

        Add a test that does two loads.  The first load shouldUseCredentialStorage returns true and we provide a persistent credential.
        The second load shouldUseCredentialStorage returns false and we verify that a challenge is received with no suggested credential.
        We also need to make the TCPServer able to handle more than one connection because we need these two loads to come from the same protection space,
        and our current Cocoa implementation of NetworkSession uses two NSURLSessions that don't share a connection cache, one for loads with credentials
        and one for loads without credentials, so there are two TCP connections to the same server in this test.

        * TestWebKitAPI/TCPServer.cpp:
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::~TCPServer):
        (TestWebKitAPI::TCPServer::socketBindListen):
        (TestWebKitAPI::TCPServer::waitForAndReplyToRequests): Deleted.
        * TestWebKitAPI/TCPServer.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BasicProposedCredentialPlugIn.mm: Added.
        (-[BasicProposedCredentialPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm:
        (respondWithChallengeThenOK):
        (TestWebKitAPI::TEST):
        (-[ProposedCredentialDelegate webView:didFinishNavigation:]):
        (-[ProposedCredentialDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TEST):

2019-04-22  Chris Dumez  <cdumez@apple.com>

        Delayed WebProcessLaunch may break the _relatedWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=197160

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-22  Dean Johnson  <dean_johnson@apple.com>

        Use curl to download packages for webkitpy autoinstaller
        https://bugs.webkit.org/show_bug.cgi?id=197164

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download): Use curl(1) to download packages necessary for
        webkitpy/thirdparty/autoinstalled since Python2's urllib2 module can result in unnecessary
        errors which are not present when using curl(1).

2019-04-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r244502.

        Caused crashes on the bots

        Reverted changeset:

        "Delayed WebProcessLaunch may break the _relatedWebView SPI"
        https://bugs.webkit.org/show_bug.cgi?id=197160
        https://trac.webkit.org/changeset/244502

2019-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244437.

        Still breaks internal tests.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/244437

2019-04-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use singular verb in failure description in case of single api test failure
        https://bugs.webkit.org/show_bug.cgi?id=197013

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults):

2019-04-22  Chris Dumez  <cdumez@apple.com>

        Delayed WebProcessLaunch may break the _relatedWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=197160

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r241289): [GTK] accessibility/removed-continuation-element-causes-crash.html and accessibility/removed-anonymous-block-child-causes-crash.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=194630

        Reviewed by Michael Catanzaro.

        Return early from getAttributeSet() is passed in accessible is nullptr.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2019-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Defer EditorState updates until the next layer tree flush in a few additional circumstances
        https://bugs.webkit.org/show_bug.cgi?id=197145
        <rdar://problem/50078170>

        Reviewed by Darin Adler.

        Adjusts several editing API tests to wait for a presentation update following a selection change, programmatic
        focus, or showing the font manager.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewTargetForAction.mm:
        (TEST):
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (TestWebKitAPI::TEST):

2019-04-21  Brian Burg  <bburg@apple.com>

        WebDriver: add hooks to make it possible to easily run WPT WebDriver web server by itself
        https://bugs.webkit.org/show_bug.cgi?id=197125
        <rdar://problem/50061468>

        Reviewed by Darin Adler.

        Sometimes I want to run wptserve independently of tests. Make it easier to script that
        using this class rather than making our own ./wpt serve invocation.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer):
        (WebDriverW3CWebServer.document_root): Expose this to clients.
        (WebDriverW3CWebServer.wait): Add a method that blocks until the server dies.

        (WebDriverW3CWebServer.__enter__):
        (WebDriverW3CWebServer.__exit__):
        Make it possible to use the web server with a 'with' statement.

2019-04-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use target oriented design for WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=197112

        Reviewed by Konstantin Tokarev.

        Fix includes and libraries for DumpRenderTree after changes to WebKitLegacy targets.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/EventSender.cpp:

2019-04-20  Aakash Jain  <aakash_jain@apple.com>

        Update text for old EWS submit button
        https://bugs.webkit.org/show_bug.cgi?id=197140

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/templates/statusbubble.html:

2019-04-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] New EWS should poll bugzilla more frequently
        https://bugs.webkit.org/show_bug.cgi?id=197138

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.__init__):

2019-04-20  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Submit to EWS buttons are not aligned properly with status-bubbles
        https://bugs.webkit.org/show_bug.cgi?id=197139

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:
        * QueueStatusServer/templates/statusbubble.html:

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

        Unreviewed, fix iOS build with recent SDKs.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:

2019-04-19  Keith Miller  <keith_miller@apple.com>

        Add script to merge run_benchmark jsons
        https://bugs.webkit.org/show_bug.cgi?id=197107

        Reviewed by Michael Saboff.

        The script basically recursively decends through all json objects until it gets
        to an array or JSON primitive and concats or takes the first value, respectively.

        This patch also adds +x bits to the compare-results script so it
        can be run directly from the command line. I had to add a new line so that svn
        will accept the change... yay svn!

        * Scripts/compare-results:
        * Scripts/merge-result-jsons: Added.
        (readJSONFile):
        (deepAppend):
        (mergeJSONs):
        (main):

2019-04-18  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in FrameLoader::stopAllLoaders via [WebView dealloc] inside ~ObjCEventListener
        https://bugs.webkit.org/show_bug.cgi?id=197079

        Reviewed by Darin Adler.

        Added a regression test. It hits a slightly different backtrace but of the same class of issues.

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

2019-04-18  Commit Queue  <commit-queue@webkit.org>

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

        caused 1 API test failure (Requested by zalan on #webkit).

        Reverted changeset:

        "Regression (r244291): Broken API Test
        AutoLayoutRenderingProgressRelativeOrdering"
        https://bugs.webkit.org/show_bug.cgi?id=196948
        https://trac.webkit.org/changeset/244434

2019-04-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add new compatibility mode API on WKNavigation
        https://bugs.webkit.org/show_bug.cgi?id=197069
        <rdar://problem/50025800>

        Reviewed by Tim Horton.

        Add a block property for -didCommitNavigation to TestNavigationDelegate.

        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:didCommitNavigation:]):

2019-04-18  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512
        <rdar://problem/37510435>

        Reviewed by Alex Christensen.

        Added WebCorePrivateFrameworkHeaders as a dependency of TestWebKitAPI for all
        ports.

        WebCore now uses WebCore_PRIVATE_INCLUDE_DIRECTORIES for all ports. Any includes
        of WebCore headers using "*.h" were modified to <WebCore/*.h>

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h:
        * DumpRenderTree/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:

2019-04-18  Jer Noble  <jer.noble@apple.com>

        Add support for parsing FairPlayStreaming PSSH boxes.
        https://bugs.webkit.org/show_bug.cgi?id=197064

        Reviewed by Eric Carlson.

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

2019-04-18  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm:
        (-[WebProcessPlugIn additionalClassesForParameterCoder]): Added.

2019-04-18  Zalan Bujtas  <zalan@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948
        <rdar://problem/49927131>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST): 
        The expected order of incoming events is
        1. didInvalidateIntrinsicContentSize
        2. didFirstLayout
        At setRenderingProgressDidChange, we already check if didInvalidateIntrinsicContentSize comes in first.
        However it's not guaranteed that the milestone event is delayed until after TestWebKitAPI::Util::run() is finished
        (and remember, all we care about is ordering).

2019-04-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244299.

        Breaks internal tests.

        Reverted changeset:

        "InjectedBundle parameters often need initialization function
        called before unarchiving"
        https://bugs.webkit.org/show_bug.cgi?id=189709
        https://trac.webkit.org/changeset/244299

2019-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] StringBuilder should set correct m_is8Bit flag when merging
        https://bugs.webkit.org/show_bug.cgi?id=197053

        Reviewed by Saam Barati.

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

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        [iOS Sim Debug] REGRESSION (r244151) TestWebKitAPI.WebKit.OverrideViewportArguments is failing (197028)
        https://bugs.webkit.org/show_bug.cgi?id=197028
        <rdar://problem/49985290>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/OverrideViewportArguments.mm:
        (TEST):
        Liberal application of waitForNextPresentationUpdate works around a race
        where if the page rapidly changes its viewport arguments (or an API client
        rapidly changes its viewport arguments), we'd get stuck thinking that the
        user had intentionally zoomed the page, and stop resetting the initial scale.
        This deserves a separate bug, but no need to keep the test failing while
        we think about it.

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r241988): Switching tabs is slow
        https://bugs.webkit.org/show_bug.cgi?id=197037
        <rdar://problem/49951473>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ReparentWebViewTimeout.mm: Added.
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView addToTestWindow]):
        Add a test that hangs without this fix.

2019-04-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244400.

        Caused testing to exit early with assertionon Debug WK2

        Reverted changeset:

        "UI↔Web deadlock when printing with a JavaScript alert
        visible"
        https://bugs.webkit.org/show_bug.cgi?id=196839
        https://trac.webkit.org/changeset/244400

2019-04-17  Brady Eidson  <beidson@apple.com>

        Link clicks in PDFs shouldn't send referrer headers.
        <rdar://problem/21142581> and https://bugs.webkit.org/show_bug.cgi?id=196980

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PDFLinkReferrer.mm: Added.
        (putPDFBytesCallback):
        (emptyReleaseInfoCallback):
        (createPDFWithLinkToURL):
        (TEST):

2019-04-17  Tim Horton  <timothy_horton@apple.com>

        UI↔Web deadlock when printing with a JavaScript alert visible
        https://bugs.webkit.org/show_bug.cgi?id=196839
        <rdar://problem/49157642>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewPrintFormatter.mm: Added.
        (-[PrintOnAlertUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2019-04-17  Alex Christensen  <achristensen@webkit.org>

        WKRetainPtr's adoption constructor should be private
        https://bugs.webkit.org/show_bug.cgi?id=197019

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpFramesAsText):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createContextWithInjectedBundle):
        (TestWebKitAPI::Util::createInitializationDictionaryForInjectedBundleTest):
        (TestWebKitAPI::Util::createContextForInjectedBundleTest):
        (TestWebKitAPI::Util::toWK):
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseThenTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::initialize):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::initialize):
        * TestWebKitAPI/Tests/WebKit/DeferredViewInWindowStateChange.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DidNotHandleKeyDown.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::didRemoveFrameFromHierarchyCallback):
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        (TestWebKitAPI::DocumentStartUserScriptAlertCrashTest::initialize):
        * TestWebKitAPI/Tests/WebKit/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EvaluateJavaScript.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EventModifiers.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FailedLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Find.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ForceRepaint.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/GetInjectedBundleInitializationUserDataCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/HitTestResultNodeHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/HitTestResultNodeHandle_Bundle.cpp:
        (TestWebKitAPI::HitTestResultNodeHandleTest::getContextMenuFromDefaultMenu):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleDisableOverrideBuiltinsBehavior_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleNoDisableOverrideBuiltinsBehaviorTest::initialize):
        (TestWebKitAPI::InjectedBundleDisableOverrideBuiltinsBehaviorTest::initialize):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleFrameHitTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleFrameHitTest_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleFrameHitTestTest::frameLoadFinished):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleInitializationUserDataCallbackWins.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/InjectedBundleMakeAllShadowRootsOpen_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleMakeAllShadowRootOpenTest::initialize):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::loadAlternateHTMLString):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadCanceledNoServerRedirectCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadPageOnCrash.cpp:
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        * TestWebKitAPI/Tests/WebKit/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::buildAndPerformTest):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PasteboardNotifications.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ProcessDidTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeWindowAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ScrollPinningBehaviors.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/StopLoadingDuringDidFailProvisionalLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/TerminateTwice.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageCopySessionStateWithFiltering.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageGetScaleFactorNotZero.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WillSendSubmitEvent.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKit/mac/AttributedSubstringForProposedRangeWithImage.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/CustomBundleParameter.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/EditorCommands.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/InjectedBundleAppleEvent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/RestoreStateAfterTermination.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/mac/FirstResponderScrollingPosition.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::initializeView):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::getMenuItemTitleCallback):
        (WTR::createMouseMessageBody):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::mouseForceClick):
        (WTR::EventSendingController::startAndCancelMouseForceClick):
        (WTR::EventSendingController::mouseForceDown):
        (WTR::EventSendingController::mouseForceUp):
        (WTR::EventSendingController::mouseForceChanged):
        (WTR::EventSendingController::leapForward):
        (WTR::EventSendingController::scheduleAsynchronousClick):
        (WTR::createKeyDownMessageBody):
        (WTR::EventSendingController::keyDown):
        (WTR::EventSendingController::scheduleAsynchronousKeyDown):
        (WTR::EventSendingController::mouseScrollBy):
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSendingController::continuousMouseScrollBy):
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::setTouchPointRadius):
        (WTR::EventSendingController::touchStart):
        (WTR::EventSendingController::touchMove):
        (WTR::EventSendingController::touchEnd):
        (WTR::EventSendingController::touchCancel):
        (WTR::EventSendingController::clearTouchPoints):
        (WTR::EventSendingController::releaseTouchPoint):
        (WTR::EventSendingController::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        (WTR::InjectedBundle::didReceiveMessage):
        (WTR::InjectedBundle::didReceiveMessageToPage):
        (WTR::InjectedBundle::booleanForKey):
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::dumpToStdErr):
        (WTR::InjectedBundle::outputText):
        (WTR::InjectedBundle::postNewBeforeUnloadReturnValue):
        (WTR::InjectedBundle::postAddChromeInputField):
        (WTR::InjectedBundle::postRemoveChromeInputField):
        (WTR::InjectedBundle::postFocusWebView):
        (WTR::InjectedBundle::postSetBackingScaleFactor):
        (WTR::InjectedBundle::postSetWindowIsKey):
        (WTR::InjectedBundle::postSetViewSize):
        (WTR::InjectedBundle::postSimulateWebNotificationClick):
        (WTR::InjectedBundle::postSetAddsVisitedLinks):
        (WTR::InjectedBundle::setGeolocationPermission):
        (WTR::InjectedBundle::setMockGeolocationPosition):
        (WTR::InjectedBundle::setMockGeolocationPositionUnavailableError):
        (WTR::InjectedBundle::isGeolocationProviderActive const):
        (WTR::InjectedBundle::imageCountInGeneralPasteboard const):
        (WTR::InjectedBundle::setUserMediaPersistentPermissionForOrigin):
        (WTR::InjectedBundle::userMediaPermissionRequestCountForOrigin const):
        (WTR::InjectedBundle::resetUserMediaPermissionRequestCountForOrigin):
        (WTR::InjectedBundle::setCustomPolicyDelegate):
        (WTR::InjectedBundle::setHidden):
        (WTR::InjectedBundle::setCacheModel):
        (WTR::InjectedBundle::shouldProcessWorkQueue const):
        (WTR::InjectedBundle::processWorkQueue):
        (WTR::InjectedBundle::queueBackNavigation):
        (WTR::InjectedBundle::queueForwardNavigation):
        (WTR::InjectedBundle::queueLoad):
        (WTR::InjectedBundle::queueLoadHTMLString):
        (WTR::InjectedBundle::queueReload):
        (WTR::InjectedBundle::queueLoadingScript):
        (WTR::InjectedBundle::queueNonLoadingScript):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::frameToStr):
        (WTR::InjectedBundlePage::InjectedBundlePage):
        (WTR::dumpFrameDescriptionSuitableForTestResult):
        (WTR::dumpFrameScrollPosition):
        (WTR::dumpDescendantFrameScrollPositions):
        (WTR::dumpFrameText):
        (WTR::dumpDescendantFramesText):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::setDumpPixels):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::setWhatToDump):
        (WTR::TestRunner::setWaitUntilDone):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::setShouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::clearAllDatabases):
        (WTR::TestRunner::setIDBPerOriginQuota):
        (WTR::TestRunner::originsWithApplicationCache):
        (WTR::TestRunner::setCanOpenWindows):
        (WTR::TestRunner::setXSSAuditorEnabled):
        (WTR::TestRunner::setMediaDevicesEnabled):
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled):
        (WTR::TestRunner::setWebRTCUnifiedPlanEnabled):
        (WTR::TestRunner::setCustomUserAgent):
        (WTR::TestRunner::setWebAPIStatisticsEnabled):
        (WTR::TestRunner::setModernMediaControlsEnabled):
        (WTR::TestRunner::setWebGL2Enabled):
        (WTR::TestRunner::setWritableStreamAPIEnabled):
        (WTR::TestRunner::setReadableByteStreamAPIEnabled):
        (WTR::TestRunner::setEncryptedMediaAPIEnabled):
        (WTR::TestRunner::setAllowsAnySSLCertificate):
        (WTR::TestRunner::setPluginsEnabled):
        (WTR::TestRunner::setValueForUser):
        (WTR::TestRunner::setAudioResult):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        (WTR::TestRunner::setAlwaysAcceptCookies):
        (WTR::TestRunner::setOnlyAcceptFirstPartyCookies):
        (WTR::TestRunner::isDoingMediaCapture const):
        (WTR::TestRunner::queueLoad):
        (WTR::TestRunner::setRejectsProtectionSpaceAndContinueForAuthenticationChallenges):
        (WTR::TestRunner::setHandlesAuthenticationChallenges):
        (WTR::TestRunner::setShouldLogCanAuthenticateAgainstProtectionSpace):
        (WTR::TestRunner::setShouldLogDownloadCallbacks):
        (WTR::TestRunner::setAuthenticationUsername):
        (WTR::TestRunner::setAuthenticationPassword):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::setBlockAllPlugins):
        (WTR::TestRunner::setPluginSupportedMode):
        (WTR::TestRunner::setShouldDecideNavigationPolicyAfterDelay):
        (WTR::TestRunner::setShouldDecideResponsePolicyAfterDelay):
        (WTR::TestRunner::setNavigationGesturesEnabled):
        (WTR::TestRunner::setIgnoresViewportScaleLimits):
        (WTR::TestRunner::setShouldDownloadUndisplayableMIMETypes):
        (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess):
        (WTR::TestRunner::terminateNetworkProcess):
        (WTR::TestRunner::terminateServiceWorkerProcess):
        (WTR::TestRunner::runUIScript):
        (WTR::TestRunner::setStatisticsDebugMode):
        (WTR::TestRunner::setStatisticsPrevalentResourceForDebugMode):
        (WTR::TestRunner::setStatisticsLastSeen):
        (WTR::TestRunner::setStatisticsPrevalentResource):
        (WTR::TestRunner::setStatisticsVeryPrevalentResource):
        (WTR::TestRunner::dumpResourceLoadStatistics):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::setStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::setStatisticsGrandfathered):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::setStatisticsSubframeUnderTopFrameOrigin):
        (WTR::TestRunner::setStatisticsSubresourceUnderTopFrameOrigin):
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectTo):
        (WTR::TestRunner::setStatisticsSubresourceUniqueRedirectFrom):
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectTo):
        (WTR::TestRunner::setStatisticsTopFrameUniqueRedirectFrom):
        (WTR::TestRunner::setStatisticsCrossSiteLoadWithLinkDecoration):
        (WTR::TestRunner::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback):
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestRunner::statisticsUpdateCookieBlocking):
        (WTR::TestRunner::statisticsSubmitTelemetry):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestRunner::setStatisticsIsRunningTest):
        (WTR::TestRunner::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WTR::TestRunner::setStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WTR::TestRunner::setStatisticsGrandfatheringTime):
        (WTR::TestRunner::setStatisticsMaxStatisticsEntries):
        (WTR::TestRunner::setStatisticsPruneEntriesDownTo):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::statisticsDeleteCookiesForHost):
        (WTR::TestRunner::setStatisticsCacheMaxAgeCap):
        (WTR::TestRunner::statisticsResetToConsistentState):
        (WTR::TestRunner::setStorageAccessAPIEnabled):
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::addMockMediaDevice):
        (WTR::TestRunner::clearMockMediaDevices):
        (WTR::TestRunner::removeMockMediaDevice):
        (WTR::TestRunner::resetMockMediaDevices):
        (WTR::TestRunner::connectMockGamepad):
        (WTR::TestRunner::disconnectMockGamepad):
        (WTR::TestRunner::setMockGamepadDetails):
        (WTR::TestRunner::setMockGamepadAxisValue):
        (WTR::TestRunner::setMockGamepadButtonValue):
        (WTR::TestRunner::removeAllSessionCredentials):
        (WTR::TestRunner::clearDOMCache):
        (WTR::TestRunner::clearDOMCaches):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::domCacheSize):
        (WTR::TestRunner::setAllowStorageQuotaIncrease):
        (WTR::TestRunner::getApplicationManifestThen):
        (WTR::TestRunner::injectUserScript):
        (WTR::TestRunner::sendDisplayConfigurationChangedMessageForTesting):
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::addTestKeyToKeychain):
        (WTR::TestRunner::cleanUpKeychain):
        (WTR::TestRunner::keyExistsInKeychain):
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation):
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess):
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount):
        (WTR::TestRunner::setShouldDismissJavaScriptAlertsAsynchronously):
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting):
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::parseStringTestHeaderValueAsRelativePath):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::runTest):
        (WTR::TestController::didReceiveLiveDocumentsList):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestController::didFinishNavigation):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::uiScriptDidComplete):
        (WTR::TestInvocation::didReceiveAllStorageAccessEntries):
        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::closeWebNotification):
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::ScriptItem::ScriptItem):
        (WTR::WorkQueueManager::queueLoad):
        (WTR::WorkQueueManager::queueLoadHTMLString):

2019-04-17  Alex Christensen  <achristensen@webkit.org>

        Add a comment to make my test from r244139 less mysterious.
        https://bugs.webkit.org/show_bug.cgi?id=196744

        As suggested by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm:
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):

2019-04-17  Chris Dumez  <cdumez@apple.com>

        Remember device orientation permission for the duration of the browsing session
        https://bugs.webkit.org/show_bug.cgi?id=196992
        <rdar://problem/49946067>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm:
        (-[DeviceOrientationPermissionUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):
        (TEST):

2019-04-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Clicking 'submit to new ews' doesn't reload status-bubble
        https://bugs.webkit.org/show_bug.cgi?id=196675

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/submittoews.py:
        (SubmitToEWS): Added @xframe_options_exempt similar to statusbubble.py

2019-04-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [WebKit2] Add support for honoring -[UIMenuItem dontDismiss]
        https://bugs.webkit.org/show_bug.cgi?id=196919
        <rdar://problem/41630459>

        Reviewed by Tim Horton.

        Add iOS support for several new testing hooks. See below for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isDismissingMenu const):

        Add a new script controller method to query whether the platform menu (on iOS, the callout bar) is done
        dismissing. We consider the menu to be dismissing in between the `-WillHide` and `-DidHide` notifications sent
        by UIKit when dismissing the callout bar (i.e. UIMenuController).

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isDismissingMenu const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowedMenuActions):

        Add a new helper method to specify a list of allowed actions when bringing up the menu. On iOS, in the case of
        actions supported by the platform, this matches against method selector names (for instance, "SelectAll", or
        "Copy", or "Paste"). In the case of the custom actions installed via `installCustomMenuAction`, we instead match
        against the name of the custom action.

        (WTR::TestRunner::installCustomMenuAction):

        Add a new helper method to install a custom action for the context menu (on iOS, this is the callout bar). This
        takes the name of the action (which appears in a button in the callout bar), whether the action should cause
        the callout bar to automatically dismiss, and finally, a JavaScript callback that is invoked when the action is
        triggered.

        (WTR::TestRunner::performCustomMenuAction):

        Invoked when the custom menu action is triggered.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::installCustomMenuAction):
        (WTR::TestController::setAllowedMenuActions):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::performCustomMenuAction):

        Add plumbing to call back into the injected bundle when performing the custom action.

        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::installCustomMenuAction):
        (WTR::TestController::setAllowedMenuActions):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView becomeFirstResponder]):
        (-[TestRunnerWKWebView _addCustomItemToMenuControllerIfNecessary]):

        Helper method that converts web view's current custom menu action info into a UIMenuItem, and adds it to the
        shared menu controller. This is also invoked when the web view becomes first responder, which matches behavior
        in the Mail app on iOS.

        (-[TestRunnerWKWebView installCustomMenuAction:dismissesAutomatically:callback:]):
        (-[TestRunnerWKWebView setAllowedMenuActions:]):
        (-[TestRunnerWKWebView resetCustomMenuAction]):
        (-[TestRunnerWKWebView performCustomAction:]):
        (-[TestRunnerWKWebView canPerformAction:withSender:]):
        (-[TestRunnerWKWebView _willHideMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Reset both any custom installed actions on the shared menu controller, as well as the list of allowed actions,
        if specified.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isDismissingMenu const):

2019-04-16  Megan Gardner  <megan_gardner@apple.com>

        Allow sharing from imageSheet on an image document
        https://bugs.webkit.org/show_bug.cgi?id=196891
        <rdar://problem/25377386>

        Reviewed by Tim Horton.

        Test to make sure that the correct imageURL is extracted from an image element.

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

2019-04-16  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r244162) Clearing website data from ephemeral WKWebsiteDataStore should finish instead of asserting or hanging
        https://bugs.webkit.org/show_bug.cgi?id=196995

        Reviewed by Brady Eidson.

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

2019-04-16  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/open-window-then-write-to-it.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        (-[OpenWindowThenDocumentOpenUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2019-04-16  Commit Queue  <commit-queue@webkit.org>

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

        Causing all WK2 Debug builds to exit early after Assertion
        failures. (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "URL set by document.open() is not communicated to the
        UIProcess"
        https://bugs.webkit.org/show_bug.cgi?id=196941
        https://trac.webkit.org/changeset/244321

2019-04-15  Aakash Jain  <aakash_jain@apple.com>

        Regression (r244291): Broken API Test AutoLayoutRenderingProgressRelativeOrdering
        https://bugs.webkit.org/show_bug.cgi?id=196948

        Reviewed by Zalan Bujtas.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm:
        (TEST): Disabling the test for now to keep infrastructure happy, while the root-cause is being investigated.

2019-04-15  Chris Dumez  <cdumez@apple.com>

        URL set by document.open() is not communicated to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=196941
        <rdar://problem/49237544>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/open-window-then-write-to-it.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/OpenAndCloseWindow.mm:
        (-[OpenWindowThenDocumentOpenUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2019-04-15  Dean Johnson  <dean_johnson@apple.com>

        Using Tools/Scripts/clean-webkit should not install requests
        https://bugs.webkit.org/show_bug.cgi?id=196940

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/system/autoinstall.py: Drive-by fix for no logging handlers
        existing, depending on the path autoinstalled is run through.
        * Scripts/webkitpy/port/base.py: Import webkitpy.results.upload.Upload only where it's
        needed.
        (Port.configuration_for_upload):
        (Port.commits_for_upload):

2019-04-15  Alex Christensen  <achristensen@webkit.org>

        Add a DiagnosticLogging method taking an arbitrary dictionary of values.
        https://bugs.webkit.org/show_bug.cgi?id=196773

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDiagnosticLogging.mm:
        (-[TestLoggingDelegate _webView:logDiagnosticMessage:description:valueDictionary:]):
        (TEST):

2019-04-15  Aakash Jain  <aakash_jain@apple.com>

        ews-build should clearly indicate flaky test failures
        https://bugs.webkit.org/show_bug.cgi?id=196947

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (AnalyzeAPITestsResults.analyzeResults):

2019-04-15  Brent Fulgham  <bfulgham@apple.com>

        InjectedBundle parameters often need initialization function called before unarchiving
        https://bugs.webkit.org/show_bug.cgi?id=189709
        <rdar://problem/44573653>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugIn.mm:
        (-[WebProcessPlugIn additionalClassesForParameterCoder]): Added.

2019-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        HashTable::removeIf always shrinks the hash table by half even if there is nothing left
        https://bugs.webkit.org/show_bug.cgi?id=196681

        Reviewed by Darin Adler.

        Added tests.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (WTF_HashSet.RemoveIf):
        (WTF_HashSet.RemoveIfShrinkToBestSize):

2019-04-15  John Wilander  <wilander@apple.com>

        Send delayed Ad Click Attribution conversion requests to the click source
        https://bugs.webkit.org/show_bug.cgi?id=196838
        <rdar://problem/47650157>

        Reviewed by Chris Dumez and Youenn Fablet.

        This patch adds test infrastructure to override the default behavior in
        WebKit::NetworkAdClickAttribution.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpAdClickAttribution):
        (WTR::TestRunner::clearAdClickAttribution):
        (WTR::TestRunner::setAdClickAttributionOverrideTimerForTesting):
        (WTR::TestRunner::setAdClickAttributionConversionURLForTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAdClickAttributionOverrideTimerForTesting):
        (WTR::TestController::setAdClickAttributionConversionURLForTesting):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-04-15  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] status-bubble should display position in queue
        https://bugs.webkit.org/show_bug.cgi?id=196607

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._queue_position): Method to calculate patch's position in queue.

2019-04-15  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not run clean build by default on EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=196897

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch.start): Do not create .buildbot-patched file. This is a special file for Buildbot and if this
        file is present, during the Source checkout, Buildbot cleans the working directory completely (including removing 
        untracked directories like WebKitBuild).
        (CheckOutSource.__init__): Pass method=clean so that Buildbot clean the working directory. This does not remove
        untracked files/directories (like WebKitBuild).

2019-04-15  Per Arne Vollan  <pvollan@apple.com>

        TestRunner::notifyDone() should be safely reentrant
        https://bugs.webkit.org/show_bug.cgi?id=196898

        Reviewed by Darin Adler.

        It is currently possible that TestRunner::notifyDone() will call itself, since
        notifyDone() will force a repaint, which can start executing JavaScript, which
        may call notifyDone() again. This can lead to test failures and flakiness.
        Fix this by setting the m_waitToDump flag before calling the dump() method.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):

2019-04-15  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Add enable-media websetting
        https://bugs.webkit.org/show_bug.cgi?id=196863

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Add test for the enable-media web-setting.

2019-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        API test WKAttachmentTests.AddAttachmentToConnectedImageElement is a flaky failure on Mac Release builds
        https://bugs.webkit.org/show_bug.cgi?id=196905
        <rdar://problem/49886096>

        Reviewed by Tim Horton.

        This flaky test exercises a race condition between when attachment insertion updates are dispatched from the web
        process to the UI process, and when script is executed via -[WKWebView evaluateJavaScript:completionHandler:].
        Since attachment insertion and removal updates from the web process to the UI process are scheduled on a zero-
        delay timer, we end up with this sequence of events in the problematic (failure) case:

        (a) [UI]    Run script #1 (which calls `HTMLAttachmentElement.getAttachmentIdentifier`)
            ...IPC from UI to web process...
        (b) [Web]   Evaluate script #1 in the web process, which schedules attachment updates on a zero-delay timer
            ...IPC from web to UI process...
        (c) [UI]    Invoke completion handler for script #1
        (d) [UI]    Run script #2 (which calls `document.querySelector('img').attachmentIdentifier`)
            ...IPC from UI to web process...
        (e) [Web]   Evaluate script #2 in the web process
        (f) [Web]   Zero-delay timer fires and dispatches attachment updates to the UI process

        ...which means that script #2 will complete before the UI process has received the attachment updates sent in
        step (f). However, in the case where the flaky test succeeds, the zero-delay timer in (f) fires *before* script
        #2 is run in step (e).

        This patch fixes the flaky test by waiting until attachment insertion updates are guaranteed to be received in
        the UI process by waiting on a script message posted by the web process, after attachment updates are
        dispatched.

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

2019-04-14  Aakash Jain  <aakash_jain@apple.com>

        Disable Flaky API Test WKAttachmentTests.AddAttachmentToConnectedImageElement
        https://bugs.webkit.org/show_bug.cgi?id=196909

        Reviewed by Wenson Hsieh.

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

2019-04-13  Tadeu Zagallo  <tzagallo@apple.com>

        CodeCache should check that the UnlinkedCodeBlock was successfully created before caching it
        https://bugs.webkit.org/show_bug.cgi?id=196880

        Reviewed by Yusuke Suzuki.

        Add a new function for bytecode cache tests that does not forceDiskCache
        for the second run: runBytecodeCacheNoAssetion. This is necessary for the
        test added in this patch, since the code is invalid and therefore won't be
        cached. It should also be useful for tests that evaluate dynamically
        generated code.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:
        * Scripts/run-jsc-stress-tests:

2019-04-12  Eric Carlson  <eric.carlson@apple.com>

        Update AudioSession route sharing policy
        https://bugs.webkit.org/show_bug.cgi?id=196776
        <rdar://problem/46501611>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (TestWebKitAPI::routeSharingPolicyLongFormVideo):
        (TestWebKitAPI::routeSharingPolicyLongFormAudio):
        (TestWebKitAPI::TEST):

2019-04-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Software keyboard is shown too frequently on some websites
        https://bugs.webkit.org/show_bug.cgi?id=195856
        <rdar://problem/49191395>

        Reviewed by Darin Adler.

        Add support for attaching or detaching the hardware keyboard on iOS in layout tests.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setHardwareKeyboardAttached):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setHardwareKeyboardAttached):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

        Additionally link against GraphicsServices in WebKitTestRunner.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::UIScriptController::setHardwareKeyboardAttached):

2019-04-12  Ludovico de Nittis  <ludovico.denittis@collabora.com>

        [GTK][WPE] Fix pacman install-dependencies packages
        https://bugs.webkit.org/show_bug.cgi?id=196817

        Reviewed by Žan Doberšek.
        
        python3-setuptools is called python-setuptools
        ruby-highline is only available on AUR
        libv4l-devel is incorporated in v4l-utils

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

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

        [GTK] REGRESSION(r243860): Many tests failing
        https://bugs.webkit.org/show_bug.cgi?id=196791

        Reviewed by Joanmarie Diggs.

        Rework the accessibility unit test to use DBus for the communication with the server. This way we can load
        multiple documents and check that accessibility hierarchy is updated after a navigation.

        * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp:
        (loadChangedCallback):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (AccessibilityTest::AccessibilityTest):
        (AccessibilityTest::~AccessibilityTest):
        (AccessibilityTest::loadHTMLAndWaitUntilFinished):
        (AccessibilityTest::findTestServerApplication):
        (AccessibilityTest::findDocumentWeb):
        (AccessibilityTest::findRootObject):
        (AccessibilityTest::waitUntilChildrenRemoved):
        (AccessibilityTest::ensureProxy):
        (testAtspiBasicHierarchy):
        (beforeAll):
        (afterAll):

2019-04-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Handle bug titles with unicode characters
        https://bugs.webkit.org/show_bug.cgi?id=196802

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed):

2019-04-11  Michael Saboff  <msaboff@apple.com>

        Improve the Inline Cache Stats code
        https://bugs.webkit.org/show_bug.cgi?id=196836

        Reviewed by Saam Barati.

        Added a new script to consolidate and arrange the output of --useICStats option.

        This script merges the output from every group into one large table and sorts it from most common to
        least common.  It also counts the slow path GetById and PutById variants and then calculates the
        percentage of gets or puts for each unique base,property pair compared to all the gets and puts.
        Put together, this is useful to see what property accesses are not getting cached.

        * Scripts/ic-stats.py: Added.
        (ICStats):
        (ICStats.__init__):
        (ICStats.parse):
        (ICStats.dumpStats):
        (usage):

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

        WKNavigationResponse._downloadAttribute should be nil when no download attribute is present
        https://bugs.webkit.org/show_bug.cgi?id=196809
        <rdar://49800762>

        Reviewed by Brady Eidson.

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

2019-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * Tracing/SystemTracePoints.plist:

2019-04-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Use a bundled vswhere.exe instead of downloading by update-vswhere.py
        https://bugs.webkit.org/show_bug.cgi?id=196760

        Reviewed by Don Olmstead.

        vswhere.exe has been bundled since Visual Studio 2017 version
        15.2. We shouldn't download vswhere.exe.

        * Scripts/build-jsc: Do not call update-vswhere.py.
        * Scripts/build-webkit: Ditto.
        * Scripts/update-vswhere.py: Removed.
        * Scripts/webkitdirs.pm:
        (requireModulesForVSWhere): Deleted.
        (pickCurrentVisualStudioInstallation): Deleted.
        (visualStudioInstallDirVSWhere): Return the latest installed VS
        installation path by using the bundled vswhere.exe.
        (setupCygwinEnv): Removed a unused variable $visualStudioPath.
        (visualStudioInstallDirFallback): Removed.

2019-04-10  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] PrintConfiguration should display Xcode version instead of SDKVersion
        https://bugs.webkit.org/show_bug.cgi?id=196780

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

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

        Add SPI WKNavigationResponse._downloadAttribute
        https://bugs.webkit.org/show_bug.cgi?id=196755
        <rdar://49587365>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm:
        (-[NavigationResponseTestDelegate navigationResponse]):
        (-[NavigationResponseTestDelegate waitForNavigationResponseCallback]):
        (-[NavigationResponseTestDelegate waitForNavigationFinishedCallback]):
        (-[NavigationResponseTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[NavigationResponseTestDelegate webView:didFinishNavigation:]):
        (-[NavigationResponseTestDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (readRequest):
        (writeResponse):
        (TEST):

2019-04-10  Tim Horton  <timothy_horton@apple.com>

        Add modern API for overriding the page's specified viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=167734
        <rdar://problem/30331795>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/OverrideViewportArguments.mm: Added.

2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>

        Add support for incremental bytecode cache updates
        https://bugs.webkit.org/show_bug.cgi?id=195000

        Reviewed by Filip Pizlo.

        Exit when the initial run to generate bytecode fails.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh:

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

        RemoteObjectRegistry message receiver should be removed when WebPage::close is called instead of waiting until dealloc
        https://bugs.webkit.org/show_bug.cgi?id=196744
        <rdar://49415309>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm:
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):

2019-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a way to opt into modern compatibility mode in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196770
        <rdar://problem/49777550>

        Reviewed by Antoine Quint.

        Add a new test option to enable modern compatibility mode in layout tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::enableModernCompatibilityMode):

2019-04-10  Andy Estes  <aestes@apple.com>

        Try to fix the 32-bit watchOS build.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView evaluateJavaScriptAndWaitForInputSessionToChange:]):

2019-04-10  Antoine Quint  <graouts@apple.com>

        Enable Pointer Events on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=196771
        <rdar://problem/49040909>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed. Fix WPE accessibility tests after r244059.

        We are failing to load the injected bundle due to undefined symbol
        AccessibilityUIElement::replaceTextInRange().

        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-10  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][MiniBrowser] Pull down menu "Disable JavaScript" doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=196727

        Reviewed by Fujii Hironori.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create):

2019-04-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit tests for PrintConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=196752

        Reviewed by Dewei Zhu.

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

2019-04-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build maintenance -- update .xcfilelists.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:

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

        [AutoSizing] Avoid making text paragraphs scroll horizontally when there is a wide table
        https://bugs.webkit.org/show_bug.cgi?id=196743
        <rdar://problem/43897551>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/AutoLayoutIntegration.mm: expected behavior change.
        (TEST):

2019-04-09  Youenn Fablet  <youenn@apple.com>

        Close service worker database on network process suspension
        https://bugs.webkit.org/show_bug.cgi?id=196623
        <rdar://problem/48930869>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-04-09  Daniel Bates  <dabates@apple.com>

        [iPad] Should open popover when the spacebar is pressed
        https://bugs.webkit.org/show_bug.cgi?id=196360
        <rdar://problem/49389129>

        Reviewed by Brent Fulgham.

        Add testing infrastructure to support waiting for a popover to be presented or dismissed.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::willPresentPopoverCallback const): Added.
        (WTR::UIScriptController::setDidDismissPopoverCallback): Added.
        (WTR::UIScriptController::didDismissPopoverCallback const): Added.
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]): Update some state.
        (-[TestRunnerWKWebView resetInteractionCallbacks]): Ditto.
        (-[TestRunnerWKWebView _willPresentPopover]): Added.
        (-[TestRunnerWKWebView _didDismissPopover]): Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingPopover const): Added.
        (WTR::UIScriptController::platformSetWillPresentPopoverCallback): Added.
        (WTR::UIScriptController::platformSetDidDismissPopoverCallback): Added.

2019-04-09  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (+[SimpleLookupContext sharedLookupContext]):
        (-[SimpleLookupContext lookUpURL:completionHandler:]):
        (TEST):
        (+[Simple3LookupContext sharedLookupContext]): Deleted.
        (-[Simple3LookupContext lookUpURL:completionHandler:]): Deleted.

2019-04-09  John Wilander  <wilander@apple.com>

        Pick up Ad Click Attribution conversions in NetworkResourceLoader::willSendRedirectedRequest()
        https://bugs.webkit.org/show_bug.cgi?id=196558
        <rdar://problem/47650245>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Added tests of WebCore::AdClickAttribution::parseConversionRequest().

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Apple builds should use ICU_INCLUDE_DIRS
        https://bugs.webkit.org/show_bug.cgi?id=196720

        Reviewed by Konstantin Tokarev.

        * TestWebKitAPI/PlatformMac.cmake:

2019-04-09  Jonathan Bedard  <jbedard@apple.com>

        iOS 12 Simulator Release WK2 frequently timing out while running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=196694
        <rdar://problem/48388734>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer.diff_image): If the ImageDiff process has data, kill it before running again.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.has_available_stdout): Check if stdout has data in it.
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        (ServerProcess._wait_for_data_and_update_buffers_using_win32_apis):
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess.has_available_stdout):
        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.serial_test_basic):

2019-04-09  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Drive-by bug fix: allow tests to play audio without a user gesture by default.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-04-09  Pablo Saavedra  <psaavedra@igalia.com>

        [JSCOnly] Add an i386 JSCOnly EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=196690

        Reviewed by Michael Catanzaro.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2019-04-09  Chris Dumez  <cdumez@apple.com>

        Loads using loadHTMLString() cause flashing when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=196714
        <rdar://problem/49637354>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix ATK accessibility tests after r244059.

        We are failing to load the injected bundle due to undefined symbol
        AccessibilityUIElement::replaceTextInRange().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Unreviewed build fix for Windows port.

        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp:
        (WTR::AccessibilityUIElement::replaceTextInRange): Added.

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:

2019-04-08  Jonathan Bedard  <jbedard@apple.com>

        Log stack-trace for run-webkit-tests when interrupted
        https://bugs.webkit.org/show_bug.cgi?id=176393
        <rdar://problem/34262310>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/interrupt_debugging.py: Added.
        (log_stack_trace): Given a Python frame object, log a stack trace to the provided file.
        (StackTraceFileContext): Context which allows stack-traces to be printed to stderr or to a file. 
        (log_stack_trace_on_term): Attach a listener to SIGTERM so that a stack-trace can be logged when a program is terminated.
        (log_stack_trace_on_ctrl_c): Attach a listener to SIGINT so that a stack-trace can be logged when a program is CTRL+Ced. 
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Set handlers to log stack trace on interruption.

2019-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Unreviewed build fix for Windows port.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::replaceTextInRange): Changed the return value type from void to bool.

2019-04-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Scripts using Buildbot API have CORS error
        https://bugs.webkit.org/show_bug.cgi?id=196709

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/master.cfg: Set allowed_origins appropriately.

2019-04-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Support API: accessibilityReplaceRange:withText
        https://bugs.webkit.org/show_bug.cgi?id=196636

        Reviewed by Daniel Bates.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (replaceTextInRangeCallback):
        (AccessibilityUIElement::replaceTextInRange):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::replaceTextInRange):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::replaceTextInRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::replaceTextInRange):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::replaceTextInRange):

2019-04-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Do not allow starting selection drags when selection views are not visible
        https://bugs.webkit.org/show_bug.cgi?id=196686
        <rdar://problem/49399192>

        Reviewed by Tim Horton.

        Adjust some existing API tests to make the web view become first responder before trying to begin dragging, and
        also add some new API tests to cover scenarios where the web view is not first responder.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:

        Add a switch to optionally make the web view first responder when starting the simulated drag.

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator runFrom:to:additionalItemRequestLocations:]):

2019-04-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix Web GPU experimental feature on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196632

        Reviewed by Myles C. Maxfield.

        Properly make Web GPU available on iOS 11+.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Do not upload archive when Compile Fails
        https://bugs.webkit.org/show_bug.cgi?id=196674

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.__init__): Remove steps which require dynamic decision about whether to run or not.
        * BuildSlaveSupport/ews-build/steps.py:
        (CompileWebKit.evaluateCommand): Dynamically decide which steps to run based on compile status.
        (CompileWebKitToT.evaluateCommand): Explicitly override Compile.evaluateCommand so that it 
        doesn't inherit CompileWebKit.evaluateCommand which dynamically adds more steps.

2019-04-08  Guillaume Emont  <guijemont@igalia.com>

        Enable DFG on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=196689

        Reviewed by Žan Doberšek.

        Since the bytecode change, we enabled the baseline JIT on mips in
        r240432, but DFG is still missing. With this change, all tests are
        passing on a ci20 board.

        * Scripts/run-jsc-stress-tests: Enable DFG tests on MIPS.

2019-04-08  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Second run update-webkitwpe-flatpak fails
        https://bugs.webkit.org/show_bug.cgi?id=192702

        Reviewed by Carlos Garcia Campos.

        * flatpak/flatpakutils.py:
        (FlatpakObject.flatpak): Fix typo.
        (FlatpakPackage.install): When installing, also update to the configured remote commit.
        * flatpak/org.webkit.WebKit.yaml: Update GNOME 3.28 SDK/runtime hashes.

2019-04-05  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WPE] outlook.live.com displays old-fashioned UI
        https://bugs.webkit.org/show_bug.cgi?id=196642

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): New Mac platform quirk test.

2019-04-07  Commit Queue  <commit-queue@webkit.org>

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

        Broke API Test SafeBrowsing.WKWebViewGoBackIFrame (Requested
        by aakashjain on #webkit).

        Reverted changeset:

        "Clicking "Go Back" from a safe browsing warning from an
        iframe should navigate the WKWebView back to the previous
        page"
        https://bugs.webkit.org/show_bug.cgi?id=196665
        https://trac.webkit.org/changeset/243956

2019-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Added tests for WeakHashSet::computesEmpty and WeakHashSet::computeSize
        https://bugs.webkit.org/show_bug.cgi?id=196669

        Reviewed by Geoffrey Garen.

        Added three new unit tests for WeakHashSet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (WTF_WeakPtr.WeakHashSetConstObjects):
        (WTF_WeakPtr.WeakHashSetComputesEmpty):
        (WTF_WeakPtr.WeakHashSetComputeSize):

2019-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Hide next and previous form control buttons when WKWebView is editable
        https://bugs.webkit.org/show_bug.cgi?id=196672
        <rdar://problem/35625321>

        Reviewed by Tim Horton.

        Add a new API test.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[TestWKWebView lastTrailingBarButtonGroup]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2019-04-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        We should pass minimumEffectiveDeviceWidth to web process on new page creation.
        https://bugs.webkit.org/show_bug.cgi?id=196077
        <rdar://problem/49108202>

        Reviewed by Chris Dumez.

        Add an API test to verify the minimumEffectDeviceWidth is passed to web content process
        on new web view.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-05  Saam Barati  <sbarati@apple.com>

        Make compare-results understand MotionMark
        https://bugs.webkit.org/show_bug.cgi?id=196666

        Reviewed by Yusuke Suzuki.

        * Scripts/compare-results:
        (PLT5Results):
        (detectMotionMark):
        (detectMotionMark1_1):
        (motionMarkResults):
        (motionMark1_1Results):
        (detectBenchmark):
        (biggerIsBetter):
        (main):

2019-04-05  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" from a safe browsing warning from an iframe should navigate the WKWebView back to the previous page
        https://bugs.webkit.org/show_bug.cgi?id=196665
        <rdar://45115669>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (+[SimpleLookupContext sharedLookupContext]):
        (-[SimpleLookupContext lookUpURL:completionHandler:]):
        (TEST):
        (+[Simple3LookupContext sharedLookupContext]): Deleted.
        (-[Simple3LookupContext lookUpURL:completionHandler:]): Deleted.

2019-04-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add configuration and architecture for windows builders
        https://bugs.webkit.org/show_bug.cgi?id=196660

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-04-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Don't run subsequent rounds if interrupted
        https://bugs.webkit.org/show_bug.cgi?id=196646

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Bail out if interrupted.

2019-04-05  Sihui Liu  <sihui_liu@apple.com>

        Test sessionStorage in PSON private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=196561

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-04-05  Commit Queue  <commit-queue@webkit.org>

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

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

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

        Simple iframe scrolling test fails to get a composited scrolling frame in WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=196635

        Reviewed by Antti Koivisto.
        
        InjectedBundle::beginTesting() calling WKBundleSetAsyncFrameScrollingEnabled() makes it impossible
        for a test to enable async frame scrolling via:
            <!-- webkit-test-runner [ internal:AsyncFrameScrollingEnabled=true ] -->
        so remove it and have TestController::resetPreferencesToConsistentValues() set the default value.
        
        Test: scrollingcoordinator/ios/programmatic-frame-scroll.html

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-04-04  Alexey Proskuryakov  <ap@apple.com>

        Use a correct LC_RPATH when building with ASan
        https://bugs.webkit.org/show_bug.cgi?id=196576

        Reviewed by David Kilzer.

        * asan/asan.xcconfig: As a temporary hack, just force LC_RPATH on all binaries,
        so that ../Frameworks is checked. This is simpler and more reliable than updating
        each SPC service xcconfig.

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        Disable Flaky API Test TestWebKitAPI.WebKit.FocusTextInputContext
        https://bugs.webkit.org/show_bug.cgi?id=196629

        Reviewed by Lucas Forschler.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] while waiting in queue status-bubble for testers queues should display build information from builder queue
        https://bugs.webkit.org/show_bug.cgi?id=196618

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added QUEUE_TRIGGERS.
        (StatusBubble._build_bubble): Get the build from builder if tester has not started the build yet.
        (StatusBubble._get_parent_queue): Get the name of the parent (builder) queue.
        (StatusBubble.get_latest_build_for_queue): If the queue doesn't have any build yet, return build information from
        its parent(builder).

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status-bubble steps are sometimes displayed in reverse order
        https://bugs.webkit.org/show_bug.cgi?id=196625

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._steps_messages): Explicitly specify order_by('uid').

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        Disable Flaky API Test TestWebKitAPI.KeyboardInputTests.KeyboardTypeForInput
        https://bugs.webkit.org/show_bug.cgi?id=196630

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:

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

        Pass storage quota parameters from UIProcess to NetworkProcess as part of WebsiteDataStore parameters
        https://bugs.webkit.org/show_bug.cgi?id=196543

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble should not display skipped buildbot steps
        https://bugs.webkit.org/show_bug.cgi?id=196584

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-04-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] configure localhost as BUILDBOT_SERVER_HOST in testing mode
        https://bugs.webkit.org/show_bug.cgi?id=196620

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py:

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

        [Win] DumpRenderTreeWatchDog.py is not checked into source
        https://bugs.webkit.org/show_bug.cgi?id=196567
        <rdar://problem/49525901>

        Reviewed by Lucas Forschler.

        This script is used on Win EWS bots to terminate hanging DRT processes.

        * EWSTools/dumprendertreewatchdog.py: Added.

2019-04-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r243858 which made tests time out.

        Disable new API tests on Windows instead.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):

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

        [ATK] Cleanup WebPageAccessibilityObjectAtk
        https://bugs.webkit.org/show_bug.cgi?id=196537

        Reviewed by Michael Catanzaro.

        Also consider files under atk directories as exceptions for GObject conventions.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2019-04-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Unreviewed build fix for Windows port.

        error C3861: 'kill': identifier not found

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST): Replaced kill with WKPageTerminate.

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

        [ews-build] Cancel build and similar operations should have authentication
        https://bugs.webkit.org/show_bug.cgi?id=196520

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/master.cfg: Configure authentication using admin's username and password from
        environment variables.

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

        [ews-build] Do not trigger queues which are not in production yet
        https://bugs.webkit.org/show_bug.cgi?id=196581

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/config.json:

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

        Unreviewed, fix typo in the name of API test added in r243848.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):

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

        The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash
        https://bugs.webkit.org/show_bug.cgi?id=196588
        <rdar://problem/49365787>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::nullJavaScriptCallback):
        (TestWebKitAPI::didCrashCheckFrames):
        (TestWebKitAPI::TEST):

2019-04-03  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: Upload test results (new results database)
        https://bugs.webkit.org/show_bug.cgi?id=196577
        <rdar://problem/34841155>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Upload results after each device shard, since the configuration will be
        different for each device.
        (Manager._results_to_upload_json_trie): Convert a TestRunResults object to a trie to be
        uploaded to a results database.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Add new 'Upload Options' and prepare 'Results JSON Options' for deprecation.

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-04-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
        builds.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformWin.cmake:

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

        [ews-app] Status bubble should not display certain infrastructure status messages
        https://bugs.webkit.org/show_bug.cgi?id=196550

        Reviewed by Lucas Forschler.

        Do not display the steps which are un-needed for end-user. This information is still avaiable
        if the user click on the bubble and look at the Buildbot build.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._steps_messages):
        (StatusBubble._should_display_step): Method to decide whether to display the step or not.

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

        [ews-build] Use https for sending data to ews-app
        https://bugs.webkit.org/show_bug.cgi?id=196492

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

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

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

        Add a test for DOMCache on multiple browsing in case of private browsing
        https://bugs.webkit.org/show_bug.cgi?id=196524

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandlerForCacheStorage userContentController:didReceiveScriptMessage:]):

2019-04-03  Jonathan Bedard  <jbedard@apple.com>

        [ews] Clean out ~/Library/Logs/CoreSimulator/ on reboot
        https://bugs.webkit.org/show_bug.cgi?id=196540

        Reviewed by Aakash Jain.

        * EWSTools/start-queue-mac.sh: Remove CoreSimulator logs.

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

        Add plumbing for a compatibility mode preference in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=196005

        Reviewed by Tim Horton.

        Add new API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/ios/PreferredCompatibilityMode.mm: Added.

2019-04-03  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Update libsrtp dependency package for Debian
        https://bugs.webkit.org/show_bug.cgi?id=196528

        Reviewed by Frédéric Wang.

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

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478
        <rdar://problem/49535124>

        Unreviewed build fix for MSVC.

        > WebKitTestRunner\TestController.cpp(267): error C2397: conversion from 'double' to 'float' requires a narrowing conversion

        And, there is a style guideline. <https://webkit.org/code-style-guidelines/#floating-point-literals>

        * WebKitTestRunner/TestController.cpp:
        (WTR::printFrame): Use int and float literals.

2019-04-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Reassign bots to queues

        * BuildSlaveSupport/ews-build/config.json: Reassigned ews150 and ews152.

2019-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2] Add support for Window's beforeprint / afterprint events
        https://bugs.webkit.org/show_bug.cgi?id=196478

        Reviewed by Alex Christensen.

        Add minimal implementation for printFrame in WebKitTestRunner.

        * WebKitTestRunner/TestController.cpp:
        (WTR::printFrame):
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2019-04-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble hover over message should clearly indicate that build is in-progress
        https://bugs.webkit.org/show_bug.cgi?id=196491

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-04-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Configure buildbot try credentials in environment variables
        https://bugs.webkit.org/show_bug.cgi?id=196501

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py: Read credentials from environment variables.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py: Rename BUILDBOT_PB_USERNAME to BUILDBOT_TRY_USERNAME.
        * BuildSlaveSupport/ews-app/ews/config.py: Ditto.

2019-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r243726): Crash at unrecognized selector: -[WKWebpagePreferences webpagePreferences]
        https://bugs.webkit.org/show_bug.cgi?id=196496
        <rdar://problem/49521634>

        Reviewed by Chris Dumez.

        Add new API tests (see WebKit ChangeLog for more detail).

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesNavigationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (TEST):

2019-04-02  David Kilzer  <ddkilzer@apple.com>

        Rename CLANG_ADDRESS_SANITIZER Xcode variable to ENABLE_ADDRESS_SANITIZER
        <https://webkit.org/b/196499>

        Reviewed by Alexey Proskuryakov.

        * asan/asan.xcconfig: Change CLANG_ADDRESS_SANITIZER to
        ENABLE_ADDRESS_SANITIZER.

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
        https://bugs.webkit.org/show_bug.cgi?id=182757

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformGTK.cmake: Removed the workaround of using an intermediate target.
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.

2019-04-01  Jonathan Bedard  <jbedard@apple.com>

        run-api-tests: Upload test results
        https://bugs.webkit.org/show_bug.cgi?id=196323
        <rdar://problem/49356714>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager):
        (Manager.run): Upload results to a results database.
        * Scripts/webkitpy/api_tests/run_api_tests.py:
        (parse_args): Add upload arguments.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.configuration_for_upload): Creates a configuration dictionary for uploading results.
        (Port.commits_for_upload): Create a list of commits from the WebKit repository tests are run from along
        with commits from any other associated repositories.
        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.build_version): Access build_versoin of underlying platform device.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.test_configuration_for_upload):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.configuration_for_upload): Devices are unique because their configuration is not
        the same as the machine uploading results.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.configuration_for_upload): Define SDK in upload configuration for Mac.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest):
        (MacTest.test_configuration_for_upload):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_device_with_runtime):
        (SimulatedDevice.__init__): Create simulated device with a build_version.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_existing_simulator):

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        Remove extra newline characters (Follow-up fix to r243707)

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Use API_KEY to accept results data
        https://bugs.webkit.org/show_bug.cgi?id=196461

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/views/results.py:
        (Results.post): Validate EWS_API_KEY before accepting any data.
        * BuildSlaveSupport/ews-build/events.py:
        (Events.sendData): Send EWS_API_KEY if available along with event data.

2019-04-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to copy and paste a PDF from Notes into Mail compose body
        https://bugs.webkit.org/show_bug.cgi?id=196442
        <rdar://problem/48573098>

        Reviewed by Tim Horton.

        Add new API tests to exercise pasting CNContact and MKMapItem-backed item providers. Additionally, adjust an
        existing test that pastes a PDF file as an attachment to not require UIPreferredPresentationStyleAttachment
        to be specified on the item providers.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::mapItemForTesting):
        (TestWebKitAPI::contactItemForTesting):

2019-04-01  Tim Horton  <timothy_horton@apple.com>

        Make UIWKDocumentContext rects per-character instead of per-word
        https://bugs.webkit.org/show_bug.cgi?id=196459

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:
        (TEST):
        Adjust test results due to switching to per-character rects.

2019-04-01  Chris Dumez  <cdumez@apple.com>

        UIProcess crash when a prewarmed process is terminated
        https://bugs.webkit.org/show_bug.cgi?id=196451
        <rdar://problem/49245471>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

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

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Display OS and Xcode configuration in status-bubble's hover-over message
        https://bugs.webkit.org/show_bug.cgi?id=196449

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble.get_os_details): Method to get OS and Xcode details.
        (StatusBubble._build_bubble): Moved the timestamp logic to common method.
        (StatusBubble.get_build_timestamp): Method to get the timestamp to display for the build.

2019-04-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Remove force schedulers from OpenSource EWS Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=196444

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py: Remove ForceSchedulers.

2019-04-01  Alex Christensen  <achristensen@webkit.org>

        Add SPI to canonicalize NSURLs with WTF::URL
        https://bugs.webkit.org/show_bug.cgi?id=196415
        <rdar://problem/44980271>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/URLCanonicalization.mm: Added.
        (TestWebKitAPI::TEST):

2019-04-01  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] EventSenderProxy constructor is called before a PlatformWindow is usable
        https://bugs.webkit.org/show_bug.cgi?id=196441

        Reviewed by Carlos Garcia Campos.

        Don't cache the wpe_view_backend object that might not exist yet at the
        time of EventSenderProxy constructor invocation, but instead retrieve
        that object whenever it's required for event dispatching. This should
        avoid crashes in this constructor now that it's invoked before any
        PlatformWindow has been set up (as changed in r243496).

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::viewBackend):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::prepareAndDispatchTouchEvent):

2019-03-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKit] MiniBrowser should support high DPI display
        https://bugs.webkit.org/show_bug.cgi?id=196391

        Reviewed by Alex Christensen.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Call resetZoom to set the page zoom factor.
        (WebKitBrowserWindow::resetZoom): Changed the default page zoom factor from 1 to the device scale factor.
        * MiniBrowser/win/stdafx.h: Define WEBCORE_EXPORT.

2019-03-31  Sam Weinig  <weinig@apple.com>

        Remove more i386 specific configurations
        https://bugs.webkit.org/show_bug.cgi?id=196430

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        ENABLE_WEB_AUTHN_macosx and ENABLE_WEB_RTC_macosx can now be enabled unconditionally on macOS.

2019-03-31  Andy Estes  <aestes@apple.com>

        [iOS] WebKit should consult the navigation response policy delegate before previewing a QuickLook document
        https://bugs.webkit.org/show_bug.cgi?id=196433
        <rdar://problem/49293305>

        Reviewed by Tim Horton.

        Enhanced API test coverage to include all navigation response policy decisions in both
        linked-before and linked-on-or-after modes. Also added new expectations for all tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ios/PreviewConverter.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        (readFile):
        (-[QuickLookDelegate initWithExpectedFileURL:responsePolicy:]):
        (-[QuickLookDelegate initWithExpectedFileURL:previewMIMEType:responsePolicy:]):
        (-[QuickLookDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[QuickLookDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):
        (-[QuickLookDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[QuickLookDelegate _webViewWebProcessDidCrash:]):
        (-[QuickLookDelegate _downloadDidStart:]):
        (-[QuickLookDelegate _download:didReceiveResponse:]):
        (-[QuickLookDelegate _download:didReceiveData:]):
        (-[QuickLookDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[QuickLookDelegate _downloadDidFinish:]):
        (-[QuickLookDelegate _download:didFailWithError:]):
        (-[QuickLookDelegate _downloadDidCancel:]):
        (-[QuickLookDelegate verifyDownload]):
        (runTest):
        (runTestDecideBeforeLoading):
        (runTestDecideAfterLoading):
        (TEST):
        (-[QuickLookAsyncDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[QuickLookPasswordDelegate _webViewDidRequestPasswordForQuickLookDocument:]):
        (-[QuickLookFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[QuickLookNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): Deleted.
        (-[QuickLookNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): Deleted.
        (-[QuickLookNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): Deleted.
        (-[QuickLookAsyncNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (-[QuickLookDecidePolicyDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): Deleted.
        (-[QuickLookDecidePolicyDelegate webView:didFailProvisionalNavigation:withError:]): Deleted.
        (-[QuickLookDecidePolicyDelegate _webViewWebProcessDidCrash:]): Deleted.
        (-[QuickLookPasswordNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]): Deleted.

2019-03-30  Dominik Infuehr  <dinfuehr@igalia.com>

        [CMake] add testdfg as target with build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=196393

        Reviewed by Saam Barati.

        Added testdfg as one of the targets to build when
        using CMake.

        * Scripts/build-jsc:

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyBuffer.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyCommandQueue.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyDevice.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyFunction.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyLibrary.mm: Removed.
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyTest.h: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebMetalEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-03-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r243523): Six form-related watchOS layout tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=196405
        <rdar://problem/49428130>

        Reviewed by Wenson Hsieh.

        Add a shouldPresentPopovers=false WebKitTestRunner option to cause WKTR to swizzle
        the popover presentation methods to be no-ops. Use this in the new test added in
        r243523 so that we do not swizzle those methods for all tests. This is needed because
        those WatchOS tests rely on the popover getting presented and interactive.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformResetStateToConsistentValues):

2019-03-29  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Add Server Trust Evaluation Support.
        https://bugs.webkit.org/show_bug.cgi?id=191646

        Reviewed by Fujii Hironori.

        Implemented MiniBrowser UI for asking if user trusts the server.

        * MiniBrowser/win/Common.cpp:
        (askServerTrustEvaluation):
        (replaceString):
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createPEMString):
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):
        (WebKitBrowserWindow::canTrustServerCertificate):
        * MiniBrowser/win/WebKitBrowserWindow.h:

2019-03-29  Cathie Chen  <cathiechen@igalia.com>

        Implement ResizeObserver.
        https://bugs.webkit.org/show_bug.cgi?id=157743

        Reviewed by Simon Fraser.

        Support resizeObserverEnabled webPreferences.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-28  John Wilander  <wilander@apple.com>

        Resource Load Statistics: IPC to the WebsiteDataStore in the UI process from NetworkProcess::deleteWebsiteDataForRegistrableDomains()
        https://bugs.webkit.org/show_bug.cgi?id=196281
        <rdar://problem/48938748>

        Reviewed by Alex Christensen.

        This patch adds the function isStatisticsHasLocalStorage() to the
        TestRunner. With it, the page can query the WebsiteDataStore in the
        UI process to make sure that it sees LocalStorage.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isStatisticsHasLocalStorage):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isStatisticsHasLocalStorage):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-03-28  Jiewen Tan  <jiewen_tan@apple.com>

        API::Data::createWithoutCopying should do a null check before calling CFRelease
        https://bugs.webkit.org/show_bug.cgi?id=196276
        <rdar://problem/48059859>

        Reviewed by Alex Christensen.

        Add an API test that will pass a nil to API::Data::createWithoutCopying via NavigationState::NavigationClient::webCryptoMasterKey.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/navigation-client-default-crypto.html:
        * TestWebKitAPI/Tests/WebKitCocoa/WebCryptoMasterKey.mm: Added.
        (-[WebCryptoMasterKeyNavigationDelegate _webCryptoMasterKeyForWebView:]):
        (-[WebCryptoMasterKeyNavigationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] webkit_web_resource_get_data_finish can return NULL without setting error
        https://bugs.webkit.org/show_bug.cgi?id=186276

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (webViewLoadChanged):
        (testWebResourceGetDataError):
        (testWebResourceGetDataEmpty):
        (beforeAll):
        (webViewloadChanged): Deleted.

2019-03-27  Andy Estes  <aestes@apple.com>

        REGRESSION (r242686): package-root creates roots with broken symlinks in WebKit.framework/XPCServices/
        https://bugs.webkit.org/show_bug.cgi?id=196317

        Reviewed by Dan Bernstein.

        package-root copies built products into a staging directory using ditto(1), which does not
        follow symbolic links as it traverses a directory. Now that the files in
        WebKit.framework/XPCServices/ are symbolic links to a location outside of the framework
        itself, these become broken links when ditto'd into the staging directory.

        To account for this, change package-root to copy using cp(1) in a mode that follows symlinks.

        * Scripts/package-root:

2019-03-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Update display text of Submit for ews analysis
        https://bugs.webkit.org/show_bug.cgi?id=196309

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:

2019-03-27  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests should check for leaks in WebKit processes
        <https://webkit.org/b/193772>
        <rdar://problem/46526680>

        Reviewed by Ryosuke Niwa.

        This works by doing the following:
        - Add a "#LIST CHILD PROCESSES" command to WebKitTestRunnner.
          The list of child processes are returned one per line:
          process.name: pid
        - Run the "#LIST CHILD PROCESSES" command just before the
          "#CHECK FOR WORLD LEAKS" command, and store the list of child
          processes on the ServerProcess object.
        - When the `--leaks` switch is handled, run check_for_leaks() on
          each child process after the main test harness.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (handleControlCommand):
        - Use strncmp() instead of strcmp().
        - Add support for handling "#LIST CHILD PROCESSES" command.

        * Scripts/webkitpy/port/base.py:
        (Port.check_for_leaks):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/driver.py:
        (Driver.do_post_tests_work):
        - Restructure the logic since "#CHECK FOR WORLD LEAKS" is no
          longer the only command this sends to WebKitTestRunner.
        - If the `--leaks` switch is present, send the
          "#LIST CHILD PROCESSES" to WebKitTestRunner and store the
          result using Port.set_webkit_processes().
        (Driver._parse_child_processes_output):
        - Add helper method to parse list of child process names and
          process IDs returned from WebKitTestRunner.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._parse_leaks_output):
        - Return early if there is no leaks_output.
        (LeakDetector.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__):
        (ServerProcess.child_processes):
        (ServerProcess.set_child_processes):
        - Add instance variable to Port to store list of child process
          names and process IDs returned from WebKitTestRunner.
        (ServerProcess._start):
        - Clear self._child_processes.
        (ServerProcess.stop):
        - If self._child_processes is set, call
          self._port.check_for_leaks() for each child process.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (TrivialMockPort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop):
        - If self._child_processes is set, call
          self._port.check_for_leaks() for each child process.

        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.check_for_leaks):
        - Rename redundant 'process_pid' argument to 'process_id'.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::dumpResponse):
        - Extract method from findAndDumpWorldLeaks() so that it may be
          reused by findAndDumpWebKitProcessIdentifiers().
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Add method to output process name and process ID of both the
          WebContent and Networking processes.
        (WTR::TestController::findAndDumpWorldLeaks):
        - Fix missing newline in output when there were no abandoned
          documents.
        - Call dumpResponse() for extracted code.
        (WTR::TestController::handleControlCommand):
        - Restructure the logic for "#CHECK FOR WORLD LEAKS".
        - Use strncmp() instead of strcmp().
        - Call findAndDumpWebKitProcessIdentifiers() when
          "#LIST CHILD PROCESSES" command is sent.
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::dumpResponse):
        (WTR::TestController::findAndDumpWebKitProcessIdentifiers):
        - Declare methods.

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

        Unreviewed. Add GLib API test cases after r243434.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (testWebViewActiveURI):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (sendRequestCallback):

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

        Geolocation request not complete when watch request was started in a different web process
        https://bugs.webkit.org/show_bug.cgi?id=195996

        Reviewed by Alex Christensen.

        Add a test case.

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):

2019-03-26  Keith Rollin  <krollin@apple.com>

        Update the way generate-xcfilelists returns strings from functions
        https://bugs.webkit.org/show_bug.cgi?id=195975
        <rdar://problem/49040807>

        Reviewed by Dean Jackson.

        There are places where generate-xcfilelists executes assignments with
        statements like:

            FOO=$(some_function)

        where "some_function" return a string by echoing it. E.g.

            some_function()
            {
                echo "Hello, World"
            }

        This is a common idiom, but it has a problem if "some_function" needs
        to call "exit" in an attempt to halt the entire script right then and
        there. Since "some_function" is called inside of $(), it's being
        executed in a sub-shell. Calling exit in that sub-shell simply exits
        that shell; it doesn't not exit the outer shell in which the main part
        of the script is still running. As such, the main script keeps
        executing when the intent was for the script to halt.

        The solution to this is to use a different idiom for returning
        strings. The one we now is to pass in the name of the variable to
        receive the string result:

            some_function()
            {
                variable_name=$1
                eval $variable_name ="Hello, World"
            }

        The call site now looks like

            some_function FOO

        Because there's no invocation of a sub-shell, some_function can now
        call "exit" if it wants to, and the entire script will exit at that
        point.

        * Scripts/generate-xcfilelists:

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

        Add basic layout test coverage for File Picker on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196265

        Reviewed by Wenson Hsieh.

        Add layout test infrastructure to test the file picker on iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFilePicker):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::dismissFilePicker):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overridePresentViewController):
        (WTR::TestController::platformInitialize):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::dismissFilePicker):

2019-03-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement async paste method on UIWKInteractionViewProtocol
        https://bugs.webkit.org/show_bug.cgi?id=196267
        <rdar://problem/49236346>

        Reviewed by Tim Horton.

        Add a new test to exercise the new SPI. Additionally, add staging forward declarations for
        -pasteWithCompletionHandler:, and remove some old existing staging declarations for other bits of UIKit SPI that
        are now a part of all iOS 12 internal SDKs.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:

        While we're here, also change a few iOS 11.3 checks to just be about PLATFORM(IOS) (since we don't build for iOS
        prior to 12, these version checks are effectively only about iOS vs. tvOS or watchOS).

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _sendQueuedAdditionalItemRequest]):
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        [ews-build] Use PostgreSQL for ews.webkit.org database
        https://bugs.webkit.org/show_bug.cgi?id=196270

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2019-03-26  Jonathan Bedard  <jbedard@apple.com>

        [ews] Reset simctl states on reboot
        https://bugs.webkit.org/show_bug.cgi?id=196260

        Rubber-stamped by Aakash Jain.

        * EWSTools/start-queue-mac.sh:

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

        [ews-build] Use PostgreSQL for ews-build database
        https://bugs.webkit.org/show_bug.cgi?id=196229

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

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

        [ews-build] Get master_hostname dynamically in master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=196255

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg: Get hostname dynamically. Also do not
        send events data in test mode.

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

        [ews-app] Set db_constraint to False for Foreign Keys
        https://bugs.webkit.org/show_bug.cgi?id=196252

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

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

        [ews-build] is_test_mode_enabled should default to True
        https://bugs.webkit.org/show_bug.cgi?id=196248

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg: Reverse the environment variable used to decide is_test_mode_enabled.

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

        [ews-app] Add webkitperl to ENABLED_QUEUES
        https://bugs.webkit.org/show_bug.cgi?id=196253

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-03-25  Alexey Proskuryakov  <ap@apple.com>

        Address NSWindow sometimes using WebKitTestRunnerEvent too early
        https://bugs.webkit.org/show_bug.cgi?id=196211
        rdar://problem/49110552

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::initialize):
        Make sure that EventSenderProxy always exists when running tests. We used to create
        it when resetting before the first test, which is a bit too late.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::platformCreateOtherPage):
        (WTR::TestController::finishCreatingPlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Moved some code that made NSWindow use NSEvent during web view creation. We may
        need to move more if some other case us found, but this is enough for now.

2019-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix typo in GLib geolocation API after r243285.

        gelocation -> geolocation.

        * TestWebKitAPI/Tests/WebKitGLib/TestGeolocationManager.cpp:
        (testGeolocationManagerWatchPosition):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added.
        (credentialWithIdentityAndKeychainPath):
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Expected shouldn't assume its contained types are copyable
        https://bugs.webkit.org/show_bug.cgi?id=195986

        Reviewed by JF Bastien.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::NonCopyable::operator== const):
        (TestWebKitAPI::NonCopyable::operator!= const):
        (TestWebKitAPI::TEST):

2019-03-25  Tim Horton  <timothy_horton@apple.com>

        Remove some now-unnecessary dynamic class lookup
        https://bugs.webkit.org/show_bug.cgi?id=196237

        Reviewed by Simon Fraser.

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

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

        Unreviewed, rolling out r243450.

        AppleWin and WinCairo port builds get broken.

        Reverted changeset:

        "Add test for fix of #196095"
        https://bugs.webkit.org/show_bug.cgi?id=196097
        https://trac.webkit.org/changeset/243450

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

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

        the test doesn't build (Requested by thorton on #webkit).

        Reverted changeset:

        "Do not terminate the NetworkProcess if a third party
        application sends a NSCredential with a SecIdentityRef"
        https://bugs.webkit.org/show_bug.cgi?id=196213
        https://trac.webkit.org/changeset/243465

2019-03-25  Alex Christensen  <achristensen@webkit.org>

        Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef
        https://bugs.webkit.org/show_bug.cgi?id=196213

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added.
        (credentialWithIdentityAndKeychainPath):
        (-[ChallengeDelegate webView:didFinishNavigation:]):
        (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]):
        (TestWebKitAPI::TEST):

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

        [ews-build] Gracefully handle missing patch_id in events
        https://bugs.webkit.org/show_bug.cgi?id=196216

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:

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

        [ews-build] use lz4 compression for improving buildbot performance
        https://bugs.webkit.org/show_bug.cgi?id=196155

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pull some API testing helper methods out of TestWKWebView
        https://bugs.webkit.org/show_bug.cgi?id=196212

        Reviewed by Tim Horton.

        Refactor some more API testing utility methods, so that they can be used in
        tests that do not use TestWKWebView.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView loadTestPageNamed:]):
        (-[WKWebView synchronouslyLoadHTMLString:baseURL:]):
        (-[WKWebView synchronouslyLoadHTMLString:]):
        (-[WKWebView synchronouslyLoadTestPageNamed:]):
        (-[TestWKWebView loadTestPageNamed:]): Deleted.
        (-[TestWKWebView synchronouslyLoadHTMLString:baseURL:]): Deleted.
        (-[TestWKWebView synchronouslyLoadHTMLString:]): Deleted.
        (-[TestWKWebView synchronouslyLoadTestPageNamed:]): Deleted.

2019-03-25  Jer Noble  <jer.noble@apple.com>

        Test for: 196095 Inband Text Track cues interspersed with Data cues can display out of order.
        https://bugs.webkit.org/show_bug.cgi?id=196097

        Reviewed by Eric Carlson.

        Drive-by bug fix: allow tests to play audio without a user gesture by default.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-03-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pull IPadUserInterfaceSwizzler out into a separate header file
        https://bugs.webkit.org/show_bug.cgi?id=196193

        Reviewed by Anders Carlsson.

        Pull the IPadUserInterfaceSwizzler helper class out into a separate file, so that it may
        be used in other API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler): Deleted.
        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom): Deleted.
        * TestWebKitAPI/ios/IPadUserInterfaceSwizzler.h: Added.
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler):
        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom):

2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove NavigatorContentUtils in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=196070

        Reviewed by Alex Christensen.

        NavigatorContentUtils was to support the custom scheme spec [1].
        However, in WebKit side, no port has supported the feature in
        WebKit layer after EFL port was removed. So there has been the
        only IDL implementation of the NavigatorContentUtils in WebCore.
        So we don't need to keep the implementation in WebCore anymore.

        [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-24  Andy Estes  <aestes@apple.com>

        [watchOS] Remove unused Proximity Networking code
        https://bugs.webkit.org/show_bug.cgi?id=196188

        Reviewed by Tim Horton.

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

2019-03-23  Keith Miller  <keith_miller@apple.com>

        Refactor clz/ctz and fix getLSBSet.
        https://bugs.webkit.org/show_bug.cgi?id=196162

        Reviewed by Saam Barati.

        Add tests for clz, ctz, getLSBSet, and getMSBSet.

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

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

        [GTK][WPE] check-webkit-style doesn't complain about identifiers with underscores in files under glib, gtk or wpe dirs
        https://bugs.webkit.org/show_bug.cgi?id=196143

        Reviewed by Michael Catanzaro.

        Fix the check for the exception of identifiers starting with webkit_ in files under glib, gtk or wpe
        directories.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_names):

2019-03-22  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Manifest expanding fails for qt WPE extension
        https://bugs.webkit.org/show_bug.cgi?id=196148

        Reviewed by Alex Christensen.

        * flatpak/flatpakutils.py:
        (expand_submodules_recurse): The last recurse manifest expand
        iteration might lead to a single module so take it into account
        and don't try to recurse further.

2019-03-22  Chris Dumez  <cdumez@apple.com>

        [ iOS Simulator] REGRESSION (r241821) Layout Test platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html is a flaky failure on bots
        https://bugs.webkit.org/show_bug.cgi?id=195348
        <rdar://problem/48622090>

        Reviewed by Alex Christensen.

        Make sure webView.configuration.preferences._shouldIgnoreMetaViewport gets reset
        to NO when test.options().shouldIgnoreMetaViewport is false.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest):

2019-03-22  Chris Dumez  <cdumez@apple.com>

        Prewarmed processes should be usable with any website data store
        https://bugs.webkit.org/show_bug.cgi?id=196104

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (runInitialWarmedProcessUsedTest):
        (TEST):

2019-03-22  David Kilzer  <ddkilzer@apple.com>

        Back out local changes to Alex's Subversion working directory

        They were accidentally committed.

        * Scripts/webkitpy/common/system/abstractexecutive.py:
        (AbstractExecutive.wait_newest):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids):
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.running_pids):
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (ExecutiveTest.serial_test_running_pids):
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.check_for_leaks):
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector.check_for_leaks):
        - This was the hack attached to Bug 193772.

        * WebKitTestRunner/mac/WebKitTestRunnerEvent.mm:
        (+[WebKitTestRunnerEvent mouseLocation]):
        - This works around a crash on an internal build.

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

        Fix the build after r243354
        https://bugs.webkit.org/show_bug.cgi?id=196138
        <rdar://problem/49145951>

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

2019-03-21  Tim Horton  <timothy_horton@apple.com>

        Adopt UIWKDocumentContext
        https://bugs.webkit.org/show_bug.cgi?id=196040
        <rdar://problem/48642440>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm: Added.
        (makeRequest):
        (-[TestWKWebView synchronouslyRequestDocumentContext:]):
        (-[TestWKWebView synchronouslyAdjustSelectionWithDelta:]):
        (applyStyle):
        (TEST):
        Add tests for UIWKDocumentContext.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        (TEST):
        (recursiveFindWKContentView): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (recursiveFindWKContentView):
        (-[TestWKWebView wkContentView]):
        * TestWebKitAPI/ios/UIKitSPI.h:
        Share the WKContentView finding code between tests.

2019-03-21  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn on async overflow scrolling by default
        https://bugs.webkit.org/show_bug.cgi?id=196011
        rdar://problem/48453859

        Reviewed by Antti Koivisto.
        
        Explicitly turn off the async overflow scrolling internal feature for tests by default,
        since so many basic layout tests have different results when compositing is triggered for
        overflow.
        
        Individual tests will re-enable with <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Retry API test in case of failures
        https://bugs.webkit.org/show_bug.cgi?id=196004

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (UnApplyPatchIfRequired.doStepIf): Updated doStepIf to include patchFailedAPITests.
        (CompileWebKitToT.doStepIf): Ditto.
        (RunAPITests.evaluateCommand): Check if tests failed and retry them if required.
        (ReRunAPITests): Re-run API tests.
        (ReRunAPITests.evaluateCommand): Check if tests failed and retry on clean build if required.
        (RunAPITestsWithoutPatch): Run API tests without patch.
        (RunAPITestsWithoutPatch.doStepIf):
        (RunAPITestsWithoutPatch.hideStepIf):
        (RunAPITestsWithoutPatch.evaluateCommand):
        (AnalyzeAPITestsResults): Analyze API test results from previous runs.
        (AnalyzeAPITestsResults.start):
        (AnalyzeAPITestsResults.analyzeResults): Analyze API test results.
        (AnalyzeAPITestsResults.getBuildStepByName): Search for a build step by name.
        (AnalyzeAPITestsResults.getTestsResults): Get the test results from previous API tesst steps.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Monkey patched FakeBuild.

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update queues configurations
        https://bugs.webkit.org/show_bug.cgi?id=196074

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/config.json: Updated queues from iOS11 to iOS12,
        added new bots, reassigned bots for various builders, moved few builders to another scheduler.

2019-03-21  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Generate status-bubble hover-over messages (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=195680
        <rdar://problem/48903534>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Do not append to details_message in the cases in which it wasn't defined earlier.

2019-03-21  Andy Estes  <aestes@apple.com>

        [iOS] Apple Pay should be available in documents with no user agent scripts
        https://bugs.webkit.org/show_bug.cgi?id=196061
        <rdar://problem/48649391>

        Reviewed by Brady Eidson.

        Added API tests and related infrastructure.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm: Added.
        (-[TestApplePayScriptMessageHandler initWithExpectation:]):
        (-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-active-session.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-in-iframe.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html: Added.
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (-[TestProtocol startLoading]):
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.h: Added.
        * TestWebKitAPI/cocoa/WebProcessPlugIn/WebProcessPlugInWithInternals.mm: Added.
        (-[WebProcessPlugInWithInternals webProcessPlugIn:didCreateBrowserContextController:]):
        (-[WebProcessPlugInWithInternals webProcessPlugInBrowserContextController:didClearWindowObjectForFrame:inScriptWorld:]):

2019-03-21  Jonathan Bedard  <jbedard@apple.com>

        REGRESSSION (r243297): webkitpy tests broken
        https://bugs.webkit.org/show_bug.cgi?id=196108

        Reviewed by Aakash Jain.

        r243297 updated contributors.json, which broke a few unit tests.

        * Scripts/webkitpy/tool/bot/irc_command_unittest.py:
        (IRCCommandTest.test_whois):
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:

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

        WebKit should throw when trying to create a WKWebView with a related view that is using a different data store
        https://bugs.webkit.org/show_bug.cgi?id=196041
        <rdar://problem/49083230>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2019-03-21  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform applications of WKContentRuleList actions
        https://bugs.webkit.org/show_bug.cgi?id=195965
        <rdar://problem/42664365>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::allActionsForResourceLoad):
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm:
        (Notification::description):
        (Notification::operator== const):
        (toVector):
        (-[ContentRuleListNotificationDelegate _webView:URL:contentRuleListIdentifiers:notifications:]):
        (-[ContentRuleListNotificationDelegate _webView:contentRuleListWithIdentifier:performedActionOnURL:blockedLoad:blockedCookies:madeHTTPS:notifications:]):
        (makeContentRuleList):
        (TEST):
        (makeWarnContentRuleList): Deleted.

2019-03-21  Timothy Hatcher  <timothy@apple.com>

        Style check error "WK_MAC_TBA is neither a version number nor WK_IOS_TBA" is confusing.
        https://bugs.webkit.org/show_bug.cgi?id=196088

        Reviewed by Brian Burg.

        Fix the error messages used when looking for macos(WK_IOS_TBA) or ios(WK_MAC_TBA).
        Support checks when only one platform is specified. Also deprecate macosx() and
        force the use of macos() instead.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_min_versions_of_wk_api_available):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_min_versions_of_wk_api_available):

2019-03-21  Alexey Proskuryakov  <ap@apple.com>

        Update status inactive committers' status to 'contributor'.

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

2019-03-21  Xan Lopez  <xan@igalia.com>

        [JSC][x86] Drop support for x87 floating point
        https://bugs.webkit.org/show_bug.cgi?id=194853

        Reviewed by Don Olmstead.

        Force SSE2 on x86/32bit builds.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

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

        [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
        https://bugs.webkit.org/show_bug.cgi?id=196073

        Reviewed by Michael Catanzaro.

        Add test cases to check functions and constructors with no arguments but receiving user data.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (checkUserData):
        (testJSCFunction):
        (fooCreateWithUserData):
        (testJSCClass):

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

        Unreviewed. Fix GTK build with GLib < 2.58 after r243285.

        Add g_assert_cmpfloat_with_epsilon macro if not defined.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:

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

        [GTK][WPE] Add API to provide geolocation information
        https://bugs.webkit.org/show_bug.cgi?id=195940

        Reviewed by Michael Catanzaro.

        Add a new test to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestGeolocationManager.cpp: Added.
        (testGeolocationManagerCurrentPosition):
        (testGeolocationManagerWatchPosition):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests): Stop using ENABLE(GEOLOCATION) conditionals for geolocation tests.
        (beforeAll): Ditto.
        * TestWebKitAPI/glib/CMakeLists.txt:

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

        [GLib] Returning G_TYPE_OBJECT from a method does not work
        https://bugs.webkit.org/show_bug.cgi?id=195574

        Reviewed by Michael Catanzaro.

        Add new test cases to check the behavior of constructors and functions returning GObject and boxed types.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        (getGFile):
        (getParent):
        (createGString):
        (getGString):
        (getGStringCopyWillRaise):
        (getGStringCopy):
        (getGStringStr):
        (getGStringLen):
        (freeGString):
        (testJSCClass):

2019-03-20  Saam Barati  <sbarati@apple.com>

        DFG::AbstractValue::validateOSREntry is wrong when isHeapTop and the incoming value is Empty
        https://bugs.webkit.org/show_bug.cgi?id=195721

        Reviewed by Filip Pizlo.

        * Scripts/run-javascriptcore-tests:

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-20  Daniel Bates  <dabates@apple.com>

        REGRESSION (r243153): [iOS] TestWebKitAPI.FocusPreservationTests.ChangingFocusedNodeResetsFocusPreservationState is failing
        https://bugs.webkit.org/show_bug.cgi?id=196031
        <rdar://problem/49078172>

        Reviewed by Tim Horton.

        The test incorrectly assumes that calling -[WKWebView resignFirstResponder] is identical to dismissing the
        <select> picker. This is no longer the case following r243135. Instead use testing SPI that invokes that
        same code path used when the Done button is pressed to dismiss the <select> picker.

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

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

        Regression(PSON): ViewGestureController is not properly notified of process swaps on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196029
        <rdar://problem/48954651>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-build] Improve failure summary string for ApplyPatch step
        https://bugs.webkit.org/show_bug.cgi?id=195995

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/steps.py:
        (ApplyPatch.getResultSummary): Override getResultSummary.

2019-03-20  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for new meter ARIA role
        https://bugs.webkit.org/show_bug.cgi?id=195966

        Reviewed by Chris Fleizach.

        Update Core role for ATK_ROLE_LEVEL_BAR from AXProgressIndicator
        to AXLevelIndicator.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

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

        [WebAuthN] Implement FIDO AppID extension
        https://bugs.webkit.org/show_bug.cgi?id=143491
        <rdar://problem/48298273>

        Reviewed by Brent Fulgham.

        Add a test that covers the new flag of convertToU2fSignCommand.

        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp:
        (TestWebKitAPI::TEST):

2019-03-19  Keith Rollin  <krollin@apple.com>

        Add support for more platforms to generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=195977

        Reviewed by Alexey Proskuryakov.

        generate-xcfilelists incorrectly complains when involved with building
        WebKit for iphonesimulator:

            $ make debug SDKROOT=iphonesimulator.internal -C Internal/
            …
            ### (die get_canonical_platform_name main main) Unrecognized platform name: iphonesimulator

        Address this by teaching generate-xcfilelists about more platforms.

        * Scripts/generate-xcfilelists:

2019-03-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Clear non-cookie website data for sites that have been navigated to, with link decoration, by a prevalent resource
        https://bugs.webkit.org/show_bug.cgi?id=195923
        <rdar://problem/49001272>

        Reviewed by Alex Christensen.

        This patch does the following to the TestRunner:
        - Adds setStatisticsCrossSiteLoadWithLinkDecoration().
        - Makes setStatisticsTimeToLiveUserInteraction() wait for completion.
        - Makes statisticsProcessStatisticsAndDataRecords() wait for completion.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsCrossSiteLoadWithLinkDecoration):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsCrossSiteLoadWithLinkDecoration):
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-03-19  Christopher Reid  <chris.reid@sony.com>

        [CMake] Support more clang and gcc sanitizers
        https://bugs.webkit.org/show_bug.cgi?id=195956

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm: Updating ENABLE_ADDRESS_SANITIZER to ENABLE_SANITIZERS=address

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

        [ews-build] Improve summary for PrintConfiguration step
        https://bugs.webkit.org/show_bug.cgi?id=195945

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration.getResultSummary): Override getResultSummary.

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

        [ews-build] Improve summary for CheckOutSource step
        https://bugs.webkit.org/show_bug.cgi?id=195963

        Reviewed by Lucas Forschler.

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

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

        [iOS] Focus not preserved when switching between tabs
        https://bugs.webkit.org/show_bug.cgi?id=195820
        <rdar://problem/43614450>

        Reviewed by Brent Fulgham.

        Add tests to ensure that we restore focus when resigning and becoming first responder.

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

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

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

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

2019-03-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Backported mssdemux protection data crash fix
        https://bugs.webkit.org/show_bug.cgi?id=195918

        Reviewed by Philippe Normand.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0005-mssdemux-fix-protection-data-double-free.patch: Added.

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243132.

        Broke GTK build

        Reverted changeset:

        "Make WTFLogChannelState and WTFLogLevel enum classes"
        https://bugs.webkit.org/show_bug.cgi?id=195904
        https://trac.webkit.org/changeset/243132

2019-03-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r243073, fixing WPE MiniBrowser launching.

        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Adjust the shared library name that's changed
        with the API version bump in r243073.

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Make WTFLogChannelState and WTFLogLevel enum classes
        https://bugs.webkit.org/show_bug.cgi?id=195904

        Reviewed by Eric Carlson.

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

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Disable flaky test added in r2431100
        https://webkit.org/b/195785

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (TestWebKitAPI::TEST):
        Apparently bots don't hit 150kb/s as reliably as I do locally.  Can't say I'm too surprised.

2019-03-18  Timothy Hatcher  <timothy@apple.com>

        WKWebView.GetContentsShouldReturnAttributedString is crashing on iOS Simulator.
        https://bugs.webkit.org/show_bug.cgi?id=195916

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST(WKWebView, GetContentsShouldReturnAttributedString): Fix iOS code path to pass.

2019-03-18  Alexey Proskuryakov  <ap@apple.com>

        Add a secondary e-mail address for Fujii Hironori to make tools happier.

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

2019-03-18  Alex Christensen  <achristensen@webkit.org>

        Implement DownloadMonitor to prevent long-running slow downloads from background apps
        https://bugs.webkit.org/show_bug.cgi?id=195785

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TCPServer.cpp: Added.
        (TestWebKitAPI::TCPServer::TCPServer):
        (TestWebKitAPI::TCPServer::~TCPServer):
        (TestWebKitAPI::TCPServer::socketBindListen):
        (TestWebKitAPI::TCPServer::waitForAndReplyToRequests):
        * TestWebKitAPI/TCPServer.h: Added.
        (TestWebKitAPI::TCPServer::port const):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadMonitorTestDelegate _downloadDidStart:]):
        (-[DownloadMonitorTestDelegate _downloadDidCancel:]):
        (-[DownloadMonitorTestDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[DownloadMonitorTestDelegate _download:didReceiveData:]):
        (TestWebKitAPI::respondSlowly):
        (TestWebKitAPI::webViewWithDownloadMonitorSpeedMultiplier):
        (TestWebKitAPI::downloadAtRate):
        (TestWebKitAPI::TEST):

2019-03-18  Saam Barati  <sbarati@apple.com>

        Add a plan file for JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=190734

        Reviewed by Mark Lam.

        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream2.plan: Added.

2019-03-18  Chris Dumez  <cdumez@apple.com>

        Delay WebProcess launch until a load is triggered in a Web view
        https://bugs.webkit.org/show_bug.cgi?id=195758
        <rdar://problem/48126013>

        Reviewed by Geoff Garen.

        Add API test coverage. Also update some existing API tests to not expect
        constructing a WKWebView to launch both a WebProcess and a NetworkProcess.

        * TestWebKitAPI/Tests/WebKit/NetworkProcessCrashWithPendingConnection.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetBackingScaleFactor.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (testDidResignInputElementStrongPasswordAppearanceAfterEvaluatingJavaScript):

2019-03-18  Xan Lopez  <xan@igalia.com>

        [CMake] Prevent potential warning when determining $architecture
        https://bugs.webkit.org/show_bug.cgi?id=195891

        Reviewed by Michael Catanzaro.

        It's possible for generateBuildSystemForCMakeProject to be called
        before determineArchitecture() is ever called. This will make the
        first eq check with $architecture to be bogus (and print a
        warning). Change that to an eq check with architecture(), which
        implicitly calls determineArchitecture() if needed, and change all
        the other similar cases in the method in the same way to prevent
        future bugs like this one.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Tarballs generated with “make dist” cannot build documentation
        https://bugs.webkit.org/show_bug.cgi?id=195885

        Reviewed by Carlos Garcia Campos.

        * wpe/manifest.txt.in: Add missing Tools/glib/common.py file to be included in release tarballs.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Cryptic error from Tools/gtkdoc/generate-gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=195883

        Reviewed by Carlos Garcia Campos.

        * gtkdoc/gtkdoc.py:
        (GTKDoc._run_command): When commands fail to run, include the full command line for
        the program invocation and the output it has generated on the standard error stream.

2019-03-18  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump dependencies to wpe-1.0 and wpebackend-fdo-1.0
        https://bugs.webkit.org/show_bug.cgi?id=195786

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WPEModules.yaml: Use libwpe 1.1.90 and wpebackend-fdo 1.1.91.
        * wpe/jhbuild.modules: Ditto.

2019-03-16  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Don't run clean builds on EWS builders
        https://bugs.webkit.org/show_bug.cgi?id=195851

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/ews-build/factories.py:

2019-03-16  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r243019): Failing API test: WebKit.WebsiteDataStoreCustomPathsWithoutPrewarming
        https://bugs.webkit.org/show_bug.cgi?id=195849

        Reviewed by Chris Dumez.

        We should expect IDB database files to be at path IndexedDB/v1/ after r243019.

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

2019-03-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Upload test results
        https://bugs.webkit.org/show_bug.cgi?id=195755
        <rdar://problem/48896182>

        Reviewed by Aakash Jain.

        Establish a new format for uploading results that is not tied to layout tests, apply
        that format to webkitpy tests.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.native_branch): Return what branch the current checkout is on.
        * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.native_branch): Ditto.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.build_version): Return a build version for Mac.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__):
        (MockPlatformInfo.build_version):
        * Scripts/webkitpy/results: Added.
        * Scripts/webkitpy/results/__init__.py: Added.
        * Scripts/webkitpy/results/options.py: Added.
        (upload_options): OptParse list for upload options.
        * Scripts/webkitpy/results/upload.py: Added.
        (Upload): Class which enforces the upload format expected by the results server.
        (Upload.Expectations):
        (Upload.create_configuration):
        (Upload.create_commit):
        (Upload.create_details):
        (Upload.create_run_stats):
        (Upload.create_test_result):
        (Upload.__init__):
        (Upload.Encoder): Encode Upload object as json.
        (Upload.upload): Upload results to the results server, returning 'True' if the upload is successful.
        * Scripts/webkitpy/results/upload_unittest.py: Added.
        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args): Add upload arguments.
        (Tester._run_tests): Allow results to be uploaded.
        * Scripts/webkitpy/test/runner.py:
        (Runner.__init__): Record which tests were run, rather than just counting them.
        (Runner.handle):
        * Scripts/webkitpy/test/runner_unittest.py:
        (RunnerTest.test_run):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Add requests auto-install.
        (AutoinstallImportHook._install_requests):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        (PatchProcessingQueueTest.test_upload_results_archive_for_patch): Update os name for testing.

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

        [iOS] Crash under -[TestRunnerWKWebView _didShowMenu] while running layout tests on iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=195810

        Reviewed by Tim Horton.

        Ensure that the process of resetting web view state between tests doesn't also invoke testing callbacks
        registered by the previous layout test. This fixes an occasional crash when hiding the callout menu after
        ending certain layout tests.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView resetInteractionCallbacks]):

        Pull logic to reset all of TestRunnerWKWebView's callback handler blocks into a separate helper method; use this
        helper method when destroying the web view, and when resetting state between tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Hide the callout menu *after* clearing out interaction callbacks registered on the web view.

2019-03-15  Sihui Liu  <sihui_liu@apple.com>

        [ Mojave WK1 ] Layout Test storage/indexeddb/database-odd-names.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=190350
        <rdar://problem/45089503>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3-shm:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDB.sqlite3-wal:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName-2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBFileName.mm: Added.
        (-[IndexedDBFileNameMessageHandler userContentController:didReceiveScriptMessage:]):
        (runTest):
        (createDirectories):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/StoreBlobThenDelete.mm:
        (TEST):

2019-03-15  Timothy Hatcher  <timothy@apple.com>

        Add support to WebPage for getting the contents as an attributed string.
        https://bugs.webkit.org/show_bug.cgi?id=195636
        rdar://problem/45055697

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewGetContents.mm:
        (TEST(WKWebView, GetContentsShouldReturnAttributedString): Added.

2019-03-15  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-15  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r242952.

        Causing API failures on iOS Simulator

        Reverted changeset:

        "[PSON] Make sure the WebProcessCache is leverage when
        relaunching a process after termination"
        https://bugs.webkit.org/show_bug.cgi?id=195747
        https://trac.webkit.org/changeset/242952

2019-03-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MinBrowser][WK2] Implement createNewPage of WKPageUIClient to open a new window
        https://bugs.webkit.org/show_bug.cgi?id=195740

        Reviewed by Ross Kirsling.

        window.open doesn't work for WebKitBrowserWindow because it is not
        implemented yet.

        1. Implemented createNewPage callback of WKPageUIClient.
        2. Changed MainWindow to take a BrowserWindow factory function
          instead of BrowserWindowType to be flexible to create
          BrowserWindow with extra settings.
        3. Renamed MainWindow::BrowserWindowType to BrowserWindowType
          because it is not relevant with MainWindow anymore.

        * MiniBrowser/win/Common.cpp:
        (parseCommandLine):
        * MiniBrowser/win/Common.h:
        (CommandLineOptions::CommandLineOptions):
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::MainWindow):
        (MainWindow::create):
        (MainWindow::init):
        (MainWindow::WndProc):
        * MiniBrowser/win/MainWindow.h:
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::create): Moved WKPageConfigurationRef related code from WebKitBrowserWindow::WebKitBrowserWindow.
        (WebKitBrowserWindow::WebKitBrowserWindow): Added a WKPageConfigurationRef parameter.
        (WebKitBrowserWindow::updateProxySettings):
        (WebKitBrowserWindow::createNewPage):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):

2019-03-14  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test scrolling tree layer manipulation more easily
        https://bugs.webkit.org/show_bug.cgi?id=195780

        Reviewed by Tim Horton.
        
        Add a boolean attribute 'scrollUpdatesDisabled' on UIScriptController that
        cuts off communication of scrolling tree scrolls back to the web process
        (in RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll()). This
        allows tests to trigger scrolls which run the scrolling tree layer positioning
        logic, but never get another commit from the web process that might mask
        scrolling tree bugs.
        
        WKWebView's testing protocol get @property _scrollingUpdatesDisabledForTesting,
        whose getters and setters are overridden by TestRunnerWKWebView. Plumbing
        via PageClient and WebPageProxy makes this flag reachable by RemoteScrollingCoordinatorProxy.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView _scrollingUpdatesDisabledForTesting]):
        (-[TestRunnerWKWebView _setScrollingUpdatesDisabledForTesting:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::scrollUpdatesDisabled const):
        (WTR::UIScriptController::setScrollUpdatesDisabled):

2019-03-14  Youenn Fablet  <youenn@apple.com>

        Move IDB storage in private browsing mode to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=195602

        Reviewed by Brady Eidson.

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

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Make descriptionDone messages more readable
        https://bugs.webkit.org/show_bug.cgi?id=195760

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        * BuildSlaveSupport/ews-build/steps_unittest.py:

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Generate status-bubble hover-over messages
        https://bugs.webkit.org/show_bug.cgi?id=195680

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble):
        (StatusBubble._build_bubble): Generate bubble['details_message'] which would be displayed
        on hover-over.
        (StatusBubble._iso_time):
        (StatusBubble._steps_messages): Returns status messages from steps to be displayed in
        hover-over message.
        (StatusBubble._most_recent_step_message): Returns status message from most recent step.

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Gracefully handle the case when state_string is None
        https://bugs.webkit.org/show_bug.cgi?id=195753

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-03-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Status bubble display pending for currently running build step
        https://bugs.webkit.org/show_bug.cgi?id=195744

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py:
        (Events.stepStarted): If state_string is pending, replace it with step name.

2019-03-14  Chris Dumez  <cdumez@apple.com>

        Add WebsitePolicy for the client to specify the device orientation & motion access policy
        https://bugs.webkit.org/show_bug.cgi?id=195750

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationDelegate initWithDeviceOrientationAccessPolicy:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):

2019-03-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Make sure the WebProcessCache is leverage when relaunching a process after termination
        https://bugs.webkit.org/show_bug.cgi?id=195747

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Make -[_WKAttachment setFileWrapper:contentType:completion:] robust when given a nil completion handler
        https://bugs.webkit.org/show_bug.cgi?id=195725
        <rdar://problem/48545062>

        Reviewed by Tim Horton.

        Test that we don't crash when changing the file wrapper of an invalid attachment, if the given completion
        handler is nil.

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

2019-03-13  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
        (TestWebKitAPI::TEST):
        Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

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

        Use a ServiceWorker process per registrable domain
        https://bugs.webkit.org/show_bug.cgi?id=195649

        Reviewed by Youenn Fablet.

        Update API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        REGRESSION(PSON, r240660): Navigation over process boundary is flashy when using Cmd-left/right arrow to navigate
        https://bugs.webkit.org/show_bug.cgi?id=195684
        <rdar://problem/48294714>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [ews-app] Remove unused patch view
        https://bugs.webkit.org/show_bug.cgi?id=195669

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/patch.py: Removed.

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

        [ews-app] Use Buildbot result code variables
        https://bugs.webkit.org/show_bug.cgi?id=195668

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot): Added Buildbot result code variables.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble): Used Buildbot result code variables.

2019-03-13  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Expand submodule recursively
        https://bugs.webkit.org/show_bug.cgi?id=195672

        Building WPE with flatpak was impossible without that as it was raising an exception.
        Also update wpebackend-fdo to match what is built in jhbuild

        Reviewed by Philippe Normand.

        * flatpak/flatpakutils.py:
        (expand_submodules_recurse):
        (expand_manifest):
        * flatpak/org.webkit.WPEModules.yaml:

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

        [ews-app] status bubble should be hidden for certain builds
        https://bugs.webkit.org/show_bug.cgi?id=194597

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble._build_bubble):
        (StatusBubble._should_show_bubble_for_build): Hide bubble for builds which were skipped
        because the patch didn't have relevant changes.
        (StatusBubble._should_show_bubble_for_queue): Hide bubbles for queues which are not deployed
        in production yet.

2019-03-12  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Fix a slew of simple clang-cl warnings.
        https://bugs.webkit.org/show_bug.cgi?id=195652

        Reviewed by Don Olmstead.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): -Wunused-variable

2019-03-12  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPURenderPipelineDescriptor and add GPUColorStateDescriptor.format
        https://bugs.webkit.org/show_bug.cgi?id=195518
        <rdar://problem/46322356>

        Reviewed by Myles C. Maxfield.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:

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

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

        "Broke webkitpy tests with my change to
        lldb_dump_class_layout.py" (Requested by rmorisset on
        #webkit).

        Reverted changeset:

        "Alter Tools/Scripts/dump-class-layout to be able to dump all
        classes with suspicious padding"
        https://bugs.webkit.org/show_bug.cgi?id=195573
        https://trac.webkit.org/changeset/242825

2019-03-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Show status bubbles while the patch is waiting in queue
        https://bugs.webkit.org/show_bug.cgi?id=195618

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
        (StatusBubble): Added ALL_QUEUES and ENABLED_QUEUES. Only certain queues are 
        enabled in initial deployment.
        (StatusBubble._build_bubble): Display bubble even when build hasn't started.
        (StatusBubble.get_latest_build_for_queue): Get latest build for a given queue.
        (StatusBubble.get_builds_for_queue): Get all builds for a given queue.
        (StatusBubble._should_show_bubble_for): Display bubble for only ENABLED_QUEUES for now.
        (StatusBubble._build_bubbles_for_patch):

2019-03-12  Robin Morisset  <rmorisset@apple.com>

        Alter Tools/Scripts/dump-class-layout to be able to dump all classes with suspicious padding
        https://bugs.webkit.org/show_bug.cgi?id=195573

        Reviewed by Simon Fraser.

        Also modified the script so that when multiple types match a given name it shows them all and not arbitrarily pick one.

        * Scripts/dump-class-layout:
        (main):
        * lldb/lldb_dump_class_layout.py:
        (ClassLayout.__init__):
        (ClassLayout._compute_padding_recursive):
        (LLDBDebuggerInstance.dump_layout_for_classname):
        (LLDBDebuggerInstance):
        (LLDBDebuggerInstance.dump_all_wasteful_layouts):
        (LLDBDebuggerInstance.layout_for_classname): Deleted.

2019-03-12  Chris Dumez  <cdumez@apple.com>

        Device Orientation access permission should be denied unless explicitly granted by the client
        https://bugs.webkit.org/show_bug.cgi?id=195625

        Reviewed by Youenn Fablet.

        add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm: Added.
        (-[DeviceOrientationMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[DeviceOrientationPermissionUIDelegate initWithHandler:]):
        (-[DeviceOrientationPermissionUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):
        (runDeviceOrientationTest):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesDeviceOrientationUIDelegate _webView:shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:decisionHandler:]):

2019-03-12  Jer Noble  <jer.noble@apple.com>

        Flaky API Test TestWebKitAPI.WebKitLegacy.ScrollingDoesNotPauseMedia
        https://bugs.webkit.org/show_bug.cgi?id=195137
        <rdar://problem/48810307>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm:
        (TestWebKitAPI::TEST):

2019-03-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Change urls from uat to production
        https://bugs.webkit.org/show_bug.cgi?id=195566

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py:
        * BuildSlaveSupport/ews-build/events.py:
        * BuildSlaveSupport/ews-build/steps.py:

2019-03-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] change max_builds for local-worker to 1
        https://bugs.webkit.org/show_bug.cgi?id=195568

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:

2019-03-12  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * TestRunnerShared/spi/PencilKitTestSPI.h:
        * TestWebKitAPI/ios/PencilKitTestSPI.h:

2019-03-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Load events may occur in unexpected order when JS redirects page before subresource load finishes
        https://bugs.webkit.org/show_bug.cgi?id=194131

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (uriChanged):
        (testUnfinishedSubresourceLoad):
        (serverCallback):
        (beforeAll):

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        WTF::Expected should use std::addressof instead of operator&
        https://bugs.webkit.org/show_bug.cgi?id=195604

        Reviewed by Myles Maxfield.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::Unique::Unique):
        (TestWebKitAPI::Unique::operator&):
        (TestWebKitAPI::TEST):

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/ApduTest.cpp:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp:
        Remove unnecessary includes from headers.

2019-03-11  Simon Fraser  <simon.fraser@apple.com>

        Add testing API to hit-test and scroll overflow scrollers
        https://bugs.webkit.org/show_bug.cgi?id=195278

        Reviewed by Antti Koivisto.
        
        Add UIScriptController::immediateScrollElementAtContentPointToOffset() to enable
        testing of the view hit-testing code path, and immediate scrolling of overflow:scroll.
        
        Tests: scrollingcoordinator/ios/scroll-element-at-point.html

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

2019-03-11  Tim Horton  <timothy_horton@apple.com>

        API test WebKit.RequestTextInputContext fails on iOS
        https://bugs.webkit.org/show_bug.cgi?id=195585

        Reviewed by Wenson Hsieh and Simon Fraser.

        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm:
        (applyStyle):
        (TEST):
        Add a viewport, so that the coordinates match up on iOS.
        Scroll by moving the UIScrollView's contentOffset.

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

        Assert in WebPageProxy::suspendCurrentPageIfPossible()
        https://bugs.webkit.org/show_bug.cgi?id=195506
        <rdar://problem/48733477>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-03-11  Shawn Roberts  <sroberts@apple.com>

        Adding myself to contributors.json

        Unreviewed, addming myself to contributors.json .

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

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
        (TEST_F):

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

        Regression(r242664) WebKit.WebsitePoliciesDeviceOrientationEventEnabled API test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=195561

        Reviewed by Youenn Fablet.

        Make sure the JS in the test requests for permission to receive device orientation events.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-03-11  Youenn Fablet  <youenn@apple.com>

        Allow storage quota increase by default in WTR
        https://bugs.webkit.org/show_bug.cgi?id=195541

        Reviewed by Geoffrey Garen.

        Allow storage quota increase by default in WTR.
        Move from testRunner.allowStorageQuotaIncrease to testRunner.setAllowStorageQuotaIncrease.
        Use this for tests that explicitly need cache increase.

        Instead of increasing quota by 2, make sure the next request is
        granted by adding all given parameters.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowStorageQuotaIncrease):
        (WTR::TestRunner::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::setAllowStorageQuotaIncrease):
        (WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):

2019-03-11  Xan Lopez  <xan@igalia.com>

        [CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=194147

        Reviewed by Michael Saboff.

        To make --32-bit work correctly on Linux/64bit we need to:

        - Set FORCE_32BIT on, which will be read by CMake to set WTF_CPU
        correctly. Ideally we'd just redefine CMAKE_SYSTEM_PROCESSOR, but
        unfortunately CMake only allows us to do this during
        crosscompilation, which is overkill here.
        - Set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_ARCHITECTURE so that the
        pkg-config detection module uses the x86 .pc files instead of the
        x86_64 ones.
        - Set the -m32 flags for the compiler.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2019-03-08  Dewei Zhu  <dewei_zhu@apple.com>

        Add MotionMark-1.1 plan file for run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=195481

        Rubber-stamped by Darin Adler.

        Run-benchmark script should support MontionMark-1.1.

        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark1.1.plan: Added.

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

        [ews-app] Add support for submit-to-ews url
        https://bugs.webkit.org/show_bug.cgi?id=195477

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:
        * BuildSlaveSupport/ews-app/ews/templates/submittoews.html: Copied from QueueStatusServer/templates/submittoews.html.
        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/submittoews.py: Added.

2019-03-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242688, r242643, r242624.

        Caused multiple layout test failures and crashes on iOS and macOS.

        Reverted changeset:

        "requestAnimationFrame should execute before the next frame"
        https://bugs.webkit.org/show_bug.cgi?id=177484
        https://trac.webkit.org/changeset/242624/webkit

        * Tracing/SystemTracePoints.plist:

2019-03-11  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible exclude localhost from classification
        https://bugs.webkit.org/show_bug.cgi?id=195474
        <rdar://problem/47520577>

        Reviewed by Brent Fulgham.

        This patch allows for localhost to be excluded from classification and
        treatment as a prevalent resource.

        The WebKit Tools change adds a new function called
        testRunner.setStatisticsIsRunningTest() which can be used to control this
        behavior.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsIsRunningTest):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsIsRunningTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        [ews-build] Disable waterfall and console view for ews-build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=195560

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-11  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r242698.

        API test crashes on bots.

        Reverted changeset:

        "Add a WKContentRuleList variant that uses copied memory
        instead of mmap'd shared memory for class A containerized
        apps"
        https://bugs.webkit.org/show_bug.cgi?id=195511
        https://trac.webkit.org/changeset/242698

2019-03-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

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

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

        [ews-app] Use port 17000 for worker communication
        https://bugs.webkit.org/show_bug.cgi?id=195558

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/master.cfg:

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

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

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig):
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_configuration):
        * BuildSlaveSupport/ews-build/master.cfg:

2019-03-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r242702.

        Broke High Sierra builders.

        Reverted changeset:

        "Add utility function to allow easy reverse range-based
        iteration of a container"
        https://bugs.webkit.org/show_bug.cgi?id=195542
        https://trac.webkit.org/changeset/242702

2019-03-11  Sam Weinig  <sam@webkit.org>

        Add utility function to allow easy reverse range-based iteration of a container
        https://bugs.webkit.org/show_bug.cgi?id=195542

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
        (TestWebKitAPI::TEST):
        Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

2019-03-10  Alex Christensen  <achristensen@webkit.org>

        Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
        https://bugs.webkit.org/show_bug.cgi?id=195511
        <rdar://problem/44873269>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
        (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
        (TEST_F):

2019-03-10  Tim Horton  <timothy_horton@apple.com>

        Add SPI to retrieve the set of text inputs in a given rect, and later focus one
        https://bugs.webkit.org/show_bug.cgi?id=195499

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm: Added.
        (-[WKWebView synchronouslyRequestTextInputContextsInRect:]):
        (-[WKWebView synchronouslyFocusTextInputContext:]):
        (applyStyle):
        (applyIframe):
        (TEST):
        Add some tests for this SPI.

2019-03-10  Yusuke Suzuki <utatane.tea@gmail.com>

        [WTF] Align assumption in RunLoopWin to the other platform's RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=181151

        Reviewed by Don Olmstead.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWin.cmake:
        Enable TestWTF RunLoop tests in all platforms.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::DerivedOneShotTimer::DerivedOneShotTimer):
        (TestWebKitAPI::DerivedOneShotTimer::fired):
        (TestWebKitAPI::TEST):
        Only a few platforms support nested RunLoop.

        (TestWebKitAPI::DerivedRepeatingTimer::DerivedRepeatingTimer):
        (TestWebKitAPI::DerivedRepeatingTimer::fired):

2019-03-10  David Quesada  <david_quesada@apple.com>

        ASSERT(m_downloads.isEmpty()) fails in DownloadProxyMap::~DownloadProxyMap()
        https://bugs.webkit.org/show_bug.cgi?id=152480

        Reviewed by Chris Dumez.

        Add a unit test based on Daniel Bates's test case that starts a download, ensures
        there are no additional references to the process pool besides the one held by
        the download, waits for the download to finish (in the sense that the
        DownloadProxyMap is done tracking the DownloadProxy), and doesn't crash. For good
        measure, also check that the process pool has been deallocated at the end of the
        test. The test wouldn't be meaningful if the process pool were still alive.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[WaitUntilDownloadCanceledDelegate _downloadDidStart:]):
        (-[WaitUntilDownloadCanceledDelegate _downloadDidCancel:]):
            The download will be canceled because the delegate does not implement the
            method to decide the download's destination, so this is where we know the
            DownloadProxyMap is done with the DownloadProxy.
        (TEST):

2019-03-08  Chris Dumez  <cdumez@apple.com>

        Add support for Device Orientation / Motion permission API
        https://bugs.webkit.org/show_bug.cgi?id=195329
        <rdar://problem/47645367>

        Reviewed by Geoffrey Garen.

        Add test infrastructure to help test the Device Orientation / Motion permission API.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::shouldAllowDeviceOrientationAndMotionAccess):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::handleDeviceOrientationAndMotionAccessRequest):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2019-03-08  Saam barati  <sbarati@apple.com>

        Add a compare-results script to compare benchmark results
        https://bugs.webkit.org/show_bug.cgi?id=195486
        <rdar://problem/48723397>

        Reviewed by Geoffrey Garen.

        This patch adds a script to compare benchmark results using Welch's two-tailed t test.
        Initially, this patch only reasons about PLT5/JetStream2/Speedometer2. It will be easy
        to extend it to learn about our other benchmarks.

        * Scripts/compare-results: Added.
        (readJSONFile):
        (detectJetStream2):
        (JetStream2Results):
        (detectSpeedometer2):
        (Speedometer2Results):
        (detectPLT5):
        (PLT5Results):
        (detectBenchmark):
        (biggerIsBetter):
        (ttest):
        (getOptions):
        (main):

2019-03-08  Stephanie Lewis  <slewis@apple.com>

        Ensure old tab state is cleared between iterations of run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=195393
        <rdar://problem/46885583>

        Reviewed by Dewei Zhu.

        a) ensure the default to restore state is not set
        b) terminate Safari correctly
        c) Set the system default to ignore Persistent State in Safari

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver): fix terminate processes to call terminate before killing.
        (OSXBrowserDriver.prepare_env): 
        (OSXBrowserDriver.restore_env):
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._terminate_processes):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: add bundle id
        (OSXChromeDriver):
        (OSXChromeCanaryDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: ditto
        (OSXFirefoxDriver):
        (OSXFirefoxNightlyDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: add preferences to not restore state, bundle id
        (OSXSafariDriver):
        (OSXSafariDriver.prepare_env):

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

        [GTK] Several InputMethodFilter tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=195408

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit/gtk/InputMethodFilter.cpp:
        Regressed in r241751.
        Hexadecimal values of keycodes are expressed now in upper letters.
        Composited characters should be cast to UTF8 strings.

        (TestWebKitAPI::TEST):

2019-03-07  Tomas Popela  <tpopela@redhat.com>

        [GTK] Make Tools/gtkdoc python3 compatible
        https://bugs.webkit.org/show_bug.cgi?id=195359

        Reviewed by Carlos Garcia Campos.

        * gtkdoc/generate-gtkdoc:
        ConfigParser was reworked in Python 3.2 so we have adapt the code to
        work with Python 2 and 3.
        (get_gtkdoc_module_paths):
        The iteritems() was removed in Python 3, so let's use items() that's
        available in Python 2 and 3.
        (get_generator_for_config):
        * gtkdoc/gtkdoc.py:
        (GTKDoc._run_command):
        The sys.stdout.write() is expecting str in Python 3 and not bytes
        (that are coming from stdout.encode()). Use sys.stdout.buffer.write()
        for passing the bytes there.

2019-03-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346
        <rdar://problem/48667048>

        Unreviewed build fix for clang-cl.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setApplicationId): Replaced calling String::charactersWithNullTermination with String::wideCharacters to get wchar_t.

2019-03-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestAnimationFrame should execute before the next frame
        https://bugs.webkit.org/show_bug.cgi?id=177484

        Reviewed by Simon Fraser.

        Add trace points for the page RenderingUpdate.

        * Tracing/SystemTracePoints.plist:

2019-03-07  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add a setting to be able to turn content change observation on/off
        https://bugs.webkit.org/show_bug.cgi?id=195353
        <rdar://problem/48626394>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetPreferencesToConsistentValues):

2019-03-07  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make it possible to purge only script-accessible cookies
        https://bugs.webkit.org/show_bug.cgi?id=195383
        <rdar://problem/48570136>

        Reviewed by Brent Fulgham.

        This patch adds test infrastructure to purge only script-accessible cookies,
        including a new testRunner function called statisticsDeleteCookiesForHost().git a

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsDeleteCookiesForHost):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsDeleteCookiesForHost):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

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

        breaks layout tests in all configurations (Requested by
        zdobersek on #webkit).

        Reverted changeset:

        "[WPE] Enable web process sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=195169
        https://trac.webkit.org/changeset/242354

2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST):
        Delete wchar tests -- these are MSVC-only and we won't be using String::operator+ going forward anyway.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):
        (main):
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::moduleDirectory):
        (TestWebKitAPI::Util::createInjectedBundlePath):
        Use wchar helpers as needed.

2019-03-06  Rob Buis  <rbuis@igalia.com>

        Consider supporting the `referrerpolicy` attribute.
        https://bugs.webkit.org/show_bug.cgi?id=179053

        Reviewed by Darin Adler.

        Add a runtime flag for referrerpolicy attribute.

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

2019-03-05  Daniel Bates  <dabates@apple.com>

        Update expected API test result following r242379
        (https://bugs.webkit.org/show_bug.cgi?id=195125)

        Update expected x-coordinate of selection rect now that the left padding of
        a textarea is sized in ems (so dependent on the font size) just like the left
        padding of a text field.

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

2019-03-05  David Quesada  <david_quesada@apple.com>

        [WK2] It should be possible to follow links with 'download' attributes
        https://bugs.webkit.org/show_bug.cgi?id=195145
        rdar://problem/48462642

        Reviewed by Alex Christensen.

        Add a unit test to verify that activating links with 'download' attributes now
        navigates to the linked resource, rather than starts downloading it. Add another
        to verify that it is still possible to explicitly download the link via the
        'Download' navigation action policy.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadAttributeTestDelegate init]):
        (-[DownloadAttributeTestDelegate waitForDidFinishNavigation]):
        (-[DownloadAttributeTestDelegate waitForDownloadDidStart]):
        (-[DownloadAttributeTestDelegate webView:didFinishNavigation:]):
        (-[DownloadAttributeTestDelegate webView:didStartProvisionalNavigation:]):
        (-[DownloadAttributeTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DownloadAttributeTestDelegate _downloadDidStart:]):
        (TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::decidePolicyForNavigationAction):
        * WebKitTestRunner/TestController.h:

2019-03-05  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement Cookie Accept Policy.
        https://bugs.webkit.org/show_bug.cgi?id=191645

        Reviewed by Fujii Hironori.

        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        (TestWebKitAPI::Curl::TEST_F):

2019-03-05  Youenn Fablet  <youenn@apple.com>

        Rename requestCacheStorageSpace to requestStorageSpace
        https://bugs.webkit.org/show_bug.cgi?id=195282

        Reviewed by Chris Dumez.

        * WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
        (-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):
        (-[TestWebsiteDataStoreDelegate requestCacheStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]): Deleted.

2019-03-05  Brady Eidson  <beidson@apple.com>

        Correctly handle sandbox extensions when the same WKWebView loads multiple file:// URLs.
        <rdar://problem/47820581> and https://bugs.webkit.org/show_bug.cgi?id=195291

        Reviewed by Tim Horton.

        Loading a file: URL into a WKWebView and then loading another file: url from a completely
        different directory into that same WKWebView should work.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LoadFileURL.mm: Added.

2019-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Add WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=195152

        Reviewed by Antti Koivisto.

        Added tests for WeakHashSet.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::Base::Base): Moved.
        (TestWebKitAPI::Derived::foo): Moved.
        (WTF::WeakReference<TestWebKitAPI::Base>): Added to track the number of live WeakReference.
        (WTF::WeakReference<TestWebKitAPI::Base>::WeakReference):
        (WTF::WeakReference<TestWebKitAPI::Base>::~WeakReference):
        (TestWebKitAPI::computeSizeOfWeakHashSet): Added.

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

        Do not share WebProcesses between private and regular sessions
        https://bugs.webkit.org/show_bug.cgi?id=195189
        <rdar://problem/48421064>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-03-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Enable web process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=195169

        Reviewed by Daniel Bates.

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

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

        [GLib] Returning G_TYPE_OBJECT from a constructor does not work
        https://bugs.webkit.org/show_bug.cgi?id=195206

        Reviewed by Žan Doberšek.

        Add a new test case.

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

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

        [WPE] Inline wl_array_for_each to workaround C++ compatibility issue
        https://bugs.webkit.org/show_bug.cgi?id=194898

        Reviewed by Žan Doberšek.

        * wpe/backends/WindowViewBackend.cpp: wl_array_for_each relies on
        a GCC extension that permits arithmetic on void* pointer. Inline
        the macro until this issue is fixed upstream.

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Rid the world of WK_API_ENABLED
        https://bugs.webkit.org/show_bug.cgi?id=195263

        Reviewed by Dan Bernstein.

        List of changed files elided because it's useless.

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

        Unreviewed follow-up to r242292.

        By Darin's suggestion, adopt an approach that uses EXPECT_STREQ without scattering utf8().data() everywhere.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::testStrip): Renamed from strip.
        (TestWebKitAPI::TEST):

2019-03-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove accidentally-committed URLHelpers.cpp test

        This test isn't built by any port and was committed in r240962 by mistake. See bug #174816
        and bug #194272 for details.

        * TestWebKitAPI/Tests/WTF/URLHelpers.cpp: Removed.

2019-03-03  Tim Horton  <timothy_horton@apple.com>

        Remove some more unused 32-bit code
        https://bugs.webkit.org/show_bug.cgi?id=195255

        Reviewed by Darin Adler.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/TestNetscapePlugIn/Tests/mac/SupportsCarbonEventModel.cpp: Removed.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):
        (NPP_HandleEvent):
        (handleEventCarbon): Deleted.

2019-03-02  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed follow-up to r242292. Keep EXPECT_STREQ in tests per Darin's request.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::TEST):

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.
'
        * Tools/TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: Add tests for pad().

2019-03-01  Alex Christensen  <achristensen@webkit.org>

        Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=195229
        <rdar://problem/48520362>

        Reviewed by Chris Dumez.

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

2019-03-01  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace scope for event region building
        https://bugs.webkit.org/show_bug.cgi?id=195226

        Reviewed by Jon Lee.

        This trace scope measures the time spend converting element rects into Region objects,
        which can be large on some pages.

        The value for "Display Refresh Dispatch to main thread" was wrong and I fixed it.

        * Tracing/SystemTracePoints.plist:

2019-03-01  Ross Kirsling  <ross.kirsling@sony.com>

        EnvironmentUtilities::stripValuesEndingWithString isn't thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=194612

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        Just test the new string-processing function and don't touch the actual environment.
        (Test cases are all as before, but based on operator== instead of strcmp.)

2019-03-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Update primary keys for handling multiple Buildbot instances
        https://bugs.webkit.org/show_bug.cgi?id=195120

        Reviewed by Stephanie Lewis.

        Use a new primary key uid for build and step tables. Previous primary keys build_id and step_id
        were not enough to handle multiple buildbot instances. This new primary key uid would be generated
        by a combination of buildbot_instance_id and current primary key. e.g.: buildbot_instance_id + build_id

        * BuildSlaveSupport/ews-app/ews/models/build.py: Added new primary key uid.
        * BuildSlaveSupport/ews-app/ews/models/step.py: Ditto.
        * BuildSlaveSupport/ews-app/ews/models/buildbotinstance.py: Generate uid and instance_id.
        * BuildSlaveSupport/ews-app/ews/views/results.py: Updated to receive hostname in events.
        * BuildSlaveSupport/ews-build/events.py: Send hostname along-with events.
        * BuildSlaveSupport/ews-build/master.cfg: Ditto.

2019-03-01  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Enable service worker
        https://bugs.webkit.org/show_bug.cgi?id=188318

        Reviewed by Youenn Fablet.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/win/TestWebKitAPIPrefix.h:
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2019-03-01  Justin Fan  <justin_fan@apple.com>

        [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=195191

        Rubber-stamped by Dean Jackson.

        Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-03-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix lldb webkitpy tests
        https://bugs.webkit.org/show_bug.cgi?id=194375

        Since we changed the value of Is8Bit flag in StringImpl, we change lldb webkitpy tests accordingly.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.is_8bit):

2019-02-28  David Quesada  <david_quesada@apple.com>

        Expose APINavigationAction.shouldPerformDownload() on WKNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=195121
        rdar://problem/48450302

        Reviewed by Alex Christensen.

        Add API tests for -WKNavigationAction._shouldPerformDownload in various
        configurations where the 'download' attribute is absent, blank, or populated
        with a filename, and where the anchor element is same-origin or cross-origin
        (meaning the 'download' attribute shouldn't be honored).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NavigationAction.mm: Added.
        (-[NavigationActionTestDelegate init]):
        (-[NavigationActionTestDelegate navigationAction]):
        (-[NavigationActionTestDelegate waitForNavigationActionCallback]):
        (-[NavigationActionTestDelegate waitForDidFinishNavigation]):
        (-[NavigationActionTestDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[NavigationActionTestDelegate webView:didFinishNavigation:]):
        (TEST):

2019-02-28  Antoine Quint  <graouts@apple.com>

        Enable the Pointer Events runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=195156

        Reviewed by Dean Jackson.

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

2019-02-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Several PasteImage API tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=195160

        Reviewed by Tim Horton.

        Some of these tests, such as PasteTIFFImage, don't wait for the inserted image element to finish loading before
        querying the image element's size; a few other tests, such as PastePNGFile, are racy since they may begin
        listening for a "load" event after image load is already complete.

        To address this, make these tests first register a "load" event handler, then run script to insert an image
        element into the document, and finally wait until the load event is observed before checking image size.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

2019-02-28  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.PageZoomLevelAfterSwap
        https://bugs.webkit.org/show_bug.cgi?id=195107

        Reviewed by Alex Christensen.

        Give some time for the zoom level to get restored.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-28  Sihui Liu  <sihui_liu@apple.com>

        Stop using legacy IDB path by default when creating WebProcessPool from websiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=194958

        Reviewed by Geoffrey Garen.

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

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

        [ews-app] Update method to save build to handle builder_display_name
        https://bugs.webkit.org/show_bug.cgi?id=195047

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-app/ews/models/build.py: Updated to handle builder_name and builder_display_name.
        * BuildSlaveSupport/ews-app/ews/views/results.py: Ditto.

2019-02-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enable Web GPU only on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=195139

        Because Metal is only supported on 64 bit apps.

        Unreviewed build fix.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-27  Youenn Fablet  <youenn@apple.com>

        Flaky API Test: TestWebKitAPI.ServiceWorkers.ServiceWorkerAndCacheStorageSpecificDirectories
        https://bugs.webkit.org/show_bug.cgi?id=194959

        Reviewed by Chris Dumez.

        Spin loop until getting the condition to remove flakiness.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2019-02-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Buildbot should include builder_display_name in the build events
        https://bugs.webkit.org/show_bug.cgi?id=195045

        Reviewed by Dewei Zhu.

        * BuildSlaveSupport/ews-build/events.py:
        (Events.buildStarted): Included builder_display_name in event data. Also renamed
        buildername to builder_name to be consistent in naming style.
        (Events.buildFinished): Ditto.

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SessionStorage
        https://bugs.webkit.org/show_bug.cgi?id=194480

        Reviewed by Brady Eidson.

        Update existing API test to make it more likely to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-27  Brady Eidson  <beidson@apple.com>

        Universal links from Google search results pages don't open the app.
        <rdar://problem/46887179> and https://bugs.webkit.org/show_bug.cgi?id=195126

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ShouldOpenExternalURLsInNewWindowActions.mm:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses
        https://bugs.webkit.org/show_bug.cgi?id=195102

        Reviewed by Geoffrey Garen.

        If the number of processes is not yet what we expect, wait a bit and check again to give
        processes some time to exit.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-27  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.NavigateToDataURLThenBack
        https://bugs.webkit.org/show_bug.cgi?id=194545

        Reviewed by Brady Eidson.

        Make sure the test navigates forward and then back only once. Previously, navigating
        back would trigger a navigation again in a timer.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-13  Ryan Haddad  <ryanhaddad@apple.com>

        High Sierra Debug JSC test queue should use faster hardware
        https://bugs.webkit.org/show_bug.cgi?id=194603

        Rubber-stamped by Alexey Proskuryakov.

        Adjust queues to free up faster hardware for use on the High Sierra Debug JSC queue.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2019-02-27  John Wilander  <wilander@apple.com>

        Adopt WebCore::RegistrableDomain in WebCore::ResourceLoadStatistics and WebKit::NetworkProcessProxy
        https://bugs.webkit.org/show_bug.cgi?id=195071
        <rdar://problem/48417690>

        Reviewed by Alex Christensen and Brent Fulgham.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::createURL):
            Convenience function.
        (TestWebKitAPI::TEST):
            WebCore::AdClickAttribution now takes a URL when creating Source and
            Destination.
        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp:
        (TestWebKitAPI::TEST):
            WebCore::AdClickAttribution now takes a URL when creating Source and
            Destination.

2019-02-27  Antoine Quint  <graouts@apple.com>

        Support Pointer Events on macOS
        https://bugs.webkit.org/show_bug.cgi?id=195008
        <rdar://problem/47454419>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures): Enable the PointerEvents runtime feature in DumpRenderTree such that tests targeting WK1 may test the Pointer Events feature.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Remove remaining poisoning code.
        https://bugs.webkit.org/show_bug.cgi?id=194138

        Reviewed by Saam Barati.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedRefPtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp: Removed.

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

        Move ephemeral local storage from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=195074
        <rdar://problem/47937975>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm: Added.
        (TEST):

2019-02-26  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Load HTTP body of 401 response when AuthenticationChange is cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=191652

        Reviewed by Alex Christensen.

        Fix WinCairo MiniBrowser behavior of authentication dialog.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):

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

        WebPageProxy should nullify m_userMediaPermissionRequestManager after resetting the media state
        https://bugs.webkit.org/show_bug.cgi?id=195028
        <rdar://problem/48243733>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-26  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add API for webview background color configuration
        https://bugs.webkit.org/show_bug.cgi?id=192305

        Reviewed by Michael Catanzaro.

        * MiniBrowser/wpe/main.cpp:
        (main): Add a new option to configure the webview background
        color. Example: --bg-color=transparent.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewBackgroundColor): Enable background color API tests for WPE.
        (beforeAll): Ditto.

2019-02-25  Yongjun Zhang  <yongjun_zhang@apple.com>

        scalableNativeWebpageParameters() is not preserved on new page navigation.
        https://bugs.webkit.org/show_bug.cgi?id=194892
        <rdar://problem/47538280>

        Reviewed by Wenson Hsieh.
        
        Allow UIScriptController to set WKWebView's _allowsViewportShrinkToFit property with a new `setAllowsViewportShrinkToFit` method.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::allowsViewportShrinkToFit):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::setAllowsViewportShrinkToFit):

2019-02-25  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add model for handling multiple Buildbot instances
        https://bugs.webkit.org/show_bug.cgi?id=194863

        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/ews-app/ews/models/buildbotinstance.py: Added.

2019-02-25  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Remove BuilderMapping table
        https://bugs.webkit.org/show_bug.cgi?id=194961

        Reviewed by Stephanie Lewis.

        Store builder name directly in build table, instead of having a separate
        table for it.

        * BuildSlaveSupport/ews-app/ews/models/__init__.py:
        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py: Removed.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-02-25  John Wilander  <wilander@apple.com>

        Introduce and adopt new class RegistrableDomain for eTLD+1
        https://bugs.webkit.org/show_bug.cgi?id=194791
        <rdar://problem/48179240>

        Reviewed by Alex Christensen, Fujii Hironori, and Brent Fulgham.

        This patch adds an API test and replaces two instances of
        "TopPrivatelyOwnedDomains" with "RegistrableDomains" in message names.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Changed two strings to make sure the registrable domains are still considered
            invalid and pass the test.
        * TestWebKitAPI/Tests/WebCore/RegistrableDomain.cpp: Added.
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):

2019-02-25  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Bump WPEBackend-fdo requirement to API version 1.0
        https://bugs.webkit.org/show_bug.cgi?id=195001

        Reviewed by Carlos Garcia Campos.

        API version 1.0 always includes the functionality previously guarded with
        WPE_BACKEND_CHECK_VERSION(): remove the guards and always use the new functions
        unconditionally.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend): Remove usage of WPE_BACKEND_CHECK_VERSION().
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow): Ditto.
        (WebViewTest::hideView): Ditto.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Ditto.
        * wpe/backends/ViewBackend.cpp:
        (WPEToolingBackends::ViewBackend::ViewBackend): Use libWPEBackend-fdo-1.0 as library name.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Remove usage of
        WPE_BACKEND_CHECK_VERSION().
        * wpe/jhbuild.modules: Build a version WPEBackend-fdo with the updated API version.

2019-02-25  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add support for flatpak > 1.1.2
        https://bugs.webkit.org/show_bug.cgi?id=194088

        Flatpak 1.2 is now out so we need to support that
        version now.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (check_flatpak):
        (FlatpakPackages.__init__):
        (FlatpakPackages.__detect_packages):
        (FlatpakPackages.__detect_packages.in):
        (FlatpakRepos.update):

2019-02-25  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Bump WPEBackend-fdo Jhbuild package to latest changes
        https://bugs.webkit.org/show_bug.cgi?id=194998

        Reviewed by Carlos Garcia Campos.

        * wpe/jhbuild.modules: Bump the WPEBackend-fdo package, converting it
        to a Git checkout and using the latest commit containing various fixes
        and improvements.

2019-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove user agent quirk for washingtonpost.com
        https://bugs.webkit.org/show_bug.cgi?id=194981

        Reviewed by Žan Doberšek.

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

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2019-02-22  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WinCairo] Enable wk1/wk2 suffix for platform search path.
        https://bugs.webkit.org/show_bug.cgi?id=194846

        Reviewed by Don Olmstead.

        Added _search_paths() and _port_specific_expectations_files() for
        WinCairoPort.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.default_baseline_search_path):
        (WinCairoPort):
        (WinCairoPort._port_specific_expectations_files):
        (WinCairoPort._search_paths):

2019-02-22  Tim Horton  <timothy_horton@apple.com>

        ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=194963

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        Do a `contains` check instead of `equals`, because in debug builds we
        put the GraphicsLayer pointer in a prefix.

2019-02-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Callout menu overlaps in-page controls when editing a comment in github.com's issue tracker
        https://bugs.webkit.org/show_bug.cgi?id=194873
        <rdar://problem/46701974>

        Reviewed by Tim Horton.

        Add a couple of UIScriptController methods to make callout menu testing on iOS easier (see below).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::menuRect const):
        (WTR::UIScriptController::isShowingMenu const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::menuRect const):

        Add a function to query the bounds of the callout menu in content coordinates.

        (WTR::UIScriptController::isShowingMenu const):

        Add a function to query whether the callout menu is shown (i.e., has finished its appearance animation).

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::rectForMenuAction const):
        (WTR::UIScriptController::menuRect const):
        (WTR::UIScriptController::isShowingMenu const):
        (WTR::findViewInHierarchyOfType): Deleted.

2019-02-22  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Unable to preview password-protected documents on iCloud.com
        https://bugs.webkit.org/show_bug.cgi?id=194954
        <rdar://problem/48127957>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]):
        (-[PSONNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]):
        (-[PSONNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]):

2019-02-22  Chris Dumez  <cdumez@apple.com>

        REGRESSION(PSON) Scroll position is sometimes not restored on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194924
        <rdar://problem/48216125>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, disable API test added in r241928 on iOS.

        The cache is not enabled on devices with less than 3GB of RAM.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Simon Fraser  <simon.fraser@apple.com>

        Hardcode Visual Viewports on everywhere except iOS WK1
        https://bugs.webkit.org/show_bug.cgi?id=194928

        Reviewed by Zalan Bujtas.

        Remove the WK1 and WK2 preferences and MiniBrowser menu item for "visual viewports",
        change the default value of the Setting to 'true', and hardcode WebView on iOS to
        set it to false. The setting has shipped for several years and there's no need to turn
        it off now.

        Similarly, disable the "Visual Viewport API" on iOS WK1, since it makes no sense if
        Visual Viewports are not enabled.
        
        Remove the "visualViewportEnabled" flag and unused code paths from scrolling tree code
        that only runs in WK2

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController init]):
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController visualViewportEnabled]): Deleted.
        (-[SettingsController toggleVisualViewportEnabled:]): Deleted.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2019-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Discard cached processes when clearing website data store
        https://bugs.webkit.org/show_bug.cgi?id=194894

        Reviewed by Chris Dumez.

        Added a test case.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses): Added.

2019-02-21  Alex Christensen  <achristensen@webkit.org>

        Clicking "Go Back" on a safe browsing warning before a WKWebView has loaded any page should request to close the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=194914
        <rdar://problem/47586889>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webViewDidClose:]):
        (TEST):
        (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]): Deleted.

2019-02-21  David Kilzer  <ddkilzer@apple.com>

        Leak of CFErrorRef objects (1.92 Kbytes) in com.apple.WebKit.WebContent.Development running WebKit layout tests on iOS Simulator
        <https://webkit.org/b/194761>

        Reviewed by Myles Maxfield.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::activateSystemCoreWebFonts): Log `error` to console if
        CTFontManagerRegisterFontsForURL() fails (macOS only).  Update
        to use ARC-compliant cast.
        (WTR::activateFonts): Change `0` to `nullptr`.  Update to use
        ARC-compliant cast.
        (WTR::installFakeHelvetica): Log `error` to console if
        CTFontManagerRegisterFontsForURL() fails, but only on supported
        platforms (macOS Mojave/iOS 12 and newer, not iOS Simulator).
        Call CFRelease() on `error` to fix the leak.  Update to use
        ARC-compliant cast.
        (WTR::uninstallFakeHelvetica): Update to use ARC-compliant
        cast.

2019-02-21  Chris Dumez  <cdumez@apple.com>

        Flaky API Test: TestWebKitAPI.ProcessSwap.SuspendedPageLimit
        https://bugs.webkit.org/show_bug.cgi?id=194481

        Reviewed by Alex Christensen.

        Give the processes a chance to shutdown and wait until we reached the expected number
        of processes.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix the macOS build

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix ProcessSwap.PageOverlayLayerPersistence on macOS

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        I am a backwards.

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Fix ProcessSwap.PageOverlayLayerPersistence on macOS

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        We can't find the UI-side layer on macOS because we don't use UI-side compositing.
        We could force on UI-side compositing, but I feel like the test might be more
        valuable exercising the normal path on each platform (though the original
        bug was also UI-side specific). Though we can't validate that the overlay
        layer was installed successfully, there are layout tests that do that.

2019-02-21  Tim Horton  <timothy_horton@apple.com>

        Crash under RemoteLayerTreePropertyApplier::applyProperties when reattaching to old process
        https://bugs.webkit.org/show_bug.cgi?id=194845
        <rdar://problem/47944579>

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Add support for placing formatting roots in-between floats.
        https://bugs.webkit.org/show_bug.cgi?id=194902

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Do not hardcode WPEBackend-fdo library name for linking tests
        https://bugs.webkit.org/show_bug.cgi?id=194901

        Unreviewed build fix.

        * TestWebKitAPI/PlatformWPE.cmake: Set TestWebKitAPIBase to be linked
        against the detected ${WPEBACKEND_FDO_LIBRARIES} instead of hardcoding
        WPEBackend-fdo-0.1 as library name.

2019-02-21  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Darin Adler.

        Add tests involving leading and trailing whitespace, non-token
        characters and quoted strings.

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

2019-02-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Only build DumpRenderTree when WebKit Legacy is enabled
        https://bugs.webkit.org/show_bug.cgi?id=194884

        Reviewed by Michael Catanzaro.

        * PlatformWin.cmake:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Add API test for <rdar://problem/47471222>
        https://bugs.webkit.org/show_bug.cgi?id=194847

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) "Reload without content extensions" does not work when the main resource is blocked
        https://bugs.webkit.org/show_bug.cgi?id=194872
        <rdar://problem/47924500>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Jer Noble  <jer.noble@apple.com>

        Add a git utility method that allows the caller to determine if a specific commitish is within a specified range of commits.
        https://bugs.webkit.org/show_bug.cgi?id=191332

        Reviewed by Dean Jackson.

        * Scripts/git-is-in-range: Added.

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebKit::WebPageProxy::decidePolicyForNavigationActionSync
        https://bugs.webkit.org/show_bug.cgi?id=194857
        <rdar://problem/47759323>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-20  Chris Dumez  <cdumez@apple.com>

        [WKTR] Avoid starting new NetworkProcesses unnecessarily when running the layout tests
        https://bugs.webkit.org/show_bug.cgi?id=194829
        <rdar://problem/47889906>

        Reviewed by Alexey Proskuryakov.

        Every time the TestOptions were changing we were creating both a new Web view and
        a new WKContext, which would start a new Network process. In most cases, we only
        need to contruct a new Web view and we do can keep reusing the same WKContext.
        This patch implements this optimization and thus avoids spinning a lot of new
        Network processes while running the layout tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::ContextOptions::hasSameInitializationOptions const):
        (WTR::TestOptions::ContextOptions::shouldEnableProcessSwapOnNavigation const):
        (WTR::TestOptions::hasSameInitializationOptions const):
        (WTR::TestOptions::shouldEnableProcessSwapOnNavigation const): Deleted.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformAddTestOptions const):

2019-02-20  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Enable support for CONTENT_EXTENSIONS
        https://bugs.webkit.org/show_bug.cgi?id=167941

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (filterSavedCallback): Added.
        (main): Support loading a JSON rule set file for content filtering.
        * MiniBrowser/wpe/main.cpp:
        (filterSavedCallback): Added.
        (main): Support loading a JSON rule set file for content filtering.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentFilterStore.cpp: Added.
        (WTF::refGPtr): Added locally for WebKitUserContentFilter, as it would not be used anywhere else.
        (WTF::derefGPtr): Ditto.
        (testEmptyStore):
        (testSaveInvalidFilter):
        (testSaveLoadFilter):
        (testSavedFilterIdentifierMatch):
        (testRemoveFilter):
        (testSaveMultipleFilters):
        (testSaveFilterFromFile):
        (testFilterPersistence):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (removeOldInjectedContentAndResetLists): Also reset content filters.
        (isCSSBlockedForURLAtPath): Added. Tests whether the test filter, which blocks a
        CSS style sheet, has blocked the load of the CSS by looking at the resulting style of
        the element affected by the style sheet.
        (getUserContentFilter): Added. Stores the test filter in a WebKitUserContentFilterStore
        and returns it to be used by tests.
        (testUserContentManagerContentFilter): Added. Tests whether adding and removing a filter
        from the WebKitUserContentManager results in the a CSS style sheet being blocked.
        (serverCallback): Add support for serving a CSS style sheet for testing.
        (beforeAll): Add call to testUserContentManagerContentFilter().
        * TestWebKitAPI/glib/CMakeLists.txt: Added TestWebKitUserContentFilterStore.

2019-02-19  Keith Rollin  <krollin@apple.com>

        Add timing information to build output
        https://bugs.webkit.org/show_bug.cgi?id=194839
        <rdar://problem/48219609>

        Reviewed by Alexey Proskuryakov.

        Configure xcodebuild with -ShowBuildOperationDuration, causing it to
        emit each project's build time to its output. E.g.,

            ** BUILD SUCCEEDED ** [0.132 sec]

        * Scripts/webkitdirs.pm:
        (XcodeOptions):

2019-02-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241784.

        Broke all OpenSource builds.

        Reverted changeset:

        "Web Inspector: Improve ES6 Class instances in Heap Snapshot
        instances view"
        https://bugs.webkit.org/show_bug.cgi?id=172848
        https://trac.webkit.org/changeset/241784

2019-02-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Remove redundant intersecting logic
        https://bugs.webkit.org/show_bug.cgi?id=194804

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-19  Dean Jackson  <dino@apple.com>

        Clean-up output from generate-xcfilelists so it can be filtered
        https://bugs.webkit.org/show_bug.cgi?id=194795

        Reviewed by Joseph Pecoraro (and Keith Rollin).

        Replace the "..." with "GXCF:" in generate-xcfilelists output, and
        make a slight tweak to filter-build-webkit so such lines are marked
        as plain.

        * Scripts/filter-build-webkit:
        * Scripts/generate-xcfilelists:

2019-02-19  Pablo Saavedra  <psaavedra@igalia.com>

        pytest is not correctly auto-installed
        https://bugs.webkit.org/show_bug.cgi?id=194707

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_pytest):

2019-02-18  Chris Dumez  <cdumez@apple.com>

        REGRESSION (PSON): Can't access optumbank.com from myuhc.com
        https://bugs.webkit.org/show_bug.cgi?id=194797
        <rdar://problem/48055151>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support pasting item-provider-backed data on the pasteboard as attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=194670
        <rdar://problem/39066529>

        Reviewed by Tim Horton.

        Remove code and tests for subresource URL replacement, and also add a new test to verify that copied data can be
        pasted in an editable area as attachment elements.

        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:replacementURLForResource:mimeType:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r241728
       ​https://bugs.webkit.org/show_bug.cgi?id=194723

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        The test should check the default preference value, not make sure the preference is NO after setting it to YES :/

2019-02-18  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Fix a bug where the wrong usage code was used for F13 thru F24.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey):

2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>

        Bytecode cache should a have a boot-specific validation
        https://bugs.webkit.org/show_bug.cgi?id=194769
        <rdar://problem/48149509>

        Reviewed by Keith Miller.

        Add test for WTF::bootSessionUUIDString()

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/UUID.cpp: Added.
        (TEST):

2019-02-18  Alex Christensen  <achristensen@webkit.org>

        Disable safe browsing in WKWebView and remove its WKPreferences API
        https://bugs.webkit.org/show_bug.cgi?id=194723
        <rdar://problem/48122993>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):
        Make tests use SPI instead of API.

2019-02-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use dumpJSConsoleLogInStdErr=true webkit-test-runner option for non-imported tests instead of using DumpJSConsoleLogInStdErr expectation in TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=194586

        Reviewed by Ross Kirsling.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Pass true to setDumpJSConsoleLogInStdErr if options.dumpJSConsoleLogInStdErr is true.
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input): Convert Cygwin absolute path of tests to Windows path.

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] RenderImage's default intrinsic size is 0.
        https://bugs.webkit.org/show_bug.cgi?id=194745

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block replaced intrinsic width.
        https://bugs.webkit.org/show_bug.cgi?id=194705

        Reviewed by Simon Fraser.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Apply min/max width constraints to preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=194739

        Reviewed by Simon Fraser.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree):
        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):
        (WTR::getOutputDir):
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/gtk/main.cpp:
        (main):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/wpe/main.cpp:
        (main):
        Utilize WTF::Environment where possible.

2019-02-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView callout bar is missing Change Writing Direction item
        https://bugs.webkit.org/show_bug.cgi?id=190015
        <rdar://problem/44810366>

        Reviewed by Tim Horton.

        Make an existing API test that exercises platform SPI to change the inline text writing direction run only on
        macOS, and add a new API test that uses similarly named SPI on iOS to change the base writing direction.

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

2019-02-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Navigating quickly back and forth can lead to getting 'about:blank' in the backforward list
        https://bugs.webkit.org/show_bug.cgi?id=194717
        <rdar://problem/47884404>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-15  Youenn Fablet  <youenn@apple.com>

        Make navigator.mediaDevices SecureContext
        https://bugs.webkit.org/show_bug.cgi?id=194666

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (MediaCaptureDisabledTest::loadTestAndWaitForMessage):
        (TEST_F):

2019-02-15  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        Remove unnecessary soft linking macro usage.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL):
        (SOFT_LINK_STAGED_FRAMEWORK): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2019-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Out-of-flow box is never a float box
        https://bugs.webkit.org/show_bug.cgi?id=194704

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-10  Darin Adler  <darin@apple.com>

        Replace more uses of String::format with StringConcatenate (mostly non-Apple platform-specific cases)
        https://bugs.webkit.org/show_bug.cgi?id=194487

        Reviewed by Daniel Bates.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (applicationId): Use makeString instead of String::format.
        (main): Ditto.
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createURLForResource): Ditto.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Ditto.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributeSetToString): Use StringBuilder functions directly instead of g_strconcat.
        (WTR::attributesOfElement): Use StringBuilder functions directly instead of String::format.
        (WTR::createStringWithAttributes): Use appendLiteral.
        (WTR::AccessibilityUIElement::helpText const): Ditto.
        (WTR::AccessibilityUIElement::attributedStringForRange): Use StringBuilder functions
        directly instead of using String::format.
        (WTR::AccessibilityUIElement::url): Use makeString instead of String::format.
        (WTR::stringAtOffset): Use StringBuilder::appendNumber instead of String::format.

2019-02-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241564.

        Caused 50+ Timeouts on Mac WK2, mostly in the http/ directory

        Reverted changeset:

        "[Mac] WebInspectorUI.framework does not need to be soft-
        linked anymore"
        https://bugs.webkit.org/show_bug.cgi?id=194411
        https://trac.webkit.org/changeset/241564

2019-02-15  Saam barati  <sbarati@apple.com>

        [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
        https://bugs.webkit.org/show_bug.cgi?id=194036

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::drawSquareInEditableImage):

2019-02-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::drawSquareInEditableImage):

2019-02-14  Brian Burg  <bburg@apple.com>

        [Mac] WebInspectorUI.framework does not need to be soft-linked anymore
        https://bugs.webkit.org/show_bug.cgi?id=194411
        <rdar://problem/47787614>

        Reviewed by Joseph Pecoraro.

        Remove unnecessary soft linking macro usage.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL):
        (SOFT_LINK_STAGED_FRAMEWORK): Deleted.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):

2019-02-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] status bubble should fetch builder name info from BuilderMapping table
        https://bugs.webkit.org/show_bug.cgi?id=194599

        Reviewed by Lucas Forschler.

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

2019-02-14  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set Foreign Key in Django build model
        https://bugs.webkit.org/show_bug.cgi?id=194667

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build):

2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (libraryPathForDumpRenderTree):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree):
        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication):
        * TestWebKitAPI/Tests/WebKit/EnvironmentUtilitiesTest.cpp:
        (TestWebKitAPI::strip):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::topLevelPath):
        (WTR::getOutputDir):
        (WTR::activateFonts):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::libraryPathForTesting):
        (WTR::TestController::generateContextConfiguration const):
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize):
        (WTR::TestController::platformAdjustContext):
        * WebKitTestRunner/gtk/main.cpp:
        (main):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::configureContentExtensionForTest):
        * WebKitTestRunner/wpe/main.cpp:
        (main):
        Utilize WTF::Environment where possible.

2019-02-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Introduce a WebContent Process cache
        https://bugs.webkit.org/show_bug.cgi?id=194594
        <rdar://problem/46793397>

        Reviewed by Geoff Garen.

        Update API tests to turn on the WebContent Process cache.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix after r241480

        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator initWithWebView:]):

2019-02-14  Chris Fleizach  <cfleizach@apple.com>

        AX: ARIA Reflection was disabled in error
        https://bugs.webkit.org/show_bug.cgi?id=194647
        <rdar://problem/48068336>

        Reviewed by Ryosuke Niwa.

        Remove test override now that this feature should be enabled by default.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2019-02-14  Commit Queue  <commit-queue@webkit.org>

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

        causing API failures in builds (Requested by ShawnRoberts on
        #webkit).

        Reverted changeset:

        "[Cocoa] Media elements will restart network buffering just
        before suspending"
        https://bugs.webkit.org/show_bug.cgi?id=193691
        https://trac.webkit.org/changeset/241486

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapse] Replaced boxes don't collapse through their margins
        https://bugs.webkit.org/show_bug.cgi?id=194622

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-14  Zalan Bujtas  <zalan@apple.com>

        [LFC] Shrink-to-fit-width should be constrained by min/max width
        https://bugs.webkit.org/show_bug.cgi?id=194653

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WKBundleFrameGetParentFrame when called inside didRemoveFrameFromHierarchy
        https://bugs.webkit.org/show_bug.cgi?id=194641

        Reviewed by Geoffrey Garen.

        Added a call to WKBundleFrameGetParentFrame to an existing test for didRemoveFrameFromHierarchy
        so that the test would fail without this fix.

        * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp:
        (TestWebKitAPI::didRemoveFrameFromHierarchyCallback):

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Change log level for a log statement

        Unreviewed minor fix.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch):

2019-02-13  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Media elements will restart network buffering just before suspending
        https://bugs.webkit.org/show_bug.cgi?id=193691

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm: Added.
        (TEST):

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Fetch builder id to name mapping
        https://bugs.webkit.org/show_bug.cgi?id=194355

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.get_builder_id_to_name_mapping):
        (Buildbot._get_display_name_from_builder_name):

2019-02-12  Jiewen Tan  <jiewen_tan@apple.com>

        Further restricting webarchive loads
        https://bugs.webkit.org/show_bug.cgi?id=194567
        <rdar://problem/47610130>

        Reviewed by Youenn Fablet.

        Besides adding API tests, this patch also enhances DragAndDropSimulator to allow
        navigations on drop.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/LoadWebArchive.mm: Added.
        (-[TestLoadWebArchiveNavigationDelegate webView:didFinishNavigation:]):
        (-[TestLoadWebArchiveNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (-[TestLoadWebArchiveNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/helloworld.webarchive: Added.
        * TestWebKitAPI/Tests/mac/load-web-archive-1.html: Added.
        * TestWebKitAPI/Tests/mac/load-web-archive-2.html: Added.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropSimulator initWithWebViewFrame:configuration:]):
        (-[DragAndDropSimulator _webView:dragDestinationActionMaskForDraggingInfo:]):

2019-02-13  John Wilander  <wilander@apple.com>

        Store Ad Click Attribution requests in the network process
        https://bugs.webkit.org/show_bug.cgi?id=194510
        <rdar://problem/47650118>

        Reviewed by Alex Christensen and Daniel Bates.

        This patch adds two TestRunner functions:
        - dumpAdClickAttribution()
        - clearAdClickAttribution()

        They call into the network process to dump and clear Ad Click
        Attribution state, respectively.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::dumpAdClickAttribution):
        (WTR::TestRunner::clearAdClickAttribution):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::AdClickAttributionStringResultCallbackContext::AdClickAttributionStringResultCallbackContext):
        (WTR::adClickAttributionStringResultCallback):
        (WTR::TestController::dumpAdClickAttribution):
        (WTR::AdClickAttributionVoidCallbackContext::AdClickAttributionVoidCallbackContext):
        (WTR::adClickAttributionVoidCallback):
        (WTR::TestController::clearAdClickAttribution):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::dumpAdClickAttribution):
        * WebKitTestRunner/TestInvocation.h:

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Generate status-bubble
        https://bugs.webkit.org/show_bug.cgi?id=194572

        Reviewed by Lucas Forschler.

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

2019-02-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add status bubble html template
        https://bugs.webkit.org/show_bug.cgi?id=194571

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/templates: Added.
        * BuildSlaveSupport/ews-app/ews/templates/statusbubble.html: Copied from QueueStatusServer/templates/statusbubble.html.

2019-02-12  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared()
        https://bugs.webkit.org/show_bug.cgi?id=194568
        <rdar://problem/47944490>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):

2019-02-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove bug_dummy from parsed test expectations
        https://bugs.webkit.org/show_bug.cgi?id=194562
        <rdar://problem/47853999>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        (TestExpectationParser.expectation_for_skipped_test): Remove DUMMY_BUG_MODIFIER from
        skipped tests.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:

2019-02-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to fetch patch
        https://bugs.webkit.org/show_bug.cgi?id=194518

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.get_patch):

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (60 new tests -> 860)

        Unreviewed test gardening (run-singly, --child-processes=1).

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow pages to trigger programmatic paste from script on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194271
        <rdar://problem/47808810>

        Reviewed by Tim Horton.

        Add support for interacting with the callout bar on iOS during layout tests. See below for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):
        (WTR::UIScriptController::rectForMenuAction const):

        Add new mechanisms to make it possible to interact with and query the state of the callout menu on iOS. This
        includes determining the rect (in content view coordinates) of the menu's controls, and callbacks to register
        for when the menu is shown or hidden.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptContext.h:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setDidShowMenuCallback):
        (WTR::UIScriptController::didShowMenuCallback const):
        (WTR::UIScriptController::setDidHideMenuCallback):
        (WTR::UIScriptController::didHideMenuCallback const):
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):
        (WTR::UIScriptController::rectForMenuAction const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:

        Add a new test option to determine whether DOM paste is enabled. DOM paste is currently enabled everywhere by
        default, but these new programmatic paste tests require it to be disabled in order for confirmation UI to show.

        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::platformUndoManager const):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView initWithFrame:configuration:]):
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _didShowMenu]):
        (-[TestRunnerWKWebView _didHideMenu]):

        Listen to when the callout bar is presented and dismissed, and invoke testing callbacks as needed.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::handleMenuWillHideNotification):
        (WTR::handleMenuDidHideNotification):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        (WTR::TestController::platformResetStateToConsistentValues):

        Additionally ensure that any callout menu presented by a previous layout test is dismissed before running the
        next test by hiding the callout bar if necessary, and then waiting for the "DidHide" notification.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::forEachViewInHierarchy):
        (WTR::findViewInHierarchyOfType):

        Move `forEachViewInHierarchy` so that we can use it throughout the file, and then add some additional helper
        functions that dig through a given view's hierarchy in search of a view of a given class.

        (WTR::UIScriptController::selectionStartGrabberViewRect const):
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):
        (WTR::UIScriptController::platformSetDidShowMenuCallback):
        (WTR::UIScriptController::platformSetDidHideMenuCallback):

        Tweak these to use `platformContentView` instead of grabbing the content view from WKWebView directly.

        (WTR::UIScriptController::rectForMenuAction const):

        Add a new UIScriptController method to get the rect of the action in the contextual menu (on iOS, this is the
        callout bar) whose label matches the given string.

        (WTR::UIScriptController::platformContentView const):

        Add a `platformContentView()` helper on UIScriptController so that we can stop grabbing the value for key
        "_currentContentView" from various places in this file. Additionally, rewrite `platformUndoManager()` in terms
        of this new helper, and move the code out from iOS/macOS-specific files into UIScriptControllerCocoa.

        (WTR::UIScriptController::platformUndoManager const): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformContentView const):
        (WTR::UIScriptController::platformUndoManager const): Deleted.

2019-02-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: No option to only show unexpected failures in results.html for iPad
        https://bugs.webkit.org/show_bug.cgi?id=194554
        <rdar://problem/47922442>

        Rubber-stamped by Aakash Jain.

        Just because a TestExpecations file does not exist for a specific platform does not mean that
        TestExpecations are not being used, given that platforms inherit test expectations.

        * Scripts/webkitpy/port/base.py:
        (Port.uses_test_expectations_file): Check all possible locations of a TestExpectations file.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_uses_test_expectations_file):

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        Remove setDefersLoading infrastructure from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=194506

        Reviewed by Brady Eidson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDefersLoading): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2019-02-12  Alex Christensen  <achristensen@webkit.org>

        WebPage::close needs to remove all message receivers associated with that WebPage, not WebPage::~WebPage
        https://bugs.webkit.org/show_bug.cgi?id=194522
        <rdar://problem/47789393>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm: Added.
        (-[BundleRetainPagePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-02-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for float boxes.
        https://bugs.webkit.org/show_bug.cgi?id=194528

        Reviewed by Antti Koivisto.

        Expand tests coverage (2 new tests -> 800).
        (This is the correct test ordering --runs-singly --child-processes=1)

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-12  Rob Buis  <rbuis@igalia.com>

        Implement serializing in MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=193909

        Reviewed by Darin Adler.

        Add various tests involving upper case, non-ASCII, control/null characters,
        various HTTP whitespace, single quotes and an unpaired surrogate.

        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp:
        (TestWebKitAPI::escapeNonASCIIPrintableCharacters):
        (TestWebKitAPI::serializeIfValid):
        (TestWebKitAPI::TEST):

2019-02-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Allow testing infrastructure to use fonts that are returned from CTFontDescriptorCreateForCSSFamily().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2019-02-11  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Add content extensions support in WKTR and unskip layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193622

        Reviewed by Michael Catanzaro.

        This adds support for loading content extension rule sets from the JSON files which
        accompany the corresponding layout test, using the C API. The Cocoa specific parts
        of WKTR for this could be removed, but that is left for a follow-up patch with
        cleanups.

        * Scripts/webkitperl/FeatureList.pm: Add an option to toggle CONTENT_EXTENSIONS.
        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath): Subtract one from the length when constructing the result std::string to
        avoid having the null-terminator copied into the result.
        (WTR::TestController::configureViewForTest): Call configureContentExtensionForTest() as
        part of the preparations to run a test.
        (WTR::ContentExtensionStoreCallbackContext::ContentExtensionStoreCallbackContext): Added.
        (WTR::contentExtensionStoreCallback): Added.
        (WTR::contentExtensionJSONPath): Used to calculate the path to the JSON rule set to be
        used for content extensions test.
        (WTR::TestController::configureContentExtensionForTest): Added, handles enabling content
        extensions and compiling the JSON rule set for tests involving content extensions.
        (WTR::TestController::resetContentExtensions): Removes the content extension built for
        testing and disables content extensions.
        (WTR::TestController::resetPreferencesToConsistentValues): Add a call to
        resetContentExtensions().
        (WTR::TestController::userContentController): Added implementation for ports other than Cocoa.
        * WebKitTestRunner/TestController.h: Add declarations for resetContentExtensions(),
        configureContentExtensionForTest(), and userContentController().

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Add support infrastructure for testing touch and stylus taps when holding modifier keys. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength):
        (WTR::parseModifierArray):
        (WTR::UIScriptController::singleTapAtPoint): Implemented in terms of singleTapAtPointWithModifiers().
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPoint): Implemented in terms of stylusTapAtPointWithModifiers().
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.

2019-02-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241272 and r241276.
        https://bugs.webkit.org/show_bug.cgi?id=194514

        Broke the Apple Internal build and the fix requires human
        intervention :( (Requested by dydz on #webkit).

        Reverted changesets:

        "[iOS] Mouse/Touch/Pointer events are missing modifier keys"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241272

        "Fix internal iOS build after r241272"
        https://bugs.webkit.org/show_bug.cgi?id=191446
        https://trac.webkit.org/changeset/241276

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241269.

        Caused 5 layout tests crashes on Mac WK1

        Reverted changeset:

        "DumpRenderTree should report unknown options"
        https://bugs.webkit.org/show_bug.cgi?id=191303
        https://trac.webkit.org/changeset/241269

2019-02-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html does not work on iPad
        https://bugs.webkit.org/show_bug.cgi?id=194313

        Reviewed by Tim Horton.

        Add a helper to determine whether the web view is presenting modal UI.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isPresentingModally const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isPresentingModally const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isPresentingModally const):
        (WTR::UIScriptController::calendarType const):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::calendarType const):

2019-02-11  Joseph Pecoraro  <pecoraro@apple.com>

        GCHeapInspector: Show the retained sizes in more places
        https://bugs.webkit.org/show_bug.cgi?id=194464

        Reviewed by Simon Fraser.

        * GCHeapInspector/gc-heap-inspector.html:
        * GCHeapInspector/script/interface.js:
        (HeapInspectorUtils.humanReadableSize):
        (HeapInspectorUtils.spanForNode.let.nodeHTML.node.className.span):
        (HeapInspectorUtils.spanForNode.span.span):
        (HeapSnapshotInspector.prototype.buildAllObjectsByType):
        (HeapSnapshotInspector.prototype.buildRoots):

2019-02-11  Daniel Bates  <dabates@apple.com>

        [iOS] Mouse/Touch/Pointer events are missing modifier keys
        https://bugs.webkit.org/show_bug.cgi?id=191446
        <rdar://problem/45929460>

        Reviewed by Tim Horton.

        Add support infrastructure for testing touch and stylus taps when holding modifier keys. 

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength):
        (WTR::parseModifierArray):
        (WTR::UIScriptController::singleTapAtPoint): Implemented in terms of singleTapAtPointWithModifiers().
        (WTR::UIScriptController::singleTapAtPointWithModifiers): Added.
        (WTR::UIScriptController::stylusTapAtPoint): Implemented in terms of stylusTapAtPointWithModifiers().
        (WTR::UIScriptController::stylusTapAtPointWithModifiers): Added.

2019-02-11  Darshan Kadu  <dkadu@igalia.com>

        DumpRenderTree should report unknown options
        https://bugs.webkit.org/show_bug.cgi?id=191303

        Reviewed by Frédéric Wang.

        Added RELEASE_ASSERT_NOT_REACHED for DumpRenderTree/TestOptions.cpp
        to report unknown options.
        Added and assigned test options which are currently used in tests.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):

2019-02-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241229.

        Revision broke internal builds for watchOS.

        Reverted changeset:

        "[Cocoa] Ask platform for generic font family mappings"
        https://bugs.webkit.org/show_bug.cgi?id=187723
        https://trac.webkit.org/changeset/241229

2019-02-11  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][MiniBrowser] Basic authentication always fails.
        https://bugs.webkit.org/show_bug.cgi?id=194496

        Reviewed by Don Olmstead.

        * MiniBrowser/win/DialogHelper.h:
        (Dialog::getText):

2019-02-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] GstMappedBuffer testsuite build fails
        https://bugs.webkit.org/show_bug.cgi?id=194495

        Reviewed by Carlos Garcia Campos.

        Fix the build by explicitely adding the gstreamer1.0-audio include
        directories to the include path.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:

2019-02-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add enable-javascript-markup setting
        https://bugs.webkit.org/show_bug.cgi?id=193439

        Reviewed by Michael Catanzaro.

        Add test cases to check the new setting.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (testWebKitSettingsJavaScriptMarkup):
        (beforeAll):

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * WebKitTestRunner/TestController.cpp: Removed unnecessary include of HexNumber.h.

2019-02-09  Benjamin Poulain  <benjamin@webkit.org>

        Add more tests for clampTo<>()
        https://bugs.webkit.org/show_bug.cgi?id=194462

        Reviewed by Geoffrey Garen.

        Darin suggested to test the very last floating point number
        at the boundaries when truncating to integer.
        I added test for max/min and max-1/min-1.

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

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST): Change tests to use EXPECT_STREQ so failure messages are easier
        to understand. Updated tests for changes to FormattedNumber::fixedPrecision.

2019-02-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add intrinsic width support for basic inline containers
        https://bugs.webkit.org/show_bug.cgi?id=194473

        Reviewed by Antti Koivisto.

        Expand tests coverage (11 new tests -> 798)

        * LayoutReloaded/misc/LFC-passing-tests.txt: not sure why run-singly keeps producing different ordering.

2019-02-09  Benjamin Poulain  <benjamin@webkit.org>

        Fix MiniBrowser's entitlements
        https://bugs.webkit.org/show_bug.cgi?id=192431

        Reviewed by Joseph Pecoraro.

        MiniBrowser's Extensions Manager was broken. The entitlement was missing for opening
        files, making it impossible to load any extension.

        * MiniBrowser/MiniBrowser.entitlements:

2019-02-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Ask platform for generic font family mappings
        https://bugs.webkit.org/show_bug.cgi?id=187723
        <rdar://problem/41892438>

        Reviewed by Brent Fulgham.

        Allow testing infrastructure to use fonts that are returned from CTFontDescriptorCreateForCSSFamily().

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2019-02-08  Alexander Mikhaylenko  <exalm7659@gmail.com>

        [GTK] Implement back/forward touchpad gesture
        https://bugs.webkit.org/show_bug.cgi?id=193919

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings): Add a test for 'enable-back-forward-navigation-gestures' property.

2019-02-08  Alex Christensen  <achristensen@webkit.org>

        Add SPI to use networking daemon instead of XPC service
        https://bugs.webkit.org/show_bug.cgi?id=194427

        Reviewed by Geoffrey Garen

        * MiniBrowser/MiniBrowser.entitlements:

2019-02-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Ensure that every builder in config.json has short name
        https://bugs.webkit.org/show_bug.cgi?id=194461

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        * BuildSlaveSupport/ews-build/loadConfig_unittest.py: Updated unit-tests.

2019-02-08  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add short name to config.json
        https://bugs.webkit.org/show_bug.cgi?id=194456

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json: Added short name.
        * BuildSlaveSupport/ews-build/loadConfig.py:
        (loadBuilderConfig): Set the short name as the builder description.

2019-02-08  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: CrashLogs.find_all_logs may return a string or a dictionary
        https://bugs.webkit.org/show_bug.cgi?id=194418

        Reviewed by Lucas Forschler.

        Do not include errors trying when finding crashlogs at the end of
        a run-webkit-tests run since we don't process those errors.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._look_for_all_crash_logs_in_log_dir):
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir):
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort._look_for_all_crash_logs_in_log_dir):

2019-02-08  Beth Dakin  <bdakin@apple.com>

        Add afterScreenUpdates to WKSnapshotConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=194362
        -and corresponding-
        <rdar://problem/40655528> Please add an "after screen updates" property to 
        WKSnapshotConfiguration (to solve blank snapshots)

        Reviewed by Tim Horton.

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

2019-02-08  Benjamin Poulain  <benjamin@webkit.org>

        clampTo(): do not convert the input to double when dealing with integers
        https://bugs.webkit.org/show_bug.cgi?id=194263
        <rdar://problem/47692312>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
        (TestWebKitAPI::testClampFloatingPointToFloatingPoint):
        (TestWebKitAPI::testClampFloatingPointToInteger):
        (TestWebKitAPI::testClampSameSignIntegers):
        (TestWebKitAPI::testClampUnsignedToSigned):
        (TestWebKitAPI::testClampSignedToUnsigned):

2019-02-07  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Respect --dedicated-simulators flag
        https://bugs.webkit.org/show_bug.cgi?id=194416
        <rdar://problem/47894722>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.supported_device_types): If --dedicated-simulators is passed, all
        available devices can be safely ignored.

2019-02-07  Keith Rollin  <krollin@apple.com>

        Remove extra copy of 100x100-red.tga
        https://bugs.webkit.org/show_bug.cgi?id=194371
        <rdar://problem/47873465>

        Reviewed by Said Abou-Hallawa.

        In order to help it pass its tests, Bug 194190 added a second copy of
        the file 100x100-red.tga. However, it turns out that this additional
        file wasn't actually needed, and that that sole previous copy was
        sufficient. At the same time, this second copy -- which was copied to
        the same location in the build output as the first copy -- now caused
        XCBuild to complain because there were two production rules for the
        same output file. Address this by removing the newly-added extra copy.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/100x100-red.tga: Removed.

2019-02-07  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKBundlePageSetDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=191394

        Reviewed by Dean Jackson.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDefersLoading):

2019-02-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Use the containing block's padding width when computing min/max width.
        https://bugs.webkit.org/show_bug.cgi?id=194391

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-06  Keith Rollin  <krollin@apple.com>

        Remove Info.plist from MobileMiniBrowser.framework's Copy Bundle Resources phase
        https://bugs.webkit.org/show_bug.cgi?id=193975
        <rdar://problem/47643306>

        Reviewed by Tim Horton.

        The MobileMiniBrowser.framework's Copy Bundle Resources phase copies
        the Info.plist file into the bundle. This step is not necessary as the
        implicit "bundle up all the build products into a framework" build
        phase does this already. Having the Copy Bundle Resources phase do
        this causes a conflict under XCBuild, which objects to two build
        phases producing the same file (Info.plist). Address this by removing
        Info.plist from the Copy Bundle Resources phase.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

2019-02-06  Keith Rollin  <krollin@apple.com>

        Really enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194357
        <rdar://problem/47861231>

        Reviewed by Chris Dumez.

        Bug 194124 was supposed to enable the automatic checking and
        regenerating of .xcfilelist files during the build. While related
        changes were included in that patch, the change to actually enable the
        operation somehow was omitted. This patch actually enables the
        operation. The check-xcfilelist.sh scripts now check
        WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
        from the checking.

        * DumpRenderTree/Scripts/check-xcfilelists.sh:
        * WebKitTestRunner/Scripts/check-xcfilelists.sh:

2019-02-06  David Kilzer  <ddkilzer@apple.com>

        WTR::InjectedBundlePage::willSendRequestForFrame() leaks a WKDataRef
        <https://webkit.org/b/194286>
        <rdar://problem/47815558>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame): Use
        WKRetainPtr<> to avoid leaking the WKDataRef.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix a typo

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:

2019-02-06  Olivier Blin  <olivier.blin@softathome.com>

        [GTK][WPE] force libpsl build to use ICU in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194288

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:
        Require ICU for libpsl build in jhbuild, like done in WPE.

2019-02-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r240785): [SOUP] Broke cookie persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=194209

        Reviewed by Carlos Garcia Campos.

        Enhance TestCookieManager to ensure this doesn't happen again.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerPersistentStorage):
        (beforeAll):

2019-02-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename TestOptions.ignoreSynchronousMessagingTimeoutsForTesting
        https://bugs.webkit.org/show_bug.cgi?id=194324

        Reviewed by Andy Estes.

        Rename ignoreSynchronousMessagingTimeoutsForTesting to just ignoreSynchronousMessagingTimeouts. The -ForTesting
        part of the name is already implicit, since this is in testing code in TestOptions.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Allow * as platform for builders and workers
        https://bugs.webkit.org/show_bug.cgi?id=188533

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig.py:
        (checkWorkersAndBuildersForConsistency):

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add few bots to config.json
        https://bugs.webkit.org/show_bug.cgi?id=194304

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        * Scripts/generate-xcfilelists:

2019-02-05  Olivier Blin  <olivier.blin@softathome.com>

        [GTK][WPE] force libpsl build to use ICU in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194288

        Reviewed by Philippe Normand.

        In jhbuild, libpsl depends on ICU, but its configure script may decide to use libidn instead of ICU.
        This can cause build failures if libidn is detected but libunistring is not available.

        Make sure that ICU is used for runtime and builtin PSL data.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Modified timestamp should be updated on updating data
        https://bugs.webkit.org/show_bug.cgi?id=194295

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-02-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r240742.

        Causes crashes on iOS simulator.

        Reverted changeset:

        "[iOS] Keyups for non-modifier keys identified as "Dead" when
        not focused in a content-editable element"
        https://bugs.webkit.org/show_bug.cgi?id=192824
        https://trac.webkit.org/changeset/240742

2019-02-05  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests emits message "...running None" when running tests
        https://bugs.webkit.org/show_bug.cgi?id=194133
        <rdar://problem/47724738>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__str__): Use both version mapping tables and use just the variant
        name if no version name is available.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_unmapped_version): Test case where the version does not have
        an associated named.

2019-02-05  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] require python3-setuptools for meson build in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=194287

        Reviewed by Philippe Normand.

        python3-setuptools is needed to build meson in jhbuild.
        It is already required by the GTK port.

        * wpe/install-dependencies:

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to save BuilderMapping to database
        https://bugs.webkit.org/show_bug.cgi?id=194264

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping.__str__):
        (BuilderMapping):
        (BuilderMapping.save_mapping):
        (BuilderMapping.update_mapping):
        (BuilderMapping.get_existing_mapping):
        (BuilderMapping.is_valid_mapping):

2019-02-05  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add timestamp fields for BuilderMappings
        https://bugs.webkit.org/show_bug.cgi?id=194266

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping):

2019-02-04  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add tests for webkit_uri_for_display().

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitURIUtilities.cpp: Added.
        (testURIForDisplayUnaffected):
        (testURIForDisplayAffected):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:

2019-02-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Precedence of booted devices should match precedence in DEFAULT_DEVICE_TYPES
        https://bugs.webkit.org/show_bug.cgi?id=194158
        <rdar://problem/47737268>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.supported_device_types): Sort supported device types by the DEFAULT_DEVICE_TYPES.

2019-02-04  Said Abou-Hallawa  <said@apple.com>

        [CG] Enable setAdditionalSupportedImageTypes for WK1
        https://bugs.webkit.org/show_bug.cgi?id=194190

        Reviewed by Tim Horton.

        Add a test similar to the one under WebKit Cocoa but make it create a
        WebView instead of a WKWebView.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/100x100-red.tga: Added.
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.html: Added.
        * TestWebKitAPI/Tests/mac/AdditionalSupportedImageTypes.mm: Added.
        (-[AdditionalSupportedImageTypesTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::runTest):
        (TestWebKitAPI::TEST):

2019-02-04  Zalan Bujtas  <zalan@apple.com>

        [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
        https://bugs.webkit.org/show_bug.cgi?id=194168

        Reviewed by Simon Fraser.

        Test if the firstVisuallyNoneEmpty milestone fires before the deferred script's post-message. 

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm: Added.
        (-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit/deferred-script-load.html: Added.
        * TestWebKitAPI/Tests/WebKit/deferred-script.js: Added.

2019-02-04  Dean Johnson  <dean_johnson@apple.com>

        REGRESSION (r237269): webkit-patch what-broke is broken 
        https://bugs.webkit.org/show_bug.cgi?id=193025

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/host.py:
        (Host.buildbot):
        (Host.bugzilla): Renamed to 'buildbot'.

2019-02-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] API test WKAttachmentTests.InsertAndRemoveDuplicateAttachment is failing after r240902
        https://bugs.webkit.org/show_bug.cgi?id=194207

        Reviewed by Tim Horton.

        Fix this API test by making it robust against smart paste on iOS. Currently, this test pastes an attachment
        element and assumes that the pasted attachment is adjacent to the original one. However, after enabling smart
        paste, we now insert an extra space in between. Instead of executing "DeleteBackward" twice to test removing the
        attachment elements, we delete backwards once to remove the pasted attachment, and move the selection to the
        start and delete forwards to remove the original attachment.

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

2019-02-04  Youenn Fablet  <youenn@apple.com>

        Capture state should be managed consistently when doing process swapping
        https://bugs.webkit.org/show_bug.cgi?id=194122
        <rdar://problem/47609293>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[GetUserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[GetUserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[GetUserMediaUIDelegate _webView:mediaCaptureStateDidChange:]):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isDoingMediaCapture const):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isDoingMediaCapture const):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::isDoingMediaCapture const):

2019-02-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] WebKitTestRunners is failing to create the IndexedDB directory.
        https://bugs.webkit.org/show_bug.cgi?id=194142

        Reviewed by Ross Kirsling.

        There three 'separator' variables in TestController.cpp. Renamed
        it 'pathSeparator', and unified them.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        (WTR::createTestURL):
        (WTR::TestController::platformAdjustContext):

2019-02-03  Simon Fraser  <simon.fraser@apple.com>

        Make setNeedsLayout on the root more explicitly about triggering its side-effects
        https://bugs.webkit.org/show_bug.cgi?id=194198

        Reviewed by Antti Koivisto.

        No need to set the banner heights on navigation now, since Page stores them.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:didFinishNavigation:]):

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

        Parse and handle Ad Click Attribution attributes in HTMLAnchorElement::handleClick()
        https://bugs.webkit.org/show_bug.cgi?id=194104
        <rdar://problem/47649991>

        Reviewed by Chris Dumez, Daniel Bates, and Darin Adler.

        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp:
        (TestWebKitAPI::TEST):
            Changed numeric types from unsigned short to uint32_t.

2019-02-02  David Kilzer  <ddkilzer@apple.com>

        Leak of NSArray (4.25 Kbytes) in com.apple.WebKit.WebContent running WebKit layout tests on iOS Simulator
        <https://webkit.org/b/194178>
        <rdar://problem/47753473>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::uninstallFakeHelvetica): Pass nullptr into
        CTFontManagerUnregisterFontsForURLs() to ignore any errors.

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Initialize ICB's style with fixed width/height.
        https://bugs.webkit.org/show_bug.cgi?id=194188

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add missing case to out-of-flow non-replaced horizontal used margin value computation
        https://bugs.webkit.org/show_bug.cgi?id=194185

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::originUserVisibleName): Use makeString and reduce the use of std::string
        as an intermediate in code that ultimately constructs a WTF::String.
        (WTR::userMediaOriginHash): Use makeString.
        (WTR::TestController::didNavigateWithNavigationData): More of the same.
        (WTR::TestController::didPerformClientRedirect): Ditto.
        (WTR::TestController::didPerformServerRedirect): Ditto.
        (WTR::TestController::didUpdateHistoryTitle): Ditto.

2019-02-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add unit test to verify builder keys
        https://bugs.webkit.org/show_bug.cgi?id=194152

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
        (ConfigDotJSONTest.test_builder_keys): Added unit-test.

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage (12 new tests -> 787)

        Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix statically positioned replaced out-of-flow horizontal geometry
        https://bugs.webkit.org/show_bug.cgi?id=194163

        Reviewed by Simon Fraser.

        775

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Consistent 1 sec hang when triggering modal alerts while handling synchronous touch events
        https://bugs.webkit.org/show_bug.cgi?id=194140
        <rdar://problem/47728098>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldDismissJavaScriptAlertsAsynchronously):

        Add a new TestRunner hook to make modal JavaScript alerts dismiss asynchronously. This is used by the new layout
        test to induce an IPC deadlock when presenting a modal alert during touch start.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::runJavaScriptAlert):

        Add a client callback function for running JavaScript alerts.

        (WTR::TestController::createOtherPage):
        (WTR::TestController::generateContextConfiguration const):

        Add a test option to disable IPC timeouts for a layout test. This forces the test to reliably time out without
        the fix in this patch.

        (WTR::TestController::createWebViewWithOptions):

        Plumb TestOptions to generateContextConfiguration.

        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::setShouldDismissJavaScriptAlertsAsynchronously):
        (WTR::TestController::handleJavaScriptAlert):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2019-02-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
        https://bugs.webkit.org/show_bug.cgi?id=193740
        <rdar://problem/47527267>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-02-01  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add display name field to BuilderMapping model
        https://bugs.webkit.org/show_bug.cgi?id=194153

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        (BuilderMapping):

2019-02-01  Youenn Fablet  <youenn@apple.com>

        API Test broken: TestWebKitAPI.WebKit2.GetUserMediaReprompt
        https://bugs.webkit.org/show_bug.cgi?id=194155

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:
        Revert use of async functions as it seems it cannot be evaluated from TestWebKitAPI.
        Keep calling enumerateDevices to continue cover https://bugs.webkit.org/show_bug.cgi?id=194106.

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust replaced element's intrinsic ratio
        https://bugs.webkit.org/show_bug.cgi?id=194154

        Reviewed by Antti Koivisto.

        761

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Show test results in minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=194150

        Reviewed by Žan Doberšek.

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

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] MiniBrowser: add ky bindings for back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=194151

        Reviewed by Žan Doberšek.

        ALT + <- go back
        ALT + -> go forward

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

2019-02-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Set intrinsic size on Layout::Replaced
        https://bugs.webkit.org/show_bug.cgi?id=194139

        Reviewed by Antti Koivisto.

        744

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] MiniBrowser: use g_file_new_for_commandline_arg
        https://bugs.webkit.org/show_bug.cgi?id=194146

        Reviewed by Xabier Rodriguez-Calvar.

        It allows to open relative paths.

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

2019-01-31  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration after recent queue changes
        https://bugs.webkit.org/show_bug.cgi?id=194127

        Rubber-stamped by Aakash Jain.

        Apple Windows queues were updated in r237755, and Sierra was removed in r239859.

        * TestResultServer/static-dashboards/builders.jsonp:

2019-01-31  Youenn Fablet  <youenn@apple.com>

        Add an API test to cover UIClient checkUserMediaPermissionForOrigin being nullptr
        https://bugs.webkit.org/show_bug.cgi?id=194106
        <rdar://problem/47676333>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2019-01-31  Chris Dumez  <cdumez@apple.com>

        Page zoom level is lost after a process swap or a crash
        https://bugs.webkit.org/show_bug.cgi?id=194105
        <rdar://problem/47610781>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didCommitNavigation:]):

2019-01-31  Alex Christensen  <achristensen@webkit.org>

        Revert r238819 which is unneeded and caused a performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=192272
        <rdar://problem/46664625>

        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm:
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]):
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]): Deleted.

2019-01-31  Jiewen Tan  <jiewen_tan@apple.com>

        Formalize WebKitAdditions mechanism of LoadOptimizer
        https://bugs.webkit.org/show_bug.cgi?id=193886
        <rdar://problem/47696809>

        Reviewed by Brent Fulgham.

        * MiniBrowser/MiniBrowser.entitlements:
        Make com.apple.security.temporary-exception.mach-lookup.global-name an array.

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Margin before/after/start/end initial value is 0 and not auto.
        https://bugs.webkit.org/show_bug.cgi?id=194090

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedHorizontalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194074

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for block level replaced box.
        https://bugs.webkit.org/show_bug.cgi?id=194071

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        Fix WebKitTestRunner's testPath with Windows full paths
        https://bugs.webkit.org/show_bug.cgi?id=194012

        Reviewed by Alex Christensen.

        updateTestOptionsFromTestHeader failed to open test files because
        testPath returned wrong file paths. It returned a path "/C:/..."
        if a URL "file:///C:/..." was given.

        * WebKitTestRunner/TestController.cpp:
        (WTR::testPath): Removed the first '/' if the path starts with something like "/C:/".

2019-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Bump font related dependencies to match the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=194017

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.
        * wpe/patches/icudata-stdlibs.patch: Added.

2019-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Enable swipe tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194076

        Reviewed by Geoffrey Garen.

        Removed the superflous call to prepareForAsyncTask and asyncTaskComplete as
        it causes a debug assertion failure in runUIScript.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):

2019-01-30  Keith Rollin  <krollin@apple.com>

        Use correct printf format specifier
        https://bugs.webkit.org/show_bug.cgi?id=194062
        <rdar://problem/47686167>

        Reviewed by Alexey Proskuryakov.

        LayoutTestSpellChecker.mm is trying to format a variable of type
        NSTextCheckingType with %tu (unsigned ptrdiff_t), when the type is
        actually an unsigned long long. Fix this by formatting with %llu.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (-[LayoutTestTextCheckingResult description]):

2019-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r240541): WebKit.WebsitePoliciesCustomJavaScriptUserAgent is failing since introduction on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193979

        Reviewed by Wenson Hsieh.

        Fix the test for iOS. Make the test work with iOS UA string.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2019-01-30  Ryan Haddad  <ryanhaddad@apple.com>

        Replace High Sierra LLINT CLoop bot due to hardware failure
        https://bugs.webkit.org/show_bug.cgi?id=194066

        Reviewed by Aakash Jain.

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

2019-01-30  Keith Rollin  <krollin@apple.com>

        [NSDragItem init] is unavailable
        https://bugs.webkit.org/show_bug.cgi?id=194059
        <rdar://problem/47685715>

        Reviewed by Wenson Hsieh.

        [NSDragItem init] is marked as NS_UNAVAILABLE. This affects
        DumpRenderTree and TestWebKitAPI, which both try to create an
        NSDragItem in a manner that invokes this method. Address this by using
        -initWithPasteboardWriter instead.

        Note that the parameter passed to initWithPasteboardWriter is likely
        incorrect. In both cases, the object passed does not conform to
        NSPasteboardWriting. However, with this fix, we're no worse off than
        before, and can now perform builds with newer compilers and SDKs until
        a real fix can be crafted. That work is tracked in
        https://bugs.webkit.org/show_bug.cgi?id=194060

        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):

2019-01-30  Daniel Bates  <dabates@apple.com>

        [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element
        https://bugs.webkit.org/show_bug.cgi?id=192824
        <rdar://problem/47100332>

        Reviewed by Wenson Hsieh.

        Fix a bug where the wrong usage code was used for F13 thru F24.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey):

2019-01-30  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Load hang can occur on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=194030
        <rdar://problem/47656939>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Expand tests coverage.

        Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-30  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add openjpeg support
        https://bugs.webkit.org/show_bug.cgi?id=194019

        Reviewed by Michael Catanzaro.

        * flatpak/org.webkit.CommonModules.yaml:

2019-01-30  Commit Queue  <commit-queue@webkit.org>

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

        It broke WPE build (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Bump font related dependencies to match the GTK+ port"
        https://bugs.webkit.org/show_bug.cgi?id=194017
        https://trac.webkit.org/changeset/240708

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] nextBreakablePosition returns the same position on hyphen characters
        https://bugs.webkit.org/show_bug.cgi?id=194001

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the used margin values in outOfFlowReplacedVerticalGeometry consistently
        https://bugs.webkit.org/show_bug.cgi?id=194020

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Support color well on iOS
        https://bugs.webkit.org/show_bug.cgi?id=194010

        Reviewed by Joanmarie Diggs.

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

2019-01-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Bump font related dependencies to match the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=194017

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.
        * wpe/patches/icudata-stdlibs.patch: Added.

2019-01-29  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Update window scale API usage
        https://bugs.webkit.org/show_bug.cgi?id=193991
        rdar://problem/47614795

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (changeWindowScaleIfNeeded):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

2019-01-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION: ProcessSwap.DoSameSiteNavigationAfterCrossSiteProvisionalLoadStarted Failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193977
        <rdar://problem/47643716>

        Reviewed by Geoff Garen.

        Update API test to address flakiness on iOS. Instead of doing the last navigation after receiving the
        didStartProvisionalLoad, do we right after we answer the navigation policy request. Flakiness was due
        to the previous provisional committing *before* we make the last load. 

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-29  Youenn Fablet  <youenn@apple.com>

        Adopt new SPI to evaluate server certificate trust
        https://bugs.webkit.org/show_bug.cgi?id=193355

        Reviewed by Alex Christensen.

        Add infrastructure to handle HTTPS server trust evaluation testing.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanHandleHTTPSServerTrustEvaluation):
        (WTR::TestRunner::canDoServerTrustEvaluationInNetworkProcess):
        (WTR::TestRunner::serverTrustEvaluationCallbackCallsCount):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::didReceiveAuthenticationChallenge):
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::serverTrustEvaluationCallbackCallsCount const):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::canDoServerTrustEvaluationInNetworkProcess const):

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to print bot Configuration
        https://bugs.webkit.org/show_bug.cgi?id=193887

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (PrintConfiguration): Build step to print configuration.
        * BuildSlaveSupport/ews-build/factories.py:

2019-01-29  Chris Dumez  <cdumez@apple.com>

        Regression (r240046): [PSON] Spurious changes to [WKWebView url] and [WKWebView loading] after [WKWebView loadRequest]
        https://bugs.webkit.org/show_bug.cgi?id=193967
        <rdar://problem/47635348>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONLoadingObserver observeValueForKeyPath:ofObject:change:context:]):

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Handle incoming results data
        https://bugs.webkit.org/show_bug.cgi?id=193973

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/results.py:

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Make the results url generic
        https://bugs.webkit.org/show_bug.cgi?id=193928

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/urls.py:

2019-01-29  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Configure buildbot to send events to ews-app
        https://bugs.webkit.org/show_bug.cgi?id=193968

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/events.py: Added.
        * BuildSlaveSupport/ews-build/master.cfg:

2019-01-29  Keith Rollin  <krollin@apple.com>

        Add .xcfilelists to Run Script build phases
        https://bugs.webkit.org/show_bug.cgi?id=193792
        <rdar://problem/47201785>

        Reviewed by Alex Christensen.

        As part of supporting XCBuild, update the necessary Run Script build
        phases in their Xcode projects to refer to their associated
        .xcfilelist files.

        Note that the addition of these files bumps the Xcode project version
        number to something that's Xcode 10 compatible. This change means that
        older versions of the Xcode IDE can't read these projects. Nor can it
        fully load workspaces that refer to these projects (the updated
        projects are shown as non-expandable placeholders). `xcodebuild` can
        still build these projects; it's just that the IDE can't open them.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-29  John Wilander  <wilander@apple.com>

        Add data abstraction and validation for Ad Click Attribution
        https://bugs.webkit.org/show_bug.cgi?id=193916
        <rdar://problem/47603481>

        Reviewed by Daniel Bates, Brent Fulgham, and Alex Christensen.

        Ad click attribution has two steps. First, the storage of an ad
        campaign ID for a click that takes the user to a destination
        site. Second, a conversion on the destination site that can be
        attributed to the ad click.

        This patch adds a class that represents a request for ad click
        attribution. Validation makes sure that the bits of entropy
        reported through this mechanism is limited.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/AdClickAttribution.cpp: Added.
        (TestWebKitAPI::TEST):

2019-01-29  Chris Dumez  <cdumez@apple.com>

        REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab
        https://bugs.webkit.org/show_bug.cgi?id=193932
        <rdar://problem/47598947>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        Adding new passing LFC tests.

        Unreviewed test gardening.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Remove incorrect downcast<Container>
        https://bugs.webkit.org/show_bug.cgi?id=193964

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Do not ignore next sibling box while laying out BFC.
        https://bugs.webkit.org/show_bug.cgi?id=193954

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for running subtests
        https://bugs.webkit.org/show_bug.cgi?id=193904

        Reviewed by Michael Catanzaro.

        pytest already supports it by passing test.py::subtest, so we can do the same.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py:
        (get_item_name): Made this global.
        (CollectRecorder.__init__): Receive the parameter to ignore.
        (CollectRecorder.pytest_collectreport): Collect also the subtests.
        (TestExpectationsMarker.pytest_collection_modifyitems): Use get_item_name().
        (collect): Add parameter to ignore.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (WebDriverSeleniumExecutor.collect): Pass the driver name as parameter to ignore.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.collect_tests): Handle subtest name in test path.
        (WebDriverTestRunnerSelenium.run): Ditto.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.collect_tests): Ditto.
        (WebDriverTestRunnerW3C.run): Ditto.

2019-01-28  Ryosuke Niwa  <rniwa@webkit.org>

        User agent string override for navigator.userAgent should be site specific quirks
        https://bugs.webkit.org/show_bug.cgi?id=193950

        Reviewed by Brent Fulgham.

        Updated per the _WKWebsitePolicies rename.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
        https://bugs.webkit.org/show_bug.cgi?id=193941

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/ConcurrentPtrHashSet.cpp:
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WTF/ScopedLambda.cpp:
        * TestWebKitAPI/Tests/WTF/Time.cpp:
        * TestWebKitAPI/Tests/WTF/UniqueArray.cpp:
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:

2019-01-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, reorder my emails to fix autocomplete in bugzilla

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

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-28  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r236481): Move soft-linking of LocalAuthentication.framework out of LocalAuthenticationSoftLink.h
        <https://webkit.org/b/193884>

        Reviewed by Jiewen Tan.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add LocalAuthentication to
        `frameworks_with_soft_links`.

2019-01-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKitTestRunner] Error: test and reference images have different sizes. Test image is 784x561, reference image is 800x600
        https://bugs.webkit.org/show_bug.cgi?id=193891

        Reviewed by Ross Kirsling.

        There were three problems in window sizes of WebView and the host window.
        1. The sizes of pixel image output were incorrect.
        2. The host window is going to appear after window.resize was invoked.
        3. window.resize resized only the host window, not WebView.

        This change solves them with a following approach.
        a. PlatformWebView::PlatformWebView creates the initial host window as zero size.
        b. Changes the host window style from WS_OVERLAPPEDWINDOW to WS_POPUP
           as well as DumpRenderTree in order to match the client area and the window area.
        c. PlatformWebView::resizeTo simply calls PlatformWebView::setWindowFrame as well as Mac port and GTK port.
        d. PlatformWebView::setWindowFrame changes both window sizes.
        e. PlatformWebView::setWindowFrame moves the host window to the out side of screen if m_options.shouldShowWebView.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView): Create the host window
        and WebView as zero size. Use WS_POPUP instead of WS_OVERLAPPEDWINDOW.
        (WTR::PlatformWebView::resizeTo): Calls PlatformWebView::setWindowFrame.
        (WTR::PlatformWebView::setWindowFrame): Change both window sizes.

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to save Step data to database
        https://bugs.webkit.org/show_bug.cgi?id=193890

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/step.py:
        (Step.save_step): Method to save step data.
        (Step.update_step): Method to update step data.
        (Step.get_existing_step): Method to fetch existing step from database.
        (Step.is_valid_result): Method to validate valid step result.

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add method to save Build data to database
        https://bugs.webkit.org/show_bug.cgi?id=193735

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        (Build.save_build): Method to save build information to database.
        (Build.get_existing_build): Method to fetch existing build from database.
        (Build.is_valid_result): Method to validate build result.
        * BuildSlaveSupport/ews-app/ews/common/util.py:
        (is_valid_int_id): Method to validate valid id.

2019-01-28  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Crash under WebPageProxy::didStartProgress()
        https://bugs.webkit.org/show_bug.cgi?id=193915
        <rdar://problem/47560907>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename id variables
        https://bugs.webkit.org/show_bug.cgi?id=193883

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:
        * BuildSlaveSupport/ews-app/ews/urls.py:
        * BuildSlaveSupport/ews-app/ews/views/patch.py:
        * BuildSlaveSupport/ews-app/ews/views/results.py:
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:

2019-01-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Allow certain fields to be empty
        https://bugs.webkit.org/show_bug.cgi?id=193892

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py:
        * BuildSlaveSupport/ews-app/ews/models/step.py:

2019-01-28  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

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

2019-01-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][MarginCollapsing][Quirks] Quirk margin values get propagated through margin collapsing
        https://bugs.webkit.org/show_bug.cgi?id=193896

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge): Use makeString.
        (WTR::TestController::downloadDidFail): Use an ASCIILiteral via the _s syntax.

2019-01-27  Jiewen Tan  <jiewen_tan@apple.com>

        Use a load optimizer for some sites
        https://bugs.webkit.org/show_bug.cgi?id=193881
        <rdar://problem/46325455>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/TestLoadOptimizer.mm: Added.

2019-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Introduce a static accessibility tree
        https://bugs.webkit.org/show_bug.cgi?id=193348
        <rdar://problem/47203295>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] The default values for top/bottom in contentHeightForFormattingContextRoot should not be 0.
        https://bugs.webkit.org/show_bug.cgi?id=193867

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Ignore last inflow child's collapsed through margin after when computing containing block's height.
        https://bugs.webkit.org/show_bug.cgi?id=193865

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Need a mechanism to override navigator.userAgent
        https://bugs.webkit.org/show_bug.cgi?id=193762
        <rdar://problem/47504939>

        Reviewed by Brent Fulgham.

        Added test cases for _WKWebsitePolicies.customJavaScriptUserAgent.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomJavaScriptUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomJavaScriptUserAgentDelegate webView:didFinishNavigation:]):

2019-01-25  Dean Jackson  <dino@apple.com>

        REGRESSION: Some USDz from 3rd party websites don't go directly to AR QL
        https://bugs.webkit.org/show_bug.cgi?id=193831
        <rdar://problem/47399263>

        Reviewed by Chris Dumez.

        Two new tests that exercise cross-origin and same-origin System
        Previews.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Check .xcfilelists" build phase
        https://bugs.webkit.org/show_bug.cgi?id=193790
        <rdar://problem/47201374>

        Reviewed by Alex Christensen.

        Support for XCBuild includes specifying inputs and outputs to various
        Run Script build phases. These inputs and outputs are specified as
        .xcfilelist files. Once created, these .xcfilelist files need to be
        kept up-to-date. In order to check that they are up-to-date or not,
        add an Xcode build step that invokes an external script that performs
        the checking. If the .xcfilelists are found to be out-of-date, update
        them, halt the build, and instruct the developer to restart the build
        with up-to-date files.

        At this time, the checking and regenerating is performed only if the
        WK_ENABLE_CHECK_XCFILELISTS environment variable is set to 1. People
        who want to use this facility can set this variable and test out the
        checking/regenerating. Once it seems like there are no egregious
        issues that upset a developer's workflow, we'll unconditionally enable
        this facility.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/check-xcfilelists.sh: Added.
        * WebKitTestRunner/Scripts/check-xcfilelists.sh: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Apply Configuration to XCFileLists" build target
        https://bugs.webkit.org/show_bug.cgi?id=193781
        <rdar://problem/47201153>

        Reviewed by Alex Christensen.

        Part of generating the .xcfilelists used as part of adopting XCBuild
        includes running `make DerivedSources.make` from a standalone script.
        It’s important for this invocation to have the same environment as
        when the actual build invokes `make DerivedSources.make`. If the
        environments are different, then the two invocations will provide
        different results. In order to get the same environment in the
        standalone script, have the script launch xcodebuild targeting the
        "Apply Configuration to XCFileLists" build target, which will then
        re-invoke our standalone script. The script is now running again, this
        time in an environment with all workspace, project, target, xcconfig
        and other environment variables established.

        The "Apply Configuration to XCFileLists" build target accomplishes
        this task via a small embedded shell script that consists only of:

            eval "${WK_SUBLAUNCH_SCRIPT_PARAMETERS[@]}"

        The process that invokes "Apply Configuration to XCFileLists" first
        sets WK_SUBLAUNCH_SCRIPT_PARAMETERS to an array of commands to be
        evaluated and exports it into the shell environment. When xcodebuild
        is invoked, it inherits the value of this variable and can `eval` the
        contents of that variable. Our external standalone script can then set
        WK_SUBLAUNCH_SCRIPT_PARAMETERS to the path to itself, along with a set
        of command-line parameters needed to restart itself in the appropriate
        state.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Add SPI to inform an application that "Go Back" has been clicked from a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193802
        <rdar://problem/46010580>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]):
        (TEST):

2019-01-25  Daniel Bates  <dabates@apple.com>

        [iOS] uiController.keyDown() does not translate Control modified key
        https://bugs.webkit.org/show_bug.cgi?id=192898

        Reviewed by Wenson Hsieh.

        Implement uiController.keyDown() in terms of HIDEventGenerator so that UIKit performs
        key translation, as applicable. Among other cases, key translation occurs when performing
        a Control key modified key sequence. Writing uiController.keyDown() in terms of HIDEventGenerator
        also makes the behavior of uiController.keyDown() more closely match the behavior of a
        human pressing down and releasing key(s) using a hardware keyboard.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator sendMarkerHIDEventWithCompletionBlock:]): Renamed; formerly named _sendMarkerHIDEventWithCompletionBlock.

        (-[HIDEventGenerator touchDown:touchCount:completionBlock:]):
        (-[HIDEventGenerator liftUp:touchCount:completionBlock:]):
        (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator stylusUpAtPoint:completionBlock:]):
        (-[HIDEventGenerator stylusTapAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]):
        (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]):
        (-[HIDEventGenerator longPress:completionBlock:]):
        (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]):
        Update code for above renaming.

        (hidUsageCodeForCharacter): Translate \b to a backspace and teach this function to recognize the
        DumpRenderTree EventSender-compatible modifier key names (e.g. "metaKey").

        (-[HIDEventGenerator keyDown:]): Added.
        (-[HIDEventGenerator keyUp:]): Added.
        (-[HIDEventGenerator keyPress:completionBlock:]):
        (-[HIDEventGenerator eventDispatchThreadEntry:]):
        (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]): Deleted; renamed to sendMarkerHIDEventWithCompletionBlock.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::parseModifierArray): Modified to return a vector of strings that represent the modifier keys to press.
        (WTR::UIScriptController::keyDown): Write in terms of HIDEventGenerator.
        (WTR::parseModifier): Deleted.

2019-01-25  Keith Rollin  <krollin@apple.com>

        Complete the implementation of generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193782

        Reviewed by Alex Christensen.

        A preliminary version of generate-xcfilelists was added in r238008.
        This patch updates that script in order to:

        - Support checking of .xcfilelists
        - Perform better execution of `make DerivedSources.make` by
          relaunching generate-xcfilelists under xcodebuild
        - Support incremental generation and checking of .xcfilelists
        - Support supplementary .xcfilelists files from WebKitAdditions
        - Support being wrapped by parallel version of generate-xcfilelists in
          Internal that adds support for (re)generating WebKit projects in
          that repo.
        - Support builds that have been performed in WebKitBuild as well as
          ~/Library/Developer/code/DerivedData
        - Increase robustness and debugging facilities.

        * Scripts/generate-xcfilelists:

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Unreviewed test case fix.

        These test cases require ResourceLoadStatistics to be active, so the feature must be turned on.
        Previously, the default data store turned the feature on automatically, allowing these tests to pass.

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

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update existing .xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193791
        <rdar://problem/47201706>

        Reviewed by Alex Christensen.

        Many .xcfilelist files were added in r238824 in order to support
        XCBuild. Update these with recent changes to the set of build files
        and with the current generate-xcfilelist script.

        * DumpRenderTree/DerivedSources-input.xcfilelist:
        * DumpRenderTree/DerivedSources-output.xcfilelist:
        * WebKitTestRunner/DerivedSources-input.xcfilelist:
        * WebKitTestRunner/DerivedSources-output.xcfilelist:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Fix missing dependencies in extract-dependencies-from-makefile
        https://bugs.webkit.org/show_bug.cgi?id=193783
        <rdar://problem/47201571>

        Reviewed by Alex Christensen.

        The extract-dependencies-from-makefile script generates .xcfilelists
        for XCBuild by invoking a makefile in --debug mode, parsing the
        dependency information in the output, and extracting information
        regarding targets and dependents. However, the way `make` emits this
        dependency information is not rigorous, and so we need to determine
        what lines to look for and parse by trial and error. This approach
        didn't coriginally atch all the information we needed to collect, so
        update the script to look for the additional lines we now know to look
        for.

        * Scripts/extract-dependencies-from-makefile:
        (Parser):
        (Parser.addTarget):
        (Parser.addPrereq):
        (Parser.doParse):

2019-01-25  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit Cocoa/ResourceLoadStatistics.mm:
            Revise tests to ensure a running NetworkProcess before attempting ResourceLoadStatistics operations.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
        activating the message used to trigger the callback when it is set.

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        WKWebView.goBack should reload if there is a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=193805
        <rdar://problem/46908216>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (+[Simple3LookupContext sharedLookupContext]):
        (-[Simple3LookupContext lookUpURL:completionHandler:]):
        (-[WKWebViewGoBackNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) cross-site provisional page is not canceled if a new same-site one is started
        https://bugs.webkit.org/show_bug.cgi?id=193788
        <rdar://problem/47531231>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]):

2019-01-25  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Missing PID in crashlog name should not be fatal (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=193771

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs): Correct syntax for catching multiple exception types.

2019-01-25  Alexey Proskuryakov  <ap@apple.com>

        * Scripts/webkitpy/common/config/contributors.json: Removing a stray comma.

2019-01-25  Alexey Proskuryakov  <ap@apple.com>

        Add contributors.json entries for Ling Ho and for a new bot watchers group.

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

2019-01-25  Chris Dumez  <cdumez@apple.com>

        Regression(PSON?) Crash under NavigationState::NavigationClient::decidePolicyForNavigationAction()
        https://bugs.webkit.org/show_bug.cgi?id=193779
        <rdar://problem/46170903>

        Reviewed by Antti Koivisto.

        Add API test that quickly navigates forward to a previous process without waiting for it to
        suspend. I suspect the crash could have been happening due to receiving leftover IPC from
        the process' previous page when reconnecting the it for the forward navigation.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Need a way for JavaScript (or bundle) code to participate in undo
        https://bugs.webkit.org/show_bug.cgi?id=190009
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Add UIScriptController helpers to grab the platform undo and redo action labels. Currently only implemented for
        Cocoa platforms in WebKit2. See other ChangeLogs for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        (WTR::UIScriptController::platformUndoManager const):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        (WTR::UIScriptController::platformUndoManager const):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::lastUndoLabel const):
        (WTR::UIScriptController::firstRedoLabel const):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::platformUndoManager const):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformUndoManager const):

2019-01-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add "clear" to static position computation.
        https://bugs.webkit.org/show_bug.cgi?id=193824

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-24  Ryan Haddad  <ryanhaddad@apple.com>

        Update macOS JSC bot configurations
        https://bugs.webkit.org/show_bug.cgi?id=193739

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove 32-bit BuildAndTest queue.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Move JSC EWS to Mojave section.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Remove 32-bit BuildAndTest queue from dashboard.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update unit test.

2019-01-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKitTestRunner] Implement EventSenderProxy
        https://bugs.webkit.org/show_bug.cgi?id=193755

        Reviewed by Don Olmstead.

        * WebKitTestRunner/EventSenderProxy.h: Removed unused members m_buttonState and m_mouseButtonsCurrentlyDown.
        * WebKitTestRunner/win/EventSenderProxyWin.cpp:
        (WTR::EventSenderProxy::dispatchMessage):
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for API test failure after r240437.

        TestWTF.WTF.StringOperators apparently can't deal with another test using String::operator+. This is fine...

        * TestWebKitAPI/Tests/WTF/FileSystem.cpp:

2019-01-24  Jonathan Bedard  <jbedard@apple.com>

        [webkitdirs] iosSimulatorApplicationsPath may not have iOS.simruntime in its path
        https://bugs.webkit.org/show_bug.cgi?id=193787
        <rdar://problem/47497634>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (iosSimulatorApplicationsPath): Pick from available runtime directories.

2019-01-24  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240446.

        Casued 5 API failures

        Reverted changeset:

        "Activate the WebResourceLoadStatisticsStore in the
        NetworkProcess and deactivate it in the UIProcess."
        https://bugs.webkit.org/show_bug.cgi?id=193297
        https://trac.webkit.org/changeset/240446

2019-01-24  Zalan Bujtas  <zalan@apple.com>

        DidFirstVisuallyNonEmptyLayout milestone should always fire at some point.
        https://bugs.webkit.org/show_bug.cgi?id=193741
        <rdar://problem/47135030>

        Reviewed by Antti Koivisto and Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):

2019-01-24  Brent Fulgham  <bfulgham@apple.com>

        Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=193297
        <rdar://problem/47158841>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback): Simplify test configuration by
        activating the message used to trigger the callback when it is set.

2019-01-24  John Wilander  <wilander@apple.com>

        Add Ad Click Attribution as an internal/experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=193685
        <rdar://problem/47450399>

        Reviewed by Brent Fulgham.

        Added test option adClickAttributionEnabled.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):

2019-01-24  Antti Koivisto  <antti@apple.com>

        [PSON] Flash on back navigation on Mac
        https://bugs.webkit.org/show_bug.cgi?id=193716
        <rdar://problem/47148458>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

        Closing of the previous page is delayed so waiting for didFinishNavigation is
        not sufficient to guarantee we have received all the messages. Wait for them.

2019-01-24  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Back/Forward list items' URL sometimes gets replaced with the URL of a subframe
        https://bugs.webkit.org/show_bug.cgi?id=193761
        <rdar://problem/47456405>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-24  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Missing PID in crashlog name should not be fatal
        https://bugs.webkit.org/show_bug.cgi?id=193771

        If we can't determine the PID of a crashlog, just ignore the crashlog instead
        of raising an exception.

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs):

2019-01-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        test_exporter.py: webkitpy.common.system.executive.ScriptError from create_branch_with_patch
        https://bugs.webkit.org/show_bug.cgi?id=193746

        Reviewed by Youenn Fablet.

        It calls 'git apply --index --abort', but --abort is not a valid argument to 'git apply',
        so we'd best just not call it.

        * Scripts/webkitpy/w3c/test_exporter.py:
        (WebPlatformTestExporter.create_branch_with_patch):

2019-01-24  Ross Kirsling  <ross.kirsling@sony.com>

        Move FileSystem to WTF
        https://bugs.webkit.org/show_bug.cgi?id=193602

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformPlayStation.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/FileSystem.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/FileSystem.cpp.
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:

2019-01-24  Philippe Normand  <pnormand@igalia.com>

        [WPE] Remove hard dependency on subprocess32 for the API tests

        Rubber-stamped by Carlos Garcia Campos.

        * glib/api_test_runner.py:
        (TestRunner._run_test_qt): Lazily import subprocess32 and check
        its presence only when running WPEQt tests.

2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Expose JavaScriptCore options in GLib public API
        https://bugs.webkit.org/show_bug.cgi?id=188742

        Reviewed by Michael Catanzaro.

        Add a test for the new API.

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

2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Support JPEG 2000 images
        https://bugs.webkit.org/show_bug.cgi?id=186272

        Reviewed by Žan Doberšek.

        Add OpenJPEG to jhbuild since 2.2.0 version is required and it's not available in debian stable.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should warn when using soft-linking macros in a header
        <https://webkit.org/b/193750>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add softlink/header check by refactoring the
        softlink/framework check.
        (CppChecker): Enable softlink/header check by default.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_softlink_framework): Rename from
        CppStyleTest.test_softlink() and change test framework name in
        case AVFoundation gets its own AVFoundationSoftLink.{h,mm}
        files. Set file_name for macros that only appear in headers.
        (CppStyleTest.test_softlink_header): Add tests for using
        soft-link macros in headers.

2019-01-23  Chris Dumez  <cdumez@apple.com>

        Deprecate API to limit the maximum number of WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=193725
        <rdar://problem/47464879>

        Reviewed by Geoff Garen.

        Update existing API tests to stop using deprecated API.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ResponsivenessTimer.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm:
        (TEST):

2019-01-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename ews model buildermappings to buildermapping
        https://bugs.webkit.org/show_bug.cgi?id=193729

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/buildermapping.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/buildermappings.py.
        (BuilderMapping): Renamed BuildMappings to BuilderMapping.
        * BuildSlaveSupport/ews-app/ews/models/__init__.py: Ditto.

2019-01-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename ews model steps to step
        https://bugs.webkit.org/show_bug.cgi?id=193697

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/step.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/steps.py.
        (Step): Renamed Steps to Step.

2019-01-23  Sihui Liu  <sihui_liu@apple.com>

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796
        <rdar://problem/46824999>

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext):
        (WTR::RemoveAllIndexedDatabasesCallback):
        (WTR::TestController::ClearIndexedDatabases):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-01-23  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename ews model Builds to Build
        https://bugs.webkit.org/show_bug.cgi?id=193695

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/build.py: Renamed from Tools/BuildSlaveSupport/ews-app/ews/models/builds.py.
        (Build): Renamed Builds to Build.

2019-01-23  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Wait longer when launching WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=193734

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Increase timeout from 6 seconds to 15 seconds.

2019-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] fast/events/touch/ios/hover-when-style-change-is-async.html times out
        https://bugs.webkit.org/show_bug.cgi?id=193182
        <rdar://problem/47452154>

        Reviewed by Tim Horton.

        This test was timing out because one of its preceding tests (drag-to-autoscroll-in-single-line-editable.html)
        long presses and drags to select text, but does not end the touch by lifting up; subsequently, the tap gesture
        recognizer isn't fired when simulating a tap in hover-when-style-change-is-async.html.

        To fix this, tweak the test runner to make it safe for tests to end while touching the web view without
        preventing later tests from recognizing gestures.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        Cancel all touches in the UIApplication when resetting to a consistent state between tests.

2019-01-23  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use correct config for --iphone-simulator and --ipad-simulator
        https://bugs.webkit.org/show_bug.cgi?id=193722
        <rdar://problem/47481475>

        Reviewed by Lucas Forschler.

        iPhone and iPad ports should both use the iOS config.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IPhoneSimulatorPort.__init__):
        (IPadSimulatorPort.__init__):

2019-01-23  Rob Buis  <rbuis@igalia.com>

        Update MIME type parser
        https://bugs.webkit.org/show_bug.cgi?id=180526

        Reviewed by Frédéric Wang.

        Add unit tests for both parse modes of ParsedContentType.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ParsedContentType.cpp: Added.
        (TestWebKitAPI::TEST):

2019-01-22  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] fetch loop should not stop on network issues
        https://bugs.webkit.org/show_bug.cgi?id=193666

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop.run): Ensure that fetch loop doesn't exit on any exception.

2019-01-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Multiple WKWebViewAutofillTests are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=189165
        <rdar://problem/47433765>

        Reviewed by Tim Horton.

        These tests are currently flaky because they expect an invocation of "Element.blur()" in the web process to
        immediately dispatch an IPC message to notify the UI process that the element has been blurred. In particular,
        the -textInputHasAutofillContext helper assumes that waiting for the next remote layer tree commit in the UI
        process in sufficient to ensure that any previous action that blurred the focused element in the web process
        would make its way to the UI process by the time the layer tree commit is finished.

        However, WebPage::elementDidBlur sends its IPC message to the UI process asynchronously, using callOnMainThread.
        This means that if a layer tree flush was already scheduled in the web process before the element was blurred,
        the element blur IPC message to the UI process will lose the race against the layer tree commit, and the test
        will fail because it asks for -_autofillContext too early.

        To fix this, we tweak these tests to actually wait until the intended input session change triggered by script
        is handled in the UI process.

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:

        Tweak some of these tests to wait for input session changes before checking for the presence of an autofill
        context. The only exception is an existing test that doesn't allow programmatic focus to begin input sessions
        by default; to fix this test, we simply wait for _WKInputDelegate to be invoked, instead of waiting for a new
        input session.

        (-[AutofillTestView textInputHasAutofillContext]):

        Remove the incorrect presentation update here. This helper now assumes that the UI process is up to date.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (nextInputSessionChangeCount):

        Monotonically increasing identifier that's incremented whenever an input session is started in the UI process.
        This includes changing the focused element from one to another.

        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        (-[TestWKWebView didStartFormControlInteraction]):
        (-[TestWKWebView didEndFormControlInteraction]):
        (-[TestWKWebView evaluateJavaScriptAndWaitForInputSessionToChange:]):

        Add a helper to evaluate JavaScript and wait for this script to cause some change in the input session. This
        handles three cases: (1) changing focus from an element that doesn't require an input session to one that does,
        (2) changing focus between elements that require input sessions, and (3) changing focus from an input session
        that doesn't require an input session to one that doesn't.

2019-01-22  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style reports false-positive whitespace/init warning in C++ initialization parameters
        <https://webkit.org/b/193676>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        - Don't report missing whitespace around colon if the colon at
          the start of the line is formatted correctly.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):
        - Add a test for a missing permutation of existing tests.
        - Add a test this false-positive.
        - Add blank lines between subtests to make them easier to read.

2019-01-22  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Unit-test failure after r237113
        https://bugs.webkit.org/show_bug.cgi?id=193669

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/build.webkit.org-config/factories.py:
        (Factory.__init__): Properly check for --no-experimental-features flag when additionalArguments has 
        multiple or zero flags.

2019-01-22  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add test helper to execute bytecode-cache tests: it executes each test
        twice, the first with JSC_diskCachePath set to a temporary directory
        and second with JSC_forceDiskCache=true (in addition to the cache path)
        to guarantee that only the disk cache is being used and no new
        UnlinkedCodeBlocks are being created.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper.sh: Added.
        * Scripts/run-jsc-stress-tests:

2019-01-22  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        Allow tests to enable the CSSLogicalEnabled flag in WK1.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Allow CSS property definitions to have a 'runtime-flag' parameter which
        disables the property when the specified runtime flag is disabled.

2019-01-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK][WPE] libgcrypt-1.7.6 can't be compiled on Ubuntu 18.10
        https://bugs.webkit.org/show_bug.cgi?id=193643

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Bumped to libgcrypt-1.8.4.
        * wpe/jhbuild.modules: Ditto.

2019-01-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Take float top position into account when computing containing block height.
        https://bugs.webkit.org/show_bug.cgi?id=193655

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-21  David Kilzer  <ddkilzer@apple.com>

        Switch remaining VideoToolbox soft-linking in WebCore over to VideoToolboxSoftLink.{cpp,h}
        <https://webkit.org/b/193645>
        <rdar://problem/47421574>

        Reviewed by Alex Christensen.

        - Now checks for local soft-linking of all frameworks that have
          their own *SoftLinking.{cpp,h,mm} files.
        - Changes softlink/uikit warning to softlink/framework.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):

2019-01-20  Saam Barati  <sbarati@apple.com>

        Rollout r240210: It broke tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193640

        Unreviewed.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper:
        * Scripts/run-jsc-stress-tests:

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):

2019-01-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, add my new email address

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

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] <body>'s overflow property value is propagated to viewport
        https://bugs.webkit.org/show_bug.cgi?id=193617

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r240209.

        Broke GTK/WPE injected bundle

        Reverted changeset:

        "AX: Support returning relative frames for accessibility"
        https://bugs.webkit.org/show_bug.cgi?id=193414
        https://trac.webkit.org/changeset/240209

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * DumpRenderTree/mac/LayoutTestHelper.m: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * TestWebKitAPI/Configurations/Base.xcconfig: Removed -iframework options from OTHER_CFLAGS
          and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.

2019-01-20  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add test helper to execute bytecode-cache tests: it executes each test
        twice, the first with JSC_diskCachePath set to a temporary directory
        and second with JSC_forceDiskCache=true (in addition to the cache path)
        to guarantee that only the disk cache is being used and no new
        UnlinkedCodeBlocks are being created.

        * Scripts/jsc-stress-test-helpers/bytecode-cache-test-helper: Added.
        * Scripts/run-jsc-stress-tests:

2019-01-20  chris fleizach  <cfleizach@apple.com>

        AX: Support returning relative frames for accessibility
        https://bugs.webkit.org/show_bug.cgi?id=193414
        <rdar://problem/47268501>

        Reviewed by Zalan Bujtas.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::attributesOfElement):
        (WTR::AccessibilityUIElement::stringDescriptionOfAttributeValue):

2019-01-20  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        Unreviewed. Also enable Pointer Events for iosmac.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Ensure that floats in FloatingContext::m_floats are always horizontally ordered.
        https://bugs.webkit.org/show_bug.cgi?id=193613

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-19  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2019-01-18  Zhifei FANG  <zhifei_fang@apple.com>

        Disable the run-jsc-stress-test remote host key check [second round].
        https://bugs.webkit.org/show_bug.cgi?id=192988

        Reviewed by Dewei Zhu.

        * Scripts/run-jsc-stress-tests:

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] unit-test failure Builder GTK Linux 32-bit Release doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=193597

        Reviewed by Lucas Forschler.

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

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] api tests failures are incorrectly named as unit test failures
        https://bugs.webkit.org/show_bug.cgi?id=193595

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/factories.py: Renamed RunUnitTests to RunAPITests.
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Ditto.

2019-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Content blockers are sometimes lost on back navigation cross-site
        https://bugs.webkit.org/show_bug.cgi?id=193588
        <rdar://problem/47131566>

        Reviewed by Alex Christensen.

        Add layout test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        Add a check-webkit-style check that ensures all SDKVariant.xcconfig files match.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/SDKVariant.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/sdkvariant.py: Added.
        (SDKVariantChecker):
        (SDKVariantChecker.__init__):
        (SDKVariantChecker.check):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig: Added.
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig: Added.
        * WebKitLauncher/Configurations/SDKVariant.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig: Added.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig: Added.

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        Switch remaining UIKit soft-linking in WebCore, WebKitLegacy over to UIKitSoftLink.{cpp,h}
        <https://webkit.org/b/193568>
        <rdar://problem/47381130>

        Reviewed by Alex Christensen.

        Make sure no one re-introduces UIKit soft-linking by adding a
        style rule.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add softlink/uikit check.
        (CppChecker): Enable softlink/uikit check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest): Add test for softlink/uikit.

2019-01-18  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] install-dependencies tool looks for libunistring-dev for dnf
        https://bugs.webkit.org/show_bug.cgi?id=193584

        Change "-dev" to "-devel".

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add iPhone and iPad ports
        https://bugs.webkit.org/show_bug.cgi?id=193537
        <rdar://problem/47353390>

        Reviewed by Lucas Forschler.

        Add --iphone-simulator and --ipad-simulator commands to run-webkit-tests which separate iPhone and iPad into separate
        ports. Note that this separation is optional, the --ios-simulator command remains.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_test_division): Drive-by fix.
        (RunTest.test_device_type_specific_listing): Ditto.
        (RunTest.test_ipad_test_division):
        (RunTest):
        (RunTest.test_ipad_listing):
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add --iphone-simulator and --ipad-simulator flags.
        (PortFactory):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IPhoneSimulatorPort):
        (IPadSimulatorPort):

2019-01-18  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) Scroll position is not always restored properly when navigating back
        https://bugs.webkit.org/show_bug.cgi?id=193578
        <rdar://problem/47386331>

        Reviewed by Tim Horton.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-18  Youenn Fablet  <youenn@apple.com>

        Add a new SPI to request for cache storage quota increase
        https://bugs.webkit.org/show_bug.cgi?id=193323

        Reviewed by Alex Christensen.

        Implement WebsiteDataStore quota delegate to handle quota requests.
        By default, do not update quota.
        Update quota if test calls the new testRunner.allowCacheStorageQuotaIncrease method.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::allowCacheStorageQuotaIncrease):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::allowCacheStorageQuotaIncrease):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (-[CacheStorageQuotaManager init]):
        (-[CacheStorageQuotaManager _requestCacheStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        (WTR::TestController::allowCacheStorageQuotaIncrease):

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Pass owner to the triggered builds
        https://bugs.webkit.org/show_bug.cgi?id=193574

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.propertiesToPassToTriggers):

2019-01-18  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Send patch author as a build property
        https://bugs.webkit.org/show_bug.cgi?id=193560

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Don't boot a device if no tests are available to run on it.

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Use DEVICE_TYPE when running API tests.

2019-01-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=192162
        <rdar://problem/46345449>

        Rubber-stamped by Aakash Jain.

        This change uses device_type to select a different set of TestExpectation files based on the type of device running
        tests. This requires multiple baseline search paths to be used in a single instantiation of run-webkit-tests. Note
        that while multiple baseline search paths are used, any single test will only ever be run on a single device type.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_tests): Pass device_type through.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py:
        (LayoutTestFinderTests.test_touched_but_skipped_test): Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Make _expectations an OrderedDict indexed by device_type, add current_device_type.
        (Manager._collect_tests): Pass device type to test finder.
        (Manager._needs_web_platform_test):
        (Manager._prepare_lists): Index _expectations by device type.
        (Manager._test_input_for_file):
        (Manager._test_is_slow): Ditto.
        (Manager._test_should_dump_jsconsolelog_in_stderr):
        (Manager._test_should_dump_jsconsolelog_in_stderr): Ditto.
        (Manager._get_test_inputs):
        (Manager._update_worker_count):
        (Manager._set_up_run): Use current_device_type instead of passing device_type in.
        (Manager.run): Re-write function to gather and parse expectations from multiple baseline search paths. In the event
        that a test can be run on multiple device types, the first device in the device type list which is eligible will be
        the one which runs the test.
        (Manager._run_test_subset):
        (Manager._run_tests): Index _expectations by current_device_type.
        (Manager._print_expectation_line_for_test): Ditto.
        (Manager._print_expectations_for_subset): Ditto.
        (Manager.print_expectations): Re-write function to gather and parse expectations from multiple baseline search paths.
        Unlike run, this function will behave the same regardless of what devices are available.
        (Manager._custom_device_for_test): Deleted.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_uses_custom_device): Deleted.
        (ManagerTest.test_uses_custom_device.get_manager): Deleted.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Pass expectations as a dictionary indexed by device type.
        (JSONLayoutResultsGenerator._insert_failure_summaries): The number of fixable tests must take into consideration
        all of the expectations.
        * Scripts/webkitpy/layout_tests/lint_test_expectations_unittest.py:
        (FakePort.skipped_layout_tests): Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__): Allow device_type to be passed through.
        (TestExpectations.parse_all_expectations): Pick expectations_dict by device type.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Allow device_type to be passed in.
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results): Expectations are stored in a dictionary indexed by device_type. When determining the expectation
        a test ran with, one must check all expectations to find the first non-skip expectation.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_device_type_test_division):
        (RunTest):
        (RunTest.test_device_type_specific_listing):
        * Scripts/webkitpy/port/base.py:
        (Port): Add default values for DEVICE_TYPE and DEFAULT_DEVICE_TYPES.
        (Port.supported_device_types): The result of this function will change based on what devices are available.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort._device_type_with_version): Replace DEFAULT_DEVICE_TYPE with DEVICE_TYPE.
        (DevicePort.default_child_processes): DEVICE_TYPE is a general type, so the built-in comparison of the DeviceType object
        can be used.
        (DevicePort.supported_device_types): Generates a list of device types determined by the available devices, if there are
        any, or the DEFAULT_DEVICE_TYPES of the port.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Change DEFAULT_DEVICE_TYPE to DEVICE_TYPE.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Set the DEFAULT_DEVICE_TYPES to the devices currently used to run layout tests.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort): Change DEFAULT_DEVICE_TYPE to DEVICE_TYPE.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort): Set the DEFAULT_DEVICE_TYPES to the device currently used to run layout tests.
        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType):
        (DeviceType.__hash__): Allow DeviceType to be used as a dictionary index.

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] run-qt-wpe-minibrowser needlessly expects a --wpe argument
        https://bugs.webkit.org/show_bug.cgi?id=193575

        Reviewed by Michael Catanzaro.

        Allow the script to run without explicit port argument because
        it's specific to the WPE port anyway.

        * Scripts/run-qt-wpe-minibrowser: Manually insert --wpe in argv
        and simplify the rest of the code accordingly.

2019-01-18  Charlie Turner  <cturner@igalia.com>

        [GStreamer][EME][ClearKey] Request keys from CDMInstance rather than passing via bus messages
        https://bugs.webkit.org/show_bug.cgi?id=192229

        Reviewed by Xabier Rodriguez-Calvar.

        * MiniBrowser/wpe/main.cpp:
        (main): Enable encrypted-media by default.

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Missing KeyboardInterrupt exception handler
        https://bugs.webkit.org/show_bug.cgi?id=193570

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.run_in_sandbox): Basic KeyboardInterrupt handling.

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Collapsing through should not ignore floats.
        https://bugs.webkit.org/show_bug.cgi?id=193564

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not skip float boxes that are not part of the current formatting context when computing bottom.
        https://bugs.webkit.org/show_bug.cgi?id=193562

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Check for inflow children while computing height for block formatting context roots.
        https://bugs.webkit.org/show_bug.cgi?id=193555

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-18  Philippe Normand  <pnormand@igalia.com>

        [WPE] Add Qt extension
        https://bugs.webkit.org/show_bug.cgi?id=191464

        Reviewed by Carlos Garcia Campos.

        MiniBrowser and API tests for the WPE Qt API. To run the
        MiniBrowser a new script is introduced. Example invocation:

        $ run-qt-wpe-minibrowser -platform wayland https://webkit.org

        Also note-worthy is the introduction of the python2-subprocess32
        dependency to run the GLib API tests.

        * MiniBrowser/wpe/CMakeLists.txt:
        * MiniBrowser/wpe/qt/CMakeLists.txt: Added.
        * MiniBrowser/wpe/qt/main.cpp: Added.
        (main):
        * MiniBrowser/wpe/qt/main.qml: Added.
        * MiniBrowser/wpe/qt/qml.qrc: Added.
        * Scripts/run-gtk-tests:
        (GtkTestRunner.is_google_test):
        (GtkTestRunner):
        (GtkTestRunner.is_qt_test):
        * Scripts/run-qt-wpe-minibrowser: Added.
        * Scripts/run-wpe-tests:
        (WPETestRunner):
        (WPETestRunner.is_google_test):
        (WPETestRunner.is_qt_test):
        * TestWebKitAPI/Tests/WPEQt/TestLoad.cpp: Added.
        (TestLoad::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadHtml.cpp: Added.
        (TestLoadHtml::main):
        * TestWebKitAPI/Tests/WPEQt/TestLoadRequest.cpp: Added.
        (TestLoadRequest::main):
        * TestWebKitAPI/Tests/WPEQt/TestRunJavaScript.cpp: Added.
        (TestRunJavaScript::main):
        * TestWebKitAPI/Tests/WPEQt/WPEQtTest.cpp: Added.
        (waitForSignal):
        * TestWebKitAPI/Tests/WPEQt/WPEQtTest.h: Added.
        (LoadSpy::LoadSpy):
        (LoadSpy::~LoadSpy):
        (LoadSpy::onLoadingChanged):
        (LoadStartedCatcher::LoadStartedCatcher):
        (LoadStartedCatcher::~LoadStartedCatcher):
        (LoadStartedCatcher::onLoadingChanged):
        (waitForLoadSucceeded):
        (waitForLoadFailed):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        * flatpak/org.webkit.CommonModules.yaml:
        * flatpak/org.webkit.WPE.yaml:
        * flatpak/org.webkit.WPEModules.yaml:
        * flatpak/org.webkit.WPEQT.yaml: Copied from Tools/flatpak/org.webkit.WebKit.yaml.
        * flatpak/org.webkit.WebKit.yaml:
        * glib/api_test_runner.py:
        (TestRunner._run_test_qt):
        (TestRunner.is_qt_test):
        (TestRunner._run_test):

2019-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Content offset jumps erratically when autoscrolling near scroll view content inset areas
        https://bugs.webkit.org/show_bug.cgi?id=193494
        <rdar://problem/46859627>

        Reviewed by Simon Fraser and Tim Horton.

        Add a new test option to add a top content inset to the test runner's WKWebView's scroll view, and automatically
        scroll to reveal this top content inset area when beginning the test (i.e., scroll to (0, -topContentInset)).

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

        Also add new UIScriptController methods to ask for the content offset of the platform scroll view.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::contentOffsetX const):
        (WTR::UIScriptController::contentOffsetY const):

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Alex Christensen  <achristensen@webkit.org>

        Fix string concatenation API test after r239920
        https://bugs.webkit.org/show_bug.cgi?id=193551
        <rdar://problem/47359304>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp:
        (TestWebKitAPI::TEST):
        Cocoa platforms' interpretation of UChar/unsigned short equality is not affected by ICU's recent change of UChar's type
        in WebKit's build configuration like it apparently is on Linux.

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] validate-patch should handle the case when bug_id is None
        https://bugs.webkit.org/show_bug.cgi?id=193547

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed): Gracefully handle the case when bug_id is None.
        (ValidatePatch.start): If bug_id is set as None in build properties, fetch it from the patch.

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add patch author information in build
        https://bugs.webkit.org/show_bug.cgi?id=193465

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_patch_obsolete):

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Pass bug_id to the triggered builds
        https://bugs.webkit.org/show_bug.cgi?id=193548

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (BuildFactory.propertiesToPassToTriggers):

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        Add a check-webkit-style check that ensures all SDKVariant.xcconfig files match.

        * ContentExtensionTester/Configurations/Base.xcconfig:
        * ContentExtensionTester/Configurations/SDKVariant.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/SDKVariant.xcconfig: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig:
        * ImageDiff/cg/Configurations/SDKVariant.xcconfig: Added.
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/Configurations/SDKVariant.xcconfig: Added.
        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/sdkvariant.py: Added.
        (SDKVariantChecker):
        (SDKVariantChecker.__init__):
        (SDKVariantChecker.check):
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/SDKVariant.xcconfig: Added.
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/SDKVariant.xcconfig: Added.
        * WebKitLauncher/Configurations/SDKVariant.xcconfig: Added.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/SDKVariant.xcconfig: Added.
        * lldb/lldbWebKitTester/Configurations/Base.xcconfig:
        * lldb/lldbWebKitTester/Configurations/SDKVariant.xcconfig: Added.

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] An element with transform is a containing block for positioned descendants.
        https://bugs.webkit.org/show_bug.cgi?id=193534

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Quirk] Take body padding and border into account when stretching height.
        https://bugs.webkit.org/show_bug.cgi?id=193528

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] For height computation, the bottom edge of the last line box value should include top border/padding
        https://bugs.webkit.org/show_bug.cgi?id=193520

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-17  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] unapply-patch step should not update source
        https://bugs.webkit.org/show_bug.cgi?id=193234

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CleanWorkingDirectory): Use clean-webkit script to clean the working directory.
        (UnApplyPatchIfRequired): Use CleanWorkingDirectory as base class.

2019-01-16  Youenn Fablet  <youenn@apple.com>

        Add a new SPI for controlling getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=192793

        Reviewed by Eric Carlson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForFrame:devices:decisionHandler:]):
        (-[WK2BrowserWindowController _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm:
        (-[NavigationWhileGetUserMediaPromptDisplayedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (-[MediaStreamTrackDetachedUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm:
        (-[SimulateFailedSandboxUIDelegate _webView:requestMediaCaptureAuthorizationForFrame:devices:decisionHandler:]):
        (-[SimulateFailedSandboxUIDelegate _webView:isMediaCaptureAuthorizedForFrame:decisionHandler:]):

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Inflow non-replaced used width should not be negative.
        https://bugs.webkit.org/show_bug.cgi?id=193495

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-16  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Set used vertical margin values when top/height/bottom are non-auto.
        https://bugs.webkit.org/show_bug.cgi?id=193470

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust margin box verification.
        https://bugs.webkit.org/show_bug.cgi?id=193482

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-15  Sihui Liu  <sihui_liu@apple.com>

        Fix API test WebKit.WebsiteDataStoreCustomPathsWithoutPrewarming after 193354
        https://bugs.webkit.org/show_bug.cgi?id=193451

        Reviewed by Geoffrey Garen.

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

2019-01-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support boolean simctl isAvailable
        https://bugs.webkit.org/show_bug.cgi?id=193472
        <rdar://problem/47296150>

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_runtimes):
        (SimulatedDeviceManager._create_device_with_runtime):

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r239993, r239995, r239997, and
        r239999.

        Caused assertions under
        ViewGestureController::disconnectFromProcess()

        Reverted changesets:

        "Regression(PSON) View becomes blank after click a cross-site
        download link"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239993

        "Unreviewed iOS build fix after r239993."
        https://trac.webkit.org/changeset/239995

        "Fix iOS build after r239993"
        https://bugs.webkit.org/show_bug.cgi?id=193361
        https://trac.webkit.org/changeset/239997

        "Unreviewed, revert part of r239997 as it is not needed to fix
        the build."
        https://trac.webkit.org/changeset/239999

2019-01-15  Tim Horton  <timothy_horton@apple.com>

        Cannot tab out of WKWebView on macOS
        https://bugs.webkit.org/show_bug.cgi?id=161448
        <rdar://problem/28100085>

        Reviewed by Dean Jackson.

        Add a test that tabbing into and out of WKWebView works correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTest::SetUp):
        (-[CommandBackForwardOffscreenWindow isKeyWindow]): Deleted.
        (-[CommandBackForwardOffscreenWindow isVisible]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/TabOutOfWebView.mm: Added.
        (-[FocusableView canBecomeKeyView]):
        (TEST):
        * TestWebKitAPI/mac/OffscreenWindow.h: Added.
        * TestWebKitAPI/mac/OffscreenWindow.mm: Added.
        (-[OffscreenWindow initWithSize:]):
        (-[OffscreenWindow isKeyWindow]):
        (-[OffscreenWindow isVisible]):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::initialize):
        (-[ActiveOffscreenWindow isKeyWindow]): Deleted.
        (-[ActiveOffscreenWindow isVisible]): Deleted.
        Factor ActiveOffscreenWindow out into OffscreenWindow and share it.

2019-01-15  Ryan Haddad  <ryanhaddad@apple.com>

        Adjust the arguments passed to run-javascriptcore-tests for the 32-bit JSC bot
        https://bugs.webkit.org/show_bug.cgi?id=193459

        Reviewed by Mark Lam.

        * BuildSlaveSupport/build.webkit.org-config/steps.py:
        (Run32bitJSCTests): This queue should not run JIT, testair, testb3, or testmasm.

2019-01-15  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) View becomes blank after click a cross-site download link
        https://bugs.webkit.org/show_bug.cgi?id=193361
        <rdar://problem/47099573>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC][Out-of-flow] Ignore bottom when the vertical values are over-constrained
        https://bugs.webkit.org/show_bug.cgi?id=193448

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Implement device type specific expected results (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=192162

        Reviewed by Lucas Forschler.

        Device type specific expected results covers two related ideas. The first (covered by this change)
        is where to search for -expected.* files. The second is which tests to run based on the
        TestExpectations.txt file.

        After this change, the baseline search path will be determined by the type of device running a
        test. Device type will be passed into any function which picks a file based on the baseline search
        path.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._update_test_input): Pass device_type to self._port.reference_files(...).
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Print baseline search path for each round of devices.
        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner.__init__): Pass device_type into expected_*(...).
        (SingleTestRunner._expected_driver_output): Ditto.
        (SingleTestRunner._driver_input): Ditto.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config): Move printing of baseline search path to a separate function.
        (Printer.print_baseline_search_path): Moved from Printer.print_config.
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):
        (Testprinter.test_print_baseline_search_path):
        * Scripts/webkitpy/port/base.py:
        (Port.baseline_search_path): Pass device_type through.
        (Port._expected_baselines_for_suffixes): Ditto.
        (Port.expected_baselines): Ditto.
        (Port.expected_filename): Ditto.
        (Port.expected_checksum): Ditto.
        (Port.expected_image): Ditto.
        (Port.expected_audio): Ditto.
        (Port.expected_text): Ditto.
        (Port.reference_files): Ditto.
        (Port.tests): Ditto.
        (Port._expanded_paths): Ditto.
        (Port.skipped_layout_tests): Ditto.
        (Port.expectations_dict): Ditto.
        (Port._port_specific_expectations_files): Ditto.
        (Port.expectations_files): Ditto.
        (Port.test_search_path): Ditto.
        (Port._tests_for_other_platforms): Ditto.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_additional_platform_directory): Accept, but do not use, device_type.
        (PortTest.test_nonexistant_expectations): Ditto.
        (test_ref_tests_platform_directory): Ditto.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._port_specific_expectations_files): Accept device_type.
        * Scripts/webkitpy/port/driver.py:
        (DriverProxy):
        (DriverProxy.host): Expose _target_host for device_type information.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._port_specific_expectations_files): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort. default_baseline_search_path): Remove memoized, since it does not accept **kwargs.
        * Scripts/webkitpy/port/mac.py:
        (MacPort. default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/port_testcase.py:
        (TestWebKitPort._tests_for_other_platforms): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch.py:
        (WatchPort. default_baseline_search_path): Remove memoized, since it does not accept **kwargs.
        * Scripts/webkitpy/port/win.py:
        (WinPort.test_search_path): Accept, but do not use, device_type.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._port_specific_expectations_files): Ditto.
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines.AllPlatformsPort.baseline_search_path): Ditto.

2019-01-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Use the containing block's padding box to position out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=193431

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-14  Tim Horton  <timothy_horton@apple.com>

        Move a test implementation file that got misplaced in the Xcode project

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2019-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239901, r239909, r239910, r239912,
        r239913, and r239914.
        https://bugs.webkit.org/show_bug.cgi?id=193407

        These revisions caused an internal failure (Requested by
        Truitt on #webkit).

        Reverted changesets:

        "[Cocoa] Avoid importing directly from subumbrella frameworks"
        https://bugs.webkit.org/show_bug.cgi?id=186016
        https://trac.webkit.org/changeset/239901

        "Tried to fix USE(APPLE_INTERNAL_SDK) builds after r239901."
        https://trac.webkit.org/changeset/239909

        "Tried to fix the build."
        https://trac.webkit.org/changeset/239910

        "Fixed iOS builds after r239910."
        https://trac.webkit.org/changeset/239912

        "More build fixing."
        https://trac.webkit.org/changeset/239913

        "Tried to fix USE(APPLE_INTERNAL_SDK) 32-bit builds."
        https://trac.webkit.org/changeset/239914

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Re-enable ability to build --cloop builds.
        https://bugs.webkit.org/show_bug.cgi?id=192955
        <rdar://problem/46882363>

        Reviewed by Saam barati and Keith Miller.

        The --cloop build option was being ignored this whole time since r236381.
        This patch makes it possible to build CLoop builds again.

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

2019-01-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Expose device_type from host-like objects
        https://bugs.webkit.org/show_bug.cgi?id=193406
        <rdar://problem/47262305>

        Reviewed by Lucas Forschler.

        Devices should expose device_type. As a result, all host objects should
        provide a device_type property, even if they do not yet define a device_type.

        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost):
        (SystemHost.device_type):
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost):
        (MockSystemHost.device_type):
        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.device_type):
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._find_exisiting_device_for_request):
        (SimulatedDeviceManager._disambiguate_device_type):
        (SimulatedDeviceManager._does_fulfill_request):
        (SimulatedDeviceManager.device_count_for_type):
        (SimulatedDeviceManager.initialize_devices):
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_available_devices):
        (test_swapping_devices):

2019-01-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support alternate simctl device list output (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=193362
        <rdar://problem/47122965>

        Rubber-stamped by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):

2019-01-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Expose SPI to access the current sentence boundary and selection state
        https://bugs.webkit.org/show_bug.cgi?id=193398
        <rdar://problem/45893108>

        Reviewed by Dean Jackson.

        Add an API test to verify that an SPI client can observe changes in the `@"_selectionAttributes"` key path on
        WKWebView, and that inserting text, deleting, and changing the selection cause selection attributes to change as
        expected.

        * TestWebKitAPI/EditingTestHarness.h:
        * TestWebKitAPI/EditingTestHarness.mm:
        (-[EditingTestHarness moveBackward]):
        (-[EditingTestHarness moveForward]):
        (-[EditingTestHarness moveForwardAndExpectEditorStateWith:]):

        Add a couple of new helper methods on EditingTestHarness.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (-[SelectionChangeObserver initWithWebView:]):
        (-[SelectionChangeObserver webView]):
        (-[SelectionChangeObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[SelectionChangeObserver currentSelectionAttributes]):

2019-01-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add basic box-sizing support.
        https://bugs.webkit.org/show_bug.cgi?id=193392

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [WPE] API test gardening
        https://bugs.webkit.org/show_bug.cgi?id=193319

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/glib/TestExpectations.json: Remove some now
        passing tests.

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Add sharedBuffer utility to GstMappedBuffer, and a testsuite
        https://bugs.webkit.org/show_bug.cgi?id=192977

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/PlatformGTK.cmake: Build the new GStreamer test harness
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.
        * TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp: Added.
        (TestWebKitAPI::GStreamerTest::SetUp):
        (TestWebKitAPI::GStreamerTest::TearDown):
        * TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.h: Added.
        * TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp: Added.
        (TestWebKitAPI::TEST_F):

2019-01-14  Charlie Turner  <cturner@igalia.com>

        [WPE] Workaround for incorrect template specialization being selected when UChar=char16_t
        https://bugs.webkit.org/show_bug.cgi?id=193332

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WTF/StringConcatenate.cpp: When UChar is
        defined as a char16_t, which changed in ICU 59, the
        StringTypeAdapter<UnsignedInt, ...> overload catches casts to
        unsigned short. This test is relying on the behaviour that
        UChar=unsigned short, which doesn't hold across platforms and ICU
        library versions. The full fix would be a special syntax for
        literal characters so that these ambiguities do not arise. That
        work is proposed in https://bugs.webkit.org/show_bug.cgi?id=193101.
        (TestWebKitAPI::TEST):

2019-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GTK][WPE] Run distcheck with gtkdoc and MiniBrowser enabled

        * Scripts/make-dist:
        (Distcheck.configure):

2019-01-13  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193365
        <rdar://problem/47221073>

        Unreviewed, renamed mac-high-sierra to mac-highsierra to match with build.webkit.org configuration.

        * BuildSlaveSupport/ews-build/config.json:

2019-01-13  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust assert for statically positioned fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=193385

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-13  Philippe Normand  <pnormand@igalia.com>

        [WPE][MiniBrowser] Ephemeral WebContext leaks in automation mode
        https://bugs.webkit.org/show_bug.cgi?id=193387

        Reviewed by Carlos Garcia Campos.

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

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions.
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm:

2019-01-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016
        <rdar://problem/40591038>

        Reviewed by Sam Weinig.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * DumpRenderTree/mac/LayoutTestHelper.m: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * TestWebKitAPI/Configurations/Base.xcconfig: Removed -iframework options from OTHER_CFLAGS
          and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: Removed -iframework options from
          OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS.
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Include CoreServices.h instead of a
          LaunchServices header.

2019-01-11  John Wilander  <wilander@apple.com>

        Compile out Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=193370
        <rdar://problem/45388584>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
            Defined ENABLE_WEB_API_STATISTICS, off by default.

2019-01-11  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add Tools/gtkdoc to manifest.txt.in files.
        This should have been done in r238853 and caused failure in building WebKitGTK+ unstable release 2.23.2.

        * gtk/manifest.txt.in: Add Tools/gtkdoc directory.
        * wpe/manifest.txt.in: Add Tools/gtkdoc directory and uncomment lines to move documentation artifacts.

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Precision drop state thrashes when dragging near the top edge of an editable element
        https://bugs.webkit.org/show_bug.cgi?id=193364
        <rdar://problem/47214117>

        Reviewed by Tim Horton.

        Add a test to verify that dragging near the top of a textarea element does not flag the drop proposal as
        precise, whereas dragging near the middle of the textarea does.

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

2019-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support alternate simctl device list output
        https://bugs.webkit.org/show_bug.cgi?id=193362
        <rdar://problem/47122965>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.populate_available_devices):

2019-01-11  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193365

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/config.json:

2019-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Incorporate device type into baseline search path
        https://bugs.webkit.org/show_bug.cgi?id=193356
        <rdar://problem/47215515>

        Reviewed by Lucas Forschler.

        We need a way to include device type in the baseline search path for iOS to support device specific test expectations.

        * Scripts/webkitpy/port/base.py:
        (Port.default_baseline_search_path): Allow device type to be passed in.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.default_baseline_search_path): Ignore device type.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Optionally allow device type to be incorporated into the baseline search path.
        (IOSPort.test_expectations_file_position): Update index for the additional device-type specific baseline search path.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Ignore device type.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort.default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort.default_baseline_search_path): Ditto.
        (WinCairoPort.default_baseline_search_path): Ditto.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.default_baseline_search_path): Ditto.

2019-01-11  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Print abbreviated baseline search path that includes only folders that exist
        https://bugs.webkit.org/show_bug.cgi?id=193352
        <rdar://problem/47210736>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_config): Print list on only baseline search paths which exist. 
        * Scripts/webkitpy/layout_tests/views/printing_unittest.py:
        (Testprinter.test_print_config):

2019-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup possible WK*Copy/Create leaks in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=193340

        Reviewed by David Kilzer.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        Pull the strings out into a WKRetainPtr.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::closeWebNotification):
        Adopt the created value into the WKRetainPtr.

        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::generateWhitelist):
        Immediately adopt a created value to avoid potential mistakes.

2019-01-11  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Run again JIT-tests
        on ARM by default.

        * Scripts/run-jsc-stress-tests:

2019-01-11  Timothy Hatcher  <timothy@apple.com>

        Unreviewed, fix #ifdef in API test added in r239851.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm:

2019-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce IDL files for runtime-enabled UndoManager and UndoItem JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=193109
        <rdar://problem/44807048>

        Reviewed by Ryosuke Niwa.

        Introduce and respect a test option to enable the UndoManager API.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2019-01-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Adjust vertical position when box margin collapses through.
        https://bugs.webkit.org/show_bug.cgi?id=193346

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix typo that breaks dashboard link.

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

2019-01-10  Ryan Haddad  <ryanhaddad@apple.com>

        Update macOS queue configurations
        https://bugs.webkit.org/show_bug.cgi?id=193329

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * 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/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.macos-sierra img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        MiniBrowser should be able to navigate to about:blank
        https://bugs.webkit.org/show_bug.cgi?id=193345

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController addProtocolIfNecessary:]):
        Don't prepend "http://" to "about:" prefixed URLs like "about:blank".

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController fetch:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        Clean up the code that uses this to match style.

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Remove MiniBrowser custom "Process Swap" menu item which does not work
        https://bugs.webkit.org/show_bug.cgi?id=193344

        Reviewed by Simon Fraser.

        There is a menu item under the Experimental menu that does work.

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

2019-01-10  Timothy Hatcher  <timothy@apple.com>

        Add WKBundlePage SPI to temporarily force light or dark appearance on a page.
        https://bugs.webkit.org/show_bug.cgi?id=193327
        rdar://problem/47093222

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm: Added.
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm: Added.
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::ForceLightAppearanceInBundleTest):
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didCreatePage):
        (TestWebKitAPI::ForceLightAppearanceInBundleTest::didReceiveMessage):
        * TestWebKitAPI/Tests/WebKit/mac/dark-mode.html: Added.

2019-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Leak of WKWebProcessPlugInHitTestResult (160 bytes) in com.apple.WebKit.WebContent running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=193338
        <rdar://problem/46664774>

        Reviewed by David Kilzer.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction):

2019-01-10  Commit Queue  <commit-queue@webkit.org>

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

        Broke tests on armv7/linux bots (Requested by guijemont on
        #webkit).

        Reverted changeset:

        "Enable DFG on ARM/Linux again"
        https://bugs.webkit.org/show_bug.cgi?id=192496
        https://trac.webkit.org/changeset/239825

2019-01-10  Zhifei Fang  <zhifei_fang@apple.com>

        Disable the run-jsc-stress-test remote host key check.
        https://bugs.webkit.org/show_bug.cgi?id=192988

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-jsc-stress-tests:

2019-01-10  John Wilander  <wilander@apple.com>

        Override the session configuration for cookieAcceptPolicy
        https://bugs.webkit.org/show_bug.cgi?id=190925
        <rdar://problem/45497382>

        Reviewed by Alexey Proskuryakov and Alex Christensen.

        Test infrastructure for setting a first-party-only cookie policy.

        * DumpRenderTree/TestRunner.cpp:
        (setOnlyAcceptFirstPartyCookiesCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setOnlyAcceptFirstPartyCookies):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setOnlyAcceptFirstPartyCookies):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setOnlyAcceptFirstPartyCookies):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2019-01-09  Matt Rajca  <mrajca@apple.com>

        Put per-document autoplay behavior behind runtime website policies quirk instead of a compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=193301

        Reviewed by Jer Noble.
        
        Added API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/autoplaying-multiple-media-elements.html: Added.

2019-01-10  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Take collapsed through siblings into account when computing vertical position
        https://bugs.webkit.org/show_bug.cgi?id=193310

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-10  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Run again JIT-tests
        on ARM by default.

        * Scripts/run-jsc-stress-tests:

2019-01-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][MiniBrowser] wchar_t strings shouldn't be treated as BSTR
        https://bugs.webkit.org/show_bug.cgi?id=193271

        Reviewed by Brent Fulgham.

        BSTR is a special data structure created by SysAllocString, not a
        wchar_t null-terminated string.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setDatabaseQuota): Use L"" instead of "" for _bstr_t.
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        (MiniBrowserWebHost::didFinishLoadForFrame): Use _bstr_t to create
        BSTR from wide string literals.

2019-01-09  Alexey Proskuryakov  <ap@apple.com>

        Tweak wording for build/version_check style checker error
        https://bugs.webkit.org/show_bug.cgi?id=193256

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add link to bug along with bug title
        https://bugs.webkit.org/show_bug.cgi?id=193293

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_bug_closed): Fetch bug title from Bugzilla and add it to the build.
        (ConfigureBuild.add_bug_id_url): Deleted.
        (ConfigureBuild.getBugURL): Deleted.

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use https for ews-build server
        https://bugs.webkit.org/show_bug.cgi?id=193193

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Parse and display number of style failures
        https://bugs.webkit.org/show_bug.cgi?id=193280

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckStyle): Use TestWithFailureCount as base class.
        (CheckStyle.countFailures): Count the number of style failures.

2019-01-09  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] use patch_id instead of ewspatchid
        https://bugs.webkit.org/show_bug.cgi?id=193235

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py: Replaced ewspatchid with patch_id.
        * BuildSlaveSupport/ews-build/steps.py: Ditto.
        * BuildSlaveSupport/ews-build/steps_unittest.py: Ditto.

2019-01-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][MarginCollapsing] Add support for peculiar cases.
        https://bugs.webkit.org/show_bug.cgi?id=192625

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2019-01-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Purge use of g_assert() under TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=192841

        Reviewed by Carlos Garcia Campos.

        There are separate g_assert_*() macros for use in tests, which we use inconsistently
        currently. Use them always. We'll get nicer error messages now when tests fail, and the
        assertions will now run during tests even if G_DISABLE_ASSERT is used when building.

        Note that the documentation of g_assert() says that it is not to be used when writing tests.

        * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/EditorTest.cpp:
        (WebKitWebEditorTest::testSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        (WebKitFrameTest::testMainFrame):
        (WebKitFrameTest::testURI):
        (WebKitFrameTest::testJavaScriptContext):
        (WebKitFrameTest::testJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationRequest):
        (testWebViewAuthenticationLoadCancelled):
        (testWebViewAuthenticationFailure):
        (testWebViewAuthenticationStorage):
        (ProxyAuthenticationTest::ProxyAuthenticationTest):
        (testWebViewAuthenticationProxy):
        (testWebViewAuthenticationProxyHTTPS):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (testBackForwardListNavigation):
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
        (ConsoleMessageTest::consoleMessageReceivedCallback):
        (testWebKitConsoleMessageConsoleAPI):
        (testWebKitConsoleMessageJavaScriptException):
        (testWebKitConsoleMessageNetworkError):
        (testWebKitConsoleMessageSecurityError):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerAcceptPolicy):
        (testCookieManagerCookiesChanged):
        (testCookieManagerPersistentStorage):
        (testCookieManagerPersistentStorageDeleteAll):
        (testCookieManagerEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/TestDOMElement.cpp:
        (testWebKitDOMElementAutoFill):
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (downloadLocalFileSuccessfully):
        (createFileAtDestination):
        (testDownloadOverwriteDestinationDisallowed):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testWebViewDownloadURI):
        (testPolicyResponseDownload):
        (testPolicyResponseDownloadCancel):
        (testDownloadMIMEType):
        (contextMenuCallback):
        (testContextMenuDownloadActions):
        (testBlobDownload):
        * TestWebKitAPI/Tests/WebKitGLib/TestEditor.cpp:
        (testWebKitWebEditorSelectionChanged):
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        (testWebKitFrameMainFrame):
        (testWebKitFrameURI):
        (testWebKitFrameJavaScriptContext):
        (testWebKitFrameJavaScriptValues):
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        (LoadStopTrackingTest::loadFailed):
        (testWebViewTitle):
        (testURIRequestHTTPHeaders):
        (testURIRequestHTTPMethod):
        (testURIResponseHTTPHeaders):
        (testRedirectToDataURI):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (testProcessPerWebView):
        (testWebProcessLimit):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebViewResources):
        (testWebResourceLoading):
        (testWebResourceSuggestedFilename):
        (testWebResourceGetData):
        (testWebResourceGetDataError):
        (testWebViewResourcesHistoryCache):
        (testWebResourceSendRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL):
        (testInsecureContent):
        (testTLSErrorsPolicy):
        (testTLSErrorsRedirect):
        (testTLSErrorsHTTPAuth):
        (testLoadFailedWithTLSErrors):
        (testSubresourceLoadFailedWithTLSErrors):
        (httpsServerCallback):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):
        (testWebViewJavaScriptDialogs):
        (testWebViewWindowProperties):
        (testWebViewMouseTarget):
        (testWebViewFileChooserRequest):
        (testWebViewColorChooserRequest):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (testDocumentLoadedSignal):
        (testWebKitWebViewProcessCrashed):
        (testWebExtensionWindowObjectCleared):
        (testWebExtensionIsolatedWorld):
        (permissionRequestCallback):
        (didAssociateFormControlsCallback):
        (testWebExtensionFormControlsAssociated):
        (FormSubmissionTest::FormSubmissionTest):
        (FormSubmissionTest::testFormSubmissionResult):
        (testWebExtensionFormSubmissionSteps):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized):
        (testClearDatabase):
        (testPrivateBrowsing):
        (testGetFavicon):
        (testWebViewFavicon):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp:
        (testFindControllerTextFound):
        (testFindControllerTextNotFound):
        (testFindControllerMatchCount):
        (testFindControllerMaxMatchCount):
        (testFindControllerNext):
        (testFindControllerPrevious):
        (testFindControllerCountedMatches):
        (testFindControllerOptions):
        (testFindControllerHide):
        (testFindControllerInstance):
        (testFindControllerGetters):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
        (testNavigationPolicy):
        (testResponsePolicy):
        (testNewWindowPolicy):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp:
        (testSecurityOriginBasicConstructor):
        (testSecurityOriginURIConstructor):
        (testSecurityOriginDefaultPort):
        (testSecurityOriginFileURI):
        (testOpaqueSecurityOrigin):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (testWebKitSettingsNewWithSettings):
        (testWebKitSettingsUserAgent):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testWebViewNewWithUserContentManager):
        (isStyleSheetInjectedForURLAtPath):
        (isScriptInjectedForURLAtPath):
        (testUserContentManagerInjectedStyleSheet):
        (testUserContentManagerInjectedScript):
        (UserScriptMessageTest::scriptMessageReceived):
        (UserScriptMessageTest::waitUntilMessageReceived):
        (UserScriptMessageTest::runJavaScriptFinished):
        (testUserContentManagerScriptMessageReceived):
        (testUserContentManagerScriptMessageInWorldReceived):
        (testUserContentManagerScriptMessageFromDOMBindings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextDefault):
        (testWebContextEphemeral):
        (testWebContextGetPlugins):
        (testWebContextURIScheme):
        (testWebContextSpellChecker):
        (testWebContextLanguages):
        (consoleMessageReceivedCallback):
        (testWebContextSecurityFileXHR):
        (ProxyTest::ProxyTest):
        (testWebContextProxySettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (testWebViewWebBackend):
        (testWebViewEphemeral):
        (testWebViewCustomCharset):
        (testWebViewSettings):
        (testWebViewRunJavaScript):
        (testWebViewCanShowMIMEType):
        (testWebViewSubmitForm):
        (testWebViewSave):
        (testWebViewPageVisibility):
        (testWebViewSnapshot):
        (testWebViewNotification):
        (testWebViewNotificationInitialPermissionAllowed):
        (testWebViewNotificationInitialPermissionDisallowed):
        (testWebViewIsPlayingAudio):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (WebsiteDataTest::WebsiteDataTest):
        (WebsiteDataTest::remove):
        (WebsiteDataTest::clear):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataCache):
        (testWebsiteDataStorage):
        (testWebsiteDataDatabases):
        (testWebsiteDataAppcache):
        (testWebsiteDataCookies):
        (testWebsiteDataDeviceIdHashSalt):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (emitDocumentLoaded):
        (emitURIChanged):
        (sendRequestCallback):
        (contextMenuCallback):
        (consoleMessageSentCallback):
        (emitFormControlsAssociated):
        (formControlsAssociatedCallback):
        (emitFormSubmissionEvent):
        (willSubmitFormCallback):
        (windowObjectCleared):
        (methodCallCallback):
        (registerGResource):
        (webkit_web_extension_initialize_with_user_data):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp:
        (checkLeaks):
        (WebProcessTest::create):
        (runTest):
        * TestWebKitAPI/Tests/WebKitGtk/AutocleanupsTest.cpp:
        (AutocleanupsTest::testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/DOMClientRectTest.cpp:
        (WebKitDOMClientRectTest::testDivBoundingClientRectPosition):
        (WebKitDOMClientRectTest::testDivClientRectsPositionAndLength):
        * TestWebKitAPI/Tests/WebKitGtk/DOMDOMWindowTest.cpp:
        (WebKitDOMDOMWindowTest::testSignals):
        (WebKitDOMDOMWindowTest::testDispatchEvent):
        (WebKitDOMDOMWindowTest::testGetComputedStyle):
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeFilterTest.cpp:
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        * TestWebKitAPI/Tests/WebKitGtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testHierarchyNavigation):
        (WebKitDOMNodeTest::testInsertion):
        (WebKitDOMNodeTest::testTagNamesNodeList):
        (WebKitDOMNodeTest::testTagNamesHTMLCollection):
        (WebKitDOMNodeTest::testDOMCache):
        * TestWebKitAPI/Tests/WebKitGtk/DOMXPathNSResolverTest.cpp:
        (WebKitDOMXPathNSResolverTest::evaluateFooChildTextAndCheckResult):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverNative):
        (WebKitDOMXPathNSResolverTest::testXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKitGtk/TestAutocleanups.cpp:
        (testUIProcessAutocleanups):
        (testWebProcessAutocleanups):
        * TestWebKitAPI/Tests/WebKitGtk/TestContextMenu.cpp:
        (testContextMenuPopulateMenu):
        (testContextMenuDismissed):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMClientRect.cpp:
        (testWebKitDOMClientRectDivBoundingClientRectPosition):
        (testWebKitDOMClientRectDivClientRectsPositionAndLength):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMDOMWindow.cpp:
        (testWebKitDOMDOMWindowSignals):
        (testWebKitDOMDOMWindowDispatchEvent):
        (testWebKitDOMDOMWindowGetComputedStyle):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNode.cpp:
        (testWebKitDOMNodeHierarchyNavigation):
        (testWebKitDOMNodeInsertion):
        (testWebKitDOMNodeTagNamesNodeList):
        (testWebKitDOMNodeTagNamesHTMLCollection):
        (testWebKitDOMObjectCache):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMNodeFilter.cpp:
        (testWebKitDOMNodeFilterTreeWalker):
        (testWebKitDOMNodeFilterNodeIterator):
        * TestWebKitAPI/Tests/WebKitGtk/TestDOMXPathNSResolver.cpp:
        (testWebKitDOMXPathNSResolverNative):
        (testWebKitDOMXPathNSResolverCustom):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspector.cpp:
        (testInspectorDefault):
        (testInspectorManualAttachDetach):
        (testInspectorCustomContainerDestroyed):
        * TestWebKitAPI/Tests/WebKitGtk/TestInspectorServer.cpp:
        (startTestServer):
        (testInspectorServerPageList):
        * TestWebKitAPI/Tests/WebKitGtk/TestOptionMenu.cpp:
        (OptionMenuTest::showOptionMenuCallback):
        (OptionMenuTest::menuCloseCallback):
        (OptionMenuTest::close):
        (OptionMenuTest::activateItem):
        (OptionMenuTest::selectItem):
        (testOptionMenuSimple):
        (testOptionMenuGroups):
        (testOptionMenuActivate):
        (testOptionMenuSelect):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp:
        (testPrintOperationPrintSettings):
        (webViewPrintCallback):
        (testPrintOperationPrint):
        (testPrintCustomWidget):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
        (checkAtspiAccessible):
        (testAtspiBasicHierarchy):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitVersion.cpp:
        (testWebKitCheckVersion):
        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        (loadContentsAndTryToCutSelection):
        (testWebViewEditorNonEditable):
        (testWebViewEditorEditable):
        (testWebViewEditorEditorStateTypingAttributes):
        (testWebViewEditorInsertImage):
        (testWebViewEditorCreateLink):
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        (loadChangedCallback):
        (loadFailedCallback):
        (loadFailedWithTLSErrorsCallback):
        (LoadTrackingTest::LoadTrackingTest):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (registerGResource):
        (removeNonEmptyDirectory):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::adoptView):
        (Test::~Test):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::getOrCreateConnection):
        (WebKitTestBus::createProxy):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp:
        (WebKitTestServer::getWebSocketURIForPath const):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        (WebViewTest::loadURI):
        (WebViewTest::loadHtml):
        (WebViewTest::loadPlainText):
        (WebViewTest::loadBytes):
        (WebViewTest::loadRequest):
        (WebViewTest::loadAlternateHTML):
        (WebViewTest::goBack):
        (WebViewTest::goForward):
        (WebViewTest::goToBackForwardListItem):
        (resourceGetDataCallback):
        (WebViewTest::mainResourceData):
        (WebViewTest::javascriptResultToCString):
        (WebViewTest::javascriptResultToNumber):
        (WebViewTest::javascriptResultToBoolean):
        (WebViewTest::javascriptResultIsNull):
        (WebViewTest::javascriptResultIsUndefined):
        (onSnapshotReady):
        (WebViewTest::runWebProcessTest):
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::platformInitializeWebView):
        (WebViewTest::showInWindow):
        (WebViewTest::showInWindowAndWaitUntilMapped):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::emitPopupMenuSignal):
        (WebViewTest::keyStroke):
        (WebViewTest::doMouseButtonEvent):

2019-01-09  Philippe Normand  <pnormand@igalia.com>

        [WPE] API tests can't run in flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=193242

        Reviewed by Michael Catanzaro.

        * Scripts/run-wpe-tests: Add --wpe to arguments passed to
        flatpakutils so that it knows which port it's dealing with.
        * glib/common.py: Remove build_dir globals so that subsequent
        calls actually take args into account.
        (library_build_path):
        (binary_build_path):

2019-01-08  Dean Jackson  <dino@apple.com>

        Blob references for System Previews don't get a correct file extension
        https://bugs.webkit.org/show_bug.cgi?id=193268
        <rdar://problem/47133037>

        Reviewed by Tim Horton.

        New test that a Blob download of a USDZ file gets named correctly.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[BlobWithUSDZExtensionDownloadDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[BlobWithUSDZExtensionDownloadDelegate _downloadDidFinish:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SystemPreviewBlobNaming.html: Added.

2019-01-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support U2F HID Authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=191535
        <rdar://problem/47102027>

        Reviewed by Brent Fulgham.

        This patch:
        1) adds support for U2F mocking mechanism;
        2) updates tests to reflect U2fCommandConstructor changes.

        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2019-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Dispatch a synthetic mousedown event prior to starting drags
        https://bugs.webkit.org/show_bug.cgi?id=193229
        <rdar://problem/46717097>

        Reviewed by Tim Horton.

        Add a cross-platform drag and drop test to verify that calling `preventDefault()` on the mousedown event
        prevents a drag from starting.

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/link-and-target-div.html:

        Tweak this test to make it robust when dragging the link to the target element multiple times in a single test.

2019-01-08  Zhifei Fang  <zhifei_fang@apple.com>
  
        Layout test will generate a perf metric file to results dir.
        https://bugs.webkit.org/show_bug.cgi?id=192030
        <rdar://problem/32779516>

        Reviewed by Aakash Jain.

        Layout test running time will be collected to a perf metric file.
        For now, instead of outputing running time of all tests (which is huge),
        we aggregate them by test directories which are at most two level deep. 

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._end_test_run):
        (Manager._output_perf_metrics):
        (Manager._print_expectation_line_for_test):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (add_test_perf_metric):
        (test_perf_metrics):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest.test_test_timings_trie):
        (JSONGeneratorTest):
        (JSONGeneratorTest.test_test_perf_metrics):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RebaselineTest.test_reset_results):
        (RebaselineTest.test_missing_results):
        (RebaselineTest.test_new_baseline):

2019-01-08  Patrick Griffis  <pgriffis@igalia.com>

        [WPE][GTK] Add php-json to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=193233

        Reviewed by Michael Catanzaro.

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

2019-01-08  Chris Dumez  <cdumez@apple.com>

        Regression(PSON-r239182): Blank view when navigating back and forth between google.com and stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=193224
        <rdar://problem/47097726>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Leak of ScrollCompletionCallbackData (16 bytes) in com.apple.WebKit.WebContent running WebKit layout tests
        <https://webkit.org/b/193222>
        <rdar://problem/46862309>

        Reviewed by Joseph Pecoraro.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::executeCallback): Fix camel case of variable name.
        (WTR::EventSendingController::callAfterScrollingCompletes): If
        WKBundlePageRegisterScrollOperationCompletionCallback() returns
        false, make sure to release the ScrollCompletionCallbackData
        object.  This fixes the leak.

2019-01-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] EWS: wincairo-ews cannot apply a patch with *.png
        https://bugs.webkit.org/show_bug.cgi?id=193044

        Reviewed by Daniel Bates.

        WinCairo EWS bots are using Windows Perl. Binary files should be
        opened as binary mode.

        * Scripts/svn-apply:
        (handleGitBinaryChange): Use 'binmode' for binary file handles.

2019-01-07  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add ENABLE_CSS_TYPED_OM option
        https://bugs.webkit.org/show_bug.cgi?id=193216

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2019-01-07  David Kilzer  <ddkilzer@apple.com>

        Prefer RetainPtr<NSObject> to RetainPtr<NSObject *>
        <https://webkit.org/b/193056>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checker.py:
        - Ignore use of new runtime/retainptr check in
          Tools/TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm since it
          contains tests to ensure RetainPtr<NSObject *> is compatible
          with RetainPtr<NSObject>.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language):
        (CppChecker):
        - Add checker for use of '*' in RetainPtr<> type.  A for loop
          was used instead of a single regex so that angle brackets
          could be matched up when checking the type contained within
          the RetainPtr<> type.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest):
        - Add unit test for new runtime/retainptr check.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.h:
        * TestWebKitAPI/EditingTestHarness.h:
        - Remove '*' from RetainPtr<> type.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add cf/RetainPtr.cpp back to TestWTFLibrary target!  This
          regressed in r201938.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        (TestWebKitAPI::TEST):
        - Update tests to match RetainPtr.mm tests (except for the
          `*SimilarNSType` tests since there is no CF equivalent of
          RetainPtr<NSString> and RetainPtr<NSString *>).

        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        - Update tests to:
          - Not conflict by name with equivalent CF tests in
            RetainPtr.cpp.
          - Add test cases for RetainPtr<NSObject>,
            RetainPtr<NSObject *> and RetainPtr<id> were appropriate.
          - Add `*SimilarNSType` tests for converting between
            RetainPtr<NSObject> and RetainPtr<NSObject *>.
          - Change `0` to `nil` as appropriate.
          - Re-alphabetize the tests by name.
          - Add Optional<RetainPtr<>> tests.
          - Add retainPtr() tests.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/IconLoadingDelegate.mm:
        (TEST):
        - Remove '*' from RetainPtr<> type.

        * TestWebKitAPI/Tests/WebKitCocoa/JITEnabled.mm:
        (TEST(WebKit, JITEnabled)):
        - Add missing WTFMove().  Apparently a temporary was being
          created before in the argument list due to mismatched
          RetainPtr<> types.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::setUpWebViewForTestingVideoControlsManager):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::resourcesDirectoryURL):
        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        - Remove '*' from RetainPtr<> type.

2019-01-07  Eric Carlson  <eric.carlson@apple.com>

        A MediaTime timescale must never be zero
        https://bugs.webkit.org/show_bug.cgi?id=193156
        <rdar://problem/32504501>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST): Add tests for zero timescale.

2019-01-07  Youenn Fablet  <youenn@apple.com>

        API test broken: TestWebKitAPI.WebKit.CustomDataStorePathsVersusCompletionHandlers
        https://bugs.webkit.org/show_bug.cgi?id=193175

        Reviewed by Chris Dumez.

        Updated API test as we bumped the SW schema to version 4.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-4.sqlite3: Renamed from Tools/TestWebKitAPI/Tests/WebKitCocoa/SimpleServiceWorkerRegistrations-3.sqlite3.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2019-01-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings of MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=193029

        Reviewed by Ross Kirsling.

        * MiniBrowser/win/MiniBrowserWebHost.h: Removed unused m_oldFont
        and m_URLBarFont. Reorder member variables to fix -Wreorder
        warning.
        * MiniBrowser/win/PageLoadTestClient.cpp:
        (PageLoadTestClient::PageLoadTestClient): Reorder the member initializer list.
        * MiniBrowser/win/PageLoadTestClient.h: Removed 'virtual' of
        pageLoadStartedAtTime and pageLoadEndedAtTime. Removed unused
        m_currentURLIndex.
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow): Initialize
        navigationClient with '{ }' to fix the missing field warning.
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (initDocStruct): Changed the argument type docname to const.

2019-01-06  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import U2F command/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=193150
        <rdar://problem/47054028>

        Reviewed by Brent Fulgham.

        Adds API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp:
        (TestWebKitAPI::getTestAttestedCredentialDataBytes):
        (TestWebKitAPI::getTestAuthenticatorDataBytes):
        (TestWebKitAPI::getTestAttestationObjectBytes):
        (TestWebKitAPI::getTestSignResponse):
        (TestWebKitAPI::getTestU2fRegisterResponse):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::convertToVector): Deleted.
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h:
        * TestWebKitAPI/Tests/WebCore/U2fCommandConstructorTest.cpp: Added.
        (TestWebKitAPI::constructMakeCredentialRequest):
        (TestWebKitAPI::constructGetAssertionRequest):
        (TestWebKitAPI::TEST):

2019-01-05  Oriol Brufau  <obrufau@igalia.com>

        [GTK] Add python3-setuptools, libunistring-dev, bison and flex dependencies
        https://bugs.webkit.org/show_bug.cgi?id=193136

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:
        Add python3-setuptools, libunistring-dev, bison and flex to install-dependencies,
        they are needed by update-webkitgtk-libs.

2019-01-05  Aakash Jain  <aakash_jain@apple.com>

        Unreviewed follow-up fix to r239650
        https://bugs.webkit.org/show_bug.cgi?id=193140
        <rdar://problem/47063037>

        Typecast patch_id to string.

        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch._is_patch_obsolete):

2019-01-04  Daniel Bates  <dabates@apple.com>

        [lldb-webkit]: Add support for pretty-printing raw bitmask types
        https://bugs.webkit.org/show_bug.cgi?id=193024

        Reviewed by Jer Noble.

        Add support infrastructure to pretty-print a raw bitmask type. Included is a pretty-printer
        for the bitmask type WebEventFlags as an example.

        Exposed a new function lldb_webkit.addSummaryAndSyntheticFormattersForRawBitmaskType()
        that can be used to register summary and synthetic child formatters for a bitmask type.
        For example, consider the following enum and bitmask typedefs:

        typedef enum {
            A = 1 << 0,
            B = 1 << 1,
            C = 1 << 2,
        } SpecialFlagValues;
        typedef unsigned SpecialFlags;

        To teach lldb-webkit how to pretty print SpecialFlags types, add the following code inside
        __lldb_init_module():

            addSummaryAndSyntheticFormattersForRawBitmaskType(debugger, "SpecialFlags", {
                    1 << 0: "A",
                    1 << 1: "B",
                    1 << 2: "C",
            })

        * lldb/lldb_webkit.py:
        (addSummaryAndSyntheticFormattersForRawBitmaskType):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.GeneratedRawBitmaskProvider):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.raw_bitmask_summary_provider):
        (addSummaryAndSyntheticFormattersForRawBitmaskType.lldb_webkit):
        A convenience function to dynamically creaste a synthetic formatter class and summary
        string function for the specified bitmask type and enumerator value to name map. This
        function register the dynamically created class and function with LLDB.

        (__lldb_init_module):
        (FlagEnumerationProvider):
        (FlagEnumerationProvider._enumerator_value_to_name_map):
        (FlagEnumerationProvider._bitmask):
        (FlagEnumerationProvider._update):
        (FlagEnumerationProvider.has_children):
        (FlagEnumerationProvider.num_children):
        (FlagEnumerationProvider.get_child_index):
        (FlagEnumerationProvider.get_child_at_index):
        (FlagEnumerationProvider.update):
        Extract out provider logic from WTFOptionSetProvider into a base class that can be shared.

        (WTFOptionSetProvider):
        (WTFOptionSetProvider._enumerator_value_to_name_map):
        (WTFOptionSetProvider._bitmask):
        (WTFOptionSetProvider._update):
        Write in terms of the base class.

        (RawBitmaskProviderBase):
        (RawBitmaskProviderBase._enumerator_value_to_name_map):
        (RawBitmaskProviderBase._bitmask):
        Added. Base synthetic formatter class for a raw bitmask type. Derived classes are expected to
        override the class variable ENUMERATOR_VALUE_TO_NAME_MAP with a dictionary of the form:
        {
            1 << 0: "A",
            1 << 1: "B",
            1 << 2: "C",
        }
        It is not necessary to instantiate such a derived class directory. Instead use the convenience
        function addSummaryAndSyntheticFormattersForRawBitmaskType.

        (WTFOptionSetProvider.has_children): Deleted.
        (WTFOptionSetProvider.num_children): Deleted.
        (WTFOptionSetProvider.get_child_index): Deleted.
        (WTFOptionSetProvider.get_child_at_index): Deleted.
        (WTFOptionSetProvider.update): Deleted.

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Add build step to validate the patch before processing it
        https://bugs.webkit.org/show_bug.cgi?id=193140

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Added ValidatePatch step.
        * BuildSlaveSupport/ews-build/steps.py:
        (ValidatePatch):
        (ValidatePatch.fetch_data_from_url): Fetch data from a url.
        (ValidatePatch.get_patch_json): Get patch json data.
        (ValidatePatch.get_bug_json): Get bug json data.
        (ValidatePatch.get_bug_id_from_patch): Get bug id from a patch id.
        (ValidatePatch._is_patch_obsolete): Check if the patch is obsolete.
        (ValidatePatch._is_patch_review_denied): Check if the patch is marked r-.
        (ValidatePatch._is_bug_closed): Check if the bug is already closed.
        (ValidatePatch.skip_build): Skip the build.
        (ValidatePatch.start):

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Progress towards fixing Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=193105

        Reviewed by Don Olmstead.

        * TestWebKitAPI/PlatformMac.cmake:

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Fix API test after r239631
        https://bugs.webkit.org/show_bug.cgi?id=193118

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        This test relied on m_maximumProcessCount being set to 1 in ProcessPoolConfiguration::createWithLegacyOptions.
        Do the same thing via the API to fix the test.

2019-01-04  Jer Noble  <jer.noble@apple.com>

        [WebKitLegacy] Media playback pauses on scroll
        https://bugs.webkit.org/show_bug.cgi?id=192829

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/StopSuspendResumeAllMedia.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/ScrollingDoesNotPauseMedia.mm: Added.
        (-[ScrollingDoesNotPauseMediaDelegate webViewDidFinishLoad:]):
        (-[ScrollingDoesNotPauseMediaDelegate uiWebView:didCommitLoadForFrame:]):
        (-[ScrollingDoesNotPauseMediaDelegate handleEvent:]):
        (TestWebKitAPI::TEST):

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Add support for toggling device orientation API support per site
        https://bugs.webkit.org/show_bug.cgi?id=193143
        <rdar://problem/46605724>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[DataMappingSchemeHandler setTaskHandler:]):
        (-[DataMappingSchemeHandler webView:startURLSchemeTask:]):
        (-[WebsitePoliciesDeviceOrientationDelegate initWithDeviceOrientationEventEnabled:]):
        (-[WebsitePoliciesDeviceOrientationDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[WebsitePoliciesDeviceOrientationDelegate webView:didFinishNavigation:]):

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] use svn-apply script to apply the patches
        https://bugs.webkit.org/show_bug.cgi?id=193138

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Add the ApplyPatch step.
        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): Added step name.
        (CheckOutSource.__init__): Used alwaysUseLatest so that it doesn't apply patch.
        (ApplyPatch): Build step to apply patch using svn-apply script.
        (UnApplyPatchIfRequired):
        (UnApplyPatchIfRequired.__init__): Deleted, since the alwaysUseLatest parameter is now in base class.

2019-01-04  Alex Christensen  <achristensen@webkit.org>

        Deprecate WKContextCreate
        https://bugs.webkit.org/show_bug.cgi?id=193118

        Reviewed by Brady Eidson.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (WebKitBrowserWindow::WebKitBrowserWindow):
        * TestWebKitAPI/Tests/WebKit/AboutBlankLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CloseThenTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/CookieManager.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EvaluateJavaScript.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/EventModifiers.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FailedLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Find.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ForceRepaint.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameHandle.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::loadAlternateHTMLString):
        * TestWebKitAPI/Tests/WebKit/LoadPageOnCrash.cpp:
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        * TestWebKitAPI/Tests/WebKit/MenuTypesForMouseEvents.cpp:
        (TestWebKitAPI::buildAndPerformTest):
        * TestWebKitAPI/Tests/WebKit/ModalAlertsSPI.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NavigationClientDefaultCrypto.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageGroup.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PreventEmptyUserAgent.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ProcessDidTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ResizeWindowAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionState.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ScrollPinningBehaviors.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/TerminateTwice.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageConfiguration.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageCopySessionStateWithFiltering.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageGetScaleFactorNotZero.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WebCoreStatisticsWithNoWebProcess.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/mac/RestoreStateAfterTermination.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm:
        (WebKit2_CommandBackForwardTestWKView::SetUp):
        * TestWebKitAPI/Tests/WebKitCocoa/FullscreenDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/SchemeRegistry.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):

2019-01-03  Matt Rajca  <mrajca@apple.com>

        Make DidPlayMediaPreventedFromPlaying autoplay event more generic.
        https://bugs.webkit.org/show_bug.cgi?id=193128
        rdar://34554231

        Reviewed by Jer Noble.

        Today, the "DidPlayMediaPreventedFromPlaying" autoplay event is only sent for
        media prevented from autoplaying. It could be generalized to a "DidPlayMediaWithUserGesture"
        event along with a flag that indicates whether or not autoplay was actually prevented.

        Tests: existing API tests were updated to reflect the new names. New API tests
        were added for the new case in which the "DidPlayMediaWithUserGesture" event is sent.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/long-test.mp4: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/audio-with-play-button.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/video-with-play-button.html: Added.

2019-01-04  Chris Dumez  <cdumez@apple.com>

        [PSON] Calling history.back() from inside the load event handler prevents process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=193120

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-04  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcessPool::addSuspendedPage()
        https://bugs.webkit.org/show_bug.cgi?id=193110

        Reviewed by Youenn Fablet.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Check patch relevance before applying the patch
        https://bugs.webkit.org/show_bug.cgi?id=193102

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/factories.py:
        (Factory.__init__): Moved CheckPatchRelevance step to base class.

2019-01-04  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Check patch relevance step should print patch id
        https://bugs.webkit.org/show_bug.cgi?id=193137

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckPatchRelevance.start): Update the status to include patch id.

2019-01-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Increase simulator teardown timeout
        https://bugs.webkit.org/show_bug.cgi?id=193141
        <rdar://problem/46174217>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager.tear_down): Use SIMULATOR_BOOT_TIMEOUT.

2019-01-03  Ross Kirsling  <ross.kirsling@sony.com>

        test262-runner misbehaves when test file YAML has a trailing space
        https://bugs.webkit.org/show_bug.cgi?id=193053

        Reviewed by Yusuke Suzuki.

        * Scripts/test262/Runner.pm:
        (parseData):
        Accept trailing space when parsing a test file's YAML block.

2019-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        UserMedia test should use WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=192913

        Reviewed by Youenn Fablet.

        The test currently uses the deprecated WKPageLoaderClient. It should use
        WKPageNavigationClient instead, which provides the same callback under a similar name.

        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):

2019-01-02  Alex Christensen  <achristensen@webkit.org>

        Homograph with LATIN SMALL LETTER R WITH FISHHOOK
        https://bugs.webkit.org/show_bug.cgi?id=192944

        Reviewed by Tim Horton.

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

2019-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add support for using the current text selection as the find string on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193034
        <rdar://problem/45138739>

        Reviewed by Tim Horton.

        Add a new API test to verify that the new WebKit SPI (_stringForFind, _takeFindStringFromSelection:, and
        _setStringForFind) works as expected.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/UseSelectionAsFindString.mm: Added.

2019-01-02  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Use git on OpenSource EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=193092

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (CheckOutSource): Use git instead of svn.
        (CheckOutSource.__init__): Use timeout of 2 hours since the initial checkout might take a long time.

2019-01-02  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Remove broken code to print WTF::OptionSet::m_storage
        https://bugs.webkit.org/show_bug.cgi?id=193023

        Reviewed by Simon Fraser.

        The code to print WTF::OptionSet::m_storage as an item in the set never worked and does
        not seem meaningful to fix because WTF::OptionSet::m_storage is just the sum of the printed
        enumerator values. We should just remove this code.

        * lldb/lldb_webkit.py:
        (WTFOptionSetProvider.has_children):
        (WTFOptionSetProvider.num_children):
        (WTFOptionSetProvider.get_child_index):
        (WTFOptionSetProvider.get_child_at_index):

2018-12-29  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        .ycm_extra_conf.py should handle XXXInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=193055

        Reviewed by Carlos Garcia Campos.

        compile_commands.json database only records flags and options for cpp source files.
        So, when we open headers, this database does not have any information for that.
        Our .ycm_extra_conf.py alleviates this by using XXX.cpp's configuration for XXX.h.
        But this mitigation does not handle XXXInlines.h well since we do not have XXXInlines.cpp.
        This patch adds support for XXXInlines.h in .ycm_extra_conf.py. When XXXInlines.h is queried,
        we attempt to find XXX.cpp and use the configuration if it exists.

        * gtk/ycm_extra_conf.py:
        (getImplementationFilename):
        (FlagsForFile):

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

        Unreviewed. Support PHP 7.3 in Debian.

        Add 7.3 to the list of php versions supported in Debian.

        * Scripts/webkitpy/port/base.py:
        (Port._debian_php_version):

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * TestWebKitAPI/PlatformMac.cmake:

2018-12-26  Adrian Perez de Castro  <aperez@igalia.com>

        [Tools] Remove references to Bison and Flex
        https://bugs.webkit.org/show_bug.cgi?id=193033

        Reviewed by Michael Catanzaro.

        The Bison and Flex tools are not needed anymore since r209883.

        * CygwinDownloader/cygwin-downloader.py:
        * EWSTools/ubuntu-ews-packages:
        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):
        * gtk/install-dependencies:
        * wpe/install-dependencies:

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

        WebDriver: warn about non existing tests when parsing expectations
        https://bugs.webkit.org/show_bug.cgi?id=192979

        Reviewed by Michael Catanzaro.

        It's common to update web driver tests and forget updating the test expectations in case of tests removed or
        renamed.

        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.__init__):

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

        navigator.userAgent in service workers does not reflect customUserAgent set by client
        https://bugs.webkit.org/show_bug.cgi?id=192951

        Reviewed by Youenn Fablet.

        Extend API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWCustomUserAgentDelegate initWithUserAgent:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[SWUserAgentMessageHandler initWithExpectedMessage:]):
        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] userPresence should always be true
        https://bugs.webkit.org/show_bug.cgi?id=192835
        <rdar://problem/46538788>

        Reviewed by Brent Fulgham.

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

2018-12-19  Simon Fraser  <simon.fraser@apple.com>

        Add support to run-benchmark to use non-default copies of the browser apps
        https://bugs.webkit.org/show_bug.cgi?id=192905
        rdar://problem/46845840

        Reviewed by Dewei Zhu.
        
        Add support for a --browser-path argument to run-benchmark, which allows you to use
        a custom app bundle for a given browser (only implemented for Safari at present).

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.__init__):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory.create):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver._launch_process):
        (OSXBrowserDriver._launch_process_with_caffeinate): Fix spelling.
        (OSXBrowserDriver._launch_process_with_caffinate): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeCanaryDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxNightlyDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.__init__):
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args):
        (run_benchmark_plan):
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner.__init__):
        * Scripts/webkitpy/browserperfdash/browserperfdash_unittest.py:
        (FakeBenchmarkRunner.__init__):

2018-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import an APDU coder from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=192949
        <rdar://problem/46879933>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ApduTest.cpp: Added.
        (TestWebKitAPI::TEST):

2018-12-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Setting the file wrapper and content type of an attachment to a PDF should update its image
        https://bugs.webkit.org/show_bug.cgi?id=192984
        <rdar://problem/46798028>

        Reviewed by Tim Horton.

        Add an API test to verify that setting the file wrapper for a _WKAttachment with an enclosing image element with
        PDF data correctly updates the image element.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

2018-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Add JSCOnly to bot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=192964

        Reviewed by Alexey Proskuryakov.

        Apparently we have five JSCOnly test bots and multiple developers working on keeping them in
        good shape. Sadly, they are hidden bots not exposed in the dashboard. They would be more
        useful if they were not so secret, so add them.

        There appear to be no build-only bots, so the first column is blank. And of course there are
        no WebKit1 or WebKit2 bots, because this is JSCOnly, so the second and third columns are
        blank too. That's OK. This will be the last bot on the dashboard, so it won't look too bad,
        and there's plenty of room in the final column for all the bots.

        I had a hard time picking a logo to use, because the JavaScript language does not have an
        official logo. But I believe I've found one that will be satisfactory.

        I will sneak in one bonus change: WPE's EWS queue was missing, and has been added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/SquirrelFish.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/SquirrelFish@2x.png: Added.
        * 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/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.linux-jsconly img.logo):

2018-12-21  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/46194315> macOS: WebKit1 does not handle occlusion changes
        https://bugs.webkit.org/show_bug.cgi?id=192821

        Reviewed by Chris Dumez.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:

2018-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix compilation warnings of DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=192924

        Reviewed by Alex Christensen.

        * DumpRenderTree/AccessibilityController.h: Added member variable initializations in the class definition.
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::AccessibilityController): Moved member variable initializations to the class definition.
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem): String literals can't be converted non-const type. Use auto for them.
        (resetWebPreferencesToConsistentValues): Pass a temporal _bstr_t
        object to the argument of setDefaultTextEncodingName instead of a
        const string literal.
        (createWebViewAndOffscreenWindow): Use %lx for HRESULT (aka 'long').
        (main): Exit if _dup2 fails. Use %lu for'DWORD'(aka 'unsigned long').
        (setCacheFolder): Deleted.
        * DumpRenderTree/win/DumpRenderTreeWin.h: Fix class/struct mismatch of FrameLoadDelegate and PolicyDelegate declarations.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (dump): Use %d for int.
        * DumpRenderTree/win/FrameLoadDelegate.cpp: Removed unused variable g_delegateWaitingOnTimer.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (BSTRFromString): Deleted unused function.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setDatabaseQuota): Pass a temporal _bstr_t object to
        the arguemnt of setQuota instead of const string literal.
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        (jsStringRefToWString): Deleted unused function.

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

        Add API test coverage for customUserAgent client setting and service workers
        https://bugs.webkit.org/show_bug.cgi?id=192952

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        (-[SWMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[SWSchemes webView:startURLSchemeTask:]):
        (-[SWCustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[SWUserAgentMessageHandler userContentController:didReceiveScriptMessage:]):

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

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

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

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

        Add style script rule to check for uses of std::optional<>
        https://bugs.webkit.org/show_bug.cgi?id=192931

        Reviewed by Tim Horton.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_optional):
        (check_style):

2018-12-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a runtime flag for local authenticator
        https://bugs.webkit.org/show_bug.cgi?id=192792
        <rdar://problem/46798738>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

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

        webkitpy: Autoinstall package URLs have changed
        https://bugs.webkit.org/show_bug.cgi?id=192909
        <rdar://problem/46860359>

        Rubber-stamped by Alexey Proskuryakov.

        PyPi urls have been moved around, we need to update our auto-installed packages.

        We should check for Selenium before asking PyPi for the latest version.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize): Update with new pypi url.
        (AutoinstallImportHook._install_keyring): Ditto.
        (AutoinstallImportHook._install_pep8): Ditto.
        (AutoinstallImportHook._install_mozlog): Ditto.
        (AutoinstallImportHook._install_mozprocess): Ditto.
        (AutoinstallImportHook._install_pytest_timeout): Ditto.
        (AutoinstallImportHook._install_pytest): Ditto.
        (AutoinstallImportHook._install_pylint): Ditto.
        (AutoinstallImportHook._install_buildbot): Ditto.
        (AutoinstallImportHook._install_coverage): Ditto.
        (AutoinstallImportHook._install_twisted_15_5_0): Ditto.
        (AutoinstallImportHook._install_selenium): Update with new pypi url, only check
        for new Selenium if the installed version isn't sufficient.
        (AutoinstallImportHook.get_latest_pypi_url): Update with new pypi url.

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

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp:
        (TestWebKitAPI::checkURL):

2018-12-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r239417.

        Introduced two API test failures on macOS.

        Reverted changeset:

        "<rdar://problem/46194315> macOS: WebKit1 does not handle
        occlusion changes"
        https://bugs.webkit.org/show_bug.cgi?id=192821
        https://trac.webkit.org/changeset/239417

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: UIString should take an optional key and description to aid localization
        https://bugs.webkit.org/show_bug.cgi?id=153962
        <rdar://problem/24542505>

        Reviewed by Brian Burg.

        * Scripts/extract-localizable-js-strings:

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

        Unparented WKWebView can't retrieve main resource data for a main frame plugin
        https://bugs.webkit.org/show_bug.cgi?id=192923
        <rdar://problem/46859068>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/WebKitCocoa/GetResourceData.mm:
        Add a test ensuring that both parented and unparented WKWebViews can
        retrieve main resource data when loading a PDF.

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

        [GTK][WPE] Bump webkitgtk-test-fonts to 0.0.8
        https://bugs.webkit.org/show_bug.cgi?id=192852

        Reviewed by Michael Catanzaro.

        EmojiOne font was replaced by Noto Color Emoji.

        * WebKitTestRunner/gtk/fonts/fonts.conf: Use Noto Color Emoji when Apple Color Emoji font family is used in tests.
        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

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

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        * DumpRenderTree/*:
        * MiniBrowser/*:
        * TestRunnerShared/*:
        * TestWebKitAPI/*:
        * WebGPUAPIStructure/*:
        * WebKitTestRunner/*:

2018-12-19  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/46194315> macOS: WebKit1 does not handle occlusion changes
        https://bugs.webkit.org/show_bug.cgi?id=192821

        Reviewed by Chris Dumez.

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

2018-12-19  Alex Christensen  <achristensen@webkit.org>

        Navigations away from the SafeBrowsing interstitial show a flash of old content
        https://bugs.webkit.org/show_bug.cgi?id=192676

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (safeBrowsingView):
        (TEST):
        (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): Deleted.

2018-12-19  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Unify TestController::platformRunUntil() and honor condition flag
        https://bugs.webkit.org/show_bug.cgi?id=192855

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::notifyDone): Use the WPE implementation.
        (WTR::TestController::platformRunUntil): Use the WPE implementation.
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformRunUntil): Honor the condition flag.

2018-12-19  Megan Gardner  <megan_gardner@apple.com>

        Allow clients to set the navigator platform
        https://bugs.webkit.org/show_bug.cgi?id=192735

        Reviewed by Tim Horton.

        Add a test for setting a custom navigator platform.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomNavigatorPlatformDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomNavigatorPlatformDelegate webView:didFinishNavigation:]):

2018-12-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r239358.

        Revision caused imported/w3c/web-platform-tests/IndexedDB/ to
        crash on Debug bots

        Reverted changeset:

        "Clean up IndexedDB files between tests"
        https://bugs.webkit.org/show_bug.cgi?id=192796
        https://trac.webkit.org/changeset/239358

2018-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] A copied text selection is pasted as a web archive attachment in the entry view in Messages
        https://bugs.webkit.org/show_bug.cgi?id=192842
        <rdar://problem/46823586>

        Reviewed by Tim Horton.

        Adjusts an existing API test to verify that "com.apple.webarchive" is not one of the types registered to the
        item provider when dragging a rich text selection.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-12-18  David Quesada  <david_quesada@apple.com>

        REGRESSION: [iOS] API test TestWebKitAPI._WKDownload.OriginatingWebView is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=192810
        <rdar://problem/46812536>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
            After releasing our reference to the web view, wait until the next turn of the runloop
            before checking that the originatingWebView has been zeroed, since the web view might
            still be referenced in the autorelease pool. This _WKDownload unit test isn't about
            testing general memory management of WKWebViews, only that _WKDownload does not retain
            its web view via the 'originatingWebView' property.

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

        Clean up IndexedDB files between tests
        https://bugs.webkit.org/show_bug.cgi?id=192796

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext):
        (WTR::RemoveAllIndexedDatabasesCallback):
        (WTR::TestController::ClearIndexedDatabases):
        * WebKitTestRunner/TestController.h:

2018-12-18  Alex Christensen  <achristensen@webkit.org>

        Fix API test introduced in r239339 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=192675

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        The iOS implementation of the safe browsing warning is a little different.
        It does some element creation when it is added to the window so it knows how big it is.
        To test these elements, we need to simulate adding it to the window.
        A similar technique is done in other iOS API tests, such as SafeBrowsing.ShowWarningSPI.

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

        webkitpy: Ignore device type for test when using --force
        https://bugs.webkit.org/show_bug.cgi?id=192786
        <rdar://problem/46794894>

        Reviewed by Daniel Bates.

        It is sometimes the case that a contributor will wish to run a test on a specific device,
        despite expectations which indicate a test should not be run on that device.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.default_child_processes): Strip device type information when using --force.
        (DevicePort.setup_test_run): Only allow incomplete match when using --force.

2018-12-18  Alex Christensen  <achristensen@webkit.org>

        WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations
        https://bugs.webkit.org/show_bug.cgi?id=192675

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (goBack):
        (TEST):
        (visitUnsafeSite):
        (-[SafeBrowsingHelper observeValueForKeyPath:ofObject:change:context:]):
        (-[SafeBrowsingHelper webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

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

        Regression(r239182) SuspendedPage's process reuse for link navigation optimization sometimes broken
        https://bugs.webkit.org/show_bug.cgi?id=192772

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, JHBuild GTK build fix attempt

        * gtk/jhbuild.modules: There's no libffi in this moduleset anymore.
        There's no ninja module either, it should be provided by the
        host system.

2018-12-17  Chris Dumez  <cdumez@apple.com>

        Allow passing nil as session state to [WKWebView _restoreSessionState:]
        https://bugs.webkit.org/show_bug.cgi?id=192789
        <rdar://problem/46755277>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-12-17  Simon Fraser  <simon.fraser@apple.com>

        Don't use more expensive layer backing store formats when subpixel text antialiasing is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=192780
        rdar://problem/43394387

        Reviewed by Tim Horton.

        No need to set "AppleFontSmoothing" defaults for WK2.

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

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

        webkitpy: Handle case where stdout and stderr don't accept unicode
        https://bugs.webkit.org/show_bug.cgi?id=192775
        <rdar://problem/46497303>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): If unicode cannot be written to the stream, replace unicode
        characters with '?'.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_stream_with_encoding):

2018-12-17  Daniel Bates  <dabates@apple.com>

        Support concatenating StringView with other string types
        https://bugs.webkit.org/show_bug.cgi?id=177566

        Reviewed by Darin Adler.

        Add some tests to ensure we do not regress the number of allocations needed when performing
        string concatenation with string views.

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

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

        Unreviewed, rolling out r239265 and r239274.
        https://bugs.webkit.org/show_bug.cgi?id=192765

        unorm_normalize is deprecated, and broke an internal build
        (Requested by Truitt on #webkit).

        Reverted changesets:

        "[GTK][WPE] Need a function to convert internal URI to display
        ("pretty") URI"
        https://bugs.webkit.org/show_bug.cgi?id=174816
        https://trac.webkit.org/changeset/239265

        "Fix the Apple Internal Mac build with a newer SDK"
        https://trac.webkit.org/changeset/239274

2018-12-17  Daniel Bates  <dabates@apple.com>

        Implement UIScriptController::toggleCapsLock() for iOS
        https://bugs.webkit.org/show_bug.cgi?id=191815

        Reviewed by Andy Estes.

        Add support for toggling the caps lock state in WebKitTestRunner on iOS.

        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Clear the current modifier state
        before running a test. This ensures that the caps lock state does not persist between
        tests should a test enable caps lock and not disable it.
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter): Map "capsLock" to the Caps Lock key usage code.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::createUIPhysicalKeyboardEvent): Modified to take the keyboard input flags to use to
        create the event. Also substituted NSString* for const String& as the data type for the first
        two parameters to avoid conversions in the implementation of UIScriptController::toggleCapsLock()
        below.
        (WTR::UIScriptController::keyDown): Update as needed due to changes to prototype of createUIPhysicalKeyboardEvent().
        (WTR::UIScriptController::toggleCapsLock): Dispatch a UIEvent to toggle caps lock.

2018-12-17  Daniel Bates  <dabates@apple.com>

        [iOS] Remove -[WebEvent initWithKeyEventType:...:characterSet:]
        https://bugs.webkit.org/show_bug.cgi?id=192633

        Reviewed by Wenson Hsieh.

        Update code to use the modern initializer.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-17  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: loop variable is copied but only used as const reference in WebCore, WebKit, Tools
        <https://webkit.org/b/192751>
        <rdar://problem/46771623>

        Reviewed by Daniel Bates.

        Change loop variables to const references to avoid unnecessary
        copies.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard pasteboardItems]):

2018-12-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI
        https://bugs.webkit.org/show_bug.cgi?id=174816

        Reviewed by Michael Catanzaro.

        Add tests for userVisibleString() and (for GTK and WPE) webkit_uri_for_display().

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/URLHelpers.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitURIUtilities.cpp: Added.
        (testURIForDisplayUnaffected):
        (testURIForDisplayAffected):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/glib/CMakeLists.txt:

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

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add a test case to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFrameDisplayed):
        (beforeAll):
        * wpe/jhbuild.modules: Bump WPEBackend-fdo to 1.1.0.

2018-12-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix after r239253

        * gtk/jhbuild.modules: Fix typo in libpsl dependency name.

2018-12-15  Darin Adler  <darin@apple.com>

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (handleEventCarbon): Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END.
        * DumpRenderTree/mac/TextInputControllerMac.m:
        (-[TextInputController interpretKeyEvents:withSender:]): Use
        IGNORE_WARNINGS_BEGIN/END.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseForceClick): Use
        IGNORE_NULL_CHECK_WARNINGS_BEGIN/END.
        (WTR::EventSenderProxy::startAndCancelMouseForceClick): Ditto.
        (WTR::EventSenderProxy::mouseForceDown): Ditto.
        (WTR::EventSenderProxy::mouseForceUp): Ditto.
        (WTR::EventSenderProxy::mouseForceChanged): Ditto.

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::cacheTestRunnerCallback): Use makeString.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveAuthenticationChallenge): Use makeString.
        (WTR::TestController::downloadDidFail): Use an ASCIILiteral via the _s syntax.

2018-12-15  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Add libpsl to JHBuild module sets
        https://bugs.webkit.org/show_bug.cgi?id=192740

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add libpsl module.
        * wpe/jhbuild.modules: Ditto.

2018-12-14  Alexey Proskuryakov  <ap@apple.com>

        Add a style checker rule for Xcode version macros use
        https://bugs.webkit.org/show_bug.cgi?id=192703

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_os_version_checks):
        (process_line):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_os_version_checks):

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls
        https://bugs.webkit.org/show_bug.cgi?id=192704

        Reviewed by Geoffrey Garen.

        Extend existing API test to reproduce the problem.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-14  Chris Dumez  <cdumez@apple.com>

        [PSON] WebsitePolicies are lost on process-swap
        https://bugs.webkit.org/show_bug.cgi?id=192694
        <rdar://problem/46715748>

        Reviewed by Brady Eidson.

        Extend existing API test to reproduce the issue.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

2018-12-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Error writing data to TLS socket in some sites when using the jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=192678

        Reviewed by Carlos Garcia Campos.

        Update our ancient versions of libsoup and glib-networking.

        * gtk/install-dependencies:
        * gtk/jhbuild.modules:
        * gtk/patches/libsoup-auth-Fix-async-authentication-when-flag-SOUP_MESSAGE.patch: Removed.
        * gtk/patches/libsoup-auth-do-not-use-cached-credentials-in-lookup-method-.patch: Removed.
        * gtk/patches/libsoup-soup-message-io-Do-not-fail-when-there-s-no-empty-li.patch: Removed.
        * gtk/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Removed.
        * wpe/install-dependencies:
        * wpe/jhbuild.modules:
        * wpe/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Removed.

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

        [WPE] Use new view state API from libwpe
        https://bugs.webkit.org/show_bug.cgi?id=191906

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (beforeAll): Enable /webkit/WebKitWebView/page-visibility in WPE.
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend): Make the view initially hidden for consistency with GTK+ tests.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
        (WebViewTest::showInWindow): Add wpe_view_activity_state_visible, wpe_view_activity_state_in_window and
        wpe_view_activity_state_focused state flags.
        (WebViewTest::hideView): Remove wpe_view_activity_state_visible and wpe_view_activity_state_focused state flags.
        * wpe/backends/HeadlessViewBackend.cpp:
        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Assume view is always visible, focused and in window.
        * wpe/backends/WindowViewBackend.cpp:
        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Update the view state flags depending on state
        received in configure callback.
        * wpe/jhbuild.modules: Bump libwpe to 1.1.0

2018-12-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory'
        https://bugs.webkit.org/show_bug.cgi?id=192688

        Reviewed by Ross Kirsling.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (copyEnvironmentVariable): Moved.
        (getStringValue): Enclosed with #if !defined(WIN_CAIRO).
        (applePathFromRegistry): Ditto.
        (appleApplicationSupportDirectory): Ditto.
        (prependPath): Ditto.

2018-12-13  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed. Changed my status to a reviewer.

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

2018-12-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Support dropping contact card data (public.vcard) in editable content
        https://bugs.webkit.org/show_bug.cgi?id=192570
        <rdar://problem/35626913>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

        Add API tests to verify that registering `MKMapItem`s and `CNContact`s to item providers and dropping them in
        attachment-enabled rich text editable areas inserts attachment elements (and in the case of `MKMapItem`,
        additionally inserts a link).

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::createMapItemForTesting):
        (TestWebKitAPI::createContactItemForTesting):

        Add API tests to verify that dropping map items and contact items into rich and plain editable areas behaves as
        expected (in the case where a URL is present, e.g. dropping a map item, we insert the URL as an anchor, and when
        there is no other suitable representation in the item provider, we do nothing at all, which is the case for the
        dropped `CNContact`). Also, add a test to verify that drag and drop can be used to upload these items as .vcf
        files.

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

        Unreviewed -- update my status to "reviewer".

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

2018-12-13  Youenn Fablet  <youenn@apple.com>

        On page close, WebPage::m_userMediaPermissionRequestManager is nullified too early
        https://bugs.webkit.org/show_bug.cgi?id=192657

        Reviewed by Eric Carlson.

        Add a test that loads a page registering ondevicechange,
        load another page in the same process, closes the first page.
        Ensure that the process does not crash in that case.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didCrashCallback):
        * TestWebKitAPI/Tests/WebKit/ondevicechange.html: Added.

2018-12-13  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GStreamer][JHBuild] update-webkit{gtk,wpe}-libs fails with libfdk-2.0.0
        https://bugs.webkit.org/show_bug.cgi?id=192643

        Reviewed by Philippe Normand.

        This problem happens with Arch Linux users which have libfdk-2.0.0
        installed (which is anybody with gst-plugins-bad 1.14.4 installed).

        The problem has already been solved upstream at
        https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/merge_requests/77.

        Adding patches while this problem is not in a release yet.

        * gstreamer/jhbuild.modules: Add patches to fix build of gst-plugins-bad with libfdk-2.0.0.
        * gstreamer/patches/gst-plugins-bad-0003-fdkaacenc-Remove-MODE_2_1.patch: Added.
        * gstreamer/patches/gst-plugins-bad-0004-fdkaacdec-Use-WAV-channel-mapping-instead-of-interleave-setting.patch: Added.

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

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        Add cairo patch to avoid crashes.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.

2018-12-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][WebKitLegacy] WebFrame.cpp: warning: delete called on non-final 'WebFrame' that has virtual functions but non-virtual destructor [-Wdelete-non-virtual-dtor]
        https://bugs.webkit.org/show_bug.cgi?id=192618

        Reviewed by Alex Christensen.

        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/UIDelegate.h:

2018-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        Make TextInputController.legacyAttributedString take DOM nodes and offsets
        https://bugs.webkit.org/show_bug.cgi?id=192653

        Reviewed by Wenson Hsieh.

        Updated TextInputController.legacyAttributedString to take DOM nodes and offsets instead of
        a DOM Range object in preparation to add layout tests for HTMLConverter which crosses
        shadow boundaries.

        * DumpRenderTree/mac/TextInputControllerMac.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]): Updated the selector signature.
        (+[TextInputController webScriptNameForSelector:]): Ditto.
        (-[TextInputController legacyAttributedString:offset:to:offset:]): Made this function take
        start node and offset then end node and offset pairs.

2018-12-12  Alex Christensen  <achristensen@webkit.org>

        Implement safe browsing in WebKit on WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=192641
        <rdar://problem/46376188>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate _webViewDidShowSafeBrowsingWarning:]):
        (safeBrowsingView):
        Add a test that the new delegate callback is called.

2018-12-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed manual rollout of r239100-r239102 and r239116
        https://bugs.webkit.org/show_bug.cgi?id=192151
        <rdar://problem/46655586>

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Removed.

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

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

        It broke the built because it depends on another patch that
        didn't land yet (Requested by KaL on #webkit).

        Reverted changeset:

        "[WPE] Add API to notify about frame displayed view backend
        callback"
        https://bugs.webkit.org/show_bug.cgi?id=192224
        https://trac.webkit.org/changeset/239103

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

        [WPE] Add API to notify about frame displayed view backend callback
        https://bugs.webkit.org/show_bug.cgi?id=192224

        Reviewed by Michael Catanzaro.

        Add a test case to check the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewFrameDisplayed):
        (beforeAll):

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

        [FreeType] Add initial implementation of variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=192151

        Reviewed by Michael Catanzaro.

        Add cairo patch to avoid crashes.

        * gtk/jhbuild.modules:
        * gtk/patches/cairo-ft-Use-FT_Done_MM_Var-instead-of-free-when-available.patch: Added.

2018-12-11  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag for CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192610

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-12-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix bad check in API test added in r239080.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Fix warning -Wmissing-field-initializers
        https://bugs.webkit.org/show_bug.cgi?id=192584

        Reviewed by Yusuke Suzuki.

        Initialize a struct with '{ }' instead of '= {0}'.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/EventSender.cpp:
        (makeMsg):
        (replaySavedEvents):
        (beginDragWithFilesCallback):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (updateMenuItemForHistoryItem):
        * MiniBrowser/win/WinMain.cpp:
        (wWinMain):
        * TestWebKitAPI/win/HostWindow.cpp:
        (TestWebKitAPI::HostWindow::clientRect const):
        (TestWebKitAPI::HostWindow::registerWindowClass):
        * TestWebKitAPI/win/PlatformWebViewWin.cpp:
        (TestWebKitAPI::PlatformWebView::registerWindowClass):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::windowSnapshotImage):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        PSON logic gets confused by concurrent decidePolicyForNavigationAction requests
        https://bugs.webkit.org/show_bug.cgi?id=192482
        <rdar://problem/46470145>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-11  Andy Estes  <aestes@apple.com>

        Introduce makeBlockPtr for lambdas
        https://bugs.webkit.org/show_bug.cgi?id=192594

        Reviewed by Alex Christensen.

        Adopted makeBlockPtr and added API tests.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::callUIScriptCallback):
        * TestWebKitAPI/Tests/WTF/BlockPtr.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner init]):
        (-[DownloadProgressTestRunner subscribeAndWaitForProgress]):

2018-12-11  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238764-238783): TestWTF.WTF.StringOperators is failing
        https://bugs.webkit.org/show_bug.cgi?id=192361
        <rdar://problem/46524903>

        Reviewed by Alex Christensen.

        Compile StringOperators.cpp with -O1 optimization level instead of -Os. This
        fixes the failures for me locally.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2018-12-11  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE build fix after r239028

        The FLATPAK_USER_DIR env var is not set early enough, leading to:

        Traceback (most recent call last):
        File "/home/phil/WebKit/Tools/Scripts/webkit-flatpak", line 28, in <module>
          sys.exit(WebkitFlatpak.load_from_args().run())
        File "/home/phil/WebKit/Tools/flatpak/flatpakutils.py", line 761, in run
          if not self.clean_args():
        File "/home/phil/WebKit/Tools/flatpak/flatpakutils.py", line 574, in clean_args
          _log.debug("Using flatpak user dir: %s" % os.environ["FLATPAK_USER_DIR"])
        File "/usr/lib/python2.7/UserDict.py", line 40, in __getitem__
          raise KeyError(key)
        KeyError: 'FLATPAK_USER_DIR'

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

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add ENABLE_RESOURCE_LOAD_STATISTICS to WebKitFeatures.cmake
        https://bugs.webkit.org/show_bug.cgi?id=192574

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Sync FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=192565

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to upload data that conforms to "public.item" but not "public.content"
        https://bugs.webkit.org/show_bug.cgi?id=192555
        <rdar://problem/35204990>

        Reviewed by Tim Horton.

        Add a test to verify that `.p12` files may be uploaded as files via drag and drop. "com.rsa.pkcs-12" is an
        example of a data type that conforms to "public.item", but not "public.content"; before this patch, we would
        only support uploading "public.content", so files such as these would not be accepted when dropping into file
        inputs, or be exposed as files on DataTransfer.

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

2018-12-10  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Follow-up to address Darin's feedback.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::keyExistsInKeychain):

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

        webkitpy: Ref tests don't respect platform specific expectations
        https://bugs.webkit.org/show_bug.cgi?id=192515
        <rdar://problem/46564839>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/base.py:
        (Port._expected_baselines_for_suffixes): Accept multiple suffixes so ref tests can use this function.
        (Port.expected_baselines): Move implementation to _expected_baselines_for_suffixes.
        (Port.expected_filename): Remove irrelevant FIXME, code clean-up.
        (Port.reference_files): Instead of just searching a single directory, use _expected_baselines_for_suffixes to
        search all platform expectations as well.
        * Scripts/webkitpy/port/base_unittest.py:
        (test_ref_tests_platform_directory):

2018-12-10  Chris Dumez  <cdumez@apple.com>

        Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=192509
        <rdar://problem/46500832>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[DataMappingSchemeHandler addMappingFromURLString:toData:]):
        (-[DataMappingSchemeHandler webView:startURLSchemeTask:]):
        (-[DataMappingSchemeHandler webView:stopURLSchemeTask:]):
        (-[CustomUserAgentDelegate _webView:decidePolicyForNavigationAction:userInfo:decisionHandler:]):
        (-[CustomUserAgentDelegate webView:didFinishNavigation:]):

2018-12-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Caret is obscured by finger when dragging over an editable element
        https://bugs.webkit.org/show_bug.cgi?id=192499
        <rdar://problem/46570101>

        Reviewed by Tim Horton.

        Augment some existing API tests to check that the `precise` flag is either on or off on `UIDropProposal`.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator lastKnownDropProposal]):

        Rename `currentDropProposal` to `lastKnownDropProposal`, and expose it as a readonly property.

        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator setShowCustomActionSheetBlock:]):
        (-[DragAndDropSimulator showCustomActionSheetBlock]):
        (-[DragAndDropSimulator setConvertItemProvidersBlock:]):
        (-[DragAndDropSimulator convertItemProvidersBlock]):
        (-[DragAndDropSimulator setOverridePerformDropBlock:]):
        (-[DragAndDropSimulator overridePerformDropBlock]):
        (-[DragAndDropSimulator setOverrideDragUpdateBlock:]):
        (-[DragAndDropSimulator overrideDragUpdateBlock]):
        (-[DragAndDropSimulator setDropCompletionBlock:]):
        (-[DragAndDropSimulator dropCompletionBlock]):

        Refactor these properties to return and take normal Objective-C blocks, rather than `BlockPtr`s. However, use
        `BlockPtr` instance variables to manage the lifetimes of these blocks.

        (-[DragAndDropSimulator _webView:willUpdateDropProposalToProposal:forSession:]):
        (-[DragAndDropSimulator _webView:willUpdateDataInteractionOperationToOperation:forSession:]): Deleted.

        Update this to use the new WebKit delegate hook for overriding the drop proposal.

2018-12-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] run-minibrowser improperly creates webkit-flatpak environment
        https://bugs.webkit.org/show_bug.cgi?id=190241

        Reviewed by Carlos Garcia Campos.

        run-minibrowser calls into webkit-flatpak to check if a flatpak environment is available.
        Currently this actually creates the directories needed for the flatpak environment. Fix it.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run):

2018-12-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Don't use the slice allocator
        https://bugs.webkit.org/show_bug.cgi?id=192360

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (aboutDataRequestFree):
        (aboutDataRequestNew):

2018-12-10  Tim Horton  <timothy_horton@apple.com>

        WKWebView should support custom tintColor
        https://bugs.webkit.org/show_bug.cgi?id=192518
        <rdar://problem/37243261>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKitCocoa/SystemColors.mm:
        (TestWebKitAPI::TEST):
        Add a test that tintColor affects UITextInputTraits' interaction colors.

2018-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] DragAndDropTests.RespectsExternalSourceFidelityRankings is flaky
        https://bugs.webkit.org/show_bug.cgi?id=192524

        Reviewed by Ryosuke Niwa.

        This test started failing on certain builds of iOS where UIKit now attempts to reveal the selection by scrolling
        (see <rdar://problem/28300343>). This API test simulates two drops from external sources, both from the point
        (300, 400) to (100, 300) in window coordinates. On these aforementioned builds of iOS, what happens is that the
        first drop inserts text that overflows the editable region by an enormous amount, which creates an extremely
        wide selection rect and increases the width of the document; revealing this selection causes the web view to
        scroll horizontally, such that the second attempt to simulate a drag from (300, 400) to (100, 300) fails, since
        these window coordinates no longer correspond to the drop destination element in the document.

        To fix this test, we simply mark the drop destination as `overflow: hidden` to ensure that we don't try and
        scroll horizontally after the first drop.

        * TestWebKitAPI/Tests/WebKitCocoa/autofocus-contenteditable.html:

2018-12-08  Daniel Bates  <dabates@apple.com>

        Fix lldb_webkit.py following r238771
        (https://bugs.webkit.org/show_bug.cgi?id=190234)

        Substitute WTFURLProvider for WebCoreURLProvider in one call site that was inadvertently
        missed in r238771.

        * lldb/lldb_webkit.py:
        (WebCoreDocumentProvider.url):

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] check-patch-relevance failure should not mark the overall build as failure
        https://bugs.webkit.org/show_bug.cgi?id=192510

        Reviewed by Lucas Forschler.

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

2018-12-07  Chris Dumez  <cdumez@apple.com>

        ProcessSwap.UseSessionCookiesAfterProcessSwapInPrivateBrowsing API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=192362
        <rdar://problem/46460360>

        Reviewed by Ryosuke Niwa.

        Move the call to _setCookieAcceptPolicy *after* we've constructed a WKWebView and thus
        *after* we know for sure we have a network process to communicate the policy to.
        This should address the failures on iOS.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-07  Jiewen Tan  <jiewen_tan@apple.com>

        Add keychain access entitlement to WebKitTestRunnerApp
        https://bugs.webkit.org/show_bug.cgi?id=192489
        <rdar://problem/45057952>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/Configurations/WebKitTestRunnerApp-iOS.entitlements:

2018-12-07  Saam Barati  <sbarati@apple.com>

        WKWebProcessPlugInLoadDelegate should have API for saying which rendering events it wants to listen for
        https://bugs.webkit.org/show_bug.cgi?id=192473

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgress.mm: Added.
        (-[DidFirstMeaningfulPaintRemoteObject didFirstMeaningfulPaint]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgressPlugIn.mm: Added.
        (-[RenderingProgressPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RenderingProgressPlugIn webProcessPlugInBrowserContextControllerRenderingProgressEvents:]):
        (-[RenderingProgressPlugIn webProcessPlugInBrowserContextController:renderingProgressDidChange:]):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderingProgressProtocol.h: Added.

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

        REGRESSION: run-webkit-tests may fail when using booted simulators (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192470
        <rdar://problem/46532001>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.setup_test_run): Check that the number of initialized devices matches the
        number of child processes.

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Send bug id as a build property
        https://bugs.webkit.org/show_bug.cgi?id=192494

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (BugzillaPatchFetcher.fetch):

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Builds should have a link to patch and bug
        https://bugs.webkit.org/show_bug.cgi?id=192492

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-build/steps.py:
        (ConfigureBuild.add_patch_id_url): Method to add Patch URL.
        (ConfigureBuild.add_bug_id_url): Method to add Bug URL.
        (ConfigureBuild.getPatchURL): Method to get Patch URL.
        (ConfigureBuild.getBugURL): Method to get Bug URL.

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Configure logfile for ews-app logs
        https://bugs.webkit.org/show_bug.cgi?id=192493

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py:

2018-12-07  Aakash Jain  <aakash_jain@apple.com>

        Style queue exception on some security bugs
        https://bugs.webkit.org/show_bug.cgi?id=190793

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/tool/steps/applywatchlist.py:
        (ApplyWatchList.run):

2018-12-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Cloned attachment elements lose their unique identifiers
        https://bugs.webkit.org/show_bug.cgi?id=192483

        Reviewed by Tim Horton.

        Introduce a new API test.

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

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

        Consecutive DumpRenderTree crashes are happening again on WinCairo BuildBots since r238903
        https://bugs.webkit.org/show_bug.cgi?id=192486

        Unreviewed infrastructure fix.

        WinCairo bots define WEBKIT_TEST_CHILD_PROCESSES to run less processes due to RAM restrictions.

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

2018-12-06  David Kilzer  <ddkilzer@apple.com>

        Injected bundle for WebKitTestRunner leaks WKTypeRef objects
        <https://webkit.org/b/192481>
        <rdar://problem/46539059>

        Reviewed by Simon Fraser.

        This patch:
        - Fixes leaks in various injected bundle methods that return +1
          retained WKTypeRef objects via pointer.
        - Asserts the returned object is the expected WKTypeRef.
        - Replaces 0 with nullptr in many places.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::shouldDumpPixels const):
        (WTR::TestRunner::whatToDump const):
        (WTR::TestRunner::shouldWaitUntilDone const):
        (WTR::TestRunner::shouldDumpFrameLoadCallbacks):
        (WTR::TestRunner::didReceiveServerRedirectForProvisionalNavigation const):
        (WTR::TestRunner::clearDidReceiveServerRedirectForProvisionalNavigation):
        (WTR::TestRunner::secureEventInputIsEnabled const):
        (WTR::TestRunner::isStatisticsPrevalentResource):
        (WTR::TestRunner::isStatisticsVeryPrevalentResource):
        (WTR::TestRunner::isStatisticsRegisteredAsSubresourceUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        (WTR::TestRunner::isStatisticsHasHadUserInteraction):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestRunner::statisticsUpdateCookieBlocking):
        (WTR::TestRunner::statisticsSubmitTelemetry):
        (WTR::TestRunner::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::statisticsResetToConsistentState):
        (WTR::TestRunner::getAllStorageAccessEntries):
        (WTR::TestRunner::hasDOMCache):
        (WTR::TestRunner::domCacheSize):
        (WTR::TestRunner::injectUserScript):
        (WTR::TestRunner::keyExistsInKeychain):

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

        REGRESSION: run-webkit-tests may fail when using booted simulators
        https://bugs.webkit.org/show_bug.cgi?id=192470
        <rdar://problem/46532001>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Logging uses the number of child processes to print out information about how efficiently tests
        were sharded after the fact. This number is the most meaningful if it is the maximum number of child processes used.
        * Scripts/webkitpy/port/base.py:
        (Port.max_child_processes): By default, Ports do not support running on any specific kind of device.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort.default_child_processes): Rather than using the currently initialized devices as a proxy for how many
        child processes are being used, check the device manager every time. Regardless of which devices are attached or
        available, iOS cannot boot watchOS devices and vice-versa. dedicated_simulators is not a known argument to
        device_count_for_type, use use_booted_simulator instead.
        (DevicePort.max_child_processes): Simulators can boot more devices than what is specified by device_count_for_type,
        but, if no devices are available, then max_child_processes should return 0 even for simulators.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        (IOSDeviceTest.test_max_child_processes):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.test_max_child_processes):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.test_max_child_processes):
        * Scripts/webkitpy/port/watch_simulator_unittest.py:
        (WatchSimulatorTest):
        (WatchSimulatorTest.test_max_child_processes):

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

        webkitpy: Ignore case when comparing device types (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=192409
        <rdar://problem/46491558>

        Unreviewed typo fix.

        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_comparison_lower_case):
        (DeviceTypeTest.test_comparsion_lower_case): Deleted.

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

        webkitpy: Create device given lower-case DeviceType
        <https://bugs.webkit.org/show_bug.cgi?id=192472>
        <rdar://problem/46532650>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._get_device_identifier_for_type): Comparing simctl device identifiers with DeviceTypes
        should be letter-case agnostic.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_lower_case_device_type):

2018-12-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] WKWebView should match UITextView behavior when editing text with an RTL keyboard
        https://bugs.webkit.org/show_bug.cgi?id=187554
        <rdar://problem/42075638>

        Reviewed by Tim Horton.

        Add support for simulating the keyboard input mode in layout tests using UIScriptController, as well as a new
        `TestOption` to make the web view editable.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::overriddenKeyboardInputMode const):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::swizzleCurrentInputMode):
        (WTR::TestController::setKeyboardInputModeIdentifier):

        Swizzle out several `UIKeyboardInputModeController` methods in order to convince UIKit that the user has
        selected a `UIKeyboardInputMode` corresponding to the given identifier. The call to
        `-prepareKeyboardInputModeFromPreferences:` is also necessary on iOS 12 in order to update cached writing
        direction state in UIKit.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setKeyboardInputModeIdentifier):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::setEditable):
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::setEditable):

2018-12-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Share ClassMethodSwizzler and InstanceMethodSwizzler between TestWebKitAPI and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=192437

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * TestRunnerShared/cocoa/ClassMethodSwizzler.h: Renamed from Tools/TestWebKitAPI/ClassMethodSwizzler.h.
        * TestRunnerShared/cocoa/ClassMethodSwizzler.mm: Renamed from Tools/TestWebKitAPI/ClassMethodSwizzler.mm.
        (ClassMethodSwizzler::ClassMethodSwizzler):
        (ClassMethodSwizzler::~ClassMethodSwizzler):
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.h: Renamed from Tools/TestWebKitAPI/cocoa/InstanceMethodSwizzler.h.
        * TestRunnerShared/cocoa/InstanceMethodSwizzler.mm: Renamed from Tools/TestWebKitAPI/cocoa/InstanceMethodSwizzler.mm.
        (InstanceMethodSwizzler::InstanceMethodSwizzler):
        (InstanceMethodSwizzler::~InstanceMethodSwizzler):

        Move these swizzling helper classes into TestRunnerShared.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (safeBrowsingView):
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDefaultNavigationDelegate.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):

        Remove namespacing around ClassMethodSwizzler and InstanceMethodSwizzler in a few API tests.

        * TestWebKitAPI/mac/TestFontOptions.mm:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::ClassMethodSwizzler::ClassMethodSwizzler): Deleted.
        (WTR::ClassMethodSwizzler::~ClassMethodSwizzler): Deleted.

        Remove this duplicate implementation of ClassMethodSwizzler in WebKitTestRunner.

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

        webkitpy: Clean-up apple_additions
        https://bugs.webkit.org/show_bug.cgi?id=192413
        <rdar://problem/46493491>

        Reviewed by Lucas Forschler.

        After the addition of watchOS, some functions which were originally iOS specific were
        generalized to include all devices.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._driver_class): Replace iOS specific call with generalized device call.
        (IOSDevicePort.path_to_crash_logs): Ditto.
        (IOSDevicePort.clean_up_test_run): Ditto.

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

        webkitpy: Ignore case when comparing device types
        https://bugs.webkit.org/show_bug.cgi?id=192409
        <rdar://problem/46491558>

        Reviewed by Lucas Forschler.

        This allows DeviceTypes constructed with lowercase strings to correctly compare
        against DeviceTypes coming from the simulator runtime.

        * Scripts/webkitpy/xcode/device_type.py:
        (DeviceType.__eq__):
        (DeviceType.__contains__):
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest):
        (DeviceTypeTest.test_comparsion_lower_case):

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

        webkitpy: Sort tests by associated device type
        https://bugs.webkit.org/show_bug.cgi?id=192161
        <rdar://problem/46345392>

        Reviewed by Lucas Forschler.

        Sort tests by device type and make an effort to run each specified device type.
        Do not run tests if their specified device is not available.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.is_watchos): Add watchos bits to platform info.
        (PlatformInfo._determine_os_name): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Assign each test a device type. Then, generate a list of
        device types to sequentially iterate through. Note that a test will run
        on the first device which matches.
        (Manager._end_test_run): Handle the case where no devices are available and no
        tests are run.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Manage child processes in manager.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.default_child_processes): Accept additional arguments.
        (Port.max_child_processes): Add upper limit for number of child processes.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort._device_type_with_version): Adds version to the DeviceType.
        (DevicePort.default_child_processes): Allows default_child_processes to be
        attached to a device type.
        (DevicePort.max_child_processes): Add upper limit to the maximum number of child processes.
        (DevicePort.setup_test_run): Use _device_type_with_version.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort.default_child_processes): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.default_child_processes): Deleted.
        (IOSSimulatorPort.check_sys_deps): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_child_processes): Accept additional arguments.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort):
        (WatchDevicePort.default_child_processes): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.default_child_processes): Deleted.
        (WatchSimulatorPort.check_sys_deps): Deleted.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.device_count_for_type): Count the number of devices
        available for a specific device type.

2018-12-05  Devin Rousso  <drousso@apple.com>

        Unreviewed, add myself to some watch lists.

        * Scripts/webkitpy/common/config/watchlist:

2018-12-05  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove the AppendPipeline state machine
        https://bugs.webkit.org/show_bug.cgi?id=192204

        Reviewed by Xabier Rodriguez-Calvar.

        Updated AbortableTaskQueue tests:

        Added test: AbortedBySyncTaskHandler.

        Renamed test: AbortDuringSyncTask -> AbortBeforeSyncTaskRun (in
        order to avoid confusion with the new test).

        Added checks for the correct destruction of response objects.

        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp:
        (TestWebKitAPI::FancyResponse::FancyResponse):
        (TestWebKitAPI::FancyResponse::~FancyResponse):
        (TestWebKitAPI::TEST):

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

        ProcessSwap.UseSessionCookiesAfterProcessSwapInPrivateBrowsing API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=192362

        Reviewed by Alex Christensen.

        Set the cookie policy to Accept to make sure the cookies are saved.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [WPE][GTK] Update GLib
        https://bugs.webkit.org/show_bug.cgi?id=191222

        Reviewed by Žan Doberšek.

        When I try running API tests locally, they crash with:

        GLib-GIO-WARNING **: unknown schema extension 'd'

        We need to update our old glib to support the 'd' value type, otherwise schemas that may
        exist on the host using this type will cause instant crashes.

        Also, switch the GLib build to use meson. This requires updating meson as well.

        * gtk/jhbuild.modules:
        * gtk/patches/glib-cast-function-type.patch: Removed.
        * gtk/patches/glib-gtester-do-not-consider-skipped-tests-as-failures.patch: Removed.
        * wpe/jhbuild.modules:
        * wpe/patches/glib-cast-function-type.patch: Removed.
        * wpe/patches/glib-revert-wakeup-changes.patch: Removed.

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

        [ews-app] Run BugzillaPatchFetcher periodically
        https://bugs.webkit.org/show_bug.cgi?id=192241

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py:
        * BuildSlaveSupport/ews-app/ews/apps.py:
        (EwsConfig.ready): This method is called by Django on startup.
        * BuildSlaveSupport/ews-app/ews/fetcher.py:
        (FetchLoop): Class which invokes BugzillaPatchFetcher every 60s.

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

        webkitpy: Support unicode in MeteredStream
        https://bugs.webkit.org/show_bug.cgi?id=192260

        Reviewed by Aakash Jain.

        It's possible that the test runner returns unicode characters to be logged when
        running layout tests.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Print message without attempting to encode/decode it.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_unicode):

2018-12-04  Keith Rollin  <krollin@apple.com>

        Update scripts for generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192081
        <rdar://problem/46312290>

        Reviewed by Brent Fulgham.

        The initial pass at generate-xcfilelists (a script for
        creating/updating the .xcfilelist files needed for various Generate
        Foo Source build phases in Xcode) only generated the .xcfilelist files
        that held the output files; it did not generate the list of input
        files. As well, for the sources generated by DerivedSources.make
        makefiles, the script accomplished this via the implementation of a
        convention in the makefile that allowed the printing of these output
        files when invoked with the 'print_all_generated_files' target. Use of
        this convention is inconvenient and error-prone.

        The script is now updated to address both of these issues. First, it
        generates for the input and output sets of files. Second, it does away
        with the convention in the DerivedSources.make makefiles and instead
        works from the dependency output information printed when `make` is
        invoked with --debug. This second part is implemented in the new
        script extract-dependencies-from-makefile.

        * Scripts/extract-dependencies-from-makefile: Added.
        (Parser):
        (Parser.__init__):
        (Parser.nextLine):
        (Parser.addTarget):
        (Parser.addPrereq):
        (Parser.doParse):
        (Parser.printInputs):
        (Parser.printOutputs):
        (parseArgs):
        (main):
        * Scripts/generate-xcfilelists:

2018-12-04  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE] Add gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=178900

        Reviewed by Michael Catanzaro.

        Add gtk-doc to WPE port. This patch tries to reuse as much code from
        WebKitGTK+ as possible.

        * gtkdoc/generate-gtkdoc: Renamed from Tools/gtk/generate-gtkdoc.
        (get_gtkdoc_module_paths): Add GDK and GTK only if building for GTK.
        (prepare_environment_for_gtkdoc_generation):
        (build_gtkdoc_for_wpe): Code to generate doc for WPE.
        (build_gtkdoc_for_wkgtk): Code to generate doc for WebKitGTK+. Moved from main.
        * gtkdoc/gtkdoc.py: Renamed from Tools/gtk/gtkdoc.py.
        (GTKDoc.__init__): Initialized required variables according to pylint.
        (GTKDoc.api_missing_documentation):
        * wpe/install-dependencies: Add gtkdoc dependency.

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

        [SOUP] Move URLSoup back to WebCore after r238771
        https://bugs.webkit.org/show_bug.cgi?id=192306

        Reviewed by Michael Catanzaro.

        Include GUniquePtrSoup from WebCore again.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:

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

        [GTK] Bump freetype, fontconfig, harfbuzz, cairo and icu in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=192310

        Reviewed by Michael Catanzaro.

        Update those dependencies to their latest stable versions.

        * gtk/jhbuild.modules:

2018-12-03  Tomas Popela  <tpopela@redhat.com>

        [GTK] Can't run MiniBrowser due to missing python2-yaml
        https://bugs.webkit.org/show_bug.cgi?id=192308

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

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

        Regression(PSON) Google OAuth is broken in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=192337
        <rdar://problem/46353558>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/GetSessionCookie.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/SetSessionCookie.html: Added.

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

        [PSON] Request by the client to process-swap is ignored if the window has an opener
        https://bugs.webkit.org/show_bug.cgi?id=192267
        <rdar://problem/46386886>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-12-03  Keith Rollin  <krollin@apple.com>

        Add .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192082
        <rdar://problem/46312533>

        Reviewed by Brent Fulgham.

        Add .xcfilelist files for Generate Derived Sources and Generate
        Unified Sources build phases in Xcode. These are just being staged for
        now; they'll be added to the Xcode projects later.

        * DumpRenderTree/DerivedSources-input.xcfilelist: Added.
        * DumpRenderTree/DerivedSources-output.xcfilelist: Added.
        * WebKitTestRunner/DerivedSources-input.xcfilelist: Added.
        * WebKitTestRunner/DerivedSources-output.xcfilelist: Added.

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

        Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=192272

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm:
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]):
        (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]):

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

        [iOSMac] Unable to upload non-image files using drag and drop in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=192283
        <rdar://problem/46399461>

        Reviewed by Ryosuke Niwa.

        Add a new API test to check that an item provider which contains plain text data and a file URL (but is not
        marked as an attachment) is still treated as an attachment upon drop. Furthermore, verify that "text/uri-list"
        does not expose the actual file URL written to the item provider.

        Additionally, rebaseline an existing API test to remove an extraneous "text/uri-list" type that appears in
        `DataTransfer.types`, but whose data is inaccessible via `getData` anyways.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-12-01  Don Olmstead  <don.olmstead@sony.com>

        Cleanup WebKit Features
        https://bugs.webkit.org/show_bug.cgi?id=192262

        Reviewed by Michael Catanzaro.

        Removes obsolete ENABLE options and variable names. Syncs the option's
        descriptions with what is present in WebKitFeatures.cmake. Sorts the
        options based on the associated define.

        * Scripts/webkitperl/FeatureList.pm:

2018-12-01  Chris Dumez  <cdumez@apple.com>

        [PSON] process-swapping may occur even though opener has handle to openee
        https://bugs.webkit.org/show_bug.cgi?id=192277

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Unreviewed, rolling out r238764.

        Breaks existing layout tests

        Reverted changeset:

        "webkitpy: Support unicode in MeteredStream"
        https://bugs.webkit.org/show_bug.cgi?id=192260
        https://trac.webkit.org/changeset/238764

2018-12-01  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Move URL tests from TestWebKitAPI to TestWTF
        https://bugs.webkit.org/show_bug.cgi?id=192275

        Reviewed by Keith Miller.

        Since URL is moved from WebCore to WTF, we also move tests for them from TestWebKitAPI (TestWebCore) to TestWTF.
        But we still have some tests in TestWebCore since only WebCore implements TextEncoding. That part is now decoupled
        from URLParser tests and new URLParserTextEncoding.cpp is created.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/URL.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/URL.cpp.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/URLParser.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WTF/cocoa/URLExtras.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/URLParserTextEncoding.cpp: Added.
        (TestWebKitAPI::ExpectedParts::isInvalid const):
        (TestWebKitAPI::eq):
        (TestWebKitAPI::insertTabAtLocation):
        (TestWebKitAPI::invalidParts):
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

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

        Unreviewed LFC passing test list update.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-30  Alex Christensen  <achristensen@webkit.org>

        Move URL from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=190234

        Reviewed by Keith Miller.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::createURL):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::checkRelativeURL):
        (TestWebKitAPI::checkURLDifferences):
        (TestWebKitAPI::checkRelativeURLDifferences):
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        * TestWebKitAPI/Tests/WebCore/YouTubePluginReplacement.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/URLExtras.mm:
        (TestWebKitAPI::originalDataAsString):
        (TestWebKitAPI::userVisibleString):
        (TestWebKitAPI::literalURL):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/LoadInvalidURLRequest.mm:
        (literalURL):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        * TestWebKitAPI/Tests/mac/SSLKeyGenerator.mm:
        * TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
        (TestWebKitAPI::Util::createURLForResource):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WTFURL_SummaryProvider):
        (WTFURLProvider):
        (WebCoreURL_SummaryProvider): Deleted.
        (WebCoreURLProvider): Deleted.
        (WebCoreURLProvider.__init__): Deleted.
        (WebCoreURLProvider.to_string): Deleted.

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

        webkitpy: Support unicode in MeteredStream
        https://bugs.webkit.org/show_bug.cgi?id=192260

        Reviewed by Stephanie Lewis.

        It's possible that the test runner returns unicode characters to be logged when
        running layout tests.

        * Scripts/webkitpy/layout_tests/views/metered_stream.py:
        (MeteredStream.write): Message written to metered stream should be unicode.
        * Scripts/webkitpy/layout_tests/views/metered_stream_unittest.py:
        (RegularTest.test_unicode):

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

        REGRESSION (r238749): run-api-tests dies with AttributeError: 'IOSSimulatorPort' object has no attribute 'DEFAULT_DEVICE_CLASS'
        https://bugs.webkit.org/show_bug.cgi?id=192257
        <rdar://problem/46384671>

        Reviewed by Stephanie Lewis.

        Follow-up fix for r238749.

        * Scripts/webkitpy/api_tests/manager.py:
        (Manager._initialize_devices): Use DEFAULT_DEVICE_TYPE instead of DEFAULT_DEVICE_CLASS.

2018-11-30  Chris Dumez  <cdumez@apple.com>

        [PSON] We are sometimes swapping processes even though there is an opened window with an opener link to us
        https://bugs.webkit.org/show_bug.cgi?id=192242

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-30  Don Olmstead  <don.olmstead@sony.com>

        Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=192197

        Reviewed by Jiewen Tan.

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

2018-11-30  Dean Jackson  <dino@apple.com>

        Add first-class support for .mjs files in jsc binary
        https://bugs.webkit.org/show_bug.cgi?id=192190
        <rdar://problem/46375715>

        Reviewed by Keith Miller.

        Add .mjs files to the regexp looking for all JS files.

        * Scripts/run-jsc-stress-tests:

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

        webkitpy: Use DeviceType instead of str to represent device class
        https://bugs.webkit.org/show_bug.cgi?id=192160
        <rdar://problem/46344845>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._custom_device_for_test): Use DeviceTypes instead of strings to represent device type.
        (Manager._set_up_run): Do not set _options.device_class, use device_type instead of device_class.
        (Manager.run): Use device_type instead of device_class.
        (Manager._print_expectations_for_subset): Ditto.
        (Manager.print_expectations): Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_uses_custom_device): Use DeviceType and actual device definition.
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.print_workers_and_shards): Outputting the device suffix doesn't really help, and means
        device type needs to be passed around.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/base.py:
        (Port):
        (Port.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.setup_test_run): Receive device_type as DeviceType object.
        (DevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort):
        (IOSSimulatorPort.__init__): Deleted.
        (IOSSimulatorPort._set_device_class): Deleted.
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/port/watch.py:
        (WatchPort):
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort):
        (WatchSimulatorPort.__init__): Deleted.
        (WatchSimulatorPort._set_device_class): Deleted.
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_test_run): Use device_type instead of device_class.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._disambiguate_device_type): Using the existing devices for this is
        a problem if no such device exists yet. Use the _device_identifier_to_name dictionary instead
        since this should have hardware types in the device names.

2018-11-30  David Quesada  <david_quesada@apple.com>

        -[WKProcessPool _downloadURLRequest:] should allow specifying the initiating web view
        https://bugs.webkit.org/show_bug.cgi?id=192212
        rdar://problem/46363706

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm:
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):

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

        [LFC][BFC] Compute min/maxHeight margins only when they are needed.
        https://bugs.webkit.org/show_bug.cgi?id=192223

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][BFC][MarginCollapsing] Do not use computed display box values for border and padding
        https://bugs.webkit.org/show_bug.cgi?id=192214

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-30  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][MiniBrowser] Handle Device Info permission requests
        https://bugs.webkit.org/show_bug.cgi?id=191585

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserTab.c:
        (permissionRequestDataNew):
        (permissionRequestDataFree):
        (permissionRequestDialogResponse):
        (decidePermissionRequest):
        (browserTabConstructed):

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

        Unreviewed GTK+ gardening. Stop running tests without complex text enforced

        We have enforced complex text in GTK+ for one release cycle without noticing any major issue nor performance
        regression.

        * WebKitTestRunner/gtk/main.cpp:
        (main):

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

        REGRESSION (r238635): Dragging a text selection within WKWebView causes the selection highlight to get into a bad state
        https://bugs.webkit.org/show_bug.cgi?id=192165
        <rdar://problem/46346682>

        Reviewed by Daniel Bates.

        Fixes 11 API tests that started failing or timing out after r238635. See below for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::webViewForEditActionTestingWithPageNamed):

        Ensure that the web view becomes first responder before executing edit actions.

        * TestWebKitAPI/Tests/WebKitCocoa/autofocus-contenteditable.html:
        * TestWebKitAPI/Tests/WebKitCocoa/contenteditable-and-textarea.html:

        Tweak these tests to allow selected content to overflow the width of the web view. Without this change,
        ContentEditableToContentEditable and ContentEditableToTextarea will sometimes fail because the content causes
        the body to scroll horizontally, so we miss the drop destination.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (loadTestPageAndEnsureInputSession):

        Add a new helper to load a test page with a given name, become first responder, and wait until an input session
        starts. Use this in various drag and drop tests to reduce code duplication.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator initWithWebView:]):
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _concludeDropAndPerformOperationIfNecessary]):
        (-[DragAndDropSimulator _advanceProgress]):

        To more accurately emulate UIKit behavior, begin focus preservation when starting a drag, and attempt to clear
        the focus preservation token when the drag session ends. This allows us to simulate and test the scenario that
        regressed with r238635.

        (-[DragAndDropSimulator ensureInputSession]):
        (-[DragAndDropSimulator _webView:didStartInputSession:]):
        (-[DragAndDropSimulator waitForInputSession]): Deleted.

        Refactored into -ensureInputSession. Instead of assuming that an input session has not yet been started, simply
        wait for an input session to start if needed.

        * TestWebKitAPI/ios/UIKitSPI.h:

        Add a new SPI declaration.

2018-11-29  Tim Horton  <timothy_horton@apple.com>

        Inform clients when editable image attachment backing data changes
        https://bugs.webkit.org/show_bug.cgi?id=192206
        <rdar://problem/46350277>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[AttachmentUpdateObserver init]):
        (-[AttachmentUpdateObserver dataInvalidated]):
        (-[AttachmentUpdateObserver _webView:didInvalidateDataForAttachment:]):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::expectAttachmentInvalidation):
        (webViewForTestingAttachments):
        (TestWebKitAPI::forEachViewInHierarchy):
        (TestWebKitAPI::findEditableImageCanvas):
        (TestWebKitAPI::drawSquareInEditableImage):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/PencilKitTestSPI.h: Added.
        Add a test ensuring that we get an invalidation callback when an editable image is changed.

2018-11-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238445)[Buildbot] Unknown builder 'GTK Linux 32-bit Release' in scheduler 'trunk'
        https://bugs.webkit.org/show_bug.cgi?id=192143

        Reviewed by Philippe Normand.

        Buildbot can't start since r238445.

        > Configuration Errors:
        >   Unknown builder 'GTK Linux 32-bit Release' in scheduler 'trunk'
        >   Unknown builder 'GTK Linux ARM Release' in scheduler 'trunk'

        * BuildSlaveSupport/build.webkit.org-config/config.json: Removed deprecated builders.

2018-11-29  David Quesada  <david_quesada@apple.com>

        Add SPI to publish NSProgress on active downloads
        https://bugs.webkit.org/show_bug.cgi?id=192021
        rdar://problem/44405661

        Reviewed by Alex Christensen.

        Add API tests to exercise the progress-publishing functionality in a variety of scenarios.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DownloadProgress.mm: Added.
        (+[DownloadProgressTestProtocol registerProtocolForTestRunner:]):
        (+[DownloadProgressTestProtocol unregisterProtocol]):
        (+[DownloadProgressTestProtocol canInitWithRequest:]):
        (+[DownloadProgressTestProtocol canonicalRequestForRequest:]):
        (+[DownloadProgressTestProtocol requestIsCacheEquivalent:toRequest:]):
        (-[DownloadProgressTestProtocol startLoading]):
        (-[DownloadProgressTestProtocol stopLoading]):
        (-[DownloadProgressTestRunner init]):
        (-[DownloadProgressTestRunner startLoadingWithProtocol:]):
        (-[DownloadProgressTestRunner tearDown]):
        (-[DownloadProgressTestRunner _didGetProgress:]):
        (-[DownloadProgressTestRunner _didLoseProgress]):
        (-[DownloadProgressTestRunner subscribeAndWaitForProgress]):
        (-[DownloadProgressTestRunner waitToLoseProgress]):
        (-[DownloadProgressTestRunner startDownload:expectedLength:]):
        (-[DownloadProgressTestRunner publishProgress]):
        (-[DownloadProgressTestRunner receiveData:]):
        (-[DownloadProgressTestRunner finishDownloadTask]):
        (-[DownloadProgressTestRunner failDownloadTask]):
        (-[DownloadProgressTestRunner waitForDownloadDidCreateDestination]):
        (-[DownloadProgressTestRunner waitForDownloadFinished]):
        (-[DownloadProgressTestRunner waitForDownloadCanceled]):
        (-[DownloadProgressTestRunner waitForDownloadFailed]):
        (-[DownloadProgressTestRunner waitForUpdatedCompletedUnitCount]):
        (-[DownloadProgressTestRunner observeValueForKeyPath:ofObject:change:context:]):
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[DownloadProgressTestRunner webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DownloadProgressTestRunner _downloadDidStart:]):
        (-[DownloadProgressTestRunner _download:didCreateDestination:]):
        (-[DownloadProgressTestRunner _downloadDidFinish:]):
        (-[DownloadProgressTestRunner _downloadDidCancel:]):
        (-[DownloadProgressTestRunner _download:didFailWithError:]):
        (-[DownloadProgressTestRunner _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (TEST):

2018-11-29  Alexey Proskuryakov  <ap@apple.com>

        Exception in bot watcher's dashboard if a hidden platform in no longer configured for display
        https://bugs.webkit.org/show_bug.cgi?id=185527

        Reviewed by Aakash Jain.

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

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

        [LFC][BFC][Quirk] Body and html height stretching.
        https://bugs.webkit.org/show_bug.cgi?id=192154

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        webkitpy: Unify device creation
        https://bugs.webkit.org/show_bug.cgi?id=192158
        <rdar://problem/46344757>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.setup_test_run): Use DEVICE_MANAGER to create devices based on the specified device class.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort): Add DEFAULT_DEVICE_CLASS.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Deleted.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort): Add DEFAULT_DEVICE_CLASS.
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort):
        (WatchDevicePort._create_devices): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort._create_devices): Deleted.
        * Scripts/webkitpy/xcode/device_type_unittest.py:
        (DeviceTypeTest.test_from_string): Test that DeviceTypes without hardware types can be constructed
        from strings.

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

        EWS iOS-sim bots sometimes fails to shutdown simulator
        https://bugs.webkit.org/show_bug.cgi?id=191864

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice._shut_down): Increase time to wait for simulated device to
        shut down, ignore exit code indicating a device is already shut down.

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

        webkitpy: Unify ios_version/watchos_version code
        https://bugs.webkit.org/show_bug.cgi?id=192153
        <rdar://problem/46343642>

        Reviewed by Lucas Forschler.

        Treating watchOS and iOS versions differently makes it harder to share code between the similar ports.

        * Scripts/webkitpy/port/device_port.py:
        (DevicePort):
        (DevicePort.device_version): Added.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Use device_version() instead of ios_version().
        (IOSPort.ios_version): Deleted.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.device_version): Renamed from ios_version().
        (IOSDevicePort.ios_version): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.device_version): Renamed from ios_version().
        (IOSSimulatorPort.default_child_processes.booted_ios_devices_filter): Use device_version() instead of ios_version().
        (IOSSimulatorPort._create_devices): Ditto.
        (IOSSimulatorPort.check_sys_deps): Ditto.
        (IOSSimulatorPort.ios_version): Deleted.
        * Scripts/webkitpy/port/watch.py:
        (WatchPort.default_baseline_search_path): Use device_version() instead of watchos_version().
        (WatchPort.watchos_version): Deleted.
        * Scripts/webkitpy/port/watch_device.py:
        (WatchDevicePort.device_version): Renamed from watchos_version().
        (WatchDevicePort.watchos_version): Deleted.
        * Scripts/webkitpy/port/watch_simulator.py:
        (WatchSimulatorPort.device_version): Renamed from watchos_version().
        (WatchSimulatorPort.default_child_processes.filter_booted_watchos_devices): Use device_version() instead of watchos_version().
        (WatchSimulatorPort._create_devices): Ditto.
        (WatchSimulatorPort.check_sys_deps): Ditto.
        (WatchSimulatorPort.watchos_version): Deleted.

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

        [iOSMac] Dropping text selections from web content into editable elements crashes the web process
        https://bugs.webkit.org/show_bug.cgi?id=192113
        <rdar://problem/46323701>

        Reviewed by Ryosuke Niwa.

        Add a test to verify that, when dropping an item with both "com.apple.webarchive" and "public.utf8-plain-text"
        representations, the higher fidelity web archive data is used when handling the drop.

        * TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Fetch bugs from Bugzilla and submit to Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191947

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/fetcher.py: Added.

2018-11-28  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API test after r238585
        https://bugs.webkit.org/show_bug.cgi?id=192022

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        On iOS, a safe browsing warning over a WKWebView with frame of {0, 0, 0, 0} has a size of {0, 0}, which is fine.
        The test was added to catch a bug on Mac platforms, so testing it only on Mac will catch any regression.

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Configure python logging
        https://bugs.webkit.org/show_bug.cgi?id=192005

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/__init__.py: Configured logging.

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192031
        <rdar://problem/46286816>

        Reviewed by Alex Christensen.

        The Generate Derived Sources and Generate Unified Sources build phases
        in Xcode need to have their inputs and outputs specified. This
        specification will come in the form of .xcfilelist files that will be
        attached to these build phases. There is one .xcfilelist file that
        lists the input file and one that lists the output files. As part of
        this work, the various generate-{derived,unified}-sources scripts that
        are executed in these Generate build phases are modified to help in
        the creation of these .xcfilelist files. In particular, they can now
        be invoked with command-line parameters. These parameters are then
        used to alter the normal execution of these scripts, causing them to
        produce the .xcfilelist files as opposed to actually generating the
        files that are listed in those files.

        * DumpRenderTree/Scripts/generate-derived-sources.sh:
        * WebKitTestRunner/Scripts/generate-derived-sources.sh:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Revert print_all_generated_files work in r238008; tighten up target specifications
        https://bugs.webkit.org/show_bug.cgi?id=192025
        <rdar://problem/46284301>

        Reviewed by Alex Christensen.

        In r238008, I added a facility for DerivedSources.make makefiles to
        print out the list of files that they generate. This output was used
        in the generation of .xcfilelist files used to specify the output of
        the associated Generate Derived Sources build phases in Xcode. This
        approach worked, but it meant that people would need to follow a
        specific convention to keep this mechanism working.

        Instead of continuing this approach, I'm going to implement a new
        facility based on the output of `make` when passed the -d flag (which
        prints dependency information). This new mechanism is completely
        automatic and doesn't need maintainers to follow a convention. To that
        end, remove most of the work performed in r238008 that supports the
        print_all_generated_files target.

        At the same time, it's important for the sets of targets and their
        dependencies to be complete and correct. Therefore, also include
        changes to bring those up-to-date. As part of that, you'll see
        prevalent use of a particular technique. Here's an example:

            BYTECODE_FILES = \
                Bytecodes.h \
                BytecodeIndices.h \
                BytecodeStructs.h \
                InitBytecodes.asm \
            #
            BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))

            all : $(BYTECODE_FILES)

            $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
                ...

        These lines indicate a set of generated files (those specified in
        BYTECODE_FILES). These files are generated by the BytecodeList.rb
        tool. But, as opposed to the normal rule where a single foo.output is
        generated by foo.input plus some additional dependencies, this rule
        produces multiple output files from a tool whose connection to the
        output files is not immediately clear. A special approach is needed
        where a single rule produces multiple output files. The normal way to
        implement this is to use an .INTERMEDIATE target. However, we used
        this approach in the past and ran into a problem with it, addressing
        it with an alternate approach in r210507. The above example shows this
        approach. The .'s in the list of target files are replaced with %'s,
        and the result is used as the left side of the dependency rule.

        * DumpRenderTree/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.make:

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to get list of Bugzilla patches needing review
        https://bugs.webkit.org/show_bug.cgi?id=191942

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
        (Bugzilla.get_list_of_patches_needing_reviews): Get list of patches needing review.
        (BugzillaBeautifulSoup.fetch_attachment_ids_from_review_queue): Copied from Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py
        (BugzillaBeautifulSoup._load_query): Ditto.
        (BugzillaBeautifulSoup._parse_attachment_ids_request_query): Ditto.

2018-11-28  Daniel Bates  <dabates@apple.com>

        [iOS] Page not defocused when Find-in-page becomes first responder
        https://bugs.webkit.org/show_bug.cgi?id=192084
        <rdar://problem/46146777>

        Reviewed by Tim Horton.

        Add tests for both Mac and iOS to ensure that when finding a string on the page
        that we do not start an input session if a match is found in an <input> and the
        WKWebView is not the first responder.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFindString.mm: Added.
        (-[WKWebViewFindStringInputDelegate _webView:didStartInputSession:]):
        (-[WKWebViewFindStringFindDelegate findString]):
        (-[WKWebViewFindStringFindDelegate _webView:didCountMatches:forString:]):
        (-[WKWebViewFindStringFindDelegate _webView:didFindMatches:forString:withMatchIndex:]):
        (-[WKWebViewFindStringFindDelegate _webView:didFailToFindString:]):
        (returnNo):
        (returnYes):
        (viewIsFirstResponder):
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::PlatformWebView): Make the view the first responder before the
        window key. This matches the ordering used in PlatformWebView::focus(). No behavior change.

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add BeautifulSoup
        https://bugs.webkit.org/show_bug.cgi?id=191994

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/thirdparty: Added.
        * BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py: Added.
        * BuildSlaveSupport/ews-app/ews/thirdparty/__init__.py: Added.

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to download Patch from Bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=191943

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/bugzilla.py: Added.
        (Bugzilla.retrieve_attachment): Retreives the attachment from Bugzilla and saves to disk.
        (Bugzilla._fetch_attachment_json):
        (Bugzilla.file_path_for_patch):
        * BuildSlaveSupport/ews-app/ews/common/util.py: Added.
        (fetch_data_from_url): Method to fetch data from given url.
        * BuildSlaveSupport/ews-app/ews/config.py:

2018-11-28  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add methods to update Patch fields
        https://bugs.webkit.org/show_bug.cgi?id=191931

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.set_sent_to_buildbot):
        (Patch.set_bug_id):
        (Patch.set_obsolete):

2018-11-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Allow WebKit clients to specify a minimum effective width for layout.
        https://bugs.webkit.org/show_bug.cgi?id=191499
        <rdar://problem/45362678>

        Reviewed by Wenson Hsieh.

        Allow UIScriptController to set WKWebView's minimum effective width with a new `setMinimumEffectiveWidth` method.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setViewScale):
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::setMinimumEffectiveWidth):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

2018-11-28  Lucas Forschler  <lforschler@apple.com>

        Fix webkitbot hi command.
        https://bugs.webkit.org/show_bug.cgi?id=192080

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

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

        [LFC][Quirk] Use non-collapsed vertical margin values when the container is stretched to the size of the ICB.
        https://bugs.webkit.org/show_bug.cgi?id=192078

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC] Add support for quirk container's collapsing top margin in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=192070

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-28  Thibault Saunier  <tsaunier@igalia.com>

        [WebRTC][GStreamer] Make sure to have the default microphone on the top of the list
        https://bugs.webkit.org/show_bug.cgi?id=192026

        Reviewed by Philippe Normand.

        Otherwise we might end up picking a useless one in some applications
        (not sure what those application do though).

        GStreamer patch proposed as https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/merge_requests/34/diffs

        * flatpak/org.webkit.CommonModules.yaml:
        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0014-pulse-Mark-default-devices-as-default.patch: Added.

2018-11-28  Tomas Popela  <tpopela@redhat.com>

        [GTK] Silence compilation warnings in glib unittests
        https://bugs.webkit.org/show_bug.cgi?id=192009

        Reviewed by Michael Catanzaro.

        Mark the destructor as virtual.

        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::~Test):

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
        https://bugs.webkit.org/show_bug.cgi?id=192055
        <rdar://problem/46288783>

        Reviewed by Saam Barati.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Make synchronous IPC introduced in r237267 asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=190757

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        webkitpy: Add watchOS ports
        https://bugs.webkit.org/show_bug.cgi?id=191974
        <rdar://problem/46251051>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/factory.py:
        (PortFactory): Add WatchDevice and WatchSimulator ports.
        * Scripts/webkitpy/port/watch.py: Added.
        (WatchPort): Base class for watchOS ports.
        * Scripts/webkitpy/port/watch_device.py: Added.
        (WatchDevicePort): Class for running layout tests on a watchOS device.
        * Scripts/webkitpy/port/watch_simulator.py: Added.
        (WatchSimulatorPort): Class for running layout tests on a watchOS simulator.
        * Scripts/webkitpy/port/watch_simulator_unittest.py: Added.
        (WatchSimulatorTest):
        * Scripts/webkitpy/port/watch_testcase.py: Added.
        (WatchTest):

2018-11-27  Alex Christensen  <achristensen@webkit.org>

        Safe browsing warning text needs to be visible on High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=192022

        Reviewed by Tim Horton.

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

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

        Unreviewed, fix the watchOS engineering build

        Disable a newly added API test, since DDScannerResult is unavailable on watchOS.

        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:

2018-11-27  Chris Dumez  <cdumez@apple.com>

        Regression(PSON) crash under WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame()
        https://bugs.webkit.org/show_bug.cgi?id=191983
        <rdar://problem/46246863>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-27  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to communicate with Buildbot (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191935
        <rdar://problem/46262314>

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/ews-app/ews/common/buildbot.py:
        (Buildbot.send_patch_to_buildbot):

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

        [Cocoa] No way for clients to tell whether the content view is in the responder chain when the web view is
        https://bugs.webkit.org/show_bug.cgi?id=169212
        <rdar://problem/30899656>

        Reviewed by Tim Horton.

        Add an API test to exercise the behavior of `-_contentViewIsFirstResponder` when an embedded text input becomes
        and resigns first responder.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFirstResponderTests.mm: Added.
        (-[FirstResponderTestingView initWithFrame:]):
        (-[FirstResponderTestingView inputField]):
        (TestWebKitAPI::TEST):

2018-11-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Remove ENABLE_ACCESSIBILITY CMake variable
        https://bugs.webkit.org/show_bug.cgi?id=191831

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/CMakeLists.txt:

2018-11-26  Tim Horton  <timothy_horton@apple.com>

        Insert <attachment> elements under editable images to make their backing data accessible
        https://bugs.webkit.org/show_bug.cgi?id=191844
        <rdar://problem/30900149>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::attachmentInfo):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::attachmentInfo):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::attachmentInfo):
        Add a UIScriptController mechanism to retrieve information about
        a given attachment.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add support to communicate with Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191935

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/common/__init__.py: Added.
        * BuildSlaveSupport/ews-app/ews/common/buildbot.py: Added.

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

        webkitpy: Race condition in ServerProcess tests
        https://bugs.webkit.org/show_bug.cgi?id=191989
        <rdar://problem/45536844>

        Reviewed by Lucas Forschler.

        Serializing these tests to prevent the race conditions.

        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.serial_test_basic):
        (TestServerProcess.serial_test_read_after_process_exits):
        (TestServerProcess.serial_test_process_crashing):
        (TestServerProcess.serial_test_process_crashing_no_data):
        (TestServerProcess.test_basic): Deleted.
        (TestServerProcess.test_read_after_process_exits): Deleted.
        (TestServerProcess.test_process_crashing): Deleted.
        (TestServerProcess.test_process_crashing_no_data): Deleted.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add field in Patch object to indicate if it has been sent to Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=191929

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch): Added sent_to_buildbot field.
        (Patch.is_patch_sent_to_buildbot): Checks if the patch has been sent to Buildbot.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add a config file
        https://bugs.webkit.org/show_bug.cgi?id=191933

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/config.py: Added.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add methods to save patch to database
        https://bugs.webkit.org/show_bug.cgi?id=191928

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        (Patch.save_patch): Method to save the patch to database.
        (Patch.save_patches): Method to save multiple patches to database.
        (Patch.is_valid_patch_id): Checks if the patch id is valid.
        (Patch.is_existing_patch_id): Checks if the patch id already exists in database.

2018-11-26  Alex Christensen  <achristensen@webkit.org>

        Rename WKWebView._safeBrowsingWarningForTesting to _safeBrowsingWarning to use it for more than testing
        https://bugs.webkit.org/show_bug.cgi?id=191981

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (TEST):
        (safeBrowsingView):

2018-11-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r237738): Command Down Arrow doesn't scroll to the end of a page anymore
        https://bugs.webkit.org/show_bug.cgi?id=191967
        <rdar://problem/45976390>

        Reviewed by Tim Horton.

        Add more test infrastructure to dispatch key up events.

        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (createHIDKeyEvent): Renamed from createHIDKeyDownEvent() and modified to take a boolean as
        to whether to create an event for a key down or key up.
        (createHIDKeyDownEvent): Deleted; renamed to createHIDKeyEvent().
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::createUIPhysicalKeyboardEvent): Added. Convenience function to create a UIPhysicalKeyboardEvent.
        (WTR::UIScriptController::keyDown): Modified to dispatch a key up event in addition to dispatching
        a key down event.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Set Foreign Keys in EWS Django app models
        https://bugs.webkit.org/show_bug.cgi?id=191790

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/builds.py: Set Foreign Key.
        * BuildSlaveSupport/ews-app/ews/models/steps.py: Ditto.

2018-11-26  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Do not store patch content in database
        https://bugs.webkit.org/show_bug.cgi?id=191788

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/patch.py: Removed content field.

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

        webkitpy: Retry app installation on watchOS simulators (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191769
        <rdar://problem/46139850>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice): Increase retry attempts.

2018-11-26  Daniel Bates  <dabates@apple.com>

        Move testRunner.toggleCapsLock() to uiController
        https://bugs.webkit.org/show_bug.cgi?id=191972

        Reviewed by Tim Horton.

        Move testRunner.toggleCapsLock() to uiController as uiController is the preferred JavaScript
        object for UI test functions. Having this functionality be on uiController makes it an
        asynchronous function naturally and complements use of onkeydown, onkeyup listeners to know
        when the Caps Lock key event is dispatched. It also facilitates its use directly as part of
        scripts with other uiController functions invocations that are passed in a single invocation
        of testRunner.runUIScript().

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::toggleCapsLock):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::toggleCapsLock):
        Added stub functions that invoke the callback. We do not support toggling caps lock in Legacy
        WebKit at the moment. Legacy WebKit reads the caps lock key state directly from the OS. Modern
        WebKit caches the caps lock state in the WebProcess as a natural side effect of the fact that
        the UIProcess is the only process capable of querying the caps lock key state from the OS and
        hence the UIProcess must send over this state to the WebProcess.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: Add IDL for new function.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::toggleCapsLock): Added empty implementation for ports non-Cocoa ports.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::toggleCapsLock): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::toggleCapsLock): Deleted; moved to UIScriptController::toggleCapsLock().
        Removed logic to handle testRunner.toggleCapsLock().

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::toggleCapsLock): Add stub function that invokes the callback
        and a FIXME comment that explains that we will implement this function in <https://bugs.webkit.org/show_bug.cgi?id=191815>.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::toggleCapsLock): Moved the implementation from TestController::toggleCapsLock().

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

        [Win] Reduce the use of WKSI library calls: CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=191777
        <rdar://problem/46140542>

        Reviewed by Zalan Bujtas.

        Update the Windows build of WebKit to refer to the SPI headers, rather than WebKitSystemInterface.
        Move a small amount of glue code from WKSI to WebCore, and remove any includes or link
        directives for WebKitSystemInterface.lib.

        * TestWebKitAPI/PlatformWin.cmake:

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

        [LFC][IFC] Use float box's margin box to adjust the line constraints.
        https://bugs.webkit.org/show_bug.cgi?id=191961

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        Unreviewed test fix after r238467.

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

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

        Unreviewed, fix the internal iOS 12 build after r238471

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

2018-11-25  Tim Horton  <timothy_horton@apple.com>

        Make it possible to insert editable images with a gesture
        https://bugs.webkit.org/show_bug.cgi?id=191937

        Reviewed by Wenson Hsieh.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        If the canvas already has a drawing, draw a new stroke on top of it
        instead of removing the existing stroke.

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

        [Cocoa] Add WKWebView SPI to trigger and remove data detection
        https://bugs.webkit.org/show_bug.cgi?id=191918
        <rdar://problem/36185051>

        Reviewed by Tim Horton.

        Add an API test to exercise the new WebKit SPI.

        * TestWebKitAPI/DataDetectorsCoreSPI.h: Added.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        (-[WKWebView synchronouslyDetectDataWithTypes:]):
        (-[WKWebView synchronouslyRemoveDataDetectedLinks]):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::TEST):
        (-[TestWKWebView tagsInBody]): Deleted.
        (-[TestWKWebView expectElementTagsInOrder:]): Deleted.
        (-[TestWKWebView expectElementCount:tagName:]): Deleted.
        (-[TestWKWebView expectElementTag:toComeBefore:]): Deleted.

        Rename this from `-expectElementCount:tagName:` to `-expectElementCount:querySelector:`.

        * TestWebKitAPI/Tests/WebKitCocoa/data-detectors.html: Added.

        Add a new test page containing some content that can be data detected.

        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[WKWebView tagsInBody]):
        (-[WKWebView expectElementTagsInOrder:]):
        (-[WKWebView expectElementCount:querySelector:]):
        (-[WKWebView expectElementTag:toComeBefore:]):

        Move some testing helper functions from WKAttachmentTests to a testing category on WKWebView. This allows us to
        use `-expectElementCount:querySelector:` in tests outside of WKAttachmentTests.

        (-[WKWebView objectByEvaluatingJavaScript:]):
        (-[WKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
        (-[WKWebView stringByEvaluatingJavaScript:]):

        Move some common helper functions from TestWKWebView to a testing category on WKWebView.

        (-[TestWKWebView objectByEvaluatingJavaScript:]): Deleted.
        (-[TestWKWebView objectByEvaluatingJavaScriptWithUserGesture:]): Deleted.
        (-[TestWKWebView stringByEvaluatingJavaScript:]): Deleted.

2018-11-23  Sam Weinig  <sam@webkit.org>

        Add raw pointer overloads to ListHashSet via SmartPtr specialized functions
        https://bugs.webkit.org/show_bug.cgi?id=191936

        Reviewed by Zalan Bujtas.

        Adds tests for raw pointer overloads in ListHashSet.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:

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

        Enable drag and drop support for iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=191818
        <rdar://problem/43907454>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [LFC][IFC] Add support for variable height runs.
        https://bugs.webkit.org/show_bug.cgi?id=191925

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-23  Alberto Garcia  <berto@igalia.com>

        [GTK] [WPE] Tools/Platform{GTK,WPE}.cmake files missing from the tarballs
        https://bugs.webkit.org/show_bug.cgi?id=191923

        Add Tools/PlatformGTK.cmake and Tools/PlatformWPE.cmake to their
        respective tarballs.

        Reviewed by Carlos Garcia Campos.

        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:

2018-11-22  Chris Dumez  <cdumez@apple.com>

        Regression(r238353) Load sometimes hangs when navigating back after a cross-site navigation
        https://bugs.webkit.org/show_bug.cgi?id=191914

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [LFC][IFC] Offset formatting context root runs with horizontal margins.
        https://bugs.webkit.org/show_bug.cgi?id=191900

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-22  Philippe Normand  <pnormand@igalia.com>

        [GTK] Remove unmaintained bots
        https://bugs.webkit.org/show_bug.cgi?id=191467

        Reviewed by Alex Christensen.

        The Linux 32-bits and ARM build-slaves are no longer maintained
        and have been failing for months, so get rid of them.

        * 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-11-22  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Do not disable signals when running "usual" commands
        https://bugs.webkit.org/show_bug.cgi?id=190679

        Reviewed by Philippe Normand.

        Otherwise <ctr>c doesn't work while compiling. It is not the best fix
        as there are cases we want to let only children receive signals, but
        it is not clear how to determine when (when running gdb, we still
        disable those).

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

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

        [Cocoa] [WebKit2] Add support for replacing find-in-page text matches
        https://bugs.webkit.org/show_bug.cgi?id=191786
        <rdar://problem/45813871>

        Reviewed by Ryosuke Niwa.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController setFindBarView:]):

        Fix a bug in MiniBrowser that prevents AppKit from displaying the "All" button in the find bar after checking
        the "Replace" option.

        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:

        Add an API test to exercise find-and-replace API using WKWebView.

        (replaceMatches):
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::findOptionsFromArray):
        (WTR::TestRunner::findString):
        (WTR::TestRunner::findStringMatchesInPage):
        (WTR::TestRunner::replaceFindMatchesAtIndices):

        Add TestRunner hooks to simulate find-in-page and replace.

        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        [LFC][IFC] Horizontal margins should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191894

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][IFC] Border should be considered as non-breakable space
        https://bugs.webkit.org/show_bug.cgi?id=191891

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][IFC] Take nonBreakableStart/End into use.
        https://bugs.webkit.org/show_bug.cgi?id=191873

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-20  Jeff Miller  <jeffm@apple.com>

        Return nullptr immediately if the key doesn't exist in the HashMap.
        https://bugs.webkit.org/show_bug.cgi?id=191841

        Reviewed by Chris Dumez.
        
        Add a test that would crash prior to the fix for this bug.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKNSDictionaryEmptyDictionaryCrash.mm: Added.
        (TestWebKitAPI::TEST):

2018-11-19  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable JIT in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=191822
        <rdar://problem/28119360>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DisableJIT.mm: Added.
        (TEST):

2018-11-19  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API for CertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=191647

        Reviewed by Alex Christensen.

        Added test for new WKCertificateInfo API.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebKit/curl/Certificates.cpp: Added.
        (TestWebKitAPI::Curl::makeCertificateInfo):
        (TestWebKitAPI::Curl::isSamePEM):
        (TestWebKitAPI::Curl::TEST):

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

        Unreviewed, fix the internal iOS debug build after r238380

        UICalloutBar should only be declared when the public (non-internal) SDK is used to build WebKit; otherwise, we
        end up with duplicate declarations of UICalloutBar.

        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-19  David Quesada  <david_quesada@apple.com>

        EXC_BAD_ACCESS when invoking a DownloadProxy's destination decision handler after the download has been canceled
        https://bugs.webkit.org/show_bug.cgi?id=191762
        rdar://problem/46151509

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
            Enable the Download API test on iOS, since the platform supports downloads. All the
            tests pass already, except for one which was written using AppKit-specific code:
        TEST(_WKDownload, RedirectedDownload):
            Use a more platform-agnostic approach to starting the download in this API test.
            Instead of manually triggering an NSMenu item to download a file from a link, the
            test will simulate a user-initiated click on the link, and the navigation delegate
            will direct the web view to start a download based on the link's navigation action.
            Additionally, remove the manual creation of a new NSWindow. TestWKWebView makes its
            own UI/NSWindow.
        TEST(_WKDownload, DownloadCanceledWhileDecidingDestination):
            Add an API test _WKDownload.DownloadCanceledWhileDecidingDestination to simulate the
            conditions that would trigger this crash - handling a download's -decideDestination…
            delegate call by canceling the download, waiting for the UI process to be notified
            that the download has been canceled, and calling the decision handler. This should
            not crash.
        (-[CancelDownloadWhileDecidingDestinationDelegate _downloadDidFinish:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _download:didFailWithError:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _downloadDidCancel:]):
        (-[CancelDownloadWhileDecidingDestinationDelegate _download:decideDestinationWithSuggestedFilename:completionHandler:]):
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView objectByEvaluatingJavaScriptWithUserGesture:]):
            Add a user-initated version of -objectByEvaluatingJavaScript:. This is needed in
            order to maintain the behavior of the RedirectedDownload test, which verifies the
            state of the _WKDownload.wasUserInitiated property.

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

        [iOS Debug] Assertion failure in NSComparisonResult UIContentSizeCategoryCompareToCategory()
        https://bugs.webkit.org/show_bug.cgi?id=190401
        <rdar://problem/45195285>

        Reviewed by Dean Jackson.

        Work around sporadic UIKit assertions when running API tests that may present a UICalloutBar. Currently, UIKit
        asks for the `UIApp`’s `-preferredContentSizeCategory` when showing or laying out the callout bar. However,
        TestWebKitAPI lacks a UIApp altogether, and forcing one to be initialized via `UIApplicationInstantiateSingleton`
        causes numerous other UIKit and WebKit assertions to be hit.

        In lieu of TestWebKitAPI becoming a real UI application (see https://webkit.org/b/175204), simply don't allow
        the callout bar to be initialized in TestWKWebView-based API tests. This encompasses all API tests which
        have some chance of causing the callout bar to be shown by making a ranged text selections during the test.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (suppressUICalloutBar):
        (-[TestWKWebView initWithFrame:configuration:addToWindow:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238016)[GTK][TestWebKitAPI][Ninja] TestJSC can't compile "Bytecodes.h: No such file or directory"
        https://bugs.webkit.org/show_bug.cgi?id=191692

        Reviewed by Michael Catanzaro.

        r238016 added a new #include, and requires JSC's derived headers
        to be copied into the forwarding header directory.

        WEBKIT_MAKE_FORWARDING_HEADERS is using POST_BUILD event to copy
        derived headers to the forwarding header directory. This is done
        after linking JSC library.

        GTK port has TestJSC which has a dependency to JSC static library.
        And, this dependency is a link time dependency which means
        compiling source files of TestJSC starts before the POST_BUILD
        event of JSC. Thus, required header can't be found.

        Add an intermediate target between TestJSC and JavaScriptCore to
        ensure derived headers are copied into the forwarding header
        directory.

        * TestWebKitAPI/PlatformGTK.cmake: Added a new custom target pre-TestJSC.
        * TestWebKitAPI/PlatformWPE.cmake: Ditto.

2018-11-19  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Solve some issues in the enumerateDevices code
        https://bugs.webkit.org/show_bug.cgi?id=191832

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback): Make all the Strings with HTML code static.
        (testWebsiteDataDeviceIdHashSalt): Change the webView settings in
        the test.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView): Remove the initialization of the
        webView settings, we now do it in the specific test.

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

        [PSON] Received an invalid message "WebPageProxy.DidPerformClientRedirect" from the web process
        https://bugs.webkit.org/show_bug.cgi?id=191828

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/client-side-redirect.html: Added.

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

        [iOS] Remove all usages of UIItemProvider, UIItemProviderReading, and related classes
        https://bugs.webkit.org/show_bug.cgi?id=191819

        Reviewed by Dan Bernstein.

        Replace UIItemProvider (and related classes) with NSItemProvider.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyPNG):
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (-[NSItemProvider registerDataRepresentationForTypeIdentifier:withData:]):

        Replace usages of this deprecated method with `-registerDataRepresentationForTypeIdentifier:visibility:loadHandler:`.

        (checkEstimatedSize):
        (checkSuggestedNameAndEstimatedSize):
        (TestWebKitAPI::TEST):
        (-[UIItemProvider registerDataRepresentationForTypeIdentifier:withData:]): Deleted.
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[MockDragDropSession canLoadObjectsOfClass:]):
        (-[MockDragDropSession canLoadObjectsOfClasses:]):
        (-[MockDropSession initWithProviders:location:window:allowMove:]):
        (-[MockDropSession canCreateItemsOfClass:]):
        (-[DragAndDropSimulator _advanceProgress]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        (-[DragAndDropSimulator _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-17  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_messageReceivers.contains(...) under ViewGestureController removeMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=191734
        <rdar://problem/46151497>

        Reviewed by Ryosuke Niwa.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [LFC][IFC] InlineFormattingState::addDetachingRule should accumulate rules.
        https://bugs.webkit.org/show_bug.cgi?id=191801

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-17  Jer Noble  <jer.noble@apple.com>

        Regression(r233865): Causes synchronous IPC in the middle of layout
        https://bugs.webkit.org/show_bug.cgi?id=188307
        <rdar://problem/42807306>

        Reviewed by Eric Carlson.

        Follow-up test fix for r238322:

        In ExitFullscreenOnEnterPiP.ElementFullScreen, explicitly make the video
        element in element fullscreen the "main content" by playing the video during
        a user gesture; only "main content" videos will cause fullscreen mode to exit
        when that element is taken into PiP.

        In FullscreenZoomInitialFrame.WebKit, the WebView is not visible, so the Page
        is considered hidden, and fullscreen is not allowed when the WebView is hidden.
        Make the WebView visible by ordering the test window on-screen.

        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.html:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::runTest):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Tweak _showSafeBrowsingWarningWithTitle SPI
        https://bugs.webkit.org/show_bug.cgi?id=191799

        Reviewed by Wenson Hsieh.

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

2018-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r238294): TestWebKitAPI.WKNavigation.ProcessCrashDuringCallback failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=191783

        Reviewed by Chris Dumez.

        Allow either WKErrorWebContentProcessTerminated or WKErrorWebViewInvalidated since the test
        is closing WebView, thereby invalidating the view, which is racing with the process termination.

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

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

        ProcessSwap.DisableForInspector API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=191798

        Reviewed by Joseph Pecoraro.

        We support process swapping when Web Inspector is shown now so update the
        API test accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-16  Ryan Haddad  <ryanhaddad@apple.com>

        Update buildbot dashboard after Windows 7/10 updates
        https://bugs.webkit.org/show_bug.cgi?id=191219

        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/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform td.logo::before):
        (table.queue-grid tr.platform.windows-10 td.logo::before):
        (table.queue-grid tr.platform.wincairo-windows-10 td.logo::before):
        (table.queue-grid tr.platform.windows-7 td.logo::before):
        (table.queue-grid tr.platform.wincairo-windows-10 img.logo):

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

        Regression(PSON) WebKit.GeolocationTransitionToHighAccuracy API test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=191789

        Reviewed by Alex Christensen.

        Relate the 2 test pages so they use the same process since WKContextSetMaximumNumberOfProcesses()
        SPI no longer works with PSON / Process prewarming.

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::TEST):

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

        webkitpy: Retry app installation on watchOS simulators
        https://bugs.webkit.org/show_bug.cgi?id=191769
        <rdar://problem/46139850>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Retry app installations.

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

        Add DidFirstMeaningfulPaint milestone.
        https://bugs.webkit.org/show_bug.cgi?id=191754

        Reviewed by Simon Fraser.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone.cpp: Added.
        (TestWebKitAPI::didReachMilestone):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/FirstMeaningfulPaintMilestone_Bundle.cpp: Copied from Source/WebKit/UIProcess/API/C/WKPageRenderingProgressEvents.h.
        (TestWebKitAPI::FirstMeaningfulPaintMilestoneTest::FirstMeaningfulPaintMilestoneTest):
        (TestWebKitAPI::FirstMeaningfulPaintMilestoneTest::didCreatePage):

2018-11-16  Takashi Komori  <Takashi.Komori@sony.com>

        [WinCairo][WebKitTestRunner] Test contents window is displayed while testing.
        https://bugs.webkit.org/show_bug.cgi?id=191593

        Reviewed by Alex Christensen.

        Hide TestRunner window and taskbar button.

        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::windowSnapshotImage):

2018-11-16  Alex Christensen  <achristensen@webkit.org>

        Add API to disable safe browsing checks
        https://bugs.webkit.org/show_bug.cgi?id=191610

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (resourceURL):
        (TEST):
        (safeBrowsingView):
        (simpleURL): Deleted.

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

        [LFC][IFC] Add support for out-of-flow positioned boxes
        https://bugs.webkit.org/show_bug.cgi?id=191726

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-15  Myles C. Maxfield  <mmaxfield@apple.com>

        WKPreferencesSetFontSmoothingLevel doesn't actually do anything
        https://bugs.webkit.org/show_bug.cgi?id=191708

        Reviewed by Simon Fraser.

        Delete the symbol because no one calls it and it doesn't do anything

        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-11-15  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r238244.

        Caused High Sierra test runs to fail early with 50 crashes and
        casued 25 API failures.

        Reverted changeset:

        "[css-logical] Implement flow-relative margin, padding and
        border shorthands"
        https://bugs.webkit.org/show_bug.cgi?id=188697
        https://trac.webkit.org/changeset/238244

2018-11-15  Aakash Jain  <aakash_jain@apple.com>

        Increase EWS lock timeout to 3 hours
        https://bugs.webkit.org/show_bug.cgi?id=191705

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py: Increased EWS lock timeout to 3 hours.

2018-11-15  Chris Dumez  <cdumez@apple.com>

        IndexedDB.IndexedDBTempFileSize API test times out with process prewarming enabled
        https://bugs.webkit.org/show_bug.cgi?id=191671
        <rdar://problem/46086062>

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-11-15  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding and border shorthands
        https://bugs.webkit.org/show_bug.cgi?id=188697

        Reviewed by Simon Fraser and Antti Koivisto.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        Allow tests to enable the CSSLogicalEnabled flag in WK1.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.check_codegen_properties):
        Allow CSS property definitions to have a 'runtime-flag' parameter which
        disables the property when the specified runtime flag is disabled.

2018-11-15  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r238212): WebKit.BackgroundColor* API test failures.
        https://bugs.webkit.org/show_bug.cgi?id=191697
        rdar://problem/46098570

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/mac/BackgroundColor.mm:
        (TestWebKitAPI::TEST): Updated for new default background color.

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

        webkitpy: Check for specific process instead of using data migrator (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=191551
        <rdar://problem/45993156>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.is_usable): Use software_variant instead of software_version for watchOS.

2018-11-15  Daniel Bates  <dabates@apple.com>

        [iOS] Shift + Tab does not focus previous field
        https://bugs.webkit.org/show_bug.cgi?id=191596
        <rdar://problem/45892053>

        Reviewed by Wenson Hsieh.

        Add infrastructure to support testing a key down event with modifiers by creating
        and dispatching a UIEvent. This infrastructure replaces the previous mechanism in
        Tools/WebKitTestRunner/ios/HIDEventGenerator.mm to generate a IOHIDEvent for a
        keydown as it did not support creating an event with modifier key state that would
        be recognized by UIKit.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        Add function uiController.keyDown() that takes a character that represents a keyboard key
        and an array of modifier keys. The behavior of this function is analogous to eventSender.keyDown().
        Remove functions uiController.keyDownUsingHardwareKeyboard() and uiController.keyUpUsingHardwareKeyboard()
        as the former is replaced by uiController.keyDown() and the latter was never used.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::keyDown): Added.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (createHIDKeyDownEvent): Added.
        (-[HIDEventGenerator keyDown:completionBlock:]): Deleted.
        (-[HIDEventGenerator keyUp:completionBlock:]): Deleted.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::arrayLength): Added.
        (WTR::parseModifier): Added.
        (WTR::parseModifierArray): Added.
        (WTR::UIScriptController::keyDown):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard): Deleted.
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard): Deleted.

2018-11-15  Keith Rollin  <krollin@apple.com>

        Delete old .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191669
        <rdar://problem/46081994>

        Reviewed by Chris Dumez.

        .xcfilelist files were created and added to the Xcode project files in
        https://trac.webkit.org/changeset/238008/webkit. However, they caused
        build issues and they were removed from the Xcode projects in
        https://trac.webkit.org/changeset/238055/webkit. This check-in removes
        the files from the repository altogether. They'll ultimately be
        replaced with new files with names that indicate whether the
        associated files are inputs to the Run Script phase or are files
        created by the Run Script phase.

        * DumpRenderTree/DerivedSources.xcfilelist: Removed.
        * WebKitTestRunner/DerivedSources.xcfilelist: Removed.

2018-11-14  Zalan Butjas  <zalan@apple.com>

        [LFC][IFC] Add support for in-flow positioned inline boxes.
        https://bugs.webkit.org/show_bug.cgi?id=191672

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-14  Keith Rollin  <krollin@apple.com>

        Move scripts for Derived and Unified Sources to external files
        https://bugs.webkit.org/show_bug.cgi?id=191670
        <rdar://problem/46082278>

        Reviewed by Keith Miller.

        Move the scripts in the Generate Derived Sources and Generate Unified
        Sources Run Script phases from the Xcode projects to external shell
        script files. Then invoke those scripts from the Run Script phases.
        This refactoring is being performed to support later work that will
        invoke these scripts in other contexts.

        The scripts were maintained as-is when making the move. I did a little
        reformatting and added 'set -e' to the top of each file, but that's
        it.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/Scripts/generate-derived-sources.sh: Added.
        * WebKitTestRunner/Scripts/generate-derived-sources.sh: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.DecidePolicyForNavigationActionForHyperlinkThatRedirects API fails when PSON is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191640

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-11-14  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r238115): [iOS] TestWebKitAPI.ProcessSwap.NavigateToInvalidURL is failing
        https://bugs.webkit.org/show_bug.cgi?id=191660

        Reviewed by Ryosuke Niwa.

        The test tries to navigate to an invalid URL and makes sure that we do not process swap
        for such load. The test was inherently racing because it was doing:
        <body onload="setTimeout(() => alert('DONE'), 0); location.href = 'http://A=a%B=b'">

        Its load event handler tries to navigate to 'http://A=a%B=b' and sets a 0 timer to
        log an alert, which causes the API test to keep going and check that we did not swap
        process. The issue is that a 0 timer may not be sufficient to trigger the load, as
        the policy decision is asynchronous and relies on the UIProcess responding to it.

        To address the issue, the test now waits for the next policy decision, spins the
        run loop and then makes sure we did not swap process. It no longer relies on a message
        from the page.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsiteDataStoreCustomPaths API test is failing when enabling process prewarming
        https://bugs.webkit.org/show_bug.cgi?id=191638

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-11-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI to show a safe browsing warning
        https://bugs.webkit.org/show_bug.cgi?id=191604

        Reviewed by Andy Estes.

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

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

        [iOS] A few drag and drop tests are crashing after r238146
        https://bugs.webkit.org/show_bug.cgi?id=191617

        Reviewed by Dean Jackson.

        Augment these crashing tests to verify that selection commands are suppressed during drop over editable elements
        via more robust means. These tests currently hit an assertion when revealing the callout bar too early, because
        TestWebKitAPI is not a UI application (see <https://webkit.org/b/190401>).

        Instead of relying on this other bug, directly ask the text input whether it is suppressing selection commands
        during a drop, and remember the answer via DragAndDropSimulator.

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

        Add to the existing tests that started failing after r238146.

        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView textInputContentView]):
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        (-[DragAndDropSimulator _resetSimulatedState]):
        (-[DragAndDropSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

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

        [Cocoa] [WebKit2] Hook up some more editing actions (-pasteAndMatchStyle:, -makeTextWritingDirectionNatural:)
        https://bugs.webkit.org/show_bug.cgi?id=191605
        <rdar://problem/45813991>

        Reviewed by Dean Jackson.

        Adds two new API tests to exercise -_pasteAndMatchStyle: and -makeTextWritingDirectionNatural:.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView _synchronouslyExecuteEditCommand:argument:]): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:

        Pull `-_synchronouslyExecuteEditCommand:argument:` out of WKAttachmentTests and into shared code, in a new
        category on WKWebView declared in TestWKWebView. Also, fix an unrelated typo in a nearby category.

        (-[WKWebView _synchronouslyExecuteEditCommand:argument:]):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.ApplicationManifestBasic API test is failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191602

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        webkitpy: Refactor port code for devices
        https://bugs.webkit.org/show_bug.cgi?id=191568
        <rdar://problem/46005821>

        Reviewed by Alex Christensen.

        watchOS and iOS device ports share many characteristics in testing, mostly due
        to the fact that both are devices.

        * Scripts/webkitpy/port/device_port.py: Added.
        (DevicePort): Add base class that all simulated/physical device ports share.
        (DevicePort.__init__):
        (DevicePort.driver_cmd_line_for_logging): Moved from iOS port.
        (DevicePort._generate_all_test_configurations): Ditto.
        (DevicePort.child_processes): Ditto.
        (DevicePort.driver_name): Ditto.
        (DevicePort.target_host): Generalize worker access to attached devices and
        simulated devices based on the device manager.
        (DevicePort.devices): Return a list of all devices associated with this port.
        (DevicePort._create_devices):
        (DevicePort._build_driver_flags): Moved from iOSSimulatorPort/iOSDevicePort.
        (DevicePort._install): Moved from iOS port.
        (DevicePort.setup_test_run): Ditto.
        (DevicePort.clean_up_test_run): Ditto.
        (DevicePort.did_spawn_worker): Ditto.
        (DevicePort.setup_environ_for_server): Ditto.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSPort.driver_cmd_line_for_logging): Moved to DevicePort.
        (IOSPort.driver_name): Ditto.
        (IOSPort._generate_all_test_configurations): Ditto.
        (IOSPort.child_processes): Ditto.
        (IOSPort._testing_device): Ditto.
        (IOSPort.target_host): Ditto.
        (IOSPort._create_devices): Ditto.
        (IOSPort.setup_test_run): Ditto.
        (IOSPort.clean_up_test_run): Ditto.
        (IOSPort.did_spawn_worker): Ditto.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): IOSDevicePort uses a device manager from apple_additions.
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir): Use DevicePort.devices().
        (IOSDevicePort._get_crash_log): Ditto.
        (IOSDevicePort.ios_version): Ditto.
        (IOSDevicePort._create_devices): Ditto.
        (IOSDevicePort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSSimulatorPort._build_driver_flags): Moved to DevicePort.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_get_crash_log):
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): IOSSimulatorPort uses the SimulatedDeviceManager.
        (IOSSimulatorPort._create_devices): Clean up logging statement.
        (IOSSimulatorPort.setup_environ_for_server): Some of environment set-up is shared
        across all devices.
        (IOSSimulatorPort._device_for_worker_number_map): Replaced by DevicePort.devices().
        (IOSSimulatorPort._build_driver_flags): Moved to DevicePort.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_32bit):
        (IOSSimulatorTest.test_64bit):

2018-11-14  Chris Dumez  <cdumez@apple.com>

        WebKit.WKHTTPCookieStoreWithoutProcessPool API test is failing with process prewarming is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191624

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2018-11-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Support CTAP HID authenticators on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188623
        <rdar://problem/43353777>

        Reviewed by Brent Fulgham and Chris Dumez.

        This patch adds support for the mock testing and entitlements to allow minibrowser to talk
        to hid devices.

        * MiniBrowser/MiniBrowser.entitlements:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-11-13  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit.GeolocationTransitionToLowAccuracy API crashes when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191616

        Reviewed by Chris Dumez.

        The crash was caused by WKView in autorelease pool invoking stopUpdatingCallback after
        GeolocationTransitionToLowAccuracyStateTracker in the stack had been destroyed,
        resulting in the use-after-free.

        Made the tests more robust by clearing geolocation provider before exiting each test
        since we can't really prevent WKView from entering an autorelease pool.

        Also made WebKit.GeolocationTransitionToLowAccuracy wait for the success callback
        instead of simply the end of the navigation so that the test would continue to work
        even if a web content process was created for the second web view (lowAccuracyWebView)

        * TestWebKitAPI/Tests/WebKit/Geolocation.cpp:
        (TestWebKitAPI::setupGeolocationProvider): Moved "*" to match the WebKit coding style guideline.
        (TestWebKitAPI::clearGeolocationProvider): Added.
        (TestWebKitAPI::runJavaScriptAlert): Added.
        (TestWebKitAPI::didFinishNavigation): Deleted.
        * TestWebKitAPI/Tests/WebKit/geolocationWatchPosition.html:

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

        WKProcessPool.InitialWarmedProcessUsed API is failing with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=191618

        Reviewed by Ryosuke Niwa.

        Update API test to explicitly disable automatic process prewarning since it is testing
        manual prewarming.

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

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

        Several Service Worker API tests are failing when enabling PSON
        https://bugs.webkit.org/show_bug.cgi?id=191619

        Reviewed by Youenn Fablet.

        Update tests to use _webProcessCountIgnoringPrewarmed instead of _webProcessCount so that they are
        not impacted by process prewarming.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

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

        [iOS] Do not show selection UI for editable elements with opacity near zero
        https://bugs.webkit.org/show_bug.cgi?id=191442
        <rdar://problem/45958625>

        Reviewed by Simon Fraser.

        Add a couple of new testing helpers to UIScriptController.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::textSelectionRangeRects const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::textSelectionRangeRects const):

        Rename `selectionRangeViewRects` to `textSelectionRangeRects`. This allows us to draw a distinction between
        `textSelectionRangeRects`/`textSelectionCaretRect`, which retrieve information about selection rects known
        to the text interaction assistant, and `selectionCaretViewRect`/`selectionRangeViewRects`, which retrieve the
        actual frames of the selection views used to draw overlaid selection UI. This difference is important in the
        new layout tests added in this patch, which only suppress caret rendering (i.e. selection views remain hidden).

        Also, drive-by fix a leaked `NSMutableArray`.

        (WTR::UIScriptController::selectionStartGrabberViewRect const):
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::selectionCaretViewRect const):
        (WTR::UIScriptController::selectionRangeViewRects const):

        Testing helpers to grab the frames of caret and selection views, in WKContentView's coordinate space. These
        rects are also clamped to WKContentView bounds.

2018-11-13  Daniel Bates  <dabates@apple.com>

        Consolidate WebKit UIKitSPI.h and UIKitTestSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=173341
        <rdar://problem/32752890>

        Reviewed by Simon Fraser.

        There is little value to making a distinction between forward declarations
        of UIKit SPI needed in the WebKit layer and just for testing. Moreover,
        the contents of these two headers can conflict with each other following
        r218275 as DumpRenderTree includes both headers. Instead we should remove
        UIKitTestSPI.h and have WebKitTestRunner include the WebKit variant, UIKitSPI.h.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * TestRunnerShared/spi/UIKitTestSPI.h: Removed.
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/GeneratedTouchesDebugWindow.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        * WebKitTestRunner/ios/mainIOS.mm:

2018-11-13  Takashi Komori  <Takashi.Komori@sony.com>

        Remove WebKitTestRunnerLib's build warnings.
        https://bugs.webkit.org/show_bug.cgi?id=191580

        Reviewed by Fujii Hironori.

        Include cmakeconfig.h in precompiled header.

        * WebKitTestRunner/WebKitTestRunnerPrefix.h:

2018-11-12  Darshan Kadu  <darsh7807@gmail.com>

        Implement Cache API support for WPE/GTK
        https://bugs.webkit.org/show_bug.cgi?id=178316

        Reviewed by Michael Catanzaro.

        Called WKWebsiteDataStoreSetCacheStoragePerOriginQuota function to set the cache limit to 400 * 1200
        on all the platforms in TestController.cpp. Also, removed the setCacheStoragePerOriginQuota call from TestControllerCocoa.mm

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2018-11-12  Christopher Reid  <chris.reid@sony.com>

        [Curl] Reject entire cookie if the domain fails a tailmatch.
        https://bugs.webkit.org/show_bug.cgi?id=191406

        Reviewed by Youenn Fablet.

        Added unittests for Curl cookie implementation.

        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:
        (TestWebKitAPI::Curl::CurlCookies::RejectTailmatchFailureDomain):

2018-11-12  Alex Christensen  <achristensen@webkit.org>

        [iOS] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=191441

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (checkTitleAndClick):
        (TEST):

2018-11-12  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl] Add API Test for Curl cookie backend.
        https://bugs.webkit.org/show_bug.cgi?id=191493

        Reviewed by Youenn Fablet.

        Add unit test to TestWebCore.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp: Added.

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        Add a test option to enable editable images.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::findEditableImageCanvas):
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        Add the ability to draw on a PKCanvasView that is a subview of the WKWebView,
        and also to retrieve the number of strokes currently on the PKCanvasView.
        Currently this just takes the first canvas; we might need to make it
        take an identifier or something in the future if we need tests with multiple
        canvases. The indirect testing mechanism is required because PKCanvasView
        can currently not actually paint its strokes in the Simulator.

2018-11-12  Ryan Haddad  <ryanhaddad@apple.com>

        [MediaStream] Screen capture should be an experimental feature on OSX only
        https://bugs.webkit.org/show_bug.cgi?id=191552

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm: Only run these tests on macOS.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-green.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/images/favicon-red.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/ElCapitan@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS10Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS9Simulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSDevice@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOSSimulator@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mojave.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mojave@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Sierra@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows10.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows10@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP@2x.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Yosemite@2x.png:

2018-11-12  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit Tools Xcode projects for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=191495

        Reviewed by Alexey Proskuryakov.

        * ContentExtensionTester/ContentExtensionTester.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * EditingHistory/EditingHistory.xcodeproj/project.pbxproj:
        * FontWithFeatures/FontWithFeatures.xcodeproj/project.pbxproj:
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * WebEditingTester/WebEditingTester.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * lldb/lldbWebKitTester/lldbWebKitTester.xcodeproj/project.pbxproj:
        These are less important because they're not localized, but since
        I made the style checker complain, it now complains any time anyone
        touches any of these projects... so upgrade them.

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

        webkitpy: Check for specific process instead of using data migrator
        https://bugs.webkit.org/show_bug.cgi?id=191551
        <rdar://problem/45993156>

        Rubber-stamped by Aakash Jain.

        It's possible for the data migrator process to be stuck, but for a simulator to be
        usable. Use device-specific processes to detect when a device is usable.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._wait_until_device_is_usable):
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.initialize_devices): Explicitly wait until a device is usable
        since this implies that a device is booted.
        (SimulatedDeviceManager.swap): Ditto.
        (SimulatedDevice.is_usable): Check that a device is booted and that a device-specific
        process indicating the device is usable can be found.
        (SimulatedDeviceManager.wait_until_data_migration_is_done): Deleted.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py: Update simctl_json so that
        it triggers the logic in is_usable()

2018-11-12  Takashi Komori  <Takashi.Komori@sony.com>

        Resurrect WebKitTestRunner for Windows port
        https://bugs.webkit.org/show_bug.cgi?id=189257

        Reviewed by Fujii Hironori.

        Implement WebKitTestRunner for WinCairo.

        * PlatformWin.cmake:
        * Scripts/build-webkittestrunner:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::rangeToStr):
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp: Added.
        (WTR::AccessibilityController::resetToConsistentState):
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::platformName):
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp: Added.
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex const):
        (WTR::AccessibilityUIElement::selectedChildrenCount const):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue const):
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::uiElementAttributeValue const):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::computedRoleString):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation const):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue const):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired const):
        (WTR::AccessibilityUIElement::isFocused const):
        (WTR::AccessibilityUIElement::isSelected const):
        (WTR::AccessibilityUIElement::isSelectedOptionActive const):
        (WTR::AccessibilityUIElement::isExpanded const):
        (WTR::AccessibilityUIElement::isChecked const):
        (WTR::AccessibilityUIElement::isIndeterminate const):
        (WTR::AccessibilityUIElement::hierarchicalLevel const):
        (WTR::AccessibilityUIElement::speakAs):
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar const):
        (WTR::AccessibilityUIElement::verticalScrollbar const):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild const):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex const):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex const):
        (WTR::AccessibilityUIElement::clearSelectedChildren const):
        (WTR::AccessibilityUIElement::accessibilityValue const):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable const):
        (WTR::AccessibilityUIElement::isSelectable const):
        (WTR::AccessibilityUIElement::isMultiSelectable const):
        (WTR::AccessibilityUIElement::isVisible const):
        (WTR::AccessibilityUIElement::isOffScreen const):
        (WTR::AccessibilityUIElement::isCollapsed const):
        (WTR::AccessibilityUIElement::isIgnored const):
        (WTR::AccessibilityUIElement::isSingleLine const):
        (WTR::AccessibilityUIElement::isMultiLine const):
        (WTR::AccessibilityUIElement::hasPopup const):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRange):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::setSelectedVisibleTextRange):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::scrollToGlobalPoint):
        (WTR::AccessibilityUIElement::scrollToMakeVisibleWithSubFocus):
        (WTR::AccessibilityUIElement::supportedActions const):
        (WTR::AccessibilityUIElement::pathDescription const):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription const):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription const):
        (WTR::AccessibilityUIElement::classList const):
        (WTR::AccessibilityUIElement::characterAtOffset):
        (WTR::AccessibilityUIElement::wordAtOffset):
        (WTR::AccessibilityUIElement::lineAtOffset):
        (WTR::AccessibilityUIElement::sentenceAtOffset):
        * WebKitTestRunner/InjectedBundle/win/ActivateFontsWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::activateFonts):
        (WTR::installFakeHelvetica):
        (WTR::uninstallFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.cpp: Added.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerInjectedBundlePrefix.h: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (WTR::TestRunner::pathToLocalResource):
        (WTR::TestRunner::inspectorTestStubURL):
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::platformInitialize):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        (WTR::TestRunner::installFakeHelvetica):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/PlatformWin.cmake: Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::createTestURL):
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/win/EventSenderProxyWin.cpp: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::~EventSenderProxy):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::keyDown):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Added.
        (WTR::registerWindowClass):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        (WTR::PlatformWebView::didInitializeClients):
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::addToWindow):
        (WTR::PlatformWebView::removeFromWindow):
        (WTR::PlatformWebView::setWindowIsKey):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        (WTR::generateCairoSurfaceFromBitmap):
        (WTR::PlatformWebView::windowSnapshotImage):
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        (WTR::PlatformWebView::setNavigationGesturesEnabled):
        (WTR::PlatformWebView::forceWindowFramesChanged):
        (WTR::PlatformWebView::drawsBackground const):
        (WTR::PlatformWebView::setDrawsBackground):
        * WebKitTestRunner/win/TestControllerWin.cpp: Added.
        (WTR::exceptionFilter):
        (WTR::runRunLoopUntil):
        (WTR::TestController::notifyDone):
        (WTR::TestController::setHidden):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformPreferences):
        (WTR::TestController::platformDestroy):
        (WTR::toWK):
        (WTR::TestController::platformInitializeContext):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::platformDidCommitLoadForFrame):
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):
        (WTR::TestController::runModal):
        (WTR::TestController::platformContext):
        (WTR::TestController::platformLibraryPathForTesting):
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::TestController::platformResetPreferencesToConsistentValues):
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
        * WebKitTestRunner/win/WebKitTestRunnerPrefix.cpp: Added.
        * WebKitTestRunner/win/main.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp.
        (dllLauncherEntryPoint):

2018-11-12  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Introduce AbortableTaskQueue
        https://bugs.webkit.org/show_bug.cgi?id=190902

        Reviewed by Xabier Rodriguez-Calvar.

        Tests for AbortableTaskQueue are included.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/AbortableTaskQueue.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::FancyResponse::FancyResponse):
        (TestWebKitAPI::FancyResponse::operator=):
        (TestWebKitAPI::DeterministicScheduler::DeterministicScheduler):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::ThreadContext):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::waitMyTurn):
        (TestWebKitAPI::DeterministicScheduler::ThreadContext::yieldToThread):

2018-11-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        run-bindings-tests is timing out in some WinCairo bots
        https://bugs.webkit.org/show_bug.cgi?id=191348

        Reviewed by Alex Christensen.

        BuildBot kills run-bindings-tests if it outputs nothing for 20
        minutes. run-bindings-tests runs very slowly in WinCairo Docker,
        and it takes more than 30 minutes to finish. And, Windows Python
        buffers the progress output.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.detect_changes): Call sys.stdout.flush() after the
        test case result is output.

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

        Implement a new edit command to change the enclosing list type
        https://bugs.webkit.org/show_bug.cgi?id=191487
        <rdar://problem/45955922>

        Reviewed by Ryosuke Niwa.

        Add a new API test to verify that `-[WKWebView _changeListType:]` is hooked up to the corresponding editing
        command in WebCore. See the new layout test for a test that exercises more nuanced corner cases.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (-[TestWKWebView setPosition:offset:]):
        (-[TestWKWebView setBase:baseOffset:extent:extentOffset:]):
        (TestWebKitAPI::webViewForEditActionTestingWithPageNamed):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/editable-nested-lists.html: Added.

2018-11-11  Dan Bernstein  <mitz@apple.com>

        ProcessPoolConfiguration::copy() doesn’t copy m_customWebContentServiceBundleIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=191514

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKProcessPoolConfiguration.mm: Added.
        (TEST):

2018-11-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        Update file name.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2018-11-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238065.

        Breaks internal builds.

        Reverted changeset:

        "Make it possible to edit images inline"
        https://bugs.webkit.org/show_bug.cgi?id=191352
        https://trac.webkit.org/changeset/238065

2018-11-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test /webkit/WebKitSettings/webkit-settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191221

        Unreviewed, fix a typo from the previous patch. After disabling the setting, we should test
        that it is disabled, but we're testing that it is enabled, because I failed to update this
        line.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2018-11-10  Tim Horton  <timothy_horton@apple.com>

        Make it possible to edit images inline
        https://bugs.webkit.org/show_bug.cgi?id=191352
        <rdar://problem/30107985>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
        Add a test option to enable editable images.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/PencilKitTestSPI.h: Added.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::findEditableImageCanvas):
        (WTR::UIScriptController::drawSquareInEditableImage):
        (WTR::UIScriptController::numberOfStrokesInEditableImage):
        Add the ability to draw on a PKCanvasView that is a subview of the WKWebView,
        and also to retrieve the number of strokes currently on the PKCanvasView.
        Currently this just takes the first canvas; we might need to make it
        take an identifier or something in the future if we need tests with multiple
        canvases. The indirect testing mechanism is required because PKCanvasView
        can currently not actually paint its strokes in the Simulator.

2018-11-09  Chris Dumez  <cdumez@apple.com>

        Suspended page persists even after back/forward list item is gone
        https://bugs.webkit.org/show_bug.cgi?id=191488
        <rdar://problem/45953006>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [Cocoa] Implement SPI on WKWebView to increase and decrease list levels
        https://bugs.webkit.org/show_bug.cgi?id=191471
        <rdar://problem/45952472>

        Reviewed by Tim Horton.

        Add an API test to ensure that list levels can be incremented and decremented via WKWebView SPI.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm:
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):

2018-11-09  Basuke Suzuki  <basuke.suzuki@sony.com>

        [Curl][WebKit] Implement Proxy configuration API.
        https://bugs.webkit.org/show_bug.cgi?id=189053

        Reviewed by Youenn Fablet.

        Added Proxy Settings dialog to call newly added API.

        * MiniBrowser/win/BrowserWindow.h:
        * MiniBrowser/win/Common.cpp:
        (askProxySettings):
        (askCredential):
        (authDialogProc): Deleted.
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/DialogHelper.h: Added.
        (Dialog::run):
        (Dialog::doalogProc):
        (Dialog::handle):
        (Dialog::setup):
        (Dialog::update):
        (Dialog::validate):
        (Dialog::updateOkButton):
        (Dialog::command):
        (Dialog::ok):
        (Dialog::cancel):
        (Dialog::close):
        (Dialog::hDlg):
        (Dialog::item):
        (Dialog::setEnabled):
        (Dialog::setText):
        (Dialog::getText):
        (Dialog::getTextLength):
        (Dialog::RadioGroup::RadioGroup):
        (Dialog::RadioGroup::set):
        (Dialog::RadioGroup::get):
        (Dialog::radioGroup):
        * MiniBrowser/win/MainWindow.cpp:
        (MainWindow::WndProc):
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createWKURL):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::updateProxySettings):
        (WebKitBrowserWindow::loadURL):
        (WebKitBrowserWindow::loadHTMLString):
        (WebKitBrowserWindow::openProxySettings):
        * MiniBrowser/win/WebKitBrowserWindow.h:
        * MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:
        (WebKitLegacyBrowserWindow::openProxySettings):
        * MiniBrowser/win/WebKitLegacyBrowserWindow.h:

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

        [Cocoa] Introduce WKWebView SPI to insert nested ordered and unordered lists
        https://bugs.webkit.org/show_bug.cgi?id=191410
        <rdar://problem/45898610>

        Reviewed by Dean Jackson.

        Move WKWebViewEditActions from iOS to WebKitCocoa, and enable the relevant WKWebViewEditActions tests on macOS.
        Additionally, add new API tests to verify that `-_pasteAsQuotation:` and `-_insertNested(Un)OrderedList:` are
        hooked up to their respective editing commands.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm: Renamed from Tools/TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm.
        (-[TestWKWebView querySelectorExists:]):
        (-[TestWKWebView insertString:]):

        Add a helper method to insert a piece of text. This abstracts platform differences between iOS and macOS, by
        invoking the WKWebView directly on macOS and calling on the content view on iOS.

        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):

2018-11-09  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Refactoring and drive-by fixes
        https://bugs.webkit.org/show_bug.cgi?id=191421

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (inFlatpakSandbox): Flatpak now has a /.flatpak-info file when in
        the sandbox, so rely on this.
        * flatpak/flatpakutils.py:
        (expand_manifest): Pass explicit keywords to load_manifest() and
        remove unused local variable.
        (WebkitFlatpak.clean_args): Move hard-coded sdk/runtime infos to the manifest file.
        (WebkitFlatpak.run_in_sandbox): Add support for extra environment variables.
        (WebkitFlatpak.setup_dev_env): Stop build at final app. Refactor
        build_type handling a bit.
        * flatpak/org.webkit.CommonModules.yaml: Added.
        * flatpak/org.webkit.WPE.yaml: wpebackend upstream was renamed to libwpe.
        * flatpak/org.webkit.WebKit.yaml: Move common dependencies
        declaration to CommonModules, so it can be reused later when we
        add support for building extra libraries depending on WPE.

2018-11-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

onal supported image formats
        https://bugs.webkit.org/show_bug.cgi?id=190454

        Reviewed by Simon Fraser.

        Test opening a TGA image in WebView which is not allowed by default. The
        TGA format will be allowed through WKWebViewConfiguration.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/100x100-red.tga: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/400x400-green.png: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalSupportedImageTypes.mm: Added.
        (runTest):
        (TEST):

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a proper build fix for r237983

        Don't include header PublicKeyCredential.h in CtapResponseTest.cpp.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/CtapRequestTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/CtapResponseTest.cpp.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):

2018-11-08  Keith Rollin  <krollin@apple.com>

        Create .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191324
        <rdar://problem/45852819>

        Reviewed by Alex Christensen.

        As part of preparing for enabling XCBuild, create and use .xcfilelist
        files. These files are using during Run Script build phases in an
        Xcode project. If a Run Script build phase produces new files that are
        used later as inputs to subsequent build phases, XCBuild needs to know
        about these files. These files can be either specified in an "output
        files" section of the Run Script phase editor, or in .xcfilelist files
        that are associated with the Run Script build phase.

        This patch takes the second approach. It consists of three sets of changes:

        - Modify the DerivedSources.make files to have a
          'print_all_generated_files" target that produces a list of the files
          they create.

        - Create a shell script that produces .xcfilelist files from the
          output of the previous step, as well as for the files created in the
          Generate Unified Sources build steps.

        - Add the new .xcfilelist files to the associated projects.

        Note that, with these changes, the Xcode workspace and projects can no
        longer be fully loaded into Xcode 9. Xcode will attempt to load the
        projects that have .xcfilelist files associated with them, but will
        fail and display a placeholder for those projects instead. It's
        expected that all developers are using Xcode 10 by now and that not
        being able to load into Xcode 9 is not a practical issue. Keep in mind
        that this is strictly an IDE issue, and that the projects can still be
        built with `xcodebuild`.

        Also note that the shell script that creates the .xcfilelist files can
        also be used to verify that the set of files that's currently checked
        in is up-to-date. This checking can be used as part of a check-in hook
        or part of check-webkit-style to sooner catch cases where the
        .xcfilelist files need to be regenerated.

        * DumpRenderTree/DerivedSources.make:
        * DumpRenderTree/DerivedSources.xcfilelist: Added.
        * Scripts/generate-xcfilelists: Added.
        * WebKitTestRunner/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.xcfilelist: Added.

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, a quick build fix for r237983

        Temporarily make CtapRequestTest.cpp/CtapResponseTest.cpp to mac only to avoid iOS build failures.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
        * TestWebKitAPI/Tests/WebCore/mac/CtapRequestTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/mac/CtapResponseTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):

2018-11-05  Ryan Haddad  <ryanhaddad@apple.com>

        Fix steps_unittest.py failures related to recent Win10/Win7 changes
        https://bugs.webkit.org/show_bug.cgi?id=191290

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Update expected results.

2018-11-08  Dean Jackson  <dino@apple.com>

        Add a String literal that returns a String
        https://bugs.webkit.org/show_bug.cgi?id=191425
        <rdar://problem/45914556>

        Reviewed by Sam Weinig.

        Test _str.

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

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

        webkitpy: Generalize trailing SDK specifier (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Rubber-stamped by Aakash Jain.

        Re-landing this change, configuration issues have been resolved.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Use normalized SDK.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Use normalized SDK.
        (IOSSimulatorPort._build_driver_flags): Use platform SDK in build driver flags.

2018-11-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP device request/response converters from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=190784
        <rdar://problem/45460333>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapRequestTest.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: Added.
        (TestWebKitAPI::getTestCorruptedSignResponse):
        (TestWebKitAPI::getTestCredentialRawIdBytes):
        (TestWebKitAPI::convertToVector):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/FidoTestData.h: Added.

2018-11-07  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add support to BigInt into ValueAdd
        https://bugs.webkit.org/show_bug.cgi?id=186177

        Reviewed by Keith Miller.

        * Scripts/run-jsc-benchmarks:

2018-11-07  Sihui Liu  <sihui_liu@apple.com>

        RELEASE_ASSERT(!m_hardClosedForUserDelete) fails in WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer
        https://bugs.webkit.org/show_bug.cgi?id=191326
        <rdar://problem/45769269>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBUserDelete.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBUserDelete.mm: Added.
        (-[IndexedDBUserDeleteMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2018-11-07  Daniel Bates  <dabates@apple.com>

        Override +[UIKeyboard isInHardwareKeyboardMode] in WebKitTestRunner and DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=190141

        Reviewed by Darin Adler.

        Override +[UIKeyboard isInHardwareKeyboardMode] to always return NO so as to make test
        runs deterministic regardless of whether a hardware keyboard is attached.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (overrideIsInHardwareKeyboardMode): Added.
        (prepareConsistentTestingEnvironment):
        * TestRunnerShared/spi/UIKitTestSPI.h: Forward declare SPI.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (overrideIsInHardwareKeyboardMode): Added.
        (WTR::TestController::platformInitialize):

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

        Unreviewed, rolling out r237913.

        Breaks running tests on Mac without iOS SDK installed

        Reverted changeset:

        "webkitpy: Generalize trailing SDK specifier (Part 2)"
        https://bugs.webkit.org/show_bug.cgi?id=191275
        https://trac.webkit.org/changeset/237913

2018-11-07  Zamiul Haque  <zhaque@apple.com>

        Force a gregorian calendar to show for credit card expiration date inputs
        (autocomplete='cc-exp'*) regardless of default system settings.
        https://bugs.webkit.org/show_bug.cgi?id=191096
        rdar://problem/42640256

        Reviewed by Tim Horton.

        Implemented simulateForeignDefaultCalendar and calendarType to be used
        for changing the default calendar returned by the system (ie. [NSCalendar
        currentCalendar]) and getting the calendar type identifier of a presented date
        picker.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingDataListSuggestions const):
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::setDefaultCalendarType):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::calendarType const):
        (WTR::UIScriptController::setDefaultCalendarType):
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::calendarType const): Deleted.
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::calendarType const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::swizzledCalendar):
        (WTR::TestController::getOverriddenCalendarIdentifier const):
        (WTR::TestController::setDefaultCalendarType):
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::selectionEndGrabberViewRect const):
        (WTR::UIScriptController::calendarType const): Deleted.

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

        webkitpy: Boot a single worker for custom devices
        https://bugs.webkit.org/show_bug.cgi?id=191312
        <rdar://problem/45848717>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Custom devices only run a hand-full of tests. Booting multiple
        simulators is expensive and unneeded for these tests.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort. child_processes): No reason to memoize this call, and it prevents
        overriding the number of child processes when booting custom devices.

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

        webkitpy: Generalize trailing SDK specifier (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort): Use normalized SDK.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Use normalized SDK.
        (IOSSimulatorPort._build_driver_flags): Use platform SDK in build driver flags.

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Properly disable WEBGPU on all non-Metal platforms for now.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add URL configuration for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191132

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews-app/urls.py: Added entry for ews.urls.
        * BuildSlaveSupport/ews-app/ews/urls.py: Added.

2018-11-06  Youenn Fablet  <youenn@apple.com>

        Make mDNS ICE Candidate an experimental flag again
        https://bugs.webkit.org/show_bug.cgi?id=191262

        Reviewed by Dean Jackson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebRTCMDNSICECandidatesEnabled):
        (WTR::TestRunner::setMDNSICECandidatesEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add views for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191131

        Rubber-stamped by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/views/index.py: Added.
        * BuildSlaveSupport/ews-app/ews/views/patch.py:
        * BuildSlaveSupport/ews-app/ews/views/results.py: Added.
        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added.

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Add models for OpenSource EWS Django app
        https://bugs.webkit.org/show_bug.cgi?id=191123

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/ews/models/__init__.py:
        * BuildSlaveSupport/ews-app/ews/models/buildermappings.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/builds.py: Added.
        * BuildSlaveSupport/ews-app/ews/models/patch.py:
        * BuildSlaveSupport/ews-app/ews/models/steps.py: Added.

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Fix Invalid HTTP_HOST header
        https://bugs.webkit.org/show_bug.cgi?id=191325

        Reviewed by Lucas Forschler.

        Changing ALLOWED_HOSTS to * as the landing page should be publicly accessible.

        * BuildSlaveSupport/ews-app/ews-app/settings.py:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename EWS_app to ews-app - part 2
        https://bugs.webkit.org/show_bug.cgi?id=191317

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/ews-app/EWS_app: Removed.
        * BuildSlaveSupport/ews-app/ews-app: Moved from BuildSlaveSupport/ews-app/EWS_app.
        * BuildSlaveSupport/ews-app/ews-app/settings.py:
        * BuildSlaveSupport/ews-app/ews-app/urls.py:
        * BuildSlaveSupport/ews-app/ews-app/wsgi.py:
        * BuildSlaveSupport/ews-app/manage.py:

2018-11-06  Aakash Jain  <aakash_jain@apple.com>

        [ews-app] Rename EWS_app to ews-app - part 1
        https://bugs.webkit.org/show_bug.cgi?id=191317

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/EWS_app: Removed.
        * BuildSlaveSupport/ews-app: Moved from BuildSlaveSupport/EWS_app.

2018-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        Previously, it was impossible for WebKitTestRunner to draw spelling dots. This patch adds support for a header
        at the top of test files, of the form <!-- webkit-test-runner [ spellCheckingDots=true ] --> which will cause
        dots to be drawn.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2018-11-06  Don Olmstead  <don.olmstead@sony.com>

        Feature flags not present for Visual Studio when using build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=191288

        Reviewed by Fujii Hironori.

        Passes feature flags to Visual studio builds within build-webkit.
        Removes cmakeBasedPortArguments as it is no longer in use.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (cmakeBasedPortArguments): Deleted.

2018-11-06  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r230523): Caps lock indicator not shown in password field
        https://bugs.webkit.org/show_bug.cgi?id=190056

        Reviewed by Ryosuke Niwa.

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

2018-11-06  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: WAL file keeps growing
        https://bugs.webkit.org/show_bug.cgi?id=191294
        <rdar://problem/41333493>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-1.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize-2.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBTempFileSize.mm: Added.
        (-[IndexedDBFileSizeMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2018-11-06  Alex Christensen  <achristensen@webkit.org>

        Fix tests after r237863
        https://bugs.webkit.org/show_bug.cgi?id=191315

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        With the timing change of r237863, the WKWebView progressed further than before when loading main.html so it completed before main2.html.
        This test was meant to test that main2.html does eventually load, and it doesn't matter if main.html loads before it.  I updated the test
        to verify that main2.html eventually loads, making this test less timing dependent.

2018-11-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237834.

        Tests for this change crash on iOS Simulator

        Reverted changeset:

        "Spelling dots are drawn in the wrong place"
        https://bugs.webkit.org/show_bug.cgi?id=190764
        https://trac.webkit.org/changeset/237834

2018-11-05  Alex Christensen  <achristensen@webkit.org>

        [Mac] Implement safe browsing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188871

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        (-[SafeBrowsingNavigationDelegate webView:didCommitNavigation:]):
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:]):
        (-[TestLookupContext lookUpURL:completionHandler:]):
        (simpleURL):
        (safeBrowsingView):
        (TEST):
        (-[SafeBrowsingNavigationDelegate webView:didFinishNavigation:]): Deleted.
        (+[TestServiceLookupResult resultWithProvider:phishing:malware:unwantedSoftware:knownToBeUnsafe:]): Deleted.
        (-[TestServiceLookupResult isKnownToBeUnsafe]): Deleted.
        * TestWebKitAPI/Utilities.h:

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

        webkitpy: Generalize trailing SDK specifier (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=191275
        <rdar://problem/45703660>

        Reviewed by Lucas Forschler.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.available_sdks): List all installed SDKs with version numbers stripped out.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo):
        (TestPlatformInfo.test_available_sdks):

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Spelling dots are drawn in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=190764

        Reviewed by Dean Jackson.

        Previously, it was impossible for WebKitTestRunner to draw spelling dots. This patch adds support for a header
        at the top of test files, of the form <!-- webkit-test-runner [ spellCheckingDots=true ] --> which will cause
        dots to be drawn.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

2018-11-05  Chris Dumez  <cdumez@apple.com>

        Use same limit for page cache and suspended pages
        https://bugs.webkit.org/show_bug.cgi?id=191266

        Reviewed by Geoffrey Garen.

        Update API tests accordingly.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-11-05  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [style] Exclude style check for auto generated files.
        https://bugs.webkit.org/show_bug.cgi?id=191118

        Reviewed by Eric Carlson.

        Some files checked in to the repository are generated by other tools. In this patch,
        "MiniBrowserLibResource.h" is the file generated and managed by resource editor of
        VisualStudio.

        There's no need to check these files because it's not practical to fix the style errors
        or it's hard to maintain those fixes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (is_generated_file):
        (CppChecker.check):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Build libx264 as it is the h264 encoder we support in WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=190680

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WebKit.yaml:

2018-11-05  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Fix formatting nits in Document and Frame summary strings
        https://bugs.webkit.org/show_bug.cgi?id=191094

        Reviewed by Andy Estes.

        Format boolean as 1/0 when printing Frame summary to be consistent with the formatting of
        booleans in other summary strings, substitute "inMainFrame" for "isMainFrame" in the printed
        Document summary and add closing brace '}' to both Frame and Document summary strings to make
        them look pretty.

        * lldb/lldb_webkit.py:
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):

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

        [iOS] Allow WKWebView clients to customize bar button item groups in the accessory view when editing
        https://bugs.webkit.org/show_bug.cgi?id=191240
        <rdar://problem/44872806>

        Reviewed by Tim Horton.

        Add new API tests to verify that setting leading and trailing bar button groups on WKWebView sets the first
        responder's (i.e. WKContentView's) leading and trailing bar button groups, and that this can also be achieved by
        overriding `-[WKWebView inputAssistantItem]`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (-[InputAssistantItemTestingWebView fakeLeadingBarButtonItemAction]):
        (-[InputAssistantItemTestingWebView fakeTrailingBarButtonItemAction]):
        (+[InputAssistantItemTestingWebView barButtonIcon]):
        (+[InputAssistantItemTestingWebView leadingItemsForWebView:]):
        (+[InputAssistantItemTestingWebView trailingItemsForWebView:]):
        (-[InputAssistantItemTestingWebView inputAssistantItem]):
        (TestWebKitAPI::TEST):

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

        [iOS] Changing view scale sometimes does not zoom the page to the new initial scale when the page is zoomed in when ignoring meta viewport
        https://bugs.webkit.org/show_bug.cgi?id=191226
        <rdar://problem/45781765>

        Reviewed by Tim Horton.

        Add a missing check for `shouldIgnoreMetaViewport` when comparing TestOptions, to ensure that "ignore meta
        viewport" state doesn't unexpectedly persist after running a layout test that ignores meta viewport.

        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237784 and r237788.
        https://bugs.webkit.org/show_bug.cgi?id=191270

        Caused mediastream layout test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237784

        "[MediaStream] User should not be prompted again after denying
        getDisplayMedia request"
        https://bugs.webkit.org/show_bug.cgi?id=191227
        https://trac.webkit.org/changeset/237788

2018-11-05  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=191268
        Remove unused bots.

        rubber-stamped by Alexey Proskuryakov.

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

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test runner fails to respect default build type
        https://bugs.webkit.org/show_bug.cgi?id=190247

        Reviewed by Carlos Garcia Campos.

        Problem is it's looking for a release build, even though I've run set-webkit-configuration
        --debug. It should look for a debug build unless I explicitly pass --release.

        * glib/api_test_runner.py:
        (TestRunner.__init__):

2018-11-05  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Add webrtcencoder bin to cleanup and refactor the way we set encoders
        https://bugs.webkit.org/show_bug.cgi?id=190674

        Reviewed by Philippe Normand.

        webrtcencoder is a simple GstBin with a set of well known GStreamer encoders which
        it can use to implement encoding for different formats exposing a trimmed down unified API.

        It also adds proper handling of H264 profiles.

        The added files follow GStreamer coding style as we aim at upstreaming the element
        in the future.

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py:

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] API test /webkit/WebKitSettings/webkit-settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191221

        Reviewed by Carlos Garcia Campos.

        This test ensures that MSE is disabled by default, but we now enable it by default, so
        reverse the semantics of the test.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2018-11-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r237031): [GTK] Test /webkit/WebKitWebView/settings is failing
        https://bugs.webkit.org/show_bug.cgi?id=191225

        Reviewed by Alejandro G. Castro.

        Fix a memory leak causing this test to fail.

        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):

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

        [webkitpy] Support WPE in the run-web-platform-tests script
        https://bugs.webkit.org/show_bug.cgi?id=191183

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/w3c/wpt_runner.py:
        (parse_args): Support `--wpe` as an argument that specifies WPE as the
        target port. Additionally, the `--display-server` flag now accepts
        `headless` as a valid value, enabling the WPE WebDriver to run in
        headless mode.

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

        [Win] Use C++14, not C++17
        https://bugs.webkit.org/show_bug.cgi?id=191101

        Reviewed by Alex Christensen.

        std::basic_string::data() returns a read-only const buffer in
        C++14.

        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString): Use std::vector instead of std::wstring.
        (createUTF8String): Use std::vector instead of std::string.

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

        [Cocoa] Fold common UIScriptController functionality on macOS and iOS into UIScriptControllerCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=191231

        Reviewed by Simon Fraser.

        Moves some UIScriptController method implementations specific to iOS and macOS into UIScriptControllerCocoa, so
        it can be shared between iOS-family and macOS platforms. See below for more details.

        No change in behavior.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::overridePreference):

        Add a method stub for DumpRenderTree.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):

        Unify these method implementations.

        (WTR::UIScriptController::removeViewFromWindow):
        (WTR::UIScriptController::addViewToWindow):

        Move the macOS implementation to UIScriptControllerCocoa. On iOS, this method currently only adds the web view
        to the window, and does not attempt to invoke the given completion block; additionally, invoking the completion
        block after a presentation update (as done on macOS) causes pageoverlay/overlay-remove-reinsert-view.html to
        begin failing consistently. This patch does not attempt to change behavior, but adds a FIXME describing this.

        (WTR::UIScriptController::overridePreference):
        (WTR::UIScriptController::findString):
        (WTR::UIScriptController::contentsOfUserInterfaceItem const):

        Move these from UIScriptControllerMac to UIScriptControllerCocoa, so that it is now implemented on iOS as well.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask): Deleted.
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.
        (WTR::UIScriptController::contentsOfUserInterfaceItem const): Deleted.
        (WTR::UIScriptController::findString): Deleted.
        (WTR::UIScriptController::removeViewFromWindow): Deleted.
        (WTR::UIScriptController::addViewToWindow): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAsyncTask): Deleted.
        (WTR::UIScriptController::contentsOfUserInterfaceItem const): Deleted.
        (WTR::UIScriptController::overridePreference): Deleted.
        (WTR::UIScriptController::findString): Deleted.
        (WTR::UIScriptController::removeViewFromWindow): Deleted.
        (WTR::UIScriptController::addViewToWindow): Deleted.
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution): Deleted.

2018-11-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] User should not be prompted again after denying getDisplayMedia request
        https://bugs.webkit.org/show_bug.cgi?id=191227
        <rdar://problem/45784512>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (-[GetDisplayMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (TestWebKitAPI::GetDisplayMediaTest::promptForCapture):
        (TestWebKitAPI::TEST_F):

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

        [LFC][BFC] Add support for percentage height in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=191232

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][BCF] Add support for block level non-replaced inflow height percentage
        https://bugs.webkit.org/show_bug.cgi?id=191229

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][BFC] Resolve percentage height values.
        https://bugs.webkit.org/show_bug.cgi?id=191224

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-03  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm: Added.
        (TEST):

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r237761.

        Makes most API tests timeout and WK2 tests crash

        Reverted changeset:

        "Mac production builds should sign the network process xpc
        service with entitlements"
        https://bugs.webkit.org/show_bug.cgi?id=191209
        https://trac.webkit.org/changeset/237761

2018-11-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed API test gardening

        * TestWebKitAPI/glib/TestExpectations.json:

2018-11-02  Justin Michaud  <justin_michaud@apple.com>

        Add new global object and preliminary Worklets support for CSS painting api
        https://bugs.webkit.org/show_bug.cgi?id=190979

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2018-11-02  Alex Christensen  <achristensen@webkit.org>

        Mac production builds should sign the network process xpc service with entitlements
        https://bugs.webkit.org/show_bug.cgi?id=191209
        <rdar://problem/45377609>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm: Added.
        (TEST):

2018-11-02  Lucas Forschler  <lforschler@apple.com>

        Add Windows 10 archive bots
        https://bugs.webkit.org/show_bug.cgi?id=190964
        
        This Change updates the Apple Windows Buildbot configuration.
        - Add Windows 10 specific builders and testers for release and debug.
        - Refactor Windows -> Windows 7.
        - Remove Windows 7 Debug.

        Reviewed by Aakash Jain.

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

2018-11-02  Philippe Normand  <pnormand@igalia.com>

        [GTK][WPE] Enable GST_DEBUG_NO_COLOR environment variable pass-through

        Rubber-stamped by Michael Catanzaro.

        This variable is useful to get rid of shell color escapes in tests stderr files.

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

2018-11-02  Aakash Jain  <aakash_jain@apple.com>

        Add Basic Django web app for OpenSource EWS
        https://bugs.webkit.org/show_bug.cgi?id=191091

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/EWS_app/manage.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/__init__.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/settings.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/urls.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/EWS_app/wsgi.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/admin.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/apps.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/migrations/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/tests.py: Added, auto-generated by Django.
        * BuildSlaveSupport/EWS_app/ews/models/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/models/patch.py: Added.
        * BuildSlaveSupport/EWS_app/ews/views/__init__.py: Added.
        * BuildSlaveSupport/EWS_app/ews/views/patch.py: Added.

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

        [iOS] WebKit should dispatch DOM events when a modifier key is pressed
        https://bugs.webkit.org/show_bug.cgi?id=190487

        Reviewed by Tim Horton.

        Update the code for renamed enumerations. For WebKitTestRunner, removed comment that does not
        match my observations when using the simulator to simulate iOS 12 and add support for testing
        right-hand side modifiers.

        * DumpRenderTree/mac/EventSendingController.mm:
        (modifierFlags):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        (-[EventSendingController setTouchModifier:value:]):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

2018-11-02  Chris Dumez  <cdumez@apple.com>

        [PSON] Reuse SuspendedPages' process when possible, for performance
        https://bugs.webkit.org/show_bug.cgi?id=191166

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [LFC][IFC] Add support for intrinsic width calculation
        https://bugs.webkit.org/show_bug.cgi?id=191144

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-01  Philippe Normand  <pnormand@igalia.com>

        [Apache] Self-signed SSL certificate RSA key is considered too weak
        https://bugs.webkit.org/show_bug.cgi?id=191156

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/system/pemfile.py:

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

        Unreviewed follow-up to r237678.

        * wpe/jhbuild.modules: The patch element apparently has to be a child
        of the branch in order for Jhbuild to properly detect and apply the
        patch file.

2018-11-01  Ross Kirsling  <ross.kirsling@sony.com>

        build-jsc --wincairo should update WinCairo libraries
        https://bugs.webkit.org/show_bug.cgi?id=191170

        Reviewed by Fujii Hironori.

        * Scripts/build-jsc:

2018-11-01  John Wilander  <wilander@apple.com>

        In WebCore::ResourceLoadObserver, use document.sessionID().isEphemeral() when possible and check for page existence when not
        https://bugs.webkit.org/show_bug.cgi?id=191119
        <rdar://problem/44176965>

        Reviewed by Chris Dumez.

        This is an API test for a WebKitLegacy WebView that is first closed and then
        JavaScript is handed a keyboard event.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/ClosingWebView.mm: Added.
        (-[ClosingWebViewThenSendingItAKeyDownEventLoadDelegate webView:didFinishLoadForFrame:]):
        (-[KeyboardEventListener handleEvent:]):
        (TestWebKitAPI::TEST):

2018-11-01  Sihui Liu  <sihui_liu@apple.com>

        Add a storage limit for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=190598
        <rdar://problem/44654715>

        Reviewed by Chris Dumez.

        Add API for testing.

        * DumpRenderTree/TestRunner.cpp:
        (setIDBPerOriginQuotaCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIDBPerOriginQuota):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setIDBPerOriginQuota):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setIDBPerOriginQuota):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setIDBPerOriginQuota):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-11-01  Chris Dumez  <cdumez@apple.com>

        [PSON] WebPageProxy::receivedNavigationPolicyDecision() should not schedule the new load asynchronously when process-swapping
        https://bugs.webkit.org/show_bug.cgi?id=191076

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate init]):
        (-[PSONNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):

2018-11-01  Adrian Perez de Castro  <aperez@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147
        <rdar://problem/45726710>

        Unreviewed build fix.

        This adds the missing compilation guards in the WPE MiniBrowser.

        * MiniBrowser/wpe/main.cpp:
        (main): Condition GST includes and calls.

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

        [LFC][IFC] Add support for inline-block elements.
        https://bugs.webkit.org/show_bug.cgi?id=191143

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Add missing libsoup patch to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=191149

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules:
        * wpe/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Added.

2018-11-01  Claudio Saavedra  <csaavedra@igalia.com>

        Fix build with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=191147

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/main.c:
        (main): Condition GST includes and calls

2018-10-31  Justin Michaud  <justin_michaud@apple.com>

        Add Justin Michaud to the list of WebKit Committers
        https://bugs.webkit.org/show_bug.cgi?id=191142

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

2018-10-31  Guillaume Emont  <guijemont@igalia.com>

        Don't run JIT tests on 32-bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=191074

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:

2018-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Attachment dropped from one web view to another is missing its file wrapper
        https://bugs.webkit.org/show_bug.cgi?id=190530
        <rdar://problem/45232149>

        Reviewed by Tim Horton.

        Add a test to verify that copying different types of attachments and pasting in a new web view inserts
        attachments in the second web view that are backed by _WKAttachment objects, whose NSFileWrappers hold data that
        is equivalent to the original file wrappers used to insert attachments in the first web view.

        Existing API tests verify that when copying and pasting within a single web view, the pasted attachment element
        is still backed by the same NSFileWrapper instance.

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

2018-10-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove obsolete code for Visual Studio Express in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=190949

        Reviewed by Alex Christensen.

        Visual Studio 2017 Community is the alternative.

        * Scripts/webkitdirs.pm: Remove $willUseVCExpressWhenBuilding variable.
        (setupCygwinEnv): Remove obsolete code for Visual Studio Express.
        (buildVisualStudioProject): Ditto.
        (dieIfWindowsPlatformSDKNotInstalled): Deleted.
        (usingVisualStudioExpress): Deleted.

2018-10-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Direct2D] Support building DumpRenderTree for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=191093
        <rdar://problem/45685706>

        Unreviewed build fix.

        error C2065: 'renderTarget': undeclared identifier

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Restored the previous implementation.

2018-10-30  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=191072

        Reviewed by Brent Fulgham.

        Add platform scripts for building the PlayStation port.
        perl Tools/Scripts/build-webkit --playstation

        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (determineConfigurationProductDir):
        (isPlayStation): Added.
        (getMSBuildPlatformArgument): Added.
        (buildVisualStudioProject):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        * TestWebKitAPI/PlatformPlayStation.cmake: Added.

2018-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Support building DumpRenderTree for Direct2D
        https://bugs.webkit.org/show_bug.cgi?id=191093
        <rdar://problem/45685706>

        Reviewed by Alex Christensen.

        * DumpRenderTree/PixelDumpSupport.cpp: Update for Direct2D use.
        * DumpRenderTree/PlatformWin.cmake: Add support for Direct2D build.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.cpp: Added.
        (pixelDumpSystemFactory): Added.
        (printPNG): Create stub.
        (computeMD5HashStringForBitmapContext): Ditto.
        (dumpBitmap): Ditto.
        * DumpRenderTree/win/PixelDumpSupportDirect2D.h: Added.
        (BitmapContext::createByAdoptingBitmapAndContext):
        (BitmapContext::~BitmapContext):
        (BitmapContext::platformContext const):
        (BitmapContext::BitmapContext):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Update to support Direct2D.
        * MiniBrowser/win/MiniBrowserReplace.h: Drive-by fix: The old WebKit
        logo is no longer available at this location. Switch to the new logo.

2018-10-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Support alternate simctl list outputs
        https://bugs.webkit.org/show_bug.cgi?id=191090
        <rdar://problem/45684255>

        Rubber-stamped by Aakash Jain.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager._create_runtimes): Support alternative availability format.
        (SimulatedDeviceManager._create_device_with_runtime): Ditto.
        * Scripts/webkitpy/xcode/simulated_device_unittest.py:
        (test_available_devices): Add iOS 12 with alternative availability format.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:

2018-10-30  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Fixes to the PublicSuffix implementation
        https://bugs.webkit.org/show_bug.cgi?id=191031

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        (TestWebKitAPI::TEST_F): Remove a test for a domain
        that is not registrable and shouldn't be tested there.

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * Scripts/check-inspector-strings:
        * Scripts/update-webkit-localizable-strings:
        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:
        English->en

2018-10-29  Daniel Bates  <dabates@apple.com>

        [lldb-webkit] Last aliased enumerator in OptionSet is printed; should print first enumerator
        https://bugs.webkit.org/show_bug.cgi?id=191036

        Reviewed by Andy Estes.

        Prefer the first enumerator (in parse order) when pretty-printing an OptionSet that is parameterized
        by an enum that contains two or more enumerators with the same value. For example, suppose
        you have the following enum:

        enum Flag {
            A = 1 << 0,
            AAlias = A,
        };

        Then pretty-printing OptionSet<Flag>(Flag::A) should print A instead of AAlias. A side effect of
        this change is that OptionSet<Flag>(Flag::AAlias) will also print A as its only member as we cannot
        differentiate between A and Alias. This should be acceptable in practice as aliased enumerators
        tend to be used in bounds checks as opposed to code that adds to a set.

        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders):
        * lldb/lldb_webkit.py:
        (WTFOptionSetProvider.update):
        * lldb/lldb_webkit_unittest.py:
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple):
        (TestSummaryProviders):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_aliased_flag):

2018-10-29  Daniel Bates  <dabates@apple.com>

        [llbd-webkit] Add summaries for Document, Frame, and SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=191033

        Reviewed by Andy Estes.

        For Documents we display its origin, URL, whether it's in the main frame, and its page cache state.
        We display the same details in the summary for a Frame because its Document tends to be the most
        interesting aspect of it. For SecurityOrigin we display its origin, domain (affects cookie access),
        and whether the origin has universal access.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        Register new summary providers.

        (WebCoreSecurityOrigin_SummaryProvider):
        (WebCoreFrame_SummaryProvider):
        (WebCoreDocument_SummaryProvider):
        Add new summary providers.

        (StdOptionalWrapper):
        (StdOptionalWrapper.__init__):
        (StdOptionalWrapper.has_value):
        (StdOptionalWrapper.value):
        Convenience data type that provides access to the fields of a std::optional<>.
        
        (WebCoreSecurityOriginProvider):
        (WebCoreSecurityOriginProvider.__init__):
        (WebCoreSecurityOriginProvider.is_unique):
        (WebCoreSecurityOriginProvider.scheme):
        (WebCoreSecurityOriginProvider.host):
        (WebCoreSecurityOriginProvider.port):
        (WebCoreSecurityOriginProvider.domain):
        (WebCoreSecurityOriginProvider.has_universal_access):
        (WebCoreSecurityOriginProvider.to_string):
        (WebCoreFrameProvider):
        (WebCoreFrameProvider.__init__):
        (WebCoreFrameProvider.is_main_frame):
        (WebCoreFrameProvider.document):
        (WebCoreDocumentProvider):
        (WebCoreDocumentProvider.__init__):
        (WebCoreDocumentProvider.url):
        (WebCoreDocumentProvider.origin):
        (WebCoreDocumentProvider.page_cache_state):
        (WebCoreDocumentProvider.frame):

2018-10-29  Chris Dumez  <cdumez@apple.com>

        [PSON] When Safari restores session state after launching, going back and forward does not swap processes
        https://bugs.webkit.org/show_bug.cgi?id=190975
        <rdar://problem/45059256>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [LFC][IFC] Compute estimated margin top for inline formatting root's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=191018

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC] Add support for inflow non replaced content height when the box is an inline formatting root.
        https://bugs.webkit.org/show_bug.cgi?id=191011

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        Missing from r237549

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][IFC] Add support for simple intruding floats.
        https://bugs.webkit.org/show_bug.cgi?id=190998

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

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

        [LFC][IFC] Inline layout produces separate runs when float is present.
        https://bugs.webkit.org/show_bug.cgi?id=190980

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Do not force ENABLE_JIT=true when $forceCLoop is false.

        * Scripts/build-jsc:

2018-10-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Try to fix the xserver-xorg build in the Ubuntu LTS bot

        Unreviewed build fix

        The build fails because of some array-bound check related
        to strcmp() macro optimizations. Disabling selective Werrors
        when building xserver-xorg might get past this.

        * gtk/jhbuild.modules: Add --disable-selective-werror to xserver-xorg
        configuration.

2018-10-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Update API test expectations after r237383
        https://bugs.webkit.org/show_bug.cgi?id=186913

        Unreviewed gardening.

        * TestWebKitAPI/glib/TestExpectations.json: Remove
        passing TestSSL tests.

2018-10-28  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Add the WebKitVersion.h header
        https://bugs.webkit.org/show_bug.cgi?id=191015

        Reviewed by Michael Catanzaro.

        * MiniBrowser/wpe/main.cpp:
        (automationStartedCallback): Remove the FIXME and finally enable the
        webkit_application_info_set_version() call.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: Remove
        this FIXME as well and remove the custom WEBKIT_*_VERSION macros.

2018-10-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove obsolete code for vcxproj builds in build-api-tests and build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=190948

        Reviewed by Brent Fulgham.

        vcxproj files have been removed in Bug 154388.

        * Scripts/build-api-tests: Removed obsolete code to build vcproj.
        * Scripts/build-jsc:
        (buildMyProject): Ditto. Removed a condition of buiding bmalloc
        which is not used because Windows ports are using CMake.

2018-10-28  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Renamed IsRandom to
        IsEvenlyDistributed to reflect the fact that we're only testing the
        distribution. Added a test case that covers more table densities and
        the remove() operation.

2018-10-27  Charlie Turner  <cturner@igalia.com>

        [GTK] Add bubblewrap feature option
        https://bugs.webkit.org/show_bug.cgi?id=190981

        Reviewed by Xabier Rodriguez-Calvar.

        Without this, it was not possible to disable the bubblewrap sandbox
        from the webkit build scripts.

        * Scripts/webkitperl/FeatureList.pm:

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237479 and r237484.
        https://bugs.webkit.org/show_bug.cgi?id=190978

        broke JSC on iOS (Requested by tadeuzagallo on #webkit).

        Reverted changesets:

        "New bytecode format for JSC"
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237479

        "Gardening: Build fix after r237479."
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237484

2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Do not force ENABLE_JIT=true when $forceCLoop is false.

        * Scripts/build-jsc:

2018-10-26  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Updated the Random_IsRandom to
        more thoroughly test for randomness.

2018-10-26  Antti Koivisto  <antti@apple.com>

        hashSet.remove(hashSet.random()) doesn't build
        https://bugs.webkit.org/show_bug.cgi?id=190953

        Reviewed by Chris Dumez.

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

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

        [LFC][IFC] Layout floats as part of the inline content
        https://bugs.webkit.org/show_bug.cgi?id=190942

        Reviewed by Antti Koivisto.

        * LayoutReloaded/misc/LFC-passing-tests.txt:

2018-10-26  Alicia Boya García  <aboya@igalia.com>

        [MSE][WTF][Media] Invalid MediaTime should be falsy
        https://bugs.webkit.org/show_bug.cgi?id=190893

        Reviewed by Jer Noble.

        This patch adds additional API tests for the conversions from
        MediaTime to boolean.

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

2018-10-25  Chris Dumez  <cdumez@apple.com>

        [PSON] Navigating cross-site with locked history but unlocked back/forward list fails to create a new BackForwardListItem
        https://bugs.webkit.org/show_bug.cgi?id=190915
        <rdar://problem/45059069>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a watchlist message rule to warn about feature checking new inspector protocol changes
        https://bugs.webkit.org/show_bug.cgi?id=190896

        Reviewed by Matt Baker.

        * Scripts/webkitpy/common/config/watchlist:

2018-10-25  Geoffrey Garen  <ggaren@apple.com>

        HashMap should support selecting a random entry
        https://bugs.webkit.org/show_bug.cgi?id=190814

        Reviewed by Antti Koivisto.

        Unit testing is fun and easy!

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::ZeroHash::hash):
        (TestWebKitAPI::TEST):

2018-10-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237331): DismissingActionSheetShouldNotDismissPresentingViewController times out
        https://bugs.webkit.org/show_bug.cgi?id=190897

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (TestWebKitAPI::TEST):
        Disable the test for now.

2018-10-24  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete macOS version guards
        https://bugs.webkit.org/show_bug.cgi?id=190887

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (__simulated_forceClickAssociatedEventsMask):
        (-[TestWKWebViewHostWindow _mouseDownAtPoint:simulatePressure:clickCount:]):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [WPE] Fix CMake rules in for TestWebKitAPIBase library building in developer mode
        https://bugs.webkit.org/show_bug.cgi?id=190328

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformWPE.cmake:

2018-10-24  Chris Dumez  <cdumez@apple.com>

        [PSON] When navigating back and forth, 'about:blank' shows up in the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=190846
        <rdar://problem/45058938>

        Reviewed by Antti Koivisto.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-24  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] TestSSL failing because of missing libsoup patch
        https://bugs.webkit.org/show_bug.cgi?id=190869

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add the patch below to fix the API test TestSSL
        * gtk/patches/libsoup-soup-socket-fix-critical-warning-when-the-peer-certi.patch: Added.

2018-10-23  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Rename old GPU* implementation files to GPULegacy* for WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190817

        Reviewed by Dean Jackson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyBuffer.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyCommandQueue.mm: Copied from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyDevice.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyFunction.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyLibrary.mm: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm.
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULegacyTest.h: Renamed from Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h.

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

        [PSON] Add support for cross-site client-side redirects
        https://bugs.webkit.org/show_bug.cgi?id=190806
        <rdar://problem/45047344>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
        (-[PSONNavigationDelegate _webView:willPerformClientRedirectToURL:delay:]):
        (-[PSONNavigationDelegate _webView:didPerformClientRedirectFromURL:toURL:]):

2018-10-23  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE][GTK] Pass full certificate chain in CertificateInfo coder
        https://bugs.webkit.org/show_bug.cgi?id=190789

        Reviewed by Michael Catanzaro.

        When the network process serializes certificate data to other
        processes through the argument coders, the certificate chain, if
        present, is lost. In practice this means that applications using
        the public API to process certificate info have no details on the
        certificate chain, other than the very basics included in the
        certificate. Serialize the entire chain if available in the
        certificate.

        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        (testSSL): Test that the self-signed certificate has no bogus
        issuer certificate.

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

        REGRESSION (r237331): InteractionDeadlockAfterCrash API test fails
        https://bugs.webkit.org/show_bug.cgi?id=190801
        <rdar://problem/43674361>

        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        (TEST):
        Use a parented WKWebView for this test, otherwise none of the assertions
        about gesture recognizers work anymore.

2018-10-22  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r234081): TestWebKitAPI.VideoControlsManager.VideoControlsManagerAudioElementFollowingUserInteraction is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=187972

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST): Disable the flaky test.

2018-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] fast/forms/datalist/datalist-show-hide.html fails
        https://bugs.webkit.org/show_bug.cgi?id=190777

        Reviewed by Tim Horton.

        Implement isShowingDataListSuggestions on iOS. See below for more details.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingDataListSuggestions const):

        Add a stub implementation for DumpRenderTree.

        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isShowingDataListSuggestions const):

        Move this stub implementation to !PLATFORM(COCOA).

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::forEachViewInHierarchy):

        Add a helper function to apply a given function to a UIView and each of its subviews, recursively.

        (WTR::UIScriptController::isShowingDataListSuggestions const):

        For iOS, return whether the UIRemoteKeyboardWindow contains a subview of type WKDataListSuggestionsPickerView.

2018-10-19  Dan Bernstein  <mitz@apple.com>

        [macOS] MiniBrowser has an unused injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=190770

        Reviewed by Tim Horton.

        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Removed the MiniBrowserBundle target,
          the Copy Bundle build phase in the MiniBrowser target, and references to removed files.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.h: Removed.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.m: Removed.
        * MiniBrowser/mac/Bundle: Removed.

2018-10-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] [Datalist] Can't pick datalist suggestions in a stock WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190621
        <rdar://problem/45310649>

        Reviewed by Tim Horton.

        Add a UIScriptController hook to resign first responder on WKWebView. See LayoutTests/ChangeLog for more detail.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::resignFirstResponder):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm:
        (WTR::UIScriptController::resignFirstResponder):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::makeWebViewFirstResponder):

        Implement this method stub on iOS, to ensure that TestController::resetStateToConsistentValues restores first
        responder on the WKWebView when running iOS layout tests.

        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):

        After resigning first responder to dismiss any on-screen keyboard, ensure that we restore first responder.

2018-10-19  Dean Jackson  <dino@apple.com>

        ASSERTION FAILED: !frame().animation().hasAnimations() in WebCore::FrameView::didDestroyRenderTree()
        https://bugs.webkit.org/show_bug.cgi?id=186946
        <rdar://problem/41724248>

        Reviewed by Antoine Quint.

        If the incoming test has different enableWebAnimationsCSSIntegration options,
        then we need to create a new WebView.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::webViewIsCompatibleWithOptions const):

2018-10-19  Charlie Turner  <cturner@igalia.com>

        [EME] Fix crash during tracing in  gst_qtdemux_request_protection_context
        https://bugs.webkit.org/show_bug.cgi?id=190738

        Reviewed by Xabier Rodriguez-Calvar.

        Add a GStreamer patch to avoid crashing when the run-time logging
        level is TRACE. There was a missing null check which caused many
        tests to crash.

        * gstreamer/patches/gst-plugins-good-0013-Avoid-warning-when-reporting-about-decryptors.patch: Added.

2018-10-18  Alicia Boya García  <aboya@igalia.com>

        [Media] Use nanoseconds as MaximumTimeScale
        https://bugs.webkit.org/show_bug.cgi?id=190631

        Rebased MediaTime tests covering timescales over the maximum.

        Reviewed by Jer Noble.

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

2018-10-18  Dean Johnson  <dean_johnson@apple.com>

        clean-webkit pulls in many unnecessary dependencies in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=190732

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/host.py:
        (Host.__init__): Split out 'bugs', 'bugzilla', and 'web' to only be created when used.
        (Host):
        (Host.bugs):
        (Host.bugzilla):
        (Host.web):

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

        [PSON] SuspendedPages do not report meaningful domains in Activity Monitor
        https://bugs.webkit.org/show_bug.cgi?id=190721
        <rdar://problem/45059699>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.h:
        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback):
        (TestRunner::staticFunctions):
        (TestRunner::callUIScriptCallback):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        * DumpRenderTree/ios/DumpRenderTreeAppMain.mm:
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm:
        * DumpRenderTree/ios/TextInputControllerIOS.m:
        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (destroyWebViewAndOffscreenWindow):
        (resetWebPreferencesToConsistentValues):
        (setDefaultsToConsistentValuesForTesting):
        (allocateGlobalControllers):
        (releaseGlobalControllers):
        (addTestPluginsToPluginSearchPath):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (DumpRenderTreeMain):
        (dumpFrameAsPDF):
        (dumpBackForwardListForAllWindows):
        (updateDisplay):
        (dump):
        (resetWebViewToConsistentStateBeforeTesting):
        (runTest):
        (displayWebView):
        (displayAndTrackRepaintsWebView):
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow close]):
        (-[DumpRenderTreeWindow webView]):
        (-[DumpRenderTreeWindow webViewStartedAcceleratedCompositing:]):
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        (-[EventSendingController dealloc]):
        (-[EventSendingController currentEventTime]):
        (-[EventSendingController clearKillRing]):
        (modifierFlags):
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController scalePageBy:atX:andY:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate init]):
        (-[FrameLoadDelegate dealloc]):
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        (-[FrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[FrameLoadDelegate didClearWindowObjectInStandardWorldForFrame:]):
        * DumpRenderTree/mac/LayoutTestHelper.m:
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider timerFired]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMainFrameIsFirstResponder):
        (TestRunner::setAutomaticLinkDetectionEnabled):
        (TestRunner::setUseDashboardCompatibilityMode):
        (TestRunner::isCommandEnabled):
        (TestRunner::inspectorTestStubURL):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (TestRunner::abortModal):
        (TestRunner::setTextDirection):
        (TestRunner::addChromeInputField):
        (TestRunner::removeChromeInputField):
        (TestRunner::focusWebView):
        (TestRunner::setBackingScaleFactor):
        (TestRunner::imageCountInGeneralPasteboard const):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate modalWindowWillClose:]):
        (-[UIDelegate webViewRunModal:]):
        (-[UIDelegate webView:supportsFullScreenForElement:withKeyboard:]):
        (-[UIDelegate dealloc]):
        * Scripts/check-for-inappropriate-objc-class-names:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        * TestRunnerShared/spi/UIKitTestSPI.h:
        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp:
        * TestWebKitAPI/Tests/WebCore/MarkedText.cpp:
        (WebCore::operator<<):
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        * TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp:
        * TestWebKitAPI/Tests/WebKit/NoHistoryItemScrollToFragment.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/AdditionalReadAccessAllowedURLs.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRangeHandle.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/BundleRangeHandlePlugIn.mm:
        (-[BundleRangeHandlePlugIn webProcessPlugInBrowserContextController:didFinishDocumentLoadForFrame:]):
        * TestWebKitAPI/Tests/WebKitCocoa/Coding.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        (createWebViewWithCustomPasteboardDataEnabled):
        * TestWebKitAPI/Tests/WebKitCocoa/Copying.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/DataDetection.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/DoAfterNextPresentationUpdateAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ExitFullscreenOnEnterPiP.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FindInPage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FixedLayoutSize.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Geolocation.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageClear.mm:
        (defaultWebsiteCacheDirectory):
        (defaultApplicationCacheDirectory):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/NSFileManagerExtras.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlaying.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteHTML.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/QuickLook.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/RenderedImageWithOptions.mm:
        (runTestWithWidth):
        * TestWebKitAPI/Tests/WebKitCocoa/RenderedImageWithOptionsPlugIn.mm:
        (-[RenderedImageWithOptionsPlugIn renderImageWithWidth:completionHandler:]):
        * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/ShrinkToFit.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/UserContentController.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/VisibleContentRect.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformCopyRichTextWithMultipleAttachments):
        (platformCopyRichTextWithImage):
        (platformCopyPNG):
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewEditingActions.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewTargetForAction.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKPDFViewStablePresentationUpdateCallback.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-leaks.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        * TestWebKitAPI/Tests/WebKitLegacy/mac/AccessingPastedImage.mm:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/FocusPreservationTests.mm:
        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        * TestWebKitAPI/Tests/ios/RenderingProgressTests.mm:
        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm:
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        * TestWebKitAPI/Tests/ios/SynchronousTimeoutTests.mm:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        * TestWebKitAPI/Tests/ios/TextAutosizingBoost.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewDelegate.mm:
        * TestWebKitAPI/Tests/ios/WKScrollViewTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        * TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm:
        * TestWebKitAPI/cocoa/DragAndDropSimulator.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[WKWebView _test_waitForDidFinishNavigation]):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm:
        * TestWebKitAPI/ios/TestWKWebViewController.h:
        * TestWebKitAPI/ios/TestWKWebViewController.mm:
        * TestWebKitAPI/ios/UIKitSPI.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::inspectorTestStubURL):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName):
        (WTR::TestController::networkProcessName):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::platformCreateWebView):
        (WTR::TestController::imageCountInGeneralPasteboard const):
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistsInKeychain):
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:

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

        [PSON] Cap number of SuspendedPageProxy objects and allow a WebPageProxy to have more than one
        https://bugs.webkit.org/show_bug.cgi?id=190688
        <rdar://problem/45354095>

        Reviewed by Antti Koivisto.

        Extended API test coverage to confirm that:
        - We do not accumulate more than 3 suspended processes.
        - We can navigate back 3 times and use the page cache for each of these loads.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        Enable the datalist element by default on iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=190594
        <rdar://problem/45281159>

        Reviewed by Ryosuke Niwa and Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Certain tags should identify their context to iOS API
        https://bugs.webkit.org/show_bug.cgi?id=190622
        <rdar://problem/45308194>

        Reviewed by Zalan Bujtas.

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

2018-10-16  Sihui Liu  <sihui_liu@apple.com>

        Add a switch for Web SQL
        https://bugs.webkit.org/show_bug.cgi?id=190271

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

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

        Remove InjectedBundleBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=190640

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::dumpBackForwardListsForAllPages):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::prepare):
        (WTR::InjectedBundlePage::dumpHistory):
        (WTR::hasPrefix): Deleted.
        (WTR::compareByTargetName): Deleted.
        (WTR::dumpBackForwardListItem): Deleted.
        (WTR::InjectedBundlePage::dumpBackForwardList): Deleted.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearBackForwardList):

2018-10-16  Dominik Infuehr  <dinfuehr@igalia.com>

        Unreviewed, added myself to contributors.json.

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

2018-10-16  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag and bindings for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190237

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK Ubuntu LTS Jhbuild prospective build fix

        * gstreamer/jhbuild.modules:

2018-10-16  Philippe Normand  <pnormand@igalia.com>

        [GTK][JHBuild] Disable libmount support in glib

        Rubber-stamped by Alejandro G. Castro.

        This feature doesn't seem required for our setup.

        * gtk/jhbuild.modules:

2018-10-15  Justin Fan  <justin_fan@apple.com>

        Add WebGPU 2018 feature flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=190509

        Reviewed by Dean Jackson.

        Re-add ENABLE_WEBGPU, an experimental feature flag, and a RuntimeEnabledFeature
        for the 2018 WebGPU prototype.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Update bot configuration for Sierra archive queues
        https://bugs.webkit.org/show_bug.cgi?id=190605

        Reviewed by Aakash Jain.

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

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        * Scripts/webkitperl/FeatureList.pm: Added ENABLE_DARK_MODE_CSS as dark-mode-css.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added ENABLE_DARK_MODE_CSS.

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [JHBuild] Add xdg-dbus-proxy module
        https://bugs.webkit.org/show_bug.cgi?id=190589

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules:

2018-10-15  Patrick Griffis  <pgriffis@igalia.com>

        [GTK] Add new sandboxing dependencies to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=190588

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies:

2018-10-15  Chris Dumez  <cdumez@apple.com>

        Experiment: target=_blank on anchors should imply rel=noopener
        https://bugs.webkit.org/show_bug.cgi?id=190481

        Reviewed by Alex Christensen.

        Add API test coverage to make sure we can now swap process when target=_blank
        is specified on an anchor but rel=noopener is not.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

        [iOS] Can't select text after dismissing the keyboard when changing focus
        https://bugs.webkit.org/show_bug.cgi?id=190563
        <rdar://problem/44613559>

        Reviewed by Tim Horton.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingKeyboard const):

        Add a new UIScriptController method that returns whether the keyboard is shown. See `ui-helper.js` for more
        details.

        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::isShowingKeyboard const):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:

        Also rename the `isShowingKeyboard` Objective-C property to the more canonical `showingKeyboard`, with
        `isShowingKeyboard` as the getter method.

        (-[TestRunnerWKWebView _invokeShowKeyboardCallbackIfNecessary]):
        (-[TestRunnerWKWebView _invokeHideKeyboardCallbackIfNecessary]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::isShowingKeyboard const):

2018-10-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix JSC tests after WebGPUShadingLanguageRI directory was removed in r237115.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Remove wsl-tests.yaml.

2018-10-15  Christopher Reid  <chris.reid@sony.com>

        [Curl][WinCairo] Add Public Suffix support to WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=183060

        Reviewed by Alex Christensen.

        Share mac's PublicSuffix tests with all ports.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/PublicSuffix.cpp:
        * TestWebKitAPI/Tests/mac/PublicSuffix.mm: Removed.

2018-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Migrated WebGPUShadingLanguageRI to the W3C
        https://bugs.webkit.org/show_bug.cgi?id=190555

        Unreviewed.

        Migrated to https://github.com/gpuweb/WHLSL/tree/master/Source

        * WebGPUShadingLanguageRI/AddressSpace.js: Removed.
        * WebGPUShadingLanguageRI/All.js: Removed.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js: Removed.
        * WebGPUShadingLanguageRI/AnonymousVariable.js: Removed.
        * WebGPUShadingLanguageRI/ArrayRefType.js: Removed.
        * WebGPUShadingLanguageRI/ArrayType.js: Removed.
        * WebGPUShadingLanguageRI/Assignment.js: Removed.
        * WebGPUShadingLanguageRI/AutoWrapper.js: Removed.
        * WebGPUShadingLanguageRI/Block.js: Removed.
        * WebGPUShadingLanguageRI/BoolLiteral.js: Removed.
        * WebGPUShadingLanguageRI/Break.js: Removed.
        * WebGPUShadingLanguageRI/BuiltInSemantic.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinMatrixGetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinMatrixSetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinVectorGetter.js: Removed.
        * WebGPUShadingLanguageRI/BuiltinVectorSetter.js: Removed.
        * WebGPUShadingLanguageRI/CallExpression.js: Removed.
        * WebGPUShadingLanguageRI/CallFunction.js: Removed.
        * WebGPUShadingLanguageRI/Casts.js: Removed.
        * WebGPUShadingLanguageRI/Check.js: Removed.
        * WebGPUShadingLanguageRI/CheckLiteralTypes.js: Removed.
        * WebGPUShadingLanguageRI/CheckLoops.js: Removed.
        * WebGPUShadingLanguageRI/CheckNativeFuncStages.js: Removed.
        * WebGPUShadingLanguageRI/CheckRecursion.js: Removed.
        * WebGPUShadingLanguageRI/CheckRecursiveTypes.js: Removed.
        * WebGPUShadingLanguageRI/CheckReturns.js: Removed.
        * WebGPUShadingLanguageRI/CheckTypesWithArguments.js: Removed.
        * WebGPUShadingLanguageRI/CheckUnreachableCode.js: Removed.
        * WebGPUShadingLanguageRI/CheckWrapped.js: Removed.
        * WebGPUShadingLanguageRI/Checker.js: Removed.
        * WebGPUShadingLanguageRI/CloneProgram.js: Removed.
        * WebGPUShadingLanguageRI/CommaExpression.js: Removed.
        * WebGPUShadingLanguageRI/ConstexprFolder.js: Removed.
        * WebGPUShadingLanguageRI/Continue.js: Removed.
        * WebGPUShadingLanguageRI/ConvertPtrToArrayRefExpression.js: Removed.
        * WebGPUShadingLanguageRI/CreateLiteral.js: Removed.
        * WebGPUShadingLanguageRI/CreateLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/DereferenceExpression.js: Removed.
        * WebGPUShadingLanguageRI/DoWhileLoop.js: Removed.
        * WebGPUShadingLanguageRI/DotExpression.js: Removed.
        * WebGPUShadingLanguageRI/EArrayRef.js: Removed.
        * WebGPUShadingLanguageRI/EBuffer.js: Removed.
        * WebGPUShadingLanguageRI/EBufferBuilder.js: Removed.
        * WebGPUShadingLanguageRI/EPtr.js: Removed.
        * WebGPUShadingLanguageRI/EnumLiteral.js: Removed.
        * WebGPUShadingLanguageRI/EnumMember.js: Removed.
        * WebGPUShadingLanguageRI/EnumType.js: Removed.
        * WebGPUShadingLanguageRI/EvaluationCommon.js: Removed.
        * WebGPUShadingLanguageRI/Evaluator.js: Removed.
        * WebGPUShadingLanguageRI/Expression.js: Removed.
        * WebGPUShadingLanguageRI/ExpressionFinder.js: Removed.
        * WebGPUShadingLanguageRI/ExternalOrigin.js: Removed.
        * WebGPUShadingLanguageRI/Field.js: Removed.
        * WebGPUShadingLanguageRI/FindHighZombies.js: Removed.
        * WebGPUShadingLanguageRI/FlattenedStructOffsetGatherer.js: Removed.
        * WebGPUShadingLanguageRI/FloatLiteral.js: Removed.
        * WebGPUShadingLanguageRI/FloatLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/FoldConstexprs.js: Removed.
        * WebGPUShadingLanguageRI/ForLoop.js: Removed.
        * WebGPUShadingLanguageRI/Func.js: Removed.
        * WebGPUShadingLanguageRI/FuncAttribute.js: Removed.
        * WebGPUShadingLanguageRI/FuncDef.js: Removed.
        * WebGPUShadingLanguageRI/FuncNumThreadsAttribute.js: Removed.
        * WebGPUShadingLanguageRI/FuncParameter.js: Removed.
        * WebGPUShadingLanguageRI/FunctionLikeBlock.js: Removed.
        * WebGPUShadingLanguageRI/HighZombieFinder.js: Removed.
        * WebGPUShadingLanguageRI/IdentityExpression.js: Removed.
        * WebGPUShadingLanguageRI/IfStatement.js: Removed.
        * WebGPUShadingLanguageRI/IndexExpression.js: Removed.
        * WebGPUShadingLanguageRI/InferTypesForCall.js: Removed.
        * WebGPUShadingLanguageRI/Inline.js: Removed.
        * WebGPUShadingLanguageRI/Inliner.js: Removed.
        * WebGPUShadingLanguageRI/IntLiteral.js: Removed.
        * WebGPUShadingLanguageRI/IntLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/Intrinsics.js: Removed.
        * WebGPUShadingLanguageRI/LayoutBuffers.js: Removed.
        * WebGPUShadingLanguageRI/Lexer.js: Removed.
        * WebGPUShadingLanguageRI/LexerToken.js: Removed.
        * WebGPUShadingLanguageRI/LiteralTypeChecker.js: Removed.
        * WebGPUShadingLanguageRI/LogicalExpression.js: Removed.
        * WebGPUShadingLanguageRI/LogicalNot.js: Removed.
        * WebGPUShadingLanguageRI/LoopChecker.js: Removed.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js: Removed.
        * WebGPUShadingLanguageRI/MakePtrExpression.js: Removed.
        * WebGPUShadingLanguageRI/MatrixType.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLCompileResult.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLConstexprEmitter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionForwardDeclaration.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLInsertTrapParameter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLNameMangler.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLNativeFunctionCall.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributes.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributesMap.js: Removed.
        * WebGPUShadingLanguageRI/Metal/MSLTypeUnifier.js: Removed.
        * WebGPUShadingLanguageRI/Metal/TypeOf.js: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/.gitignore: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/AppIcon.appiconset/Contents.json: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/Contents.json: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Base.lproj/Main.storyboard: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Info.plist: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.h: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/WHLSL.entitlements: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/_SharedMetal.txt: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/main.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/Info.plist: Removed.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/WHLSL_ToyTests.m: Removed.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Removed.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.js: Removed.
        * WebGPUShadingLanguageRI/NameContext.js: Removed.
        * WebGPUShadingLanguageRI/NameFinder.js: Removed.
        * WebGPUShadingLanguageRI/NameResolver.js: Removed.
        * WebGPUShadingLanguageRI/NativeFunc.js: Removed.
        * WebGPUShadingLanguageRI/NativeType.js: Removed.
        * WebGPUShadingLanguageRI/Node.js: Removed.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver.js: Removed.
        * WebGPUShadingLanguageRI/NullLiteral.js: Removed.
        * WebGPUShadingLanguageRI/NullType.js: Removed.
        * WebGPUShadingLanguageRI/OperatorAnderIndexer.js: Removed.
        * WebGPUShadingLanguageRI/OperatorArrayRefLength.js: Removed.
        * WebGPUShadingLanguageRI/OriginKind.js: Removed.
        * WebGPUShadingLanguageRI/OverloadResolutionFailure.js: Removed.
        * WebGPUShadingLanguageRI/Parse.js: Removed.
        * WebGPUShadingLanguageRI/Prepare.js: Removed.
        * WebGPUShadingLanguageRI/Program.js: Removed.
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js: Removed.
        * WebGPUShadingLanguageRI/PropertyAccessExpression.js: Removed.
        * WebGPUShadingLanguageRI/PropertyResolver.js: Removed.
        * WebGPUShadingLanguageRI/PtrType.js: Removed.
        * WebGPUShadingLanguageRI/ReadModifyWriteExpression.js: Removed.
        * WebGPUShadingLanguageRI/RecursionChecker.js: Removed.
        * WebGPUShadingLanguageRI/RecursiveTypeChecker.js: Removed.
        * WebGPUShadingLanguageRI/ReferenceType.js: Removed.
        * WebGPUShadingLanguageRI/ResolveNames.js: Removed.
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js: Removed.
        * WebGPUShadingLanguageRI/ResolveProperties.js: Removed.
        * WebGPUShadingLanguageRI/ResolveTypeDefs.js: Removed.
        * WebGPUShadingLanguageRI/ResourceSemantic.js: Removed.
        * WebGPUShadingLanguageRI/Return.js: Removed.
        * WebGPUShadingLanguageRI/ReturnChecker.js: Removed.
        * WebGPUShadingLanguageRI/ReturnException.js: Removed.
        * WebGPUShadingLanguageRI/Rewriter.js: Removed.
        * WebGPUShadingLanguageRI/SPIR-V.js: Removed.
        * WebGPUShadingLanguageRI/SPIRV.html: Removed.
        * WebGPUShadingLanguageRI/SPIRVCodegen.js: Removed.
        * WebGPUShadingLanguageRI/SPIRVTypeAnalyzer.js: Removed.
        * WebGPUShadingLanguageRI/SPIRVVariableAnalyzer.js: Removed.
        * WebGPUShadingLanguageRI/Sampler.js: Removed.
        * WebGPUShadingLanguageRI/Semantic.js: Removed.
        * WebGPUShadingLanguageRI/SpecializationConstantSemantic.js: Removed.
        * WebGPUShadingLanguageRI/StageInOutSemantic.js: Removed.
        * WebGPUShadingLanguageRI/StandardLibrary.js: Removed.
        * WebGPUShadingLanguageRI/StatementCloner.js: Removed.
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js: Removed.
        * WebGPUShadingLanguageRI/StructType.js: Removed.
        * WebGPUShadingLanguageRI/SwitchCase.js: Removed.
        * WebGPUShadingLanguageRI/SwitchStatement.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeArrayOperatorLength.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeCopyConstructorOperator.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeDefaultConstructorOperator.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Removed.
        * WebGPUShadingLanguageRI/TernaryExpression.js: Removed.
        * WebGPUShadingLanguageRI/Test.html: Removed.
        * WebGPUShadingLanguageRI/Test.js: Removed.
        * WebGPUShadingLanguageRI/Texture.js: Removed.
        * WebGPUShadingLanguageRI/TextureOperations.js: Removed.
        * WebGPUShadingLanguageRI/TrapStatement.js: Removed.
        * WebGPUShadingLanguageRI/Type.js: Removed.
        * WebGPUShadingLanguageRI/TypeDef.js: Removed.
        * WebGPUShadingLanguageRI/TypeDefResolver.js: Removed.
        * WebGPUShadingLanguageRI/TypeOverloadResolutionFailure.js: Removed.
        * WebGPUShadingLanguageRI/TypeRef.js: Removed.
        * WebGPUShadingLanguageRI/TypedValue.js: Removed.
        * WebGPUShadingLanguageRI/UintLiteral.js: Removed.
        * WebGPUShadingLanguageRI/UintLiteralType.js: Removed.
        * WebGPUShadingLanguageRI/UnificationContext.js: Removed.
        * WebGPUShadingLanguageRI/UnreachableCodeChecker.js: Removed.
        * WebGPUShadingLanguageRI/Value.js: Removed.
        * WebGPUShadingLanguageRI/VariableDecl.js: Removed.
        * WebGPUShadingLanguageRI/VariableRef.js: Removed.
        * WebGPUShadingLanguageRI/VectorType.js: Removed.
        * WebGPUShadingLanguageRI/VisitingSet.js: Removed.
        * WebGPUShadingLanguageRI/Visitor.js: Removed.
        * WebGPUShadingLanguageRI/WLexicalError.js: Removed.
        * WebGPUShadingLanguageRI/WSyntaxError.js: Removed.
        * WebGPUShadingLanguageRI/WTrapError.js: Removed.
        * WebGPUShadingLanguageRI/WTypeError.js: Removed.
        * WebGPUShadingLanguageRI/WhileLoop.js: Removed.
        * WebGPUShadingLanguageRI/WrapChecker.js: Removed.
        * WebGPUShadingLanguageRI/index.html: Removed.
        * WebGPUShadingLanguageRI/spirv.core.grammar.json: Removed.
        * WebGPUShadingLanguageRI/wsl-tests.yaml: Removed.

2018-10-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Disable MSE build support on Debian and Ubuntu LTS bots
        https://bugs.webkit.org/show_bug.cgi?id=190581

        Reviewed by Michael Catanzaro.

        These bots don't use JHBuild and their host GStreamer version is
        too old for the GStreamer MSE backend. Version 1.14 is needed at least.

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

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

        Use pragma once in WTF
        https://bugs.webkit.org/show_bug.cgi?id=190527

        Reviewed by Chris Dumez.

        Put WorkQueue in namespace DRT so it does not conflict with WTF::WorkQueue.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::queueLoadHTMLString):
        (TestRunner::queueLoadAlternateHTMLString):
        (TestRunner::queueBackNavigation):
        (TestRunner::queueForwardNavigation):
        (TestRunner::queueLoadingScript):
        (TestRunner::queueNonLoadingScript):
        (TestRunner::queueReload):
        * DumpRenderTree/WorkQueue.cpp:
        (WorkQueue::singleton): Deleted.
        (WorkQueue::WorkQueue): Deleted.
        (WorkQueue::queue): Deleted.
        (WorkQueue::dequeue): Deleted.
        (WorkQueue::count): Deleted.
        (WorkQueue::clear): Deleted.
        (WorkQueue::processWork): Deleted.
        * DumpRenderTree/WorkQueue.h:
        (WorkQueue::setFrozen): Deleted.
        * DumpRenderTree/WorkQueueItem.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate processWork:]):
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        (TestRunner::queueLoad):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::processWork):
        (FrameLoadDelegate::locationChangeDone):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::notifyDone):
        (TestRunner::forceImmediateCompletion):
        (TestRunner::queueLoad):

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Option::useAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=190567

        Reviewed by Saam Barati.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-15  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Silence a unused-parameter warning

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

2018-10-12  Guillaume Emont  <guijemont@igalia.com>

        [Tools][webkitpy] fix handling of JSCTESTS_OPTIONS
        https://bugs.webkit.org/show_bug.cgi?id=190537

        Reviewed by Alexey Proskuryakov.

        In DeprecatedPort.run_javascriptcore_tests_command() JSCTESTS_OPTIONS
        needs to be split before adding it to the command since it is treated
        as a list of args.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):

2018-10-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view
        https://bugs.webkit.org/show_bug.cgi?id=190504
        <rdar://problem/45117760>

        Reviewed by Tim Horton.

        Teach UIScriptController to set WKWebView's view scale via a new `setViewScale` method, supported in WebKit2 on
        macOS and iOS.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setViewScale):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setViewScale):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setViewScale):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/UIScriptControllerCocoa.mm: Added.

        Add a new file for UIScriptController methods on Cocoa platforms.

        (WTR::UIScriptController::setViewScale):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaResetStateToConsistentValues):

        Ensure that _viewScale is reset to 1 after running a layout test.

2018-10-12  Aakash Jain  <aakash_jain@apple.com>

        [ews-build] Rename iOS-11-Simulator-Tests-EWS to iOS-11-Simulator-WK2-Tests-EWS
        https://bugs.webkit.org/show_bug.cgi?id=190536

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/ews-build/config.json: Renamed iOS-11-Simulator-Tests-EWS to iOS-11-Simulator-WK2-Tests-EWS.

2018-10-11  Youenn Fablet  <youenn@apple.com>

        IOS 12 - Service worker cache not shared when added to homescreen
        https://bugs.webkit.org/show_bug.cgi?id=190269
        <rdar://problem/45009961>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        Add test to ensure that CacheStorage use the default website data store parameters.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        Clicking on bookmarklet crashes at NavigationState::willRecordNavigationSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=190476
        <rdar://problem/32757191>

        Reviewed by Megan Gardner.

        * TestWebKitAPI/Tests/WebKitCocoa/SnapshotStore.mm:
        (TEST):
        Add a test that we don't crash.

2018-10-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r237037): Cannot use webkit-patch upload, always fails with unknown 'cc_radar'

        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        Fix the name of the variable that the --cc-radar option writes into.

2018-10-10  Dean Jackson  <dino@apple.com>

        Add --cc-radar option to webkit-patch bug creation
        https://bugs.webkit.org/show_bug.cgi?id=190451
        <rdar://problem/45176671>

        Reviewed by Antoine Quint.

        Add a new command line option to automatically
        CC radar to new or updated bugs.

        * Scripts/webkitpy/tool/commands/commandtest.py:
        (CommandsTest.assert_execute_outputs):
        * Scripts/webkitpy/tool/commands/upload.py:
        (CreateBug.__init__):
        (CreateBug.execute):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_prepare_with_cc):
        (test_prepare_with_radar):
        (test_prepare_with_cc_and_radar):
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.options):
        (CreateBug.run):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):

2018-10-11  Claudio Saavedra  <csaavedra@igalia.com>

        [GStreamer] Do not build gstgtk plugins
        https://bugs.webkit.org/show_bug.cgi?id=190463

        Reviewed by Xabier Rodriguez-Calvar.

        These plugins pull a GTK+ dependency that, at least in WPE,
        is unnecessary. The GTK+ port doesn't need it either, as far
        as I can tell.

        * gstreamer/jhbuild.modules: Disable gstgtk plugins

2018-10-11  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Add mediaDevices.enumerateDevices support
        https://bugs.webkit.org/show_bug.cgi?id=185761

        Reviewed by Youenn Fablet.

        Added new API test for the mediaDevices.enumerateDevices:
        usermedia-enumeratedevices-permission-check. And a new API test
        for the WebsiteDataStore: testWebsiteDataDeviceIdHashSalt.

        * MiniBrowser/gtk/main.c:
        (gotWebsiteDataCallback): Added a new section to the about:data
        webpage to include the information about the hash salt.
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewUserMediaEnumerateDevicesPermissionCheck): Added the
        new test checking the enumerateDevices API when permission is
        denied and when permission is allowed for the origin.
        (beforeAll): Defined the new test.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback): Register a new URI for the enumerateDevices.
        (testWebsiteDataConfiguration): Remove the hash salts from the
        directories.
        (testWebsiteDataDeviceIdHashSalt): New test cheking the
        enumerateDevices API.
        (beforeAll): Added the new test testWebsiteDataDeviceIdHashSalt to
        the init structure.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView): Make sure the media-stream is
        activated in the webView.

2018-10-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add WinCairo to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=188345

        Reviewed by Lucas Forschler.

        * TestResultServer/static-dashboards/builders.jsonp: Regenerated by generate_builders_json.py.
        * TestResultServer/static-dashboards/flakiness_dashboard.js: Added a new platform 'WINCAIRO'.

2018-10-10  Dean Jackson  <dino@apple.com>

        [WHSL -> MSL] Annotate semantics correctly in generated MSL
        https://bugs.webkit.org/show_bug.cgi?id=190452
        <rdar://problem/45178272>

        Reviewed by Myles Maxfield.

        Correctly label the appropriate semantics as [[position]]
        and [[color(N)]].

        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Identify position
        and color attributes. Also use the semantic's index rather than
        a counter.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Use a <pre> for
        output, and only include the actual shader code.

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

        build-webkit --inspector-frontend shouldn't have a nonzero exit code
        https://bugs.webkit.org/show_bug.cgi?id=190430

        Reviewed by Brian Burg.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        --inspector-frontend should only be popped off of argv by determineIsInspectorFrontend;
        it shouldn't be re-inserted as a CLI option by argumentsForConfiguration.

2018-10-10  Tim Horton  <timothy_horton@apple.com>

        Share more WKShareSheet code between macOS and iOS, and fix a few bugs
        https://bugs.webkit.org/show_bug.cgi?id=190420

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        (WTR::UIScriptController::invokeShareSheetWithResolution): Deleted.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::setShareSheetCompletesImmediatelyWithResolution):
        Change the testing mechanism for the share sheet such that we up-front
        set that it should immediately return with a particular state, instead
        of programmatically dismissing the sheet.

        Otherwise, running the tests on macOS doesn't work, because we pop
        a context menu, which spins the runloop and prevents dismissal from
        going through.

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=190429

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:
        (TestWebKitAPI::TEST_F):

2018-10-10  Chris Dumez  <cdumez@apple.com>

        Regression(PSON): Assertion hit under WebPageProxy::didNavigateWithNavigationData()
        https://bugs.webkit.org/show_bug.cgi?id=190418
        <rdar://problem/45059769>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-10  Guillaume Emont  <guijemont@igalia.com>

        [JSCOnly Add an armv7 JSCOnly EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=190191

        Reviewed by Michael Catanzaro.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_javascriptcore_tests_command):
        Add the possibility to pass arguments to run-javascriptcore-tests with
        the JSCTESTS_OPTIONS environment variable
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):


2018-10-09  Guillaume Emont  <guijemont@igalia.com>

        Allow run-javascriptcore-tests to distribute tests between devices
        https://bugs.webkit.org/show_bug.cgi?id=190190

        Reviewed by Michael Catanzaro.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:

2018-10-09  Dean Jackson  <dino@apple.com>

        Update WHLSL to Metal tester with semantics
        https://bugs.webkit.org/show_bug.cgi?id=190416
        <rdar://problem/45145139>

        Reviewed by Myles Maxfield.

        A few small changes to the WHLSL to Metal tools:
        - Make it compile by adding some missing JS files :)
        - Add semantics to the default shader
        - Add FIXMEs to the other shaders
        - Create an in-browser test for the WHLSLToMetal codepath
        - Fix typos in the semantics checker

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype._checkSemantics.checkSemanticTypes):
        (Checker.prototype._checkSemantics.checkSemanticForShaderType):
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl:
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj:
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.html: Added.

2018-10-09  Jer Noble  <jer.noble@apple.com>

        Crash when closing WKWebView during enter fullscreen animation
        https://bugs.webkit.org/show_bug.cgi?id=190412

        Reviewed by Brian Burg.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewDuringEnterFullscreen.mm: Added.
        (-[CloseWebViewDuringEnterFullscreenUIDelegate _webViewWillEnterFullscreen:]):
        (-[CloseWebViewDuringEnterFullscreenUIDelegate _webViewWillExitFullscreen:]):
        (TestWebKitAPI::TEST):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        Anchor target should be ignored on activation when the download attribute is set
        https://bugs.webkit.org/show_bug.cgi?id=190408

        Reviewed by Geoffrey Garen.

        Update WebKitTestRunner to block popups by default and add support for testRunner.setCanOpenWindows()
        for tests that need popups. This aligns WebKitTestRunner with DumpRenderTree and allows testing
        popup blocking.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCanOpenWindows):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestInvocation.h:

2018-10-09  Jer Noble  <jer.noble@apple.com>

        WebDriver: thrown ObjC exception under -[WKFullScreenWindowController windowDidFailToEnterFullScreen:] when session is terminated
        https://bugs.webkit.org/show_bug.cgi?id=190098
        <rdar://problem/42822671>

        Reviewed by Brian Burg.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CloseWebViewAfterEnterFullscreen.mm: Added.
        (-[CloseWebViewAfterEnterFullscreenUIDelegate _webViewDidEnterFullscreen:]):
        (-[CloseWebViewAfterEnterFullscreenUIDelegate _webViewDidExitFullscreen:]):
        (TestWebKitAPI::TEST):

2018-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import CTAP HID message and packet structure from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=189289
        <rdar://problem/44120310>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FidoHidMessageTest.cpp: Added.
        (TestWebKitAPI::TEST):

2018-10-09  Chris Dumez  <cdumez@apple.com>

        PSON: Doing a cross-site navigation via the URL bar does not swap process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=190378
        <rdar://problem/45059466>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-10-09  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp: Added.
        (TestWebKitAPI::TEST):

2018-10-09  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update to GStreamer 1.14.4
        https://bugs.webkit.org/show_bug.cgi?id=190395

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Remove patches merged in 1.14.4 and bump version of GStreamer modules.
        * gstreamer/patches/gst-plugins-good-0007-matroskademux-Allow-Matroska-headers-to-be-read-more.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0009-matroskademux-Parse-successive-Tracks-elements.patch: Removed.
        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch: Removed.

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] API test DragAndDropTests.DropColor is failing on macOS 10.12
        https://bugs.webkit.org/show_bug.cgi?id=190386

        Reviewed by Ryosuke Niwa.

        Unlike macOS 10.13 and 10.14, -[NSColor redColor] is not equivalent to a fully red color in sRGB on macOS 10.12.
        Fix the test by dragging and dropping an NSColor that is equivalent to rgb(255, 0, 0) on all relevant versions
        of macOS.

        * TestWebKitAPI/Tests/mac/DragAndDropTestsMac.mm:
        (TEST):

2018-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] [WK2] Add support for text alignment and text lists in font attributes
        https://bugs.webkit.org/show_bug.cgi?id=190342
        <rdar://problem/44767118>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:

        Add a new API test to check that the font attributes dictionary contains the correct NSParagraphStyles when
        moving the selection around text inside nested list elements.

        (TestWebKitAPI::checkParagraphStyles):

        Add a new helper to check an NSParagraphStyle against expected results.

        (TestWebKitAPI::webViewForTestingFontAttributes):

        Allow each test to pass in the name of the test page to load.

        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/nested-lists.html: Added.

        Add a new test page that contains text enclosed in multiple levels of unordered and ordered lists.

        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html:

        Remove `text-align: left` from one of these elements, to test for NSTextAlignmentNatural.

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUDevice.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:
        * TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebMetalEnabled):
        (WTR::TestRunner::setWebGPUEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2018-10-08  Commit Queue  <commit-queue@webkit.org>

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

        Causing API test failures in new test (Requested by jernoble
        on #webkit).

        Reverted changeset:

        "ISOTrackEncryptionBox returns incorrect defaultKeyID"
        https://bugs.webkit.org/show_bug.cgi?id=190368
        https://trac.webkit.org/changeset/236941

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2018-10-08  Jer Noble  <jer.noble@apple.com>

        ISOTrackEncryptionBox returns incorrect defaultKeyID
        https://bugs.webkit.org/show_bug.cgi?id=190368

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ISOBox.cpp: Added.
        (TestWebKitAPI::TEST):

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

        Remove WKBundleFileHandleRef
        https://bugs.webkit.org/show_bug.cgi?id=190360

        Reviewed by Tim Horton.

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

2018-10-08  Dan Bernstein  <mitz@apple.com>

        Tools part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * DumpRenderTree/mac/DumpRenderTreeMac.h: Addressed the strict prototype warning.

        * DumpRenderTree/mac/EditingDelegate.mm: Suppressed the deprecated implementations warning
          around deprecated methods or categories on deprecated classes.
        * DumpRenderTree/mac/FrameLoadDelegate.mm: Ditto.
        (-[FrameLoadDelegate webView:windowScriptObjectAvailable:]):
        * DumpRenderTree/mac/TestRunnerMac.mm: Ditto.
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):

        * MiniBrowser/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * MiniBrowser/mac/AppDelegate.h: Addressed the strict prototypes warning.
        * MiniBrowser/mac/WK2BrowserWindowController.m: Removed an unused #import to avoid having to
          address the fact that many of the WebKit C SPI headers trigger the strict prototypes warning.

        * MobileMiniBrowser/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_SUSPICIOUS_MOVE (by fixing a typo),
          CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, and CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.

        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj: Let Xcode update
          LastUpgradeCheck and remove the .xcconfig files from the Copy Bundle Resources build phase.

        * TestWebKitAPI/Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.
          Made the WebKit headers be treated as system headers to avoid dealing with the fact that
          many C SPI headers trigger the strict prototypes warning.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[BlobDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]):
        (-[RedirectedDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/AudioSessionCategoryIOS.mm:
        (-[AudioSessionCategoryUIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        * TestWebKitAPI/Tests/WebKitLegacy/ios/SnapshotViaRenderInContext.mm:
        (-[RenderInContextWebViewDelegate webViewDidFinishLoad:]):
        (-[RenderInContextWebViewDelegate webView:didFailLoadWithError:]):
        * TestWebKitAPI/Tests/ios/SetTimeoutFunction.mm:
        (-[SetTimeoutFunctionWebViewDelegate webViewDidFinishLoad:]):
        (-[SetTimeoutFunctionWebViewDelegate webView:didFailLoadWithError:]):
        (-[SetTimeoutFunctionWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]):
        * TestWebKitAPI/Tests/mac/LegacyDragAndDropTests.mm:
        (-[DragInfo namesOfPromisedFilesDroppedAtDestination:]):
        * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm:
        (-[DragAndDropTestWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        (-[SyntheticBackingScaleFactorWindow IGNORE_WARNINGS_END]):
        (-[SyntheticBackingScaleFactorWindow userSpaceScaleFactor]): Deleted.
        * TestWebKitAPI/mac/TestDraggingInfo.mm:
        (-[TestDraggingInfo namesOfPromisedFilesDroppedAtDestination:]):

        In all of the above, suppressed the deprecated implementations warning where needed.

        * WebKitTestRunner/Configurations/Base.xcconfig: Enabled ENABLE_STRICT_OBJC_MSGSEND,
          CLANG_WARN_BOOL_CONVERSION, CLANG_WARN_COMMA, CLANG_WARN_CONSTANT_CONVERSION,
          CLANG_WARN_EMPTY_BODY, CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION,
          CLANG_WARN_STRICT_PROTOTYPES, CLANG_WARN_UNREACHABLE_CODE, CLANG_WARN__DUPLICATE_METHOD_MATCH,
          GCC_WARN_UNDECLARED_SELECTOR, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF,
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS,
          and GCC_NO_COMMON_BLOCKS.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dragImage:at:offset:event:pasteboard:source:slideBack:]): Suppressed
          the deprecated implementations warning.

        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::replaceTextAtRange): Addressed an int-conversion warning.

2018-10-07  Yacine Bandou  <yacine.bandou@softathome.com>

        [GStreamer][EME][webm] Add the WebM encrypted content support in matroskademux
        https://bugs.webkit.org/show_bug.cgi?id=189238

        Reviewed by Xabier Rodriguez-Calvar.

        Modifications on GStreamer, tracked in GStreamer bugzilla:
        https://bugzilla.gnome.org/show_bug.cgi?id=797231
        https://bugzilla.gnome.org/show_bug.cgi?id=765275

        * gstreamer/jhbuild.modules: Add new patches.
        * gstreamer/patches/gstreamer-0001-protection-Add-a-new-definition-for-unspecified-syst.patch: Added.
        * gstreamer/patches/gstreamer-0002-protection-Fix-the-string-to-define-unspecified-syst.patch: Added.
        * gstreamer/patches/gst-plugins-good-0011-matroska-Add-the-WebM-encrypted-content-support-in-m.patch: Added.
        * gstreamer/patches/gst-plugins-good-0012-matroskdemux-do-not-use-MapInfo.data-after-unmapping.patch: Added.

2018-10-06  Dan Bernstein  <mitz@apple.com>

        [Xcode] Never build yasm with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=190327

        Reviewed by Youenn Fablet.

        * asan/asan.xcconfig: Allow targets to opt out of building with ASAN by setting
          the WK_ASAN_DISALLOWED build setting to YES (or, actually, anything other than NO or unset).

2018-10-05  Chris Dumez  <cdumez@apple.com>

        Regression(r236862): Crash under DOMWindowExtension::willDetachGlobalObjectFromFrame()
        https://bugs.webkit.org/show_bug.cgi?id=190320
        <rdar://problem/45044814>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::willDestroyGlobalObjectForDOMWindowExtension):

2018-10-03  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoQualityDisplayCompositing.mm: Added.
        (TestWebKitAPI::TEST):

2018-10-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236866.

        Breaks internal builds.

        Reverted changeset:

        "Add support for reporting "display composited video frames"
        through the VideoPlaybackQuality object."
        https://bugs.webkit.org/show_bug.cgi?id=190266
        https://trac.webkit.org/changeset/236866

2018-10-05  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE][JSC] Use Unified Sources for Platform-specific sources
        https://bugs.webkit.org/show_bug.cgi?id=190300

        Reviewed by Yusuke Suzuki.

        Currently the GTK port already used Unified Sources with the same source files.
        As WPE has conditional code using gmodule, we need to add GLIB_GMODULE_LIBRARIES
        to the list of libraries to link with.

        * TestWebKitAPI/PlatformWPE.cmake:

2018-10-05  Zach Li  <zachli@apple.com>

        Expose whether WKWebProcessPlugInNodeHandle is a select element to clients
        https://bugs.webkit.org/show_bug.cgi?id=190302
        <rdar://problem/45031469>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/InjectedBundleNodeHandleIsSelectElement.mm: Added.
        (-[InjectedBundleNodeHandleIsSelectElement verifySelectElementForHTMLElementTag:document:jsContext:expectedResult:failedElementTags:]):
        (-[InjectedBundleNodeHandleIsSelectElement webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[InjectedBundleNodeHandleIsSelectElementDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

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

        [iOS] [WK2] Expose some more editing SPI on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190232
        <rdar://problem/44963368>

        Reviewed by Tim Horton.

        Adds new API tests to exercise the new SPIs.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKWebViewEditActions.mm: Added.
        (-[TestWKWebView querySelectorExists:]):
        (TestWebKitAPI::webViewForEditActionTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (-[TestWKWebView collapseToStart]): Deleted.
        (-[TestWKWebView collapseToEnd]): Deleted.
        (-[TestWKWebView stylePropertyAtSelectionStart:]): Deleted.
        (-[TestWKWebView stylePropertyAtSelectionEnd:]): Deleted.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView stylePropertyAtSelectionStart:]):
        (-[TestWKWebView stylePropertyAtSelectionEnd:]):
        (-[TestWKWebView collapseToStart]):
        (-[TestWKWebView collapseToEnd]):

        Pull some common testing helpers out of NSFontManager and into TestWKWebView.

2018-10-04  Jer Noble  <jer.noble@apple.com>

        Add support for reporting "display composited video frames" through the VideoPlaybackQuality object.
        https://bugs.webkit.org/show_bug.cgi?id=190266

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/VideoQualityDisplayCompositing.mm: Added.
        (TestWebKitAPI::TEST):

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

        [Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=190119
        <rdar://problem/44767062>

        Reviewed by Tim Horton.

        Add a new API test that loads a document containing various rich text styles. This test moves the selection
        around the document and checks the last set of font attributes received via the new UI delegate hook.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm: Added.
        (-[FontAttributesListener _webView:didChangeFontAttributes:]):
        (-[FontAttributesListener lastFontAttributes]):
        (-[TestWKWebView selectElementWithIdentifier:]):
        (-[TestWKWebView fontAttributesAfterNextPresentationUpdate]):
        (ColorExpectation::ColorExpectation):
        (ShadowExpectation::ShadowExpectation):
        (checkColor):
        (checkShadow):
        (checkFont):
        (webViewForTestingFontAttributes):
        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html: Added.

2018-10-04  Alan Coon  <alancoon@apple.com>

        Unreviewed, add self as contributor.

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

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

        [macOS] Fix some font attribute conversion bugs in preparation for "Font > Styles…" support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=190289
        <rdar://problem/45020806>

        Reviewed by Ryosuke Niwa.

        Add new API tests to exercise two corner cases when using NSFontOptions ("Font > Styles…") to change font
        attributes at the current selection.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/TestFontOptions.h: Copied from Source/WebCore/editing/cocoa/FontAttributesCocoa.mm.
        * TestWebKitAPI/mac/TestFontOptions.mm: Added.

        Introduce TestFontOptions, which wraps the shared NSFontOptions and swizzles `-sharedFontOptions` to return a
        global instance of itself. TestFontOptions supports several testing helpers to add or remove font shadows,
        foreground colors, and background colors.

        (sharedFontOptionsForTesting):
        (+[TestFontOptions sharedInstance]):
        (-[TestFontOptions initWithFontOptions:]):
        (-[TestFontOptions selectedAttributes]):
        (-[TestFontOptions fontOptions]):
        (-[TestFontOptions shadowWidth]):
        (-[TestFontOptions setShadowWidth:]):
        (-[TestFontOptions shadowHeight]):
        (-[TestFontOptions setShadowHeight:]):
        (-[TestFontOptions setShadowBlurRadius:]):
        (-[TestFontOptions setHasShadow:]):
        (-[TestFontOptions foregroundColor]):
        (-[TestFontOptions setForegroundColor:]):
        (-[TestFontOptions backgroundColor]):
        (-[TestFontOptions setBackgroundColor:]):
        (-[TestFontOptions _dispatchFontAttributeChanges]):
        (-[TestFontOptions convertAttributes:]):
        (-[TestFontOptions setSelectedAttributes:isMultiple:]):
        (-[TestFontOptions forwardInvocation:]):

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

        [WebAuthN] Move time out control from WebProcess to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=189642
        <rdar://problem/44476765>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-10-04  YUHAN WU  <yuhan_wu@apple.com>

        Runtime flag and IDL for MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=190018

        Reviewed by Youenn Fablet and Chris Dumez.

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

2018-10-04  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [LayoutTests][Win] Stop wpt server correctly.
        https://bugs.webkit.org/show_bug.cgi?id=190248

        Reviewed by Fujii Hironori.

        Use signal.CTRL_C_EVENT instead of signal.SIGINT for Windows.
        Also refactoring the detection of Windows and cygwin environment check.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.__init__): Check environment once.
        (Executive._should_close_fds):
        (Executive.kill_process):
        (Executive.check_running_pid):
        (Executive.running_pids):
        (Executive.interrupt): Use signal.CTRL_C_EVENT for Windows.
        (Executive.kill_all):
        (Executive._child_process_encoding):
        (Executive._should_encode_child_process_arguments):
        (Executive.popen):
        (Executive.run_in_parallel):

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

        Convert tests to use navigation client
        https://bugs.webkit.org/show_bug.cgi?id=190153

        Reviewed by Alex Christensen.

        Convert these tests from PagePolicyClient and PageLoaderClient to PageNavigationClient.

        * TestWebKitAPI/Tests/WebKit/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (TestWebKitAPI::setPagePolicyClient):
        * TestWebKitAPI/Tests/WebKit/ProvisionalURLAfterWillSendRequestCallback.cpp:
        (TestWebKitAPI::didCommitNavigationCallback):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::didCommitLoadForFrame): Deleted.

2018-10-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Let clients specify an NSFileWrapper subclassed to be used for _WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=190270

        Reviewed by Wenson Hsieh.

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

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

        Enable selectionAcrossShadowBoundariesEnabled by default in WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=190238

        Reviewed by Antti Koivisto.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit2] Format > Bold and Format > Italic don't toggle between bold and italic style
        https://bugs.webkit.org/show_bug.cgi?id=179787
        <rdar://problem/35593389>

        Reviewed by Tim Horton.

        Add a test to verify that NSFontManager's selected font is updated when applying italic and bold styles using
        menu items.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (webViewForFontManagerTesting):
        (menuItemCellForFontAction):
        (TestWebKitAPI::TEST):

2018-10-02  Chris Dumez  <cdumez@apple.com>

        REGRESSION: TestWebKitAPI.WKWebView.ProvisionalURLNotChange API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=190176
        <rdar://problem/44925871>

        Reviewed by Alex Christensen.

        Use a URL that is truly recognized as invalid by WebCore's URL parser.

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

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

        Remove ParsedURLString
        https://bugs.webkit.org/show_bug.cgi?id=190154

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebCore/URL.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
        (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasLinuxPlatformQuirk):
        (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk):
        (TestWebKitAPI::TEST):

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

        Fix iOS TestWebKitAPI failures following <https://trac.webkit.org/changeset/236619>
        (https://bugs.webkit.org/show_bug.cgi?id=190017)

        For now swizzle +[UIKeyboard isInHardwareKeyboardMode] to return NO in the following tests:
            WKWebViewAutofillTests.AutofillRequiresInputSession
            DragAndDropTests.ExternalSourceJPEGOnly
            DragAndDropTests.ExternalSourceUTF8PlainTextOnly

        so that the presence of a hardware keyboad does not effect their results. In <https://bugs.webkit.org/show_bug.cgi?id=190211>
        we will look to swizzle this method for all test by default.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-10-02  Dawei Fenton  <realdawei@apple.com>

        Unreviewed, rolling out r236751.

        broke the iOS Build

        Reverted changeset:

        "Fix iOS TestWebKitAPI failures following
        <https://trac.webkit.org/changeset/236619>"
        https://bugs.webkit.org/show_bug.cgi?id=190017
        https://trac.webkit.org/changeset/236751

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

        Fix iOS TestWebKitAPI failures following <https://trac.webkit.org/changeset/236619>
        (https://bugs.webkit.org/show_bug.cgi?id=190017)

        For now swizzle +[UIKeyboard isInHardwareKeyboardMode] to return NO in the following tests:
            WKWebViewAutofillTests.AutofillRequiresInputSession
            DragAndDropTests.ExternalSourceJPEGOnly
            DragAndDropTests.ExternalSourceUTF8PlainTextOnly

        so that the presence of a hardware keyboad does not effect their results. In <https://bugs.webkit.org/show_bug.cgi?id=190211>
        we will look to swizzle this method for all test by default.

        * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (TestWebKitAPI::overrideIsInHardwareKeyboardMode):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2018-10-01  Dean Jackson  <dino@apple.com>

        Remove CSS Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=190175
        <rdar://problem/44925626>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        [Flatpak] Use our own check of flatpak repos
        https://bugs.webkit.org/show_bug.cgi?id=190194

        Allowing us to not mess up with user installation
        and "--assumeyes" everywhere.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (FlatpakPackage.__init__):
        (FlatpakPackage.install):
        (FlatpakPackage.update):
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):

2018-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Implement a way for the UI process to request typing attributes at the current selection
        https://bugs.webkit.org/show_bug.cgi?id=189983
        <rdar://problem/44648705>

        Reviewed by Ryosuke Niwa.

        Adds new FontManagerTests that exercise -typingAttributesWithCompletionHandler:. See below for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h:
        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:

        Add a new test that exercises font attribute modification via inspector bar. Also, add a new test that checks
        typing attributes when using subscript/superscript/unscript. Lastly, augment an existing NSFontPanel test to
        additionally check that shadowed text and strike-through are reflected in typing attributes.

        (-[FontManagerTestWKWebView inspectorBarItemIdentifiers]):
        (-[TestWKWebView typingAttributes]):

        Add a synchronous wrapper around `-typingAttributesWithCompletionHandler:` by spinning the runloop.

        (-[TestWKWebView collapseToStart]):
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/mac/TestInspectorBar.h: Copied from Tools/TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h.
        * TestWebKitAPI/mac/TestInspectorBar.mm: Added.

        Introduce subclasses of `__InspectorBarItemController` and `NSInspectorBar` for testing inspector bar interaction.

        (-[TestInspectorBarItemController initWithInspectorBar:]):
        (-[TestInspectorBarItemController inspectorBar]):
        (-[TestInspectorBarItemController updateSelectedAttributes]):
        (-[TestInspectorBar initWithWebView:]):
        (+[TestInspectorBar standardItemControllerClass]):
        (+[TestInspectorBar standardTextItemIdentifiers]):
        (-[TestInspectorBar _setStyleControlSelected:atIndex:]):
        (-[TestInspectorBar chooseFontSize:]):
        (-[TestInspectorBar chooseFontFamily:]):
        (-[TestInspectorBar _chooseColor:inColorWell:]):
        (-[TestInspectorBar chooseForegroundColor:]):
        (-[TestInspectorBar chooseBackgroundColor:]):
        (-[TestInspectorBar formatBold:]):
        (-[TestInspectorBar formatItalic:]):
        (-[TestInspectorBar formatUnderline:]):

        Add helper methods to TestInspectorBar to simulate interacting with various controls (e.g. color wells and font
        styling controls).

        (-[TestInspectorBar itemController]):
        (-[TestInspectorBar setItemController:]):

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

        [Flatpak] Implement icecream and ccache support
        https://bugs.webkit.org/show_bug.cgi?id=190146

        Reviewed by Alejandro G. Castro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.clean_args):
        (WebkitFlatpak.run_in_sandbox):
        (WebkitFlatpak.save_config):
        (WebkitFlatpak):
        (WebkitFlatpak.setup_ccache):
        (WebkitFlatpak.setup_icecc):
        (WebkitFlatpak.setup_dev_env):
        * flatpak/org.webkit.WebKit.yaml:

2018-10-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix missing return value in TestController::keyExistsInKeychain

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::keyExistsInKeychain):

2018-10-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Enable WPT tests environment.
        https://bugs.webkit.org/show_bug.cgi?id=190128

        Reviewed by Youenn Fablet.

        Escaping backslash of the path not to confuse the JSON parser.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._prepare_config):

2018-10-01  Ross Kirsling  <ross.kirsling@sony.com>

        [Win][DRT] Actually set "experimental:WebAnimationsCSSIntegrationEnabled" when requested
        https://bugs.webkit.org/show_bug.cgi?id=190150

        Reviewed by Fujii Hironori.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setWebPreferencesForTestOptions):
        DRT has been recognizing this field, but not propagating its value to WebPreferences.

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

        Unreviewed, rolling out r236551.

        Fails URL validating too aggressively

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236551

2018-10-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Add SPI to customize the input accessory view when focusing an element
        https://bugs.webkit.org/show_bug.cgi?id=190152
        <rdar://problem/42754975>

        Reviewed by Dan Bernstein.

        Add an API test to verify that setting a custom input accessory view and custom input view on the form input
        session when focusing an element overrides the first responder's (i.e. WKContentView's) `-inputView` and
        `-inputAccessoryView`.

        * TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
        (webViewWithAutofocusedInput):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/TestInputDelegate.h:
        * TestWebKitAPI/Tests/ios/TestInputDelegate.mm:
        (-[TestInputDelegate setWillStartInputSessionHandler:]):
        (-[TestInputDelegate willStartInputSessionHandler]):
        (-[TestInputDelegate _webView:willStartInputSession:]):

2018-10-01  Sihui Liu  <sihui_liu@apple.com>

        Remove StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=189975

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/WebProcessKillIDBCleanup.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::terminateStorageProcess): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::databaseProcessName): Deleted.
        (WTR::TestController::databaseProcessDidCrash): Deleted.
        (WTR::TestController::terminateStorageProcess): Deleted.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-10-01  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import a JS CBOR coder
        https://bugs.webkit.org/show_bug.cgi?id=189877
        <rdar://problem/44701124>

        Reviewed by Chris Dumez.

        Add logic to only process privateKeyBase64, userCertificateBase64 and intermediateCACertificateBase64
        only if acceptAttestation is true.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

2018-10-01  Chris Dumez  <cdumez@apple.com>

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        The test relies on EventSender to send events to the page synchronously to the page and then uses console.log
        to log those events. It also uses console.log() before sending those events to indicate what the test is about
        to do. Note that console.log() normally causes the WebKitTestRunner to send an asynchronous IPC to the UIProcess
        so that it can log the message.
        The issue is that EventSender uses IPC::SendOption::UseFullySynchronousModeForTesting when sending the
        sync IPC to the UIProcess. This option causes follow-up *asynchronous* IPC sent from the synchronous IPC reply
        handler to be transformed into synchronous IPC.
        As a result, some of the console.log IPC ended up being asynchronous and some other ended up being synchronous.
        Because synchronous and asynchronous IPC is not necessarily processed in-order by the UIProcess, the logged
        messages may end up being out of order, leading to flakiness.

        To address the issue, we now make sure that InjectedBundle::outputText() uses a new IPC::SendOption indicated
        that the IPC should always be sent asynchronously, even if the connection is in fully synchronous mode. As a
        result, all text outputing IPC to the UIProcess will be asynchronous, and thus in order.

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

2018-10-01  Daniel Bates  <dabates@apple.com>

        [iOS] Special keys are misidentified in DOM keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=189974

        Reviewed by Wenson Hsieh.

        Add support for testing keys Forward Delete and Num Lock / Clear.

        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (hidUsageCodeForCharacter):

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

        URL should not use TextEncoding internally
        https://bugs.webkit.org/show_bug.cgi?id=190111

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::testUserPass):
        (TestWebKitAPI::TEST_F):

2018-10-01  Daniel Bates  <dabates@apple.com>

        LLDB tests may use wrong configuration of lldbWebKitTester
        https://bugs.webkit.org/show_bug.cgi?id=189011

        Reviewed by Dean Jackson.

        Fixes an issue where the LLDB unit tests may use the wrong configuration of lldbWebKitTester.
        Additionally, add back the unit tests originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).

        Currently the unit tests pick the LLDBWebKitTester binary based on the configuration set by
        script set-webkit-configuration. This may not be the same configuration specified to test-webkitpy.
        So, the unit tests may use the wrong binary. Instead we have test-webkitpy store the path
        to the correct lldbWebKitTester binary that the unit tests should use in an environment variable,
        called LLDB_WEBKIT_TESTER_EXECUTABLE. (We use an environment variable because the test driver,
        test-webkitpy, and the unit tests cannot talk to each other directly due the limitations of
        the Python unittest module, the Python multiprocessing module, and the general principle of unit
        tests - to test code in isolation). The unit tests make use of the value of this environment
        variable to launch lldbWebKitTester binary.

        * Scripts/build-lldbwebkittester: We only support building lldbWebKitTester on Mac for now. Error
        out if this script is invoked for a non-Mac platform.
        * Scripts/webkitpy/test/main.py:
        (Tester._run_tests): Build lldbWebKitTester and store the path to it in the environment variable
        LLDB_WEBKIT_TESTER_EXECUTABLE.
        (_build_lldb_webkit_tester): Deleted.
        * lldb/dump_class_layout_unittest.py:
        (TestDumpClassLayout.shouldSkip): Use SystemHost() here and remove the _host global variable as
        this is the only call site that needs the Host object now.
        (TestDumpClassLayout.setUpClass): Take the path to the lldbWebKitTester binary from the value of
        the environment variable LLDB_WEBKIT_TESTER_EXECUTABLE.
        * lldb/lldbWebKitTester/main.cpp:
        (testSummaryProviders): Add back unit test support infrastructure originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).
        * lldb/lldb_webkit_unittest.py:
        (LLDBDebugSession.setup): Take the path to the lldbWebKitTester binary from the value of the environment
        variable LLDB_WEBKIT_TESTER_EXECUTABLE.
        (TestSummaryProviders):
        (TestSummaryProviders.shouldSkip): Skip the tests on non-Mac platforms.
        (TestSummaryProviders.serial_test_WTFHashSet_tablesize_and_size):
        (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_empty):
        (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_simple):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_empty):
        (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple):
        Add back the unit tests originally added in r235376 (https://bugs.webkit.org/show_bug.cgi?id=188936).

2018-10-01  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] Update install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=190127

        Reviewed by Michael Catanzaro.

        * wpe/install-dependencies:
        libxrandr-dev is needed for gstreamer-vaapi in jhbuild
        It is used by gstvaapidisplay_x11.c.
        Add it only for Apt, already ok for Pacman and DNF.

        Install libevent-dev for WebRTC (like GTK)

        Install libasound2-dev for WebRTC.
        Add it only for Apt, already ok for Pacam and DNF.

        Install libgbm-dev for HeadlessViewBackend, which uses gbm.h

2018-10-01  Thibault Saunier  <tsaunier@igalia.com>

        [Flatpak] Add libunwind in the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=190123

        Allowing us to get proper traces in GStreamer trace grabing
        debug functions.

        Reviewed by Philippe Normand.

        * flatpak/org.webkit.WebKit.yaml:

2018-09-29  Commit Queue  <commit-queue@webkit.org>

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

        Caused various eventSender tests, including fast/css/pseudo-
        active-style-sharing*, to fail (Requested by smfr on #webkit).

        Reverted changeset:

        "Regression(r236512): http/tests/navigation/keyboard-events-
        during-provisional-navigation.html is flaky"
        https://bugs.webkit.org/show_bug.cgi?id=190052
        https://trac.webkit.org/changeset/236631

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Fix build after r236635
        https://bugs.webkit.org/show_bug.cgi?id=189210

        Unreviewed.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.atomicsNull):
        (tests.numThreads):
        (tests.textureDimensionsNull):

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Allow uniform buffers to be used in the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=189210

        Reviewed by Filip Pizlo.

        Every lvalue is associated with an address space, and the propagation of these address spaces
        matches the propagation of lvalues. Luckily, there was already the infrastructure to do most
        of this, so this patch just goes the last few yards. It also updates the standard library to
        allow for writing into all writable address spaces for out-params.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitAssignment):
        (Checker.prototype._finishVisitingPropertyAccess):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        (Intrinsics.checkFalse):
        (Intrinsics):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.threadArrayRefLoad):
        (tests.threadArrayRefLoadIntLiteral):
        (tests.deviceArrayRefLoad):
        (tests.threadArrayRefStore):
        (tests.deviceArrayRefStore):
        (tests.deviceArrayRefStoreIntLiteral):
        (tests.threadPointerLoad):
        (tests.threadPointerStore):
        (tests.devicePointerLoad):
        (tests.devicePointerStore):
        (tests.arrayLoad):
        (tests.constantAddressSpace):
        (tests.standardLibraryDevicePointers):
        (tests.threadArrayLoad): Deleted.
        (tests.threadArrayLoadIntLiteral): Deleted.
        (tests.deviceArrayLoad): Deleted.
        (tests.threadArrayStore): Deleted.
        (tests.deviceArrayStore): Deleted.
        (tests.deviceArrayStoreIntLiteral): Deleted.

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

        No DOM API to instantiate an attachment for an img element
        https://bugs.webkit.org/show_bug.cgi?id=189934
        <rdar://problem/44743222>

        Reviewed by Ryosuke Niwa.

        Adds 3 new API tests in WKAttachmentTests:

        `AddAttachmentToConnectedImageElement` verifies that an image element that's already in the document can gain an
        attachment element via `HTMLAttachmentElement.getAttachmentIdentifier`.

        `ChangeFileWrapperForPastedImage` verifies that an image that has been pasted produces a _WKAttachment in the UI
        process, and changing the file wrapper of that _WKAttachment changes the pasted image.

        `ConnectImageWithAttachmentToDocument` verifies that script can create an image element, ensure that it has an
        attachment, and set a file wrapper for the generated _WKAttachment. Connecting the image to the document should
        then result in an image element with the contents of the _WKAttachment's file wrapper.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView imageElementSize]):
        (-[TestWKWebView waitForImageElementSizeToBecome:]):
        (TestWebKitAPI::TEST):
        (-[TestWKWebView waitForAttachmentElementSizeToBecome:]): Deleted.

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

        Regression(r236512): http/tests/navigation/keyboard-events-during-provisional-navigation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=190052

        Reviewed by Ryosuke Niwa.

        The test relies on EventSender to send events to the page synchronously to the page and then uses console.log
        to log those events. It also uses console.log() before sending those events to indicate what the test is about
        to do. Note that console.log() normally causes the WebKitTestRunner to send an asynchronous IPC to the UIProcess
        so that it can log the message.
        The issue is that EventSender uses IPC::SendOption::UseFullySynchronousModeForTesting when sending the
        sync IPC to the UIProcess. This option causes follow-up *asynchronous* IPC sent from the synchronous IPC reply
        handler to be transformed into synchronous IPC.
        As a result, some of the console.log IPC ended up being asynchronous and some other ended up being synchronous.
        Because synchronous and asynchronous IPC is not necessarily processed in-order by the UIProcess, the logged
        messages may end up being out of order, leading to flakiness.

        To address the issue, we now make sure that InjectedBundle::outputText() uses a new IPC::SendOption indicating
        that the IPC should always be sent asynchronously, even if the connection is in fully synchronous mode. As a
        result, all text outputing IPC to the UIProcess will be asynchronous, and thus in order.

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

2018-09-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Pointers should have automatically-generated equality checks
        https://bugs.webkit.org/show_bug.cgi?id=189986

        Reviewed by Filip Pizlo.

        C allows for pointer equality, and we need it so people can do null checks.
        This is generated the same way all our other NativeFuncs are generated - by Checker
        creating NativeFuncs inside CallExpression.resolve().

        This patch also does some general cleanup.

        * WebGPUShadingLanguageRI/All.js: Everything the late checker does is no longer necessary.
        The last thing it was doing was making sure that only primitive types are in resources, but
        it's totally reasonable to put structs and arrays in resources, so I removed this pass. We
        still have to add a check to make sure resources can't live within resources, but I expect
        that will be done in the same place that semantics are checked.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js:
        (allocateAtEntryPoints.updateFunction.UpdateFunctions.prototype._addVariableDeclaration):
        Name the global struct for debugging purposes.
        * WebGPUShadingLanguageRI/CallExpression.js: 
        (CallExpression.prototype._resolveByInstantiation): Cleanup
        (CallExpression.prototype._resolveWithOperatorAnderIndexer): Ditto
        (CallExpression.prototype._resolveWithOperatorLength): Ditto
        (CallExpression.prototype._resolveWithReferenceComparator): Add support to automatically
        generate pointer equality NativeFuncs.
        * WebGPUShadingLanguageRI/EPtr.js: Implement pointer equality in the interpreter.
        * WebGPUShadingLanguageRI/LateChecker.js: Removed.
        * WebGPUShadingLanguageRI/LayoutBuffers.js: Renamed from Tools/WebGPUShadingLanguageRI/LateCheckAndLayoutBuffers.js.
        (layoutBuffers):
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj:
        * WebGPUShadingLanguageRI/NativeFunc.js:
        * WebGPUShadingLanguageRI/OperatorArrayRefLength.js:
        (OperatorArrayRefLength.prototype.instantiateImplementation):
        (OperatorArrayRefLength):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.ternaryExpression):
        (tests.break): Speed up testing time
        (tests.doWhile): Ditto
        (tests.forLoop): Ditto
        (tests.atomics): Ditto
        (tests.atomicsNull): Ditto
        (tests.pointerEquality): Test pointer equality
        (tests.standardLibraryDevicePointers):
        (tests.devicePtrPtr): Deleted.
        (tests.threadgroupPtrPtr): Deleted.
        (tests.constantPtrPtr): Deleted.
        * WebGPUShadingLanguageRI/index.html:

2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish WebAuthN auto-test environment
        https://bugs.webkit.org/show_bug.cgi?id=189283
        <rdar://problem/44117828>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):

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

        Drop support for cross-origin-window-policy header
        https://bugs.webkit.org/show_bug.cgi?id=190081

        Reviewed by Ryosuke Niwa.

        190081_DropCrossOriginWindowPolicy

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2018-09-28  Koby Boyango  <koby.b@mce.systems>

        [WTF] Add ExternalStringImpl, a StringImpl for user controlled buffers
        https://bugs.webkit.org/show_bug.cgi?id=189991

        Reviewed by Yusuke Suzuki.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for Mojave queues
        https://bugs.webkit.org/show_bug.cgi?id=190068

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Mojave
        https://bugs.webkit.org/show_bug.cgi?id=189935

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove trigger, update bot assignment.

2018-09-24  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for Mojave
        https://bugs.webkit.org/show_bug.cgi?id=189935

        Reviewed by Alexey Proskuryakov.

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

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Increase the timeout for iOS Simulator data migration
        https://bugs.webkit.org/show_bug.cgi?id=190059

        Reviewed by Aakash Jain.

        3 minutes isn't always enough time for the data migrator to complete
        when booting up multiple iOS Simulators. Change the timeout to 10 minutes.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDeviceManager): Create a constant for the default timeout.
        (SimulatedDeviceManager.initialize_devices): Use new constant.
        (SimulatedDeviceManager.swap): Ditto.
        (SimulatedDeviceManager.wait_until_data_migration_is_done): Ditto.

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLParser should use TextEncoding through an abstract class
        https://bugs.webkit.org/show_bug.cgi?id=190027

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
        (TestWebKitAPI::checkURL):
        (TestWebKitAPI::TEST_F):

2018-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        iOS Simulator bots should pass '--dedicated-simulators' to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=190042

        Reviewed by Aakash Jain.

        To make iOS Simulator bots resilient to issues that can arise from reusing
        existing simulators, ensure that dedicated simulators are created for each test run.

        * Scripts/webkitpy/common/config/ports.py:
        (IOSSimulatorWK2Port.run_webkit_tests_command):

2018-09-27  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979

        Reviewed by Youenn Fablet.

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

2018-09-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win][WebKit] Implement authentication dialog on MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=189846

        Reviewed by Fujii Hironori.

        It was implemented for WebKitLegacy, but not for WebKit.
        Also added text field to display Realm information.

        * MiniBrowser/win/Common.cpp:
        (authDialogProc):
        (askCredential):
        (displayAuthDialog): Deleted.
        * MiniBrowser/win/Common.h:
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):
        * MiniBrowser/win/WebKitBrowserWindow.cpp:
        (createString):
        (createUTF8String):
        (createWKString):
        (createWKURL):
        (WebKitBrowserWindow::WebKitBrowserWindow):
        (WebKitBrowserWindow::didReceiveAuthenticationChallenge):
        (toNullTerminatedUTF8): Deleted.
        * MiniBrowser/win/WebKitBrowserWindow.h:

2018-09-27  Youenn Fablet  <youenn@apple.com>

        Enable getUserMedia in mini browser
        https://bugs.webkit.org/show_bug.cgi?id=190012

        Reviewed by Eric Carlson.

        Enable MediaDevices and mock capture devices.
        Grant mock devices access to any getUserMedia call.
        Covered by manual testing.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[WK2BrowserWindowController _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):

2018-09-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Dean Jackson.

        * DumpRenderTree/TestOptions.h:

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r236524.

        Broke API tests

        Reverted changeset:

        "URLWithUserTypedString should return nil for URLs deemed to
        be invalid by WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=189979
        https://trac.webkit.org/changeset/236524

2018-09-26  James Savage  <james.savage@apple.com>

        Allow override of viewport configuration.
        https://bugs.webkit.org/show_bug.cgi?id=188772.
        <rdar://problem/43538892>.

        Reviewed by Simon Fraser.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader): Parse new test option key from comments.
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformConfigureViewForTest): Handle new test option by
        modifying the web view's preferences accordingly.

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLs with mismatched surrogate pairs in the host should fail to parse
        https://bugs.webkit.org/show_bug.cgi?id=190005

        Reviewed by Chris Dumez.

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

2018-09-26  Alex Christensen  <achristensen@webkit.org>

        URLWithUserTypedString should return nil for URLs deemed to be invalid by WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=189979
        <rdar://problem/44119696>

        Reviewed by Chris Dumez.

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

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

        Selection should work across shadow boundary when initiated by a mouse drag
        https://bugs.webkit.org/show_bug.cgi?id=151380
        <rdar://problem/24363872>

        Reviewed by Wenson Hsieh.

        Added the support for internal:selectionAcrossShadowBoundariesEnabled test option.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (setWebPreferencesForTestOptions):

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

        MiniBrowser doesn't respect default enabled-ness of experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189989

        Reviewed by Simon Fraser.

        When the preference isn't found in user defaults, use the default value of each feature's enabledness.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):

2018-09-26  Philippe Normand  <pnormand@igalia.com>

        [Flatpak] Bump to apr 1.6.5

        Version 1.6.3 is no longer available on Apache's website.

        Rubber-stamped by Michael Catanzaro.

        * flatpak/org.webkit.WebKit.yaml:

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

        [WebAuthN] Make AuthenticatorManager
        https://bugs.webkit.org/show_bug.cgi?id=189279
        <rdar://problem/44116792>

        Reviewed by Chris Dumez.

        Besides the functionality to set the WebAuthenticationMockConfiguration. Three operations are
        added to manipulate Keychain: addTestKeyToKeychain, cleanUpKeychain and keyExistedInKeychain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/LocalAuthenticator.mm: Removed.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebAuthenticationMockConfiguration):
        (WTR::TestRunner::addTestKeyToKeychain):
        (WTR::TestRunner::cleanUpKeychain):
        (WTR::TestRunner::isKeyExisted):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::isKeyExisted):
        (WTR::TestController::setWebAuthenticationMockConfiguration):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::addTestKeyToKeychain):
        (WTR::TestController::cleanUpKeychain):
        (WTR::TestController::keyExistedInKeychain):

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

        Move Service Worker Management from Storage Process to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189422

        Reviewed by Youenn Fablet.

        Change a check in ServiceWorkers.HasServiceWorkerRegistrationBit as storage process is not
        launched during service worker operations now.

        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

2018-09-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Update constraints supported by getDisplayMedia
        https://bugs.webkit.org/show_bug.cgi?id=189930
        <rdar://problem/44740305>

        Unreviewed, fix test broken by r236465.

        * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm:
        (TestWebKitAPI::TEST_F):

2018-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHSL] Implement semantics
        https://bugs.webkit.org/show_bug.cgi?id=189134

        Reviewed by Filip Pizlo.

        This patch adds parsing support and adds the checks required to support HLSL-style semantics.

        There are 3 places where semantics are allowed:

        1. In a field in a struct. E.g.

        struct R {
            float4 position : SV_Position;
        }
        vertex R foo() {
            ...
        }

        2. In a parameter of a function. If the function is not an entry point, the semantic is ignored.

        compute void foo(device float[] data : buffer(u0)) {
            ...
        }

        3. On a function. This is so you don't have to create structs for the return types of simple vertex shaders.

        vertex float4 foo() : SV_Position {
            ...
        }

        The semantics are partitioned into 4 types:

        1. Built-in variables. For example, : SV_Position.
        2. Resources. For example, : register(u0).
        3. Stage-in / stage-out variables. For example, : attribute(0).
        4. Specialization constants. For example, : specialized.

        The semantics are validated according to a collection of rules:

        - The same entry point can't list the same semantic twice
        - Each built-in type has an appropriate type that is listed in the spec. 
        - Each built-in is appropriate as either an input or an output of a particular shader stage
        - Resource semantics have to have the appropriate type (e.g. can't use register(s0) on a buffer)
        - Resources can't be output from entry points
        - The resource semantic mode must match the address space of the resource
        - Stage-in and stage-out variables have to be POD
        - Specialization constants can't be output from entry points, and have to be numbers

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/BuiltInSemantic.js: Added.
        (BuiltInSemantic):
        (BuiltInSemantic.prototype.get name):
        (BuiltInSemantic.prototype.get extraArguments):
        (BuiltInSemantic.prototype.isAcceptableType):
        (BuiltInSemantic.prototype.isAcceptableForShaderType):
        (BuiltInSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype._resolveWithOperatorAnderIndexer):
        (CallExpression.prototype._resolveWithOperatorLength):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker):
        (Checker.prototype.visitProgram):
        (Checker.prototype._checkSemantics.Item):
        (Checker.prototype._checkSemantics.Item.prototype.get type):
        (Checker.prototype._checkSemantics.Item.prototype.get semantic):
        (Checker.prototype._checkSemantics.Gatherer):
        (Checker.prototype._checkSemantics.Gatherer.prototype.reset):
        (Checker.prototype._checkSemantics.Gatherer.prototype.set currentSemantic):
        (Checker.prototype._checkSemantics.Gatherer.prototype.get currentSemantic):
        (Checker.prototype._checkSemantics.Gatherer.prototype.get result):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitEnumType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitVectorType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitMatrixType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitNativeType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitStructType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitTypeRef):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitPtrType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitArrayRefType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitArrayType):
        (Checker.prototype._checkSemantics.Gatherer.prototype.visitFuncParameter):
        (Checker.prototype._checkSemantics.checkDuplicateSemantics):
        (Checker.prototype._checkSemantics.checkSemanticTypes):
        (Checker.prototype._checkSemantics.checkSemanticForShaderType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitEnumType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitArrayType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitVectorType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitMatrixType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitNativeType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitPtrType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitArrayRefType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitStructType):
        (Checker.prototype._checkSemantics.PODChecker.prototype.visitTypeRef):
        (Checker.prototype._checkSemantics.PODChecker):
        (Checker.prototype._checkSemantics.checkPODData):
        (Checker.prototype._checkSemantics):
        (Checker.prototype._checkShaderType):
        (Checker.prototype._checkOperatorOverload):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype.visitEnumType):
        (Checker.prototype.visitArrayType):
        (Checker.prototype.visitMakePtrExpression):
        (Checker.prototype.visitMakeArrayRefExpression):
        (Checker.prototype._finishVisitingPropertyAccess):
        (Checker.prototype.visitIndexExpression):
        (Checker.prototype.visitReturn):
        (Checker.prototype.visitSwitchStatement):
        (Checker.prototype.visitTernaryExpression):
        (Checker.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/Field.js:
        (Field):
        (Field.prototype.get semantic):
        (Field.prototype.toString):
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get semantic):
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncParameter.js:
        (FuncParameter):
        (FuncParameter.prototype.get semantic):
        (FuncParameter.prototype.toString):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype.visitReferenceType):
        (LateChecker):
        (LateChecker.prototype._checkShaderType): Deleted.
        (LateChecker.prototype.visitFuncDef): Deleted.
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseParameter):
        (parseFuncDecl):
        (parseFuncDef):
        (parseStageInOutSemantic):
        (parseResourceSemantic):
        (parseSpecializationConstantSemantic):
        (parseBuiltInSemantic):
        (parseField):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js:
        (programWithUnnecessaryThingsRemoved):
        * WebGPUShadingLanguageRI/ResourceSemantic.js: Added.
        (ResourceSemantic):
        (ResourceSemantic.prototype.get resourceMode):
        (ResourceSemantic.prototype.get index):
        (ResourceSemantic.prototype.get space):
        (ResourceSemantic.prototype.isAcceptableType):
        (ResourceSemantic.prototype.isAcceptableForShaderType):
        (ResourceSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFuncParameter):
        (Rewriter.prototype.visitField):
        (Rewriter.prototype.visitBuiltInSemantic):
        (Rewriter.prototype.visitResourceSemantic):
        (Rewriter.prototype.visitStageInOutSemantic):
        (Rewriter.prototype.visitSpecializationConstantSemantic):
        (Rewriter):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/Semantic.js: Added.
        (Semantic):
        (Semantic.prototype.get origin):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitBuiltInSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitResourceSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitStageInOutSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer.prototype.visitSpecializationConstantSemantic):
        (Semantic.prototype.equalToOtherSemantic.Comparer):
        (Semantic.prototype.equalToOtherSemantic):
        * WebGPUShadingLanguageRI/SpecializationConstantSemantic.js: Copied from Tools/WebGPUShadingLanguageRI/Field.js.
        (SpecializationConstantSemantic):
        (SpecializationConstantSemantic.prototype.isAcceptableType):
        (SpecializationConstantSemantic.prototype.isAcceptableForShaderType):
        (SpecializationConstantSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/StageInOutSemantic.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (StageInOutSemantic):
        (StageInOutSemantic.prototype.get index):
        (StageInOutSemantic.prototype.isAcceptableType):
        (StageInOutSemantic.prototype.isAcceptableForShaderType):
        (StageInOutSemantic.prototype.toString):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeFunc):
        * WebGPUShadingLanguageRI/SynthesizeArrayOperatorLength.js:
        (synthesizeArrayOperatorLength):
        * WebGPUShadingLanguageRI/SynthesizeCopyConstructorOperator.js:
        (synthesizeCopyConstructorOperator):
        * WebGPUShadingLanguageRI/SynthesizeDefaultConstructorOperator.js:
        (synthesizeDefaultConstructorOperator):
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js:
        (synthesizeEnumFunctions):
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        (setupAnder):
        (synthesizeStructAccessorsForStructType):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderTypes):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncParameter):
        (Visitor.prototype.visitField):
        (Visitor.prototype.visitBuiltInSemantic):
        (Visitor.prototype.visitResourceSemantic):
        (Visitor.prototype.visitStageInOutSemantic):
        (Visitor.prototype.visitSpecializationConstantSemantic):
        (Visitor):
        * WebGPUShadingLanguageRI/index.html:

2018-09-25  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Test suite for Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=187738

        Reviewed by Myles C. Maxfield.

        This patch adds an Xcode project that contains a Cocoa app that can be
        used for running WHLSL shaders on the GPU. It also contains an Xcode
        test suite that runs all of the tests in Test.js on the GPU.

        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/.gitignore: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/AppDelegate.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/AppIcon.appiconset/Contents.json: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Assets.xcassets/Contents.json: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Base.lproj/Main.storyboard: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CompileResult.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Compiler.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/CustomMetalView.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Default.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Julia.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Demo shaders/Mandelbrot.whlsl: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Info.plist: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OffscreenRenderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/OnscreenRenderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/Renderer/Renderer.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestCallArgument.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestDescription.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamily.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/TestFamilyRunner.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.h: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/ViewController.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/WHLSL.entitlements: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/_SharedMetal.txt: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/Core/main.m: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL Tests.xcodeproj/project.pbxproj: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/Info.plist: Added.
        * WebGPUShadingLanguageRI/Metal/WHLSL Tests/WHLSL ToyTests/WHLSL_ToyTests.m: Added.
        * WebGPUShadingLanguageRI/Test.js:
        (tests.lotsOfLocalVariables):

2018-09-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix after r236455
        https://bugs.webkit.org/show_bug.cgi?id=189121

        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderStages):

2018-09-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Not all functions should be able to run in all shader stages
        https://bugs.webkit.org/show_bug.cgi?id=189121

        Reviewed by Filip Pizlo.

        ddx() and ddy() can only run in fragment shaders, and the barrier functions can only run in compute shaders.
        ddx_coarse() & friends are currently implemented as just calling ddx(), so we only need to modify those functions
        if/when we make them native.

        The texture sampling functions that use implicit derivatives can run in any shader stage - they just use a LOD of
        0. Therefore, those functions are unchanged.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        (NativeFunc.prototype.get stage):
        (NativeFunc.prototype.toDeclString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseFuncDecl):
        (parseNativeFunc):
        (parseNative):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeFunc):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.shaderStages):
        * WebGPUShadingLanguageRI/WSyntaxError.js:
        (WSyntaxError.prototype.toString):
        (WSyntaxError):
        * WebGPUShadingLanguageRI/index.html:

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Implement trap statements in Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=189615

        Reviewed by Myles C. Maxfield.

        Each function called by an entry point now receives an additional
        boolean pointer parameter, which is set to false if the function traps.
        After each function call (to a non-native function) this trap parameter
        is checked. The behavior of the interpreter has also been updated so
        that a function entry point catches the trap and instead returns zero,
        matching the behavior of compiled code.

        * WebGPUShadingLanguageRI/Evaluator.js: Adds a new flag to allow the
        test suite to check for traps and also returns zero from entry points
        whose invocation trapped.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Pass program to function
        declarations.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Update dependencies.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Add program
        property.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Ditto.
        * WebGPUShadingLanguageRI/Metal/MSLInsertTrapParameter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Conforms to the
        new trapping behavior.
        * WebGPUShadingLanguageRI/Test.js: Update tests that trap.

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] It shouldn’t be possible to use ternary expressions as l-values
        https://bugs.webkit.org/show_bug.cgi?id=189290

        Reviewed by Myles C. Maxfield.

        It is no longer possible for a ternary expression to be treated as an
        l-value. This patch adds several test cases to verify that this is the
        case.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitTernaryExpression): No longer check isLValue.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver:
        (NormalUsePropertyResolver.visitTernaryExpression): Deleted.
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitTernaryExpression): No longer copy isLValue.
        * WebGPUShadingLanguageRI/TernaryExpression.js:
        (TernaryExpression):
        (TernaryExpression.prototype.get elseExpression):
        (TernaryExpression.prototype.get isLValue): Deleted.
        (TernaryExpression.prototype.set isLValue): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (tests.ternaryExpression): Add checks for failure if a failure is used
        as an l-value.
        (ternaryExpressionIsLValue.node.TernaryExpressionVisitor.prototype.visitTernaryExpression): Deleted.
        (ternaryExpressionIsLValue.node.TernaryExpressionVisitor): Deleted.
        (tests.ternaryExpressionIsLValue): Deleted.

2018-09-24  Jer Noble  <jer.noble@apple.com>

        SharedBuffer should have an equality test
        https://bugs.webkit.org/show_bug.cgi?id=189919

        Reviewed by Alex Christensen.

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

2018-09-24  Alex Christensen  <achristensen@webkit.org>

        Prepare to replace WKBundleFileHandleCreateWithPath with a version that takes a WKBundlePageRef
        https://bugs.webkit.org/show_bug.cgi?id=189929

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit/WKBundleFileHandle_Bundle.cpp:

2018-09-24  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Casting user-created types to themselves should always work
        https://bugs.webkit.org/show_bug.cgi?id=189113

        Reviewed by Myles C. Maxfield.

        Casting user-defined types to themselves worked already, but we didn't
        test it anywhere.

        * WebGPUShadingLanguageRI/Test.js:
        (tests.selfCasts):

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

        Unreviewed build fix for Jhbuild-using ports.

        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch:
        Adjust the patch so it applies cleanly on the 1.14.3 version of the
        gst-plugins-good package.

2018-09-24  Ryan Haddad  <ryanhaddad@apple.com>

        Update flakiness dashboard configuration for iOS 12 queues
        https://bugs.webkit.org/show_bug.cgi?id=189688

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Unreviewed build fix.

        A GStreamer patch was not applying cleanly on 1.14.3.

        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch:

2018-09-24  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Use no-more-pads event for noticing initialization segments
        https://bugs.webkit.org/show_bug.cgi?id=189868

        Reviewed by Xabier Rodriguez-Calvar.

        Added patch from https://bugzilla.gnome.org/show_bug.cgi?id=797187

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0010-matroskademux-Emit-no-more-pads-after-parsing-Tracks.patch: Added.

2018-09-24  Alicia Boya García  <aboya@igalia.com>
        [MSE][GStreamer] Add patch to jhbuild: matroskademux: Allow Matroska headers to be read more than once
        https://bugs.webkit.org/show_bug.cgi?id=185731

        Reviewed by Xabier Rodriguez-Calvar.

        Upstream bug in GStreamer: https://bugzilla.gnome.org/show_bug.cgi?id=793333

        This fixes YTTV 35. AppendMultipleInitOpusAudio (and any other use
        case where two WebM initialization segments are appended on a row).

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0007-matroskademux-Allow-Matroska-headers-to-be-read-more.patch: Added.
        * gstreamer/patches/gst-plugins-good-0008-matroskademux-Refactor-track-parsing-out-from-adding.patch: Added.
        * gstreamer/patches/gst-plugins-good-0009-matroskademux-Parse-successive-Tracks-elements.patch: Added.

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHSL] Need grammar to specify kernel group size
        https://bugs.webkit.org/show_bug.cgi?id=189108

        Reviewed by Dean Jackson.

        In HLSL, compute functions are annotated with their workgroup size.
        For example,

        [numthreads(3, 4, 5)] compute void foo(...) { ... }

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get attributeBlock):
        * WebGPUShadingLanguageRI/FuncAttribute.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (FuncAttribute):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncNumThreadsAttribute.js: Copied from Tools/WebGPUShadingLanguageRI/FuncDef.js.
        (FuncNumThreadsAttribute):
        (FuncNumThreadsAttribute.prototype.get x):
        (FuncNumThreadsAttribute.prototype.get y):
        (FuncNumThreadsAttribute.prototype.get z):
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseAttributeBlock):
        (parseFuncDecl):
        (parseFuncDef):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitFuncDef):
        (StatementCloner.prototype.visitFuncNumThreadsAttribute):
        (StatementCloner):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.numThreads):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncNumThreadsAttribute):
        (Visitor):
        * WebGPUShadingLanguageRI/index.html:

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Native functions which accept pointers need to do null checks
        https://bugs.webkit.org/show_bug.cgi?id=189883

        Reviewed by Dean Jackson.

        Simply guard all the places where we write through an author-provided pointer.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.textureDimensionsNull):

2018-09-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement atomic operations and barriers
        https://bugs.webkit.org/show_bug.cgi?id=189025

        Reviewed by Dean Jackson.

        In the interpreter, atomic operations don't need to be atomic.

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (let.standardLibrary):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.atomics):

2018-09-22  Thibault Saunier  <tsaunier@igalia.com>

        [WPE] Be very permissive in the MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=189800

        This is just a test tool and we should make
        it just work, security and privacy is not really
        a primary focus here.

        Reviewed by Žan Doberšek.

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

2018-09-21  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Local variables should be statically allocated
        https://bugs.webkit.org/show_bug.cgi?id=188402

        Reviewed by Myles C. Maxfield.

        An additional preparation stage is now performed so that all local
        variables and function parameters are allocated in a single struct at
        entry points. A pointer to this struct is then passed for function
        calls.

        * WebGPUShadingLanguageRI/All.js: Update dependencies.
        * WebGPUShadingLanguageRI/AllocateAtEntryPoints.js: Added new stage.
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype.set argumentList): Add setter because
        allocateAtEntryPoints needs to change this.
        * WebGPUShadingLanguageRI/EBufferBuilder.js: Remove a redundant
        constructor that wasn't used anywhere.
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.set parameters): Add setter.
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef.prototype.set body): Ditto.
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare): Add call to allocateAtEntryPoints. This call cannot
        happen any earlier because it depends on having types for call
        arguments.
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitReturn): Resolve issue where the return
        statement's function wasn't copied. A null check is required as the
        Rewriter might be used before this property is set.
        * WebGPUShadingLanguageRI/SPIRV.html: Update dependencies.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Abstracted logic
        into a separate function so that allocateAtEntryPoints can create the
        accessors for the struct type it introduces.
        * WebGPUShadingLanguageRI/Test.html: Update dependencies.
        * WebGPUShadingLanguageRI/Test.js: Add new tests to verify the static
        allocation transform works safely.
        * WebGPUShadingLanguageRI/index.html: Update dependencies.

2018-09-21  Jonathan Bedard  <jbedard@apple.com>

        Bring up queues for iOS 12 (Build fix)
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Unreviewed build fix.

        We should not build ImageDiff as x86 by default since 32 bit projects are
        deprecated in Xcode. ImageDiff should only be built once.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

2018-09-21  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Built RPM of WPE webkit fails to install with "nothing provides libWPEToolingBackends.so()"
        https://bugs.webkit.org/show_bug.cgi?id=189797

        Reviewed by Žan Doberšek.

        * wpe/backends/CMakeLists.txt: Make libWPEToolingBackends a static library to avoid
        the need for installing it. This works fine because the library only contains utility
        code intended to be reused from other various components (MiniBrowser, WebKitTestRunner).

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

        Move IOKitSPI.h from TestRunnerShared to PAL
        https://bugs.webkit.org/show_bug.cgi?id=189804

        Reviewed by Wenson Hsieh.

        Towards fixing <https://bugs.webkit.org/show_bug.cgi?id=189604> move the IOKit SPI forward
        declarations to PAL so that they can be shared by WebKit, DumpRenderTree and WebKitTestRunner.

        No functionality changed. So, no new tests.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm:
        * TestRunnerShared/spi/UIKitTestSPI.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:

2018-09-20  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Metal code generation
        https://bugs.webkit.org/show_bug.cgi?id=187735

        Reviewed by Myles C. Maxfield.

        Adds support for generating Metal Shading Language from WHLSL. Clients
        should include the file MetalCodegenAll.js and then call whlslToMsl
        with their program source code to compile to Metal.

        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType.prototype.get arrayRefType): Adds the arrayRefType method to
        all types to find the type of that expression when it is used in a
        MakeArrayRefExpression.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js:
        (MakeArrayRefExpression):
        (MakeArrayRefExpression.prototype.get type): Uses the new arrayRefType
        getter on all types to find the type of the expression.
        * WebGPUShadingLanguageRI/Metal/MSLBackend.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLCodegenAll.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLCompileResult.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLConstexprEmitter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDeclaration.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionDefinition.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLFunctionForwardDeclaration.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLNameMangler.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLNativeFunctionCall.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLStatementEmitter.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributes.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeAttributesMap.js: Added.
        * WebGPUShadingLanguageRI/Metal/MSLTypeUnifier.js: Added.
        * WebGPUShadingLanguageRI/Metal/TypeOf.js: Added.
        * WebGPUShadingLanguageRI/Metal/WhlslToMsl.js: Added.
        * WebGPUShadingLanguageRI/PropertyResolver.js:
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        * WebGPUShadingLanguageRI/Test.js: Added awkward tests for the compiler
        to generate code for.
        (tests.incrementAndDecrement):
        (tests.returnIntLiteralUint):
        (tests.returnIntLiteralFloat):
        (tests.nestedSubscriptWithArraysInStructs):
        (tests.nestedSubscript):
        (tests.lotsOfLocalVariables):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get arrayRefType): See above.

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Unreviewed infrastructure fix.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12@2x.png: Renamed from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/iOS12@2x.png.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Move EWS bubbles to the iOS 12 section of the dashboard.

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Bring up queues for iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=189683

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS12Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/iOS12@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.ios-simulator-12 img.logo):
        (table.queue-grid tr.platform.ios-12 img.logo):
        (table.queue-grid tr.platform.ios-simulator-11 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-11 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

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

        [Win] TestRunner::queueLoad() fails to generate correct url for some urls.
        https://bugs.webkit.org/show_bug.cgi?id=189679

        Reviewed by Fujii Hironori.

        Replace the implementation with correct API call.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::queueLoad): Call UrlCombineW.

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

        [WPE] fails to build on ARM arches complaining about undefined reference to `epoxy_eglMakeCurrent'
        https://bugs.webkit.org/show_bug.cgi?id=189556

        Reviewed by Konstantin Tokarev.

        This is only a speculative build fix as I didn't attempt to reproduce. Explicitly link to
        libepoxy.

        * wpe/backends/CMakeLists.txt:

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

        [iOS] Support testing more hardware special keys
        https://bugs.webkit.org/show_bug.cgi?id=189793

        Reviewed by Simon Fraser.

        * TestRunnerShared/spi/IOKitSPI.h: Add more SPI constants.
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (keyCodeForDOMFunctionKey): Extracted out logic from hidUsageCodeForCharacter() to return the
        key code for the F1, F2, ..., F12 keys and extended the code to compute the key code for the
        F13, F14, ..., F24 keys.
        (hidUsageCodeForCharacter): Modified to call keyCodeForDOMFunctionKey().

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

        Unreviewed, remove accidentally-committed debugging changes from flatpakutils script

        Aaaaaah maybe this is why changes are supposed to be reviewed.

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

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

        Unreviewed, manually rollout our switch to master runtime

        Phil wants html5-codecs, which aren't available yet here. Let's switch back to 3.28 in the
        meantime, where we were already building GStreamer ourselves anyway. But use an updated
        SDK revision.

        * flatpak/files/httpd-autogen.sh: Added.
        * flatpak/flatpakutils.py:
        (WebkitFlatpak.clean_args):
        * flatpak/org.webkit.GTK.yaml:
        * flatpak/org.webkit.WebKit.yaml:
        * flatpak/patches/httpd-0001-configure-use-pkg-config-for-PCRE-detection.patch: Added.
        * flatpak/patches/libgcrypt-0001-Use-pkg-config-to-detect-gpg-error.patch: Added.

2018-09-20  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK] webkit-flatpak intercepts --help for other commands
        https://bugs.webkit.org/show_bug.cgi?id=189058

        The approach of run_in_sandbox_if_available is that we basically have the
        same set of arguments to setup the sandbox (ie. port name, build type, etc...)
        and we can pass those args first to setup the flatpak launcher object
        and then to the underlying script. That doesn't work well with the `--help` argument
        as once processed it 1. prints the help (which make no sense to the user of the calling script)
        2. exits the app - The solution is to just make sure that `--help` is not used when using
        flatpakutils from any script that is not `webkit-flatpak` itself.

        Reviewed by Michael Catanzaro.

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (run_in_sandbox_if_available):

2018-09-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add W3C imported tests to the MSEEME watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2018-09-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fix the Streams API watchlist.

        * Scripts/webkitpy/common/config/watchlist:

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

        Crash under WebProcessProxy::suspendedPageWasDestroyed(WebKit::SuspendedPageProxy&)
        https://bugs.webkit.org/show_bug.cgi?id=189721
        <rdar://problem/44359788>

        Reviewed by Geoffrey Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-19  Thomas Denney  <tdenney@apple.com>

        [WHLSL] Improve test suite type safety
        https://bugs.webkit.org/show_bug.cgi?id=189502

        Reviewed by Myles C. Maxfield.

        Each of the 'makeT' functions now call the relevant cast function on the
        value before hand. The checkNumber function has also been removed and
        its uses have been replaced with functions that also check the type.
        Some of the arithmetic checks have been updated to reflect that the
        casts happen outside of WHLSL evaluation. Other tests have also been
        updated to reflect that some values cannot be precisely expressed in
        32-bit floating point.

        * WebGPUShadingLanguageRI/Casts.js:
        (castToBool): Added.
        (castAndCheckValue): Added.
        (isBitwiseEquivalent): Moved from Intrinsics.js.
        * WebGPUShadingLanguageRI/Intrinsics.js: Ditto.
        * WebGPUShadingLanguageRI/SPIRV.html: Update depdencies.
        * WebGPUShadingLanguageRI/Test.html: Ditto.
        * WebGPUShadingLanguageRI/Test.js: Update makeT functions to do a cast
        and check the result. Some tests were also updated to reflect the change
        in the behavior of these functions.
        * WebGPUShadingLanguageRI/index.html: Update dependencies.

2018-09-19  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add optional cap on partitioned cache max age
        https://bugs.webkit.org/show_bug.cgi?id=189711
        <rdar://problem/39246837>

        Reviewed by Antti Koivisto and Chris Dumez.

        This change adds infrastructure for layout tests of capped cache max age.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsCacheMaxAgeCap):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsCacheMaxAgeCap):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2018-09-19  Dawei Fenton  <realdawei@apple.com>

       Unreviewed. Update my email and alias in list of contributors.

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

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, try #3 to fix a typo

        I feel like Charlie Brown, how hard this has been for me....

        * Scripts/run-minibrowser:
        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailable):
        (runInFlatpakIfAvailible): Deleted.

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, fix that typo in more places

        It got copied into webkitdirs.pm!

        * Scripts/webkitdirs.pm:
        (runInFlatpakIfAvailible):
        (runInFlatpakIfAvalaible): Deleted.

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, fix a pervasive typo in the webkit-flatpak script

        * flatpak/flatpakutils.py:
        (WebkitFlatpak.load_from_args):
        (WebkitFlatpak.__init__):
        (WebkitFlatpak.run):

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unreviewed, update to latest GNOME SDK

        * flatpak/org.webkit.WebKit.yaml:

2018-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r235500.

        Time to switch back to master runtime

        Reverted changeset:

        "Unreviewed, rolling out r235114."
        https://bugs.webkit.org/show_bug.cgi?id=188731
        https://trac.webkit.org/changeset/235500

2018-09-19  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. Add Pablo Saavedra to the list of contributors.

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

2018-09-19  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Add support for AV1 decoding
        https://bugs.webkit.org/show_bug.cgi?id=189647

        Reviewed by Žan Doberšek.

        Add patches required for AV1 decoding support. They're all
        upstream already and will be shipped in GStreamer 1.16. The aom
        GStreamer plugin depends on the aom library for which there's no
        official release yet.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-bad-0001-aomenc-Add-support-for-10-12bit-decoding.patch: Added.
        * gstreamer/patches/gst-plugins-bad-0002-aomenc-Handle-8-bit_depth-images-with-AOM_IMG_FMT_HI.patch: Added.
        * gstreamer/patches/gst-plugins-good-0001-qtdemux-Detect-and-expose-CEA-608-708-Closed-Caption.patch: Added. This one is unrelated but an implicit dependency of the next one.
        * gstreamer/patches/gst-plugins-good-0004-qtdemux-Add-initial-support-for-AV1-demuxing.patch: Added.
        * gstreamer/patches/gst-plugins-good-0005-qtdemux-Extract-AV1-codec_data-and-put-it-in-the-cap.patch: Added.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-Recognize-more-AV1-atoms.patch: Added.

2018-09-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Clobbering and building occurs multiple times for iOS Simulator ports
        https://bugs.webkit.org/show_bug.cgi?id=189702
        <rdar://problem/44541704>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Move build check and clobbering to run, since set up is
        run multiple times for iOS simulator.
        (Manager.run):

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

        "DidFirstVisuallyNonEmptyLayout" callback does not get called when restoring a page from PageCache
        https://bugs.webkit.org/show_bug.cgi?id=189681
        <rdar://problem/44526171>

        Reviewed by Alex Christensen and Zalan Bujtas.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::TEST):

2018-09-18  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Implement mouse event modifiers
        https://bugs.webkit.org/show_bug.cgi?id=189697

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::wkEventModifiersToWPE):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):

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

        [WTF] Use Semaphore and BinarySemaphore instead of dispatch_semaphore_t
        https://bugs.webkit.org/show_bug.cgi?id=185339

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp:
        (TestWebKitAPI::ToUpperConverter::stopProducing):
        (TestWebKitAPI::ToUpperConverter::stopConsuming):

2018-09-17  Simon Fraser  <simon.fraser@apple.com>

        Many modern media control tests leak documents in testing
        https://bugs.webkit.org/show_bug.cgi?id=189437

        Reviewed by Darin Adler.
        
        In order to accurately detect leaks in media controls tests which use lots of
        SVGImages, we have to:
        - Fire a zero-delay timer after the postTask, in order for ImagesLoader's m_derefElementTimer
          to clear references to elements.
        - Have releaseCriticalMemory() call CachedResourceLoader's garbageCollectDocumentResources()
          to drop the last handle to the CachedResource for an SVGImage.
        - Call WKBundleReleaseMemory() after the GC and timer, since we need garbageCollectDocumentResources()
          to run again after that timer has fired.
        
        This should fix most of the spurious leak reports involving SVGImage documents.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::reportLiveDocuments):
        (WTR::InjectedBundle::didReceiveMessageToPage):

2018-09-17  Chris Dumez  <cdumez@apple.com>

        PSON: window.open() with 'noopener' should only process-swap cross-site, not cross-origin
        https://bugs.webkit.org/show_bug.cgi?id=189602
        <rdar://problem/44430549>

        Reviewed by Geoff Garen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-17  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Update to GStreamer 1.14.3
        https://bugs.webkit.org/show_bug.cgi?id=189450

        Reviewed by Xabier Rodriguez-Calvar.

        * gstreamer/jhbuild.modules: Bump GStreamer modules from 1.14.1 to 1.14.3.

2018-09-17  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Doesn't check sha256 sums
        https://bugs.webkit.org/show_bug.cgi?id=189646

        Reviewed by Michael Catanzaro.

        * gstreamer/jhbuild.modules: Properly set the sha256: prefix on hashes.

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

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415
        <rdar://problem/44396973>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2018-09-08  Darin Adler  <darin@apple.com>

        Streamline JSRetainPtr, fix leaks of JSString and JSGlobalContext
        https://bugs.webkit.org/show_bug.cgi?id=189455

        Reviewed by Keith Miller.

        There is a lot of copied and pasted code for WebKit vs. Legacy WebKit
        testing and even for macOS vs. iOS vs. Windows platform-specific code.
        For now, this patch just makes corresponding changes to the copied code.
        Later we might get better results by merging more code instead of having
        all these separate copies.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::makeWindowObject): Use the adopt function
        instead of the special Adopt constructor of JSRetainPtr.

        * DumpRenderTree/AccessibilityTextMarker.cpp: Removed unneeded include.

        * DumpRenderTree/AccessibilityUIElement.cpp: Ditto.
        (allAttributesCallback): Don't adopt at this level; changed the
        underlying function to return a JSRetainPtr so the adopt is right next
        to the call to the create or copy function.
        (attributesOfLinkedUIElementsCallback): Ditto.
        (attributesOfDocumentLinksCallback): Ditto.
        (attributesOfChildrenCallback): Ditto.
        (parameterizedAttributeNamesCallback): Ditto.
        (attributesOfColumnHeadersCallback): Ditto.
        (attributesOfRowHeadersCallback): Ditto.
        (attributesOfColumnsCallback): Ditto.
        (attributesOfRowsCallback): Ditto.
        (attributesOfVisibleCellsCallback): Ditto.
        (attributesOfHeaderCallback): Ditto.
        (rowIndexRangeCallback): Ditto.
        (columnIndexRangeCallback): Ditto.
        (rangeForLineCallback): Ditto.
        (boundsForRangeCallback): Ditto.
        (rangeForPositionCallback): Ditto.
        (stringForRangeCallback): Ditto.
        (attributedStringForRangeCallback): Ditto.
        (uiElementCountForSearchPredicateCallback): Use the free adopt
        function instead of the adopt member function.
        (uiElementForSearchPredicateCallback): Ditto.
        (selectTextWithCriteriaCallback): Don't adopt at this level.
        (attributedStringForElementCallback): Ditto.
        (setValueCallback): Use free adopt.
        (stringAttributeValueCallback): Don't adopt at this level.
        (uiElementArrayAttributeValueCallback): Ditto.
        (uiElementAttributeValueCallback): Ditto.
        (stringForTextMarkerRangeCallback): Ditto.
        (attributedStringForTextMarkerRangeCallback): Ditto.
        (attributedStringForTextMarkerRangeWithOptionsCallback): Ditto.
        (getARIADropEffectsCallback): Ditto.
        (getClassListCallback): Ditto.
        (getRoleCallback): Ditto.
        (getSubroleCallback): Ditto.
        (getRoleDescriptionCallback): Ditto.
        (getComputedRoleStringCallback): Ditto.
        (getTitleCallback): Ditto.
        (getDescriptionCallback): Ditto.
        (getStringValueCallback): Ditto.
        (getLanguageCallback): Ditto.
        (getHelpTextCallback): Ditto.
        (getOrientationCallback): Ditto.
        (getPathDescriptionCallback): Ditto.
        (getSelectedTextRangeCallback): Ditto.
        (speakAsCallback): Ditto.
        (getValueDescriptionCallback): Ditto.
        (getAccessibilityValueCallback): Ditto.
        (getDocumentEncodingCallback): Ditto.
        (getDocumentURICallback): Ditto.
        (getURLCallback): Ditto.
        (characterAtOffsetCallback): Ditto.
        (wordAtOffsetCallback): Ditto.
        (lineAtOffsetCallback): Ditto.
        (sentenceAtOffsetCallback): Ditto.
        (stringForSelectionCallback): Ditto.
        (getIdentifierCallback): Ditto.
        (getTraitsCallback): Ditto.
        (supportedActionsCallback): Ditto.
        (mathPostscriptsDescriptionCallback): Ditto.
        (mathPrescriptsDescriptionCallback): Ditto.
        (AccessibilityUIElement::rangeForLine): Updated to return JSRetainPtr.
        (AccessibilityUIElement::rangeForPosition): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.

        * DumpRenderTree/AccessibilityUIElement.h: Use JSRetainPtr instead of
        raw pointers for the results of the functions that create strings.
        The old way was difficult to get right; the functions didn't even follow
        the create/copy naming rule.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        (_platformTypeConstructor): Use the adopt function instead of the
        JSRetainPtr adopt constructor. Also nullptr instead of 0.

        * DumpRenderTree/GCController.cpp:
        (GCController::makeWindowObject): Use adopt function instead of constructor.

        * DumpRenderTree/TestRunner.cpp:
        (pathToLocalResourceCallback): Use adopt function instead of constructor.
        (addDisallowedURLCallback): Ditto.
        (addURLToRedirectCallback): Ditto.
        (clearApplicationCacheForOriginCallback): Ditto.
        (applicationCacheDiskUsageForOriginCallback): Ditto.
        (decodeHostNameCallback): Don't adopt at this level.
        (encodeHostNameCallback): Ditto.
        (execCommandCallback): Use adopt instead of JSRetainPtr::adopt.
        (findStringCallback): Use adopt function instead of constructor.
        (isCommandEnabledCallback): Ditto.
        (overridePreferenceCallback): Ditto.
        (queueLoadCallback): Ditto.
        (queueLoadHTMLStringCallback): Ditto.
        (queueLoadingScriptCallback): Ditto.
        (queueNonLoadingScriptCallback): Ditto.
        (setAuthenticationPasswordCallback): Ditto.
        (setAuthenticationUsernameCallback): Ditto.
        (setDomainRelaxationForbiddenForURLSchemeCallback): Ditto.
        (setMockGeolocationPositionUnavailableErrorCallback): Ditto.
        (setPOSIXLocaleCallback): Ditto.
        (setPersistentUserStyleSheetLocationCallback): Ditto.
        (setUserStyleSheetLocationCallback): Ditto.
        (setValueForUserCallback): Ditto.
        (setWillSendRequestClearHeaderCallback): Ditto.
        (setPageVisibilityCallback): Ditto.
        (evaluateInWebInspectorCallback): Ditto.
        (evaluateScriptInIsolatedWorldCallback): Ditto.
        (evaluateScriptInIsolatedWorldAndReturnValueCallback): Ditto.
        (addOriginAccessWhitelistEntryCallback): Ditto.
        (removeOriginAccessWhitelistEntryCallback): Ditto.
        (setScrollbarPolicyCallback): Ditto.
        (addUserScriptCallback): Ditto.
        (addUserStyleSheetCallback): Ditto.
        (apiTestNewWindowDataLoadBaseURLCallback): Ditto.
        (authenticateSessionCallback): Ditto.
        (getTitleTextDirectionCallback): Ditto.
        (getInspectorTestStubURLCallback): Ditto.
        (simulateLegacyWebNotificationClickCallback): Ditto.
        (setTextDirectionCallback): Ditto.
        (grantWebNotificationPermissionCallback): Ditto.
        (denyWebNotificationPermissionCallback): Ditto.
        (accummulateLogsForChannel): Ditto.
        (runUIScriptCallback): Ditto.
        (TestRunner::makeWindowObject): Ditto.
        (TestRunner::uiScriptDidComplete): Ditto.
        (TestRunner::setOpenPanelFiles): Ditto.

        * DumpRenderTree/TestRunner.h: Use JSRetainPtr instead of
        raw pointers for the results of the functions that create strings.

        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::platformName const): Use the adopt
        function instead of the adopt constructor.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (concatenateAttributeAndValue): Changed to return a JSRetainPtr.
        (AccessibilityUIElement::identifier): Ditto.
        (AccessibilityUIElement::traits): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::stringForSelection): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForElement): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::classList const): Ditto.

        * DumpRenderTree/mac/AccessibilityCommonMac.h: Changed the
        createJSStringRef method to return a JSRetainPtr.
        * DumpRenderTree/mac/AccessibilityCommonMac.mm:
        (-[NSString createJSStringRef]): Ditto.
        (searchPredicateParameterizedAttributeForSearchCriteria): Use the
        adopt function instead of the adopt constructor.
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::platformName const): Ditto.

        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        (makeValueRefForValue): Updated for the above, no adopt needed here now.
        (makeObjectRefForDictionary): Ditto.
        (-[AccessibilityNotificationHandler _notificationReceived:]): Ditto.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (concatenateAttributeAndValue): Changed to return a JSRetainPtr.
        (descriptionOfElements): Ditto.
        (selectTextParameterizedAttributeForCriteria): Ditto.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::speakAs): Ditto.
        (AccessibilityUIElement::classList const): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::rangeForLine): Ditto.
        (AccessibilityUIElement::rangeForPosition): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::pathDescription const): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::stringForTextMarkerRange): Ditto.
        (createJSStringRef): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRange): Ditto.
        (AccessibilityUIElement::attributedStringForTextMarkerRangeWithOptions): Ditto.
        (AccessibilityUIElement::supportedActions): Ditto.
        (AccessibilityUIElement::mathPostscriptsDescription const): Ditto.
        (AccessibilityUIElement::mathPrescriptsDescription const): Ditto.

        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate didClearWindowObjectForFrame:inIsolatedWorld:]):
        Use the adopt function instead of the adopt constructor.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (originsArrayToJS): Ditto.
        (TestRunner::copyDecodedHostName): Return a JSRetainPtr.
        (TestRunner::copyEncodedHostName): Ditto.
        (TestRunner::pathToLocalResource): Ditto.
        (TestRunner::queueLoad): Use adopt function instead of constructor.
        (TestRunner::findString): Ditto.
        (TestRunner::inspectorTestStubURL): Return a JSRetainPtr.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::winNotificationReceived): Use adopt function
        instead of adopt constructor.
        (AccessibilityController::platformName const): Ditto.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (AccessibilityUIElement::allAttributes): Changed to return a JSRetainPtr.
        (AccessibilityUIElement::attributesOfLinkedUIElements): Ditto.
        (AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::subrole): Ditto.
        (AccessibilityUIElement::roleDescription): Ditto.
        (AccessibilityUIElement::computedRoleString): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::helpText const): Ditto.
        (AccessibilityUIElement::valueDescription): Ditto.
        (AccessibilityUIElement::ariaDropEffects const): Ditto.
        (AccessibilityUIElement::orientation const): Ditto.
        (AccessibilityUIElement::attributesOfColumnHeaders): Ditto.
        (AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (AccessibilityUIElement::attributesOfColumns): Ditto.
        (AccessibilityUIElement::attributesOfRows): Ditto.
        (AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (AccessibilityUIElement::attributesOfHeader): Ditto.
        (AccessibilityUIElement::rowIndexRange): Ditto.
        (AccessibilityUIElement::columnIndexRange): Ditto.
        (AccessibilityUIElement::boundsForRange): Ditto.
        (AccessibilityUIElement::stringForRange): Ditto.
        (AccessibilityUIElement::attributedStringForRange): Ditto.
        (AccessibilityUIElement::selectTextWithCriteria): Ditto.
        (AccessibilityUIElement::selectedTextRange): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::accessibilityValue const): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::url): Ditto.
        (AccessibilityUIElement::classList const): Ditto.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::copyDecodedHostName): Changed to return a JSRetainPtr.
        (TestRunner::copyEncodedHostName): Ditto.
        (TestRunner::pathToLocalResource): Ditto.
        (TestRunner::queueLoad): Ditto.
        (TestRunner::findString): Ditto.
        (TestRunner::inspectorTestStubURL): Ditto.

        * TestRunnerShared/Bindings/JSWrapper.h:
        (WTR::setProperty): Use adopt function instead of constructor.
        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext): Ditto.
        (UIScriptContext::runUIScript): Ditto.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::toDeviceOrientation): Ditto.

        * TestRunnerShared/cocoa/LayoutTestSpellChecker.mm:
        (nsTextCheckingType): Changed this function to not take an rvalue
        reference to a JSRetainPtr since it doesn't take ownership.
        (-[LayoutTestSpellChecker setResultsFromJSObject:inContext:]): Updated
        for the above change.

        * TestWebKitAPI/JavaScriptTest.cpp:
        (TestWebKitAPI::javaScriptCallback): Use adopt function instead of
        adopt member function.

        * TestWebKitAPI/Tests/WebKit/WKPageIsPlayingAudio.cpp: Removed unneeded include.
        * TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm: Ditto.
        * TestWebKitAPI/Tests/mac/DOMNodeFromJSObject.mm: Use adopt function instead of
        adopt constructor.
        * TestWebKitAPI/Tests/mac/JSWrapperForNodeInWebFrame.mm: Ditto.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        Removed unneeded includes.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: Ditto.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_platformTypeConstructor): Use the adopt function instead of the
        JSRetainPtr adopt constructor. Also nullptr instead of 0.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::arrayLength): Use adopt function instead of constructor.
        (WTR::parseModifierArray): Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::propertyValue): Ditto.
        (WTR::dumpPath): Ditto.
        (WTR::toJS): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::findString): Ditto.
        (WTR::TestRunner::statisticsDidRunTelemetryCallback): Ditto.
        (WTR::TestRunner::callDidReceiveAllStorageAccessEntriesCallback): Ditto.
        (WTR::TestRunner::setOpenPanelFiles): Ditto.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        (WTR::AccessibilityController::platformName): Ditto.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        This fixes storage leaks in many functions below, which were using
        the create function and putting the value right into a JSRetainPtr
        without adoption.
        (WTR::createEmptyJSString): Added. This helper function reduces the
        repetitive code to create empty strings.
        (WTR::concatenateAttributeAndValue): Return a JSRetainPtr.
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks): Ditto.
        (WTR::AccessibilityUIElement::attributesOfChildren): Ditto.
        (WTR::AccessibilityUIElement::allAttributes): Ditto.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::parameterizedAttributeNames): Ditto.
        (WTR::AccessibilityUIElement::role): Ditto.
        (WTR::AccessibilityUIElement::subrole): Ditto.
        (WTR::AccessibilityUIElement::roleDescription): Ditto.
        (WTR::AccessibilityUIElement::computedRoleString): Ditto.
        (WTR::AccessibilityUIElement::title): Ditto.
        (WTR::AccessibilityUIElement::orientation const): Ditto.
        (WTR::AccessibilityUIElement::language): Ditto.
        (WTR::AccessibilityUIElement::valueDescription): Ditto.
        (WTR::AccessibilityUIElement::ariaDropEffects const): Ditto.
        (WTR::AccessibilityUIElement::boundsForRange): Ditto.
        (WTR::AccessibilityUIElement::stringForRange): Removed unneeded null check.
        (WTR::AccessibilityUIElement::attributedStringForRange): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::attributesOfRowHeaders): Ditto.
        (WTR::AccessibilityUIElement::attributesOfColumns): Ditto.
        (WTR::AccessibilityUIElement::attributesOfRows): Ditto.
        (WTR::AccessibilityUIElement::attributesOfVisibleCells): Ditto.
        (WTR::AccessibilityUIElement::attributesOfHeader): Ditto.
        (WTR::AccessibilityUIElement::selectedTextRange): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Ditto.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::AccessibilityUIElement::stringForSelection): Removed unneeded
        null check.
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        Use createEmptyJSString, fixing a storage leak due to missing adoption.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.h:
        Use JSRetainPtr for the return value of createJSStringRef.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityCommonMac.mm:
        (-[NSString createJSStringRef]): Ditto.
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria): Use the
        adopt function instead of the adopt constructor.
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::platformName): Ditto

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        (-[NSString createJSStringRef]): Return a JSRetainPtr.
        (makeValueRefForValue): Updated for above by removing adopt.
        (makeObjectRefForDictionary): Ditto.
        (-[AccessibilityNotificationHandler _notificationReceived:]): Ditto.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::createEmptyJSString): Added. This helper function makes reduces the
        repetitive code to create empty strings.
        (WTR::concatenateAttributeAndValue): Return a JSRetainPtr.
        (WTR::descriptionOfElements): Ditto.
        (WTR::selectTextParameterizedAttributeForCriteria): Ditto.
        (WTR::AccessibilityUIElement::accessibilityValue const): Use createEmptyJSString,
        fixing a storage leak due to missing adoption.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::createJSStringRef): Return a JSRetainPtr.

        * WebKitTestRunner/StringFunctions.h:
        (WTR::toWK): Take a const& to eliminate a little bit of reference count churn.
        (WTR::toJS): Use the adopt function instead of the constructor.

2018-09-14  Dean Jackson  <dino@grorg.org>

        Add Justin Michaud.

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

2018-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        bots should pass --clobber-old-results to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=189623

        Reviewed by Aakash Jain.

        In order to ensure that bots to not produce confusing results due to transient execptions,
        or run out of space if they continually hit an exception, old layout test results should be clobbered.

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

2018-09-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235954.

        Breaks the watchOS build.

        Reverted changeset:

        "Move IndexedDB to Network Process"
        https://bugs.webkit.org/show_bug.cgi?id=189415
        https://trac.webkit.org/changeset/235954

2018-09-13  Daniel Bates  <dabates@apple.com>

        Add Copy WebKit Permalink plugin for Sublime Text
        https://bugs.webkit.org/show_bug.cgi?id=189589

        Rubber-stamped by Joseph Pecoraro.

        Port the Copy WebKit Permalink Automator service to a Sublime Text plugin. Once installed you can
        use the plugin to copy to the Clipboard a trac.webkit.org hyperlink to the selected line in the
        active document with or without blame annotations.

        Once installed, you can Control-click (on Mac) or right-click (on Windows and Linux) on a line and
        choose Copy WebKit Permalink or Copy WebKit Permalink to Blame from the context menu to copy to the
        Clipboard a permanent hyperlink to the selected line without or with blame annotations, respectively.
        On Mac you can also invoke the same functionality using the keyboard shortcuts Command + Shift + Control + C
        and Command + Shift + Control + Option + C, respectively.

        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Context.sublime-menu: Added.
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/CopyWebKitPermalink.py: Added.
        * CopyPermalink/Sublime Text/CopyWebKitPermalink/Default (OSX).sublime-keymap: Added.
        * CopyPermalink/Sublime Text/INSTALL: Added.
        * CopyPermalink/Xcode/Copy WebKit Permalink.workflow/Contents/Info.plist: Renamed from Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/Info.plist.
        * CopyPermalink/Xcode/Copy WebKit Permalink.workflow/Contents/document.wflow: Renamed from Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow.
        * CopyPermalink/Xcode/INSTALL: Renamed from Tools/CopyPermalink/README.

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

        Unreviewed. Fix WebDriver tests after r235225.

        Use wpt serve command to run the http server.

        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer.__init__):
        (WebDriverW3CWebServer.start):
        (WebDriverW3CWebServer.stop):

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

        [GTK][WPE] Allow to run script dialogs asynchronously in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=189544

        Reviewed by Michael Catanzaro.

        Add test cases for the new API.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][ImageDiff] Fix compilation error and warning of PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189496
        <rdar://problem/44370981>

        Unreviewed warning fix.

        r235929 has introduced a new compilation warning:
        > Tools/ImageDiff/cairo/PlatformImageCairo.cpp:34:70: warning: unused parameter ‘imageSize’ [-Wunused-parameter]

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin): Removed the variable name.

2018-09-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Complete support for Paste as Quotation
        https://bugs.webkit.org/show_bug.cgi?id=189504

        Reviewed by Wenson Hsieh.

        * MiniBrowser/mac/MainMenu.xib: Added a Paste as Quotation command in the Edit menu.

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

        Move IndexedDB to Network Process
        https://bugs.webkit.org/show_bug.cgi?id=189415

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
        (TEST):

2018-09-12  Chris Dumez  <cdumez@apple.com>

        PSON: No process swap on back navigation after URL bar navigation
        https://bugs.webkit.org/show_bug.cgi?id=189557
        <rdar://problem/44353108>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

2018-09-11  Dean Jackson  <dino@apple.com>

        Header parsing for experimental and internal debug features
        https://bugs.webkit.org/show_bug.cgi?id=189486
        <rdar://problem/44320618>

        Reviewed by Tim Horton.

        Keep track of experimental and internal debug features in TestOptions, and
        allow webkit-test-runner headers to toggle them by name.

        * DumpRenderTree/TestOptions.cpp:
        (TestOptions::TestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2018-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][DumpRenderTree] 0 and nullptr can't be implicitly converted to AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=189492

        Reviewed by Alex Christensen.

        0 and nullptr can't be implicitly converted to
        AccessibilityUIElement because only Windows port typedefs
        PlatformUIElement as COMPtr<IAccessible> not a pointer.

        Replaced "return 0" and "return nullptr" with "return { nullptr }".

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::horizontalScrollbar const):
        (AccessibilityUIElement::verticalScrollbar const):
        (AccessibilityUIElement::uiElementAttributeValue const):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::accessibleElementById):
        (AccessibilityController::focusedElement):
        (AccessibilityController::rootElement):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::selectedChildAtIndex const):

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

        FontManagerTests.ChangeFontColorWithColorPanel fails on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=189382

        Reviewed by Ryosuke Niwa.

        Fix the test by specifying colors in RGB colorspace.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (TestWebKitAPI::TEST):

2018-09-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][ImageDiff] Fix compilation error and warning of PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=189496

        Reviewed by Alex Christensen.

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin): Removed unnecessary ReadContext struct.
        (ImageDiff::PlatformImage::writeAsPNGToStdout): Use '%lu' format type specifier for unsigned long.

2018-09-07  Dean Jackson  <dino@apple.com>

        Add and expose Internal features from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189442
        <rdar://problem/44243404>

        Reviewed by Simon Fraser.

        Update MiniBrowser to expose an Internal feature menu.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration):
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleExperimentalFeature:]):
        (-[SettingsController toggleInternalDebugFeature:]):

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

        [macOS] [WK2] Support changing foreground colors via color panel
        https://bugs.webkit.org/show_bug.cgi?id=189382
        <rdar://problem/44227311>

        Reviewed by Ryosuke Niwa.

        Add an API test that uses NSColorPanel to change the color of selected text, and also apply typing styles when
        the selection is collapsed. The test also exercises switching between opaque colors (alpha = 1) and transparent
        colors, as well as making different parts of a word different colors.

        * TestWebKitAPI/Tests/mac/FontManagerTests.mm:
        (-[TestWKWebView collapseToEnd]):
        (webViewForFontManagerTesting):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

== Rolled over to ChangeLog-2018-09-11 ==
