2017-12-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][CMake] Use add_custom_command to copy each forwarding header files
        https://bugs.webkit.org/show_bug.cgi?id=180921

        Reviewed by Brent Fulgham.

        TestWTFLib needs forwarding headers of WebCore. Use
        add_dependencies instead of invoking the DerivedSources/WebCore/preBuild.cmd.

        * TestWebKitAPI/PlatformWin.cmake:

2017-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the Sierra build again after r226277.

        The macOS 10.12 SDK does not know about NSControlStateValue. Apply the same tweak in r226279, but to MiniBrowser
        this time.

        * MiniBrowser/AppKitCompatibilityDeclarations.h:

2017-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix build failures due to using deprecated AppKit symbols
        https://bugs.webkit.org/show_bug.cgi?id=181110
        <rdar://problem/36162865>

        Reviewed by Dan Bernstein and Tim Horton.

        Transition to non-deprecated AppKit constants in MiniBrowser.

        * MiniBrowser/AppKitCompatibilityDeclarations.h: Added.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController validateMenuItem:]):
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):

2017-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Deprecate and replace webkit_form_submission_request_get_text_fields
        https://bugs.webkit.org/show_bug.cgi?id=176725

        Reviewed by Carlos Garcia Campos.

        Test the new function.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewSubmitForm):

2017-12-22  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Refactor simulator code (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=180555
        <rdar://problem/36131381>

        Reviewed by Alexey Proskuryakov.

        The new SimulatedDeviceManager defined in this patch is designed to
        act as a singleton. Consumers may request devices with certain
        attributes, the the manager will then return a list of devices fulfilling the
        request. The manager will pick between:
                - Existing and booted simulators
                - Existing simulators currently shut down
                - Custom constructed simulators
        These simulators will then be globally available.

        This patch duplicates code in webkitpy/xcode/simulated_device.py,
        webkitpy/xcode/simulator.py and webkitpy/port/ios_simulator.py. This duplicated
        code will be removed in parts 2 and 3.

        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.__init__): Add tvOS and watchOS.
        * Scripts/webkitpy/xcode/device_type.py: Added.
        (DeviceType): Holds the software and hardware information for a specific device.
        Designed to allow for partial matching.
        (DeviceType.from_string): Parses a string (such as iPhone 6s) into a DeviceType
        object.
        (DeviceType._define_software_variant_from_hardware_family): The software_variant
        of a device can usually be implied from its hardware_family.
        (DeviceType.check_consistency): Verify that the software_variant matches the
        hardware_family and that software_version and hardware_variant have their
        respective prerequisites.
        (DeviceType.__init__):
        (DeviceType.__str__): Converts a DeviceType object into a human readable string.
        (DeviceType.__eq__): Compares two DeviceType objects treating None as a wildcard.
        (DeviceType.__contains__): Allow partial version mapping.
        * Scripts/webkitpy/xcode/device_type_unittest.py: Added.
        (DeviceTypeTest):
        (DeviceTypeTest.test_iphone_initialization):
        (DeviceTypeTest.test_ipad_initialization):
        (DeviceTypeTest.test_generic_ios_device):
        (DeviceTypeTest.test_watch_initialization):
        (DeviceTypeTest.test_tv_initialization):
        (DeviceTypeTest.test_from_string):
        (DeviceTypeTest.test_comparison):
        (DeviceTypeTest.test_contained_in):
        * Scripts/webkitpy/xcode/new_simulated_device.py: Added.
        (DeviceRequest): Adds additional options to be used when requesting a device.
        (DeviceRequest.__init__):
        (SimulatedDeviceManager):
        (SimulatedDeviceManager.Runtime): Representation of a supported simulated runtime.
        Designed as an internal representation, not to be used outside this class.
        (SimulatedDeviceManager.Runtime.__init__):
        (SimulatedDeviceManager._create_runtimes): Extract a list of available runtimes.
        (SimulatedDeviceManager._create_device_with_runtime): Return a new or existing device
        with the provided runtime matching the provided dictionary.
        (SimulatedDeviceManager.populate_available_devices): Use simctl to update the list of devices
        available on this machine.
        (SimulatedDeviceManager.available_devices): Populate the list of available device if empty
        and return that list.
        (SimulatedDeviceManager._find_exisiting_device_for_request): Return an existing device matching
        the provided request if one exists.
        (SimulatedDeviceManager._find_available_name): Given a name base, return a string which
        does not match the name of an initialized device.
        (SimulatedDeviceManager. get_runtime_for_device_type): Map device type to runtime object.
        (SimulatedDeviceManager._disambiguate_device_type): The user may have requested a DeviceType
        with only partial definitions. In this case, use existing runtimes and devices to generate
        a DeviceType to build.
        (SimulatedDeviceManager._get_device_identifier_for_type): Return a simctl device type string
        given a DeviceType object.
        (SimulatedDeviceManager._create_or_find_device_for_request): Given a DeviceRequest object,
        either find an existing device which matches the request or create one matching
        (SimulatedDeviceManager._does_fulfill_request): Given a device and list of requests, return
        the request which the provided device matches, if there are any.
        (SimulatedDeviceManager._wait_until_device_in_state): Wait until a device enters a specific
        state.
        (SimulatedDeviceManager.initialize_devices): Given a list of requests, return a list
        of devices which fulfill the requests. This function will use both existing devices
        and create devices. This function will also start the Simulator.app.
        (SimulatedDeviceManager.max_supported_simulators): Uses the number of available cores,
        maximum number of processes and the available RAM to calculate the number of
        simulated devices this machine can support.
        (SimulatorManager.swap): Shuts down the specified device and boots a new one which
        matches the specified request.
        (SimulatorManager.tear_down): Shut down any simulators managed by this class.
        (SimulatedDevice):
        (SimulatedDevice.DeviceState): Copied from webkitpy/xcode/simulator.py.
        (SimulatedDevice.__init__):
        (SimulatedDevice.state): Use the device's plist to determine the current state of
        the device. Note that this function will cache the result for a second.
        (SimulatedDevice.is_booted_or_booting):
        (SimulatedDevice._shut_down): Shut down this device and remove it from the list of
        initialized devices.
        (SimulatedDevice._delete): Delete this device and remove it from the list of
        available devices.
        (SimulatedDevice._tear_down): Shut down and delete this device, if it is managed by
        the SimulatorManager.
        (SimulatedDevice.install_app): Copied from webkitpy/xcode/simulated_device.py.
        (SimulatedDevice.launch_app): Ditto.
        (SimulatedDevice.__eq__): Ditto.
        (SimulatedDevice.__ne__): Ditto.
        (SimulatedDevice.__repr__): Map state to string and include device type.
        * Scripts/webkitpy/xcode/new_simulated_device_unittest.py: Added.
        (SimulatedDeviceTest):
        (SimulatedDeviceTest.reset_simulated_device_manager):
        (SimulatedDeviceTest.tear_down):
        (SimulatedDeviceTest.mock_host_for_simctl):
        (device_by_criteria):
        (test_available_devices):
        (test_existing_simulator):
        (change_state_to):
        (test_swapping_devices):

2017-12-21  Ling Ho <lingcherd_ho@apple.com>

        "Release 32-bit Build EWS" queue should be moved up to macOS High Sierra on Bot Watcher's Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=181071

        Reviewed by Alexey Proskuryakov.


2017-12-21  Mark Lam  <mark.lam@apple.com>

        Add WTF::PoisonedUniquePtr to replace std::unique_ptr when poisoning is desired.
        https://bugs.webkit.org/show_bug.cgi?id=181062
        <rdar://problem/36167040>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WTF/ConstExprPoisoned.cpp:
        - Removed an unneeded #include.

        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtr.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::poisonedPtrFoo):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForNonTriviallyDestructibleArrays.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedUniquePtrForTriviallyDestructibleArrays.cpp: Added.
        (TestWebKitAPI::TEST):

2017-12-21  Jeremy Jones  <jeremyj@apple.com>

        Update FULLSCREEN_API feature defines.
        https://bugs.webkit.org/show_bug.cgi?id=181015

        Reviewed by Tim Horton.

        Change enabled iphone sdk for FULLSCREEN_API.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-12-21  Don Olmstead  <don.olmstead@sony.com>

        [AppleWin] Auxiliary libraries should be updated within build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=181065

        Reviewed by Alex Christensen.

        * EWSTools/Start-Queue.ps1:
        * Scripts/build-webkit:
        (cMakeArgsFromFeatures): Deleted.
        (writeCongrats): Deleted.
        * Scripts/update-webkit:

2017-12-21  Jer Noble  <jer.noble@apple.com>

        Add initial DOM support for Media Capabilities
        https://bugs.webkit.org/show_bug.cgi?id=181064

        Reviewed by Eric Carlson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-12-21  Guillaume Emont  <guijemont@igalia.com>

        build-jsc: allow to build out of tree
        https://bugs.webkit.org/show_bug.cgi?id=180810

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/build-jsc:

2017-12-20  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: simctl cannot handle partial runtime version matches
        https://bugs.webkit.org/show_bug.cgi?id=181055
        <rdar://problem/36163798>

        Reviewed by Alexey Proskuryakov.

        A request for a simulator runtime of iOS 11 should be fulfilled by
        iOS 11.0.1.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.runtime): Allow for partial matching of iOS runtime versions.
        * Scripts/webkitpy/xcode/simulator_unittest.py:
        (test_failed_partial_version_match): Test that partial version mapping does
        not give false positives.

2017-12-20  Daniel Bates  <dabates@apple.com>

        MarkerSubrange.SubdivideGrammarAndSelectionOverlap{Frontmost, FrontmostWithLongestEffectiveRange} are failing
        https://bugs.webkit.org/show_bug.cgi?id=181014

        Reviewed by Simon Fraser.

        Adds a new test to ensure we compute overlapping subranges in paint order for the default
        overlap strategy. Enable tests MarkerSubrange.SubdivideGrammarAndSelectionOverlap{Frontmost, FrontmostWithLongestEffectiveRange}
        now that they pass.

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

2017-12-20  Daniel Bates  <dabates@apple.com>

        Remove Alternative Presentation Button
        https://bugs.webkit.org/show_bug.cgi?id=180500
        <rdar://problem/35891047>

        Reviewed by Simon Fraser.

        We no longer need the alternative presentation button.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ClickAlternativePresentationButton.mm: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (-[AlternativePresentationButtonDelegate _webView:didClickAlternativePresentationButtonWithUserInfo:]): Deleted.
        (-[AlternativePresentationButtonDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): Deleted.

2017-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r222699): Drag & drop from a web page to Gmail fails
        https://bugs.webkit.org/show_bug.cgi?id=181019

        Reviewed by Wenson Hsieh.

        Added assertions for filenames.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:

2017-12-19  Daniel Bates  <dabates@apple.com>

        MarkerSubrange.SubdivideGrammarAndSelectionOverlap{Frontmost, FrontmostWithLongestEffectiveRange} are failing
        https://bugs.webkit.org/show_bug.cgi?id=181014

        Temporarily disable tests while I investigate offline.

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

2017-12-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rebaseline an API test result for El Capitan and Sierra.

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

2017-12-19  Ryosuke Niwa  <rniwa@webkit.org>

        Don't convert pasted content to use blob URL in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=180969

        Reviewed by Wenson Hsieh.

        Added API tests to make sure we can access the images in the pasted content.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/paste-rtfd.html:
        * TestWebKitAPI/Tests/WebKitLegacy/mac: Added.
        * TestWebKitAPI/Tests/WebKitLegacy/mac/AccessingPastedImage.mm: Added.
        (writeRTFDToPasteboard):
        (-[SubresourceForBlobURLFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (-[SubresourceForBlobURLFrameLoadDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (TestWebKitAPI::TEST):

2017-12-19  Daniel Bates  <dabates@apple.com>

        Implement InlineTextBox painting using marker subranges
        https://bugs.webkit.org/show_bug.cgi?id=180984
        <rdar://problem/36139364>

        Reviewed by David Hyatt.

        Update unit tests now that we use subranges for the painting of dragged content.

        * TestWebKitAPI/Tests/WebCore/MarkerSubrange.cpp:
        (WebCore::operator<<):
        (WebCore::operator==): Deleted; moved to class MarkerSubrange.

2017-12-19  Daniel Bates  <dabates@apple.com>

        Add support for computing the frontmost longest effective marker subrange
        https://bugs.webkit.org/show_bug.cgi?id=180985

        Reviewed by Dave Hyatt.

        Adds a test case to ensure that we compute the minimum list of maximal length non-
        overlapping subranges when using strategy OverlapStrategy::FrontmostWithLongestEffectiveRange.

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

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] The 'webkitattachmentbloburl' attribute should not persist after markup serialization
        https://bugs.webkit.org/show_bug.cgi?id=180924
        <rdar://problem/36099093>

        Reviewed by Tim Horton.

        Tweaks some existing tests to check that temporary attachment serialization attributes don't stick around on the
        attachment elements.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView hasAttribute:forQuerySelector:]):
        (TestWebKitAPI::TEST):

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support representing pasted or dropped content using attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=180892
        <rdar://problem/36064210>

        Reviewed by Tim Horton.

        Adds a new API test to exercise pasting an attributed string with multiple attachments of different types.

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

2017-12-18  Brady Eidson  <beidson@apple.com>

        Add ability to API test Service Workers via a custom protocol.
        https://bugs.webkit.org/show_bug.cgi?id=180911

        Reviewed by Chris Dumez.

        Adds a very basic SW test:
        - Verify WebsiteDataStore can wipe all SW registration data.
        - Fire up a web page with a service worker
        - Verify SW registration data for that page exists in the WebsiteDataStore.

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

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Insert images as inline attachments when pasting and dropping
        https://bugs.webkit.org/show_bug.cgi?id=180853
        <rdar://problem/35756268>

        Reviewed by Tim Horton.

        Adds new WKAttachment API tests and test support. See comments below for more detail.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:

        Tweak the editing test page markup, such that document.body.innerHTML doesn't additionally contain the contents
        of the script tag.

        (webViewForTestingAttachments):
        (testImageFileURL):
        (testImageData):
        (testPDFFileURL):
        (testPDFData):
        (platformCopyRichTextWithAttachment):
        (platformCopyPNG):
        (platformImageWithData):

        Add some platform helper functions, which some of the platform-agnostic tests below use to resolve differences
        between iOS and macOS when writing to the pasteboard and creating an image from data.

        (TestWebKitAPI::TEST):

        Add new API tests to exercise drag and drop/copy and paste of rich content (namely, images and files) on iOS and
        macOS. iOS attachment tests use DataInteractionSimulator to simulate UIKit drag and drop coordination. On macOS,
        handling of dropped content is much closer to handling of pasted content (they use the same codepaths to read
        from the platform pasteboard), so exercising paste codepaths on Mac is sufficient.

        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator insertedAttachments]):
        (-[DataInteractionSimulator removedAttachments]):

        Teach the iOS drag and drop simulator to keep track of attachment elements that are inserted during a drop. We
        also keep track of removed attachments here too, though no default drop handling scenario should trigger
        attachment removal, so we simply use this to check that no _WKAttachments were removed during a drop.

        (-[DataInteractionSimulator _webView:didInsertAttachment:]):
        (-[DataInteractionSimulator _webView:didRemoveAttachment:]):

2017-12-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Move the destination of WinCairoRequirements.zip into WebKitLibraries and register it and related files as git ignore files.
        https://bugs.webkit.org/show_bug.cgi?id=180875
        <rdar://problem/36091434>

        Reviewed by Darin Adler.

        update-webkit-wincairo-libs.py gets broken by r226002. Downloaded
        WinCairoRequirements.zip can not be found to unzip because the
        destination was changed.

        * Scripts/update-webkit-wincairo-libs.py: Specify the correct zip path to unzip.

2017-12-18  Alexey Proskuryakov  <ap@apple.com>

        BitVector::OutOfLineBits is always reported as a leak
        https://bugs.webkit.org/show_bug.cgi?id=121662

        Adding one more signature to ignore list.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):

2017-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add WebKitWebView::web-process-terminated signal and deprecate web-process-crashed
        https://bugs.webkit.org/show_bug.cgi?id=180862

        Reviewed by Michael Catanzaro.

        Use WebKitWebView::web-process-terminated instead of web-process-crashed in tests. I'm not adding a test for
        WEBKIT_WEB_PROCESS_EXCEEDED_MEMORY_LIMIT because we would need to allocate more than 1GB in the test and wait
        30 seconds, and we don't want to do either in unit tests.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (webProcessTerminatedCallback):
        (testWebKitWebViewProcessCrashed):
        (webProcessCrashedCallback): Deleted.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        (WebViewTest::webProcessTerminated):
        (WebViewTest::webProcessCrashed): Deleted.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2017-12-17  Mark Lam  <mark.lam@apple.com>

        Enhance Ref and RefPtr to be able to work with smart pointers.
        https://bugs.webkit.org/show_bug.cgi?id=180762
        <rdar://problem/36027122>

        Reviewed by JF Bastien and Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ConstExprPoisoned.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/PoisonedRef.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::passWithRef):
        (TestWebKitAPI::PoisonedRefCheckingRefLogger::PoisonedRefCheckingRefLogger):
        (TestWebKitAPI::PoisonedRefCheckingRefLogger::ref):
        (TestWebKitAPI::PoisonedRefCheckingRefLogger::deref):
        (TestWebKitAPI::DerivedPoisonedRefCheckingRefLogger::DerivedPoisonedRefCheckingRefLogger):
        * TestWebKitAPI/Tests/WTF/PoisonedRefPtr.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::f1):
        (TestWebKitAPI::ConstRefCounted::create):
        (TestWebKitAPI::returnConstRefCountedRef):
        (TestWebKitAPI::returnRefCountedRef):
        (TestWebKitAPI::PoisonedRefPtrCheckingRefLogger::PoisonedRefPtrCheckingRefLogger):
        (TestWebKitAPI::loggerName):
        (TestWebKitAPI::PoisonedRefPtrCheckingRefLogger::ref):
        (TestWebKitAPI::PoisonedRefPtrCheckingRefLogger::deref):

2017-12-16  Youenn Fablet  <youenn@apple.com>

        Add a script to automate W3c web-platform-tests pull request creations from WebKit commits
        https://bugs.webkit.org/show_bug.cgi?id=169462

        Reviewed by Darin Adler.

        Adding some git helper routines used by WPT exporter.
        Copying WPT github utility files from Chromium.
        Updating web.py/web_mock.py to cope with these new files.

        Implementing test exporter in test_exporter.py.
        This script takes a WebKit commit as input and will create a WPT commit in a local WPT clone.
        It will then push the commit to a public GitHub repository identified by a username parameter.
        This parameter is passed through the command line or searched through git config/environment variables.

        The script can optionally create a pull request to the official WPT GitHub repository.
        User must provide a GitHub token to allow the script to make the PR on behalf of the user.
        In that case, a comment is added to the corresponding bugzilla if a bug ID is given or can be found from the change log,
        to easily link the pull request with the bugzilla bug.

        * Scripts/export-w3c-test-changes: Added.
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.reset_hard):
        (Git):
        (Git.am):
        (Git.commit):
        (Git.format_patch):
        (Git.request_pull):
        (Git.remote):
        (Git.push):
        (Git.checkout_new_branch):
        * Scripts/webkitpy/common/net/web.py:
        (Web.request): Copied from Chromium.
        * Scripts/webkitpy/common/net/web_mock.py: Copied needed code from Chromium.
        * Scripts/webkitpy/w3c/test_exporter.py: Added.
        (TestExporter):
        (TestExporter.__init__):
        (TestExporter._init_repository):
        (TestExporter.download_and_commit_patch):
        (TestExporter.clean):
        (TestExporter.create_branch_with_patch):
        (TestExporter.push_to_public_repository):
        (TestExporter.make_pull_request):
        (TestExporter.delete_local_branch):
        (TestExporter.create_git_patch):
        (TestExporter.create_upload_remote_if_needed):
        (TestExporter.do_export):
        (parse_args):
        (configure_logging):
        (configure_logging.LogHandler):
        (configure_logging.LogHandler.format):
        (main):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py: Added.
        (TestExporterTest):
        (TestExporterTest.MockBugzilla):
        (TestExporterTest.MockBugzilla.__init__):
        (TestExporterTest.MockBugzilla.fetch_bug_dictionary):
        (TestExporterTest.MockBugzilla.post_comment_to_bug):
        (TestExporterTest.MockGit):
        (TestExporterTest.MockGit.clone):
        (TestExporterTest.MockGit.__init__):
        (TestExporterTest.MockGit.fetch):
        (TestExporterTest.MockGit.checkout):
        (TestExporterTest.MockGit.reset_hard):
        (TestExporterTest.MockGit.push):
        (TestExporterTest.MockGit.format_patch):
        (TestExporterTest.MockGit.delete_branch):
        (TestExporterTest.MockGit.checkout_new_branch):
        (TestExporterTest.MockGit.am):
        (TestExporterTest.MockGit.commit):
        (TestExporterTest.MockGit.remote):
        (TestExporterTest.test_export):
        * Scripts/webkitpy/w3c/common.py: Copied from chromium.
        * Scripts/webkitpy/w3c/wpt_github.py: Copied from chromium.
        * Scripts/webkitpy/w3c/wpt_github_mock.py: Copied from chromium.
        * Scripts/webkitpy/w3c/wpt_github_unittest.py: Copied from chromium.

2017-12-16  Dan Bernstein  <mitz@apple.com>

        WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
        https://bugs.webkit.org/show_bug.cgi?id=180613
        <rdar://problem/35946124>

        Reviewed by Geoff Garen.

        * MiniBrowser/mac/MainMenu.xib: Added Always Show {Horizontal,Vertical} Scroller menu items
          to the View menu.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]): Set the state of the new menu items based
          on -alwaysShow{Horizontal,Vertical}Scroller.
        (-[WK1BrowserWindowController toggleAlwaysShowsHorizontalScroller:]): Toggle the value.
        (-[WK1BrowserWindowController toggleAlwaysShowsVerticalScroller:]): Ditto.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]): Set the state of the new menu items based
          on the new property.
        (-[WK2BrowserWindowController toggleAlwaysShowsHorizontalScroller:]): Toggle the property.
        (-[WK2BrowserWindowController toggleAlwaysShowsVerticalScroller:]): Ditto.

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

2017-12-16  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Move the destination of WinCairoRequirements.zip into WebKitLibraries and register it and related files as git ignore files.
        https://bugs.webkit.org/show_bug.cgi?id=180875

        Reviewed by Alex Christensen.

        Bug fix. Specify the download destination correctly.

        * Scripts/update-webkit-wincairo-libs.py:

2017-12-16  Brent Fulgham  <bfulgham@apple.com>

        Plugin processes are repeatedly spun up to do nothing
        https://bugs.webkit.org/show_bug.cgi?id=180885
        <rdar://problem/36082564>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:
        (runTestWithWebsiteDataStore): Check that deleting website data did not
        trigger any plugin processes to start up.

2017-12-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove unnecessary boolean result of start() functions
        https://bugs.webkit.org/show_bug.cgi?id=180856

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:

2017-12-15  David Quesada  <david_quesada@apple.com>

        Unreviewed, adding myself to contributors.json

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

2017-12-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225941.

        This change introduced LayoutTest crashes and assertion
        failures.

        Reverted changeset:

        "Web Inspector: replace HTMLCanvasElement with
        CanvasRenderingContext for instrumentation logic"
        https://bugs.webkit.org/show_bug.cgi?id=180770
        https://trac.webkit.org/changeset/225941

2017-12-15  Alex Christensen  <achristensen@webkit.org>

        Introduce SPI _WKWebsitePolicies.websiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=180880
        <rdar://problem/35535328>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[WebsitePoliciesWebsiteDataStoreDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:startURLSchemeTask:]):
        (-[WebsitePoliciesWebsiteDataStoreDelegate webView:stopURLSchemeTask:]):
        (TEST):

2017-12-15  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        [GTK] Add proxy option to Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=180750

        Reviewed by Michael Catanzaro.

        Add command line option to set proxy settings in GTK minibrowser.

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

2017-12-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [webkitpy, Windows] Remove unnecessary debug message
        https://bugs.webkit.org/show_bug.cgi?id=180844

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_win): Delete debug print

2017-12-14  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: Stop warning about underscores in webrtc source
        <https://webkit.org/b/180848>

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/style/checker.py:
        (_PATH_RULES_SPECIFIER): Suppress readability/naming/underscores
        warnings under Source/ThirdParty/libwebrtc/Source/webrtc.

2017-12-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Replace Version.contained_in with Version.__contains__
        https://bugs.webkit.org/show_bug.cgi?id=180772
        <rdar://problem/36033555>

        Reviewed by David Kilzer.

        Using __contains__ instead of contained_in allows for the more
        Pythonic 'in' operator to be used.

        * Scripts/webkitpy/common/version.py:
        (Version):
        (Version.__contains__): Replace contained_in. Note that self is now
        the container.
        (Version.contained_in): Deleted.
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.to_name):
        * Scripts/webkitpy/common/version_unittest.py:
        (VersionTestCase.test_contained_in):

2017-12-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225931.

        Breaks internal builds.

        Reverted changeset:

        "Fix Mac CMake build"
        https://bugs.webkit.org/show_bug.cgi?id=180835
        https://trac.webkit.org/changeset/225931

2017-12-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: replace HTMLCanvasElement with CanvasRenderingContext for instrumentation logic
        https://bugs.webkit.org/show_bug.cgi?id=180770

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/common/config/watchlist:

2017-12-14  Alexey Proskuryakov  <ap@apple.com>

        Improve leaks detector output
        https://bugs.webkit.org/show_bug.cgi?id=180828

        Reviewed by Joseph Pecoraro.

        Fixing two issues:
        1. run-leaks omits many lines from leaks tool output, making it incompatible with
        other tools. Notably, symbolication cannot be performed.
        2. run-leaks output goes to "run-webkit-tests --debug-rwt-logging" output. This
        makes it much longer than needed, sometimes even overloading buildbot. We don't
        need full output in test log, as separate files are created for each of these.

        * Scripts/run-leaks: Represent each line in leaks output when parsing, and print
        everything except for explicitly excluded leaks. From my testing and reading
        the code, it looks like none of our tools should be broken by this change.

        * Scripts/webkitpy/port/leakdetector.py: I couldn't find a way to run a helper tool
        without dumping all of its output to debug log, so switched to using a file for leaks.

        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v1.0.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-new.pl:
        * Scripts/webkitperl/run-leaks_unittest/run-leaks-report-v2.0-old.pl:
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        Updated tests for new behavior.

2017-12-14  Brady Eidson  <beidson@apple.com>

        REGRESSION (r225789): API tests WKProcessPool.InitialWarmedProcessUsed and WebKit.WebsiteDataStoreCustomPaths are failing.
        https://bugs.webkit.org/show_bug.cgi?id=180722

        Reviewed by Chris Dumez.

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

2017-12-14  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=180835

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        * MiniBrowser/mac/WK1BrowserWindowController.m:

2017-12-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Better name-version mapping (Follow-up fix)
        https://bugs.webkit.org/show_bug.cgi?id=179621
        <rdar://problem/35589585>

        Unreviewed infrastructure fix.

        r225856 caused some undesired logging on Linux and Windows.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.__init__): Use most recent OS release if not on a Mac.
        (MacPort.default_baseline_search_path): Make platform explicit.
        (MacPort.configuration_specifier_macros): Ditto.

2017-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add a common way to run tests with pytest
        https://bugs.webkit.org/show_bug.cgi?id=180800

        Reviewed by Carlos Alberto Lopez Perez.

        We currently use pytestrunner from wpt for w3c tests and our own code for selenium tests. Using the same code
        for both would simplify everything, but also allows us to have a custom results recorder to support other test
        expectations like TIMEOUT. The code to run selenium tests with pytest has been moved to a new file
        pytest_runner.py and made generic to be used also for w3c tests.

        * Scripts/webkitpy/webdriver_tests/pytest_runner.py: Added.
        (TemporaryDirectory):
        (TemporaryDirectory.__enter__):
        (TemporaryDirectory.__exit__):
        (CollectRecorder):
        (CollectRecorder.__init__):
        (CollectRecorder.pytest_collectreport):
        (HarnessResultRecorder):
        (HarnessResultRecorder.__init__):
        (HarnessResultRecorder.pytest_collectreport):
        (SubtestResultRecorder):
        (SubtestResultRecorder.__init__):
        (SubtestResultRecorder.pytest_runtest_logreport):
        (SubtestResultRecorder._was_timeout):
        (SubtestResultRecorder.record_pass):
        (SubtestResultRecorder.record_fail):
        (SubtestResultRecorder.record_error):
        (SubtestResultRecorder.record_skip):
        (SubtestResultRecorder.record):
        (collect):
        (run):
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
        (do_delayed_imports): Import pytest_runner here to avoid cycles.
        (WebDriverSeleniumExecutor.__init__): Save the driver parameter as args member and call do_delayed_imports() if
        needed.
        (WebDriverSeleniumExecutor.collect): Use pytest_runner.
        (WebDriverSeleniumExecutor.run): Ditto.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.print_results): Handle all possible tests results.
        (WebDriverTestRunner.print_results.report): Helper to dump test results.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.run):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.__init__): Do not set PYTEST_TIMEOUT env var.
        (WebDriverTestRunnerW3C._is_test): Fix check for support files.
        (WebDriverTestRunnerW3C.run): Pass the timeout as parameter to WebDriverW3CExecutor.run().
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (do_delayed_imports): Import pytest_runner here to avoid cycles.
        (WebDriverW3CExecutor.__init__): Call do_delayed_imports() if needed.
        (WebDriverW3CExecutor.run): Use pytest_runner.

2017-12-13  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r225864.

        This caused the Layout test step to crash out on Debug testers

        Reverted changeset:

        "REGRESSION (r225789): API tests
        WKProcessPool.InitialWarmedProcessUsed and
        WebKit.WebsiteDataStoreCustomPaths are failing."
        https://bugs.webkit.org/show_bug.cgi?id=180722
        https://trac.webkit.org/changeset/225864

2017-12-13  Youenn Fablet  <youenn@apple.com>

        Update ContentFiltering.LazilyLoadPlatformFrameworks test to account for libwebrtc using VideoProcessing framework
        https://bugs.webkit.org/show_bug.cgi?id=180713
        <rdar://problem/36003031>

        Reviewed by Andy Estes.

        Reenable the check for non High Sierra builds.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):

2017-12-13  Brady Eidson  <beidson@apple.com>

        REGRESSION (r225789): API tests WKProcessPool.InitialWarmedProcessUsed and WebKit.WebsiteDataStoreCustomPaths are failing.
        https://bugs.webkit.org/show_bug.cgi?id=180722

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/InitialWarmedProcessUsed.mm:
        (TEST): Call a new SPI to get the count of WebProcesses hosting WebPages.

2017-12-13  Mark Lam  <mark.lam@apple.com>

        Fill out some Poisoned APIs, fix some bugs, and add some tests.
        https://bugs.webkit.org/show_bug.cgi?id=180724
        <rdar://problem/36006884>

        Reviewed by JF Bastien.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ConstExprPoisoned.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Poisoned.cpp: Added.
        (TestWebKitAPI::initializeTestPoison):
        (TestWebKitAPI::TEST):

2017-12-13  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Better name-version mapping (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=179621
        <rdar://problem/35589585>

        Reviewed by David Kilzer.

        Now that we have a central mapping of version numbers to version names, this
        mapping should be used to compute version names. This patch treats passes versions
        as objects, only mapping them to names when strings are needed.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Store os_version as a version object instead of a string.
        (PlatformInfo.os_version_name): Convert os_version to a string through the VersionNameMap.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.__init__): Store os_version as a version object.
        (MockPlatformInfo.os_version_name): Mirror PlatformInfo.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_real_code): Only Mac and Windows have defined version objects.
        (TestPlatformInfo.test_os_version): Deleted, this behavior is now managed by VersionNameMap.
        * Scripts/webkitpy/common/version.py:
        (Version.__cmp__): Allow a version object to be compared with 'None'.
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.map): Check for the apple_additions VersionNameMap.
        (VersionNameMap.__init__): Add a wincairo mapping, the same as the win mapping.
        * Scripts/webkitpy/common/version_unittest.py:
        (VersionTestCase.test_compare_versions): Test comparing a version object to 'None'.
        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
        (TestConfiguration.__init__): Strip formatting from version name. Note that this object still
        accepts a string because the version string implicitly contains the platform as well.
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py: Win7 should be 7SP0 as
        it is in the VersionNameMap.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort): Replace VERSION_FALLBACK_ORDER with a minimum and maximum version. This is required
        because it may be the case that scripts are aware of more versions than the port actually supports.
        (ApplePort.determine_full_port_name): Use the host operating system to compute the full port name.
        (ApplePort._allowed_versions): Return a list of valid port versions by iterating through the
        VersionNameMap.
        (ApplePort._generate_all_test_configurations): Compute a list of configurations by iterating through
        _allowed_versions and converting each version to a string.
        (ApplePort._apple_baseline_path): Return a layout test expectation directory inside apple_additions.
        (ApplePort._skipped_file_search_paths): Deleted.
        (ApplePort._allowed_port_names): Deleted.
        (ApplePort._future_port_name): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Replace _version string with _os_version object.
        (Port.version_name): Convert version object to string.
        (Port.test_configuration): Pass version string to TestConfiguration.
        (Port.version): Deleted.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.assert_name): Convert an os_version_string to a version object and construct a port.
        * Scripts/webkitpy/port/factory_unittest.py:
        (FactoryTest.test_mac): Replace version strings with version objects.
        (FactoryTest.test_win): Ditto.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._generate_all_test_configurations): Replace _version with version_name().
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.version_name): Both Simulator and device share the same version-name convention.
        (IOSPort._generate_all_test_configurations): Replace _version with version_name().
        (IOSPort.default_baseline_search_path): Use the internal mapping of version names to construct
        apple_additions expectations.
        (IOSPort._apple_additions_path): Deleted.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.ios_version): Return None if no version is defined.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest):
        (IOSDeviceTest.test_layout_test_searchpath_with_apple_additions): Conform with the new mock
        apple_additions.
        (IOSDeviceTest.make_port): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Use Version object over list of version strings.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest):
        (IOSSimulatorTest.make_port): Use iOS 11 as the default version for testing.
        (IOSSimulatorTest.test_layout_test_searchpath_with_apple_additions): Conform with the new
        mock apple_additions.
        * Scripts/webkitpy/port/ios_testcase.py:
        (IOSTest.make_port): Use iOS 11 as the default version for testing.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort.__init__): Use Version object for _os_version.
        (MacPort.default_baseline_search_path): Use the internal mapping of version names to construct
        apple_additions expectations.
        (MacPort.configuration_specifier_macros): Automatically construct macros based on VersionNameMap.
        (MacPort._apple_additions_path): Deleted.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest): Use Version object instead of version string.
        (MacTest.test_version):
        * Scripts/webkitpy/port/port_testcase.py:
        (bind_mock_apple_additions): Add a mock VersionNameMap to mock apple_additions.
        (bind_mock_apple_additions.MockAppleAdditions):
        (bind_mock_apple_additions.MockAppleAdditions.version_name_mapping):
        * Scripts/webkitpy/port/test.py:
        (TestPort):
        (TestPort.__init__): Use VersionNameMap to compute the correct Version from a port name.
        (TestPort.version_name): Mirror Port object.
        (TestPort.baseline_search_path): Replace win7 with 7sp0.
        (TestPort._all_systems): Ditto.
        (TestPort.configuration_specifier_macros): Ditto.
        * Scripts/webkitpy/port/win.py:
        (WinPort):
        (WinPort.__init__): Construct Version object from port name.
        (WinPort.default_baseline_search_path): Use the internal mapping of version names to construct
        apple_additions expectations.
        (WinCairoPort):
        (WinCairoPort.default_baseline_search_path): Use MIN/MAX instead of the VERSION_FALLBACK_ORDER.
        (WinCairoPort._future_port_name): Deleted.
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_baseline_search_path): Add new Windows versions not previously included.
        (WinPortTest._assert_version): Handle expected_version as a Version object.
        (WinPortTest.test_versions): Pass Version objects instead of version strings.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._generate_all_test_configurations): Replace _version with version_name().
        * Scripts/webkitpy/tool/commands/queries_unittest.py:
        (PrintExpectationsTest.test_multiple): Replace win7 with 7sp0.
        (PrintBaselinesTest.test_multiple): Ditto.
        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue._new_port_name_from_old): Use os_version_name() instead of Version object.

2017-12-12  Daniel Bates  <dabates@apple.com>

        [WK] Add modern WebKit SPI to set auto fill button type and query if the auto fill button is enabled
        https://bugs.webkit.org/show_bug.cgi?id=180686

        Reviewed by Alex Christensen.

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

2017-12-12  Alex Christensen  <achristensen@webkit.org>

        Fix possible out-of-bounds read in protocolIsInHTTPFamily
        https://bugs.webkit.org/show_bug.cgi?id=180688

        Reviewed by Daniel Bates.

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

2017-12-12  JF Bastien  <jfbastien@apple.com>

        makeString: support more integral types
        https://bugs.webkit.org/show_bug.cgi?id=180720

        Reviewed by Sam Weinig.

        Test a few more types can be made string'd.

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

2017-12-12  Alicia Boya García  <aboya@igalia.com>

        Flakiness dashboard: Make GTK and WPE builds inherit expectations from WK2
        https://bugs.webkit.org/show_bug.cgi?id=178782

        Reviewed by Michael Catanzaro.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2017-12-12  Jonathan Bedard  <jbedard@apple.com>

        MobileMiniBrowser using the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=180716
        <rdar://problem/36002951>

        Reviewed by Tim Horton.

        Move Debug/Release configurations from xcodeproj into Base.xcconfig.

        * MobileMiniBrowser/Configurations/Base.xcconfig:
        * MobileMiniBrowser/MobileMiniBrowser.xcodeproj/project.pbxproj:

2017-12-12  Youenn Fablet  <youenn@apple.com>

        Update ContentFiltering.LazilyLoadPlatformFrameworks test to account for libwebrtc using VideoProcessing framework
        https://bugs.webkit.org/show_bug.cgi?id=180713

        Reviewed by Andy Estes.

        Temporarily disabling a subcheck until we make the test more robust and/or libwebrtc weak linking VideoProcessing framework.

        * TestWebKitAPI/Tests/WebKitCocoa/ContentFiltering.mm:
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):

2017-12-12  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement BigInt literals and JSBigInt
        https://bugs.webkit.org/show_bug.cgi?id=179000

        Reviewed by Darin Adler and Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2017-12-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Bump GStreamer version to 1.12 in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=171677

        Reviewed by Carlos Garcia Campos.

        Bump gstreamer related modules and rebase patches still needed and not merged

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0003-rtpbin-receive-bundle-support.patch: Removed. This was needed for OpenWebRTC. Not longer supported.
        * gstreamer/patches/gst-plugins-good-0005-souphttpsrc-cookie-jar-and-context-query-support.patch: Rebased.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-add-context-for-a-preferred-protection.patch: Rebased.
        * gstreamer/patches/gst-plugins-good-0008-qtdemux-also-push-buffers-without-encryption-info-in.patch: Rebased.
        * gstreamer/patches/gst-plugins-good-0009-qtdemux-fix-assert-when-moof-contains-one-sample.patch: Added a note about merge commit not still in 1.12.4.

2017-12-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Thread::create should have Thread::tryCreate
        https://bugs.webkit.org/show_bug.cgi?id=180333

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/Signals.cpp:
        (TEST):
        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::testThreadGroup):
        (TestWebKitAPI::TEST):

2017-12-11  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Enable running sharded tests
        https://bugs.webkit.org/show_bug.cgi?id=180660

        Reviewed by Alex Christensen.

        The sharder splits the test inputs into groups of test based on the directory, 
        but separation of base name and directory name was wrong because of this bug.
        Once sharded correctly, the execution of layout test on native Windows environment
        is in parallel and much less time to run.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort):

2017-12-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] DLLLauncherMain should use SetDllDirectory
        https://bugs.webkit.org/show_bug.cgi?id=180642

        Reviewed by Alex Christensen.

        Windows have icuuc.dll in the system directory. WebKit should find
        one in WebKitLibraries directory, not one in the system directory.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (modifyPath): Use SetDllDirectory for WebKitLibraries directory instead of modifying path.
        Do not add a path for GStreamer because nobody is using now.

2017-12-11  David Quesada  <david_quesada@apple.com>

        Turn on ENABLE_APPLICATION_MANIFEST
        https://bugs.webkit.org/show_bug.cgi?id=180562
        rdar://problem/35924737

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:

2017-12-11  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, rolling out r225737.

        Breaks Git clones of the repository, including EWSs and webkitbot.

        Reverted changeset:

        "Add a script to automate W3c web-platform-tests pull request
        creations from WebKit commits"
        https://bugs.webkit.org/show_bug.cgi?id=169462
        https://trac.webkit.org/changeset/225737

2017-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: run-webdriver-tests is leaking a DumpRenderTree directory in tmp
        https://bugs.webkit.org/show_bug.cgi?id=180426

        Reviewed by Michael Catanzaro.

        This happens when running the tests with Xvfb driver, because _setup_environ_for_test() is called twice and the
        DTR temp directory is created there every time. Only the last directory created is cleaned up by the driver
        destructor. The DRT temp directory is only needed for layout tests, so we could even avoid its creation by
        moving it to the start() method like other drivers do (included the base driver implementation). Since API and
        WebDriver tests don't call start(), the directory is not even created, and the required env vars are not set
        either in that case. Weston driver was behaving differently for some reason, it's now consistent with all other
        drivers.

        * Scripts/webkitpy/port/headlessdriver.py:
        (HeadlessDriver._setup_environ_for_test): Do not set DUMPRENDERTREE_TEMP and XDG_CACHE_HOME if _driver_tempdir is None.
        (HeadlessDriver._start): Use Port._driver_tempdir() to create the driver temp directory.
        * Scripts/webkitpy/port/waylanddriver.py:
        (WaylandDriver._setup_environ_for_test): Do not set DUMPRENDERTREE_TEMP and XDG_CACHE_HOME if _driver_tempdir is None.
        (WaylandDriver._start): Use Port._driver_tempdir() to create the driver temp directory.
        * Scripts/webkitpy/port/westondriver.py:
        (WestonDriver._setup_environ_for_test): Do not set DUMPRENDERTREE_TEMP and XDG_CACHE_HOME if _driver_tempdir is None.
        (WestonDriver._start): Use Port._driver_tempdir() to create the driver temp directory.
        (WestonDriver.stop): Do not delete the temp directory, it's done by the parent class.
        (WestonDriver._ensure_driver_tmpdir_subdirectory): Deleted.
        * Scripts/webkitpy/port/westondriver_unittest.py:
        (WestonDriverTest.make_driver):
        (WestonDriverTest.test_stop):
        * Scripts/webkitpy/port/xorgdriver.py:
        (XorgDriver._setup_environ_for_test): Do not set DUMPRENDERTREE_TEMP and XDG_CACHE_HOME if _driver_tempdir is None.
        (XorgDriver._start): Use Port._driver_tempdir() to create the driver temp directory.
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._setup_environ_for_test): Do not set DUMPRENDERTREE_TEMP and XDG_CACHE_HOME if _driver_tempdir is None.
        (XvfbDriver._start): Use Port._driver_tempdir() to create the driver temp directory.

2017-12-10  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed webkitpy fix on Linux platforms after r225721.

        Add an empty 'linux' entry to the PUBLIC_TABLE mapping in the
        VersionNameMap class. This avoids asserting in this class's
        mapping_for_platform() method when the code is evaluated on a Linux
        system, which happens when the static VERSION_FALLBACK_ORDER member in
        the WinCairoPort class is constructed. This can occur during a
        test-webkitpy run or when trying to construct a WPEPort instance in
        PortFactory, which isn't possible because again the WinCairoPort
        instance is constructed first, leading to the same assert in both cases.

        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.__init__):

2017-12-10  Youenn Fablet  <youenn@apple.com>

        Add a script to automate W3c web-platform-tests pull request creations from WebKit commits
        https://bugs.webkit.org/show_bug.cgi?id=169462

        Reviewed by Darin Adler.

        Adding some git helper routines used by WPT exporter.
        Copying WPT github utility files from Chromium.
        Updating web.py/web_mock.py to cope with these new files.

        Implementing test exporter in test_exporter.py.
        This script takes a WebKit commit as input and will create a WPT commit in a local WPT clone.
        It will then push the commit to a public GitHub repository identified by a username parameter.
        This parameter is passed through the command line or searched through git config/environment variables.

        The script can optionally create a pull request to the official WPT GitHub repository.
        User must provide a GitHub token to allow the script to make the PR on behalf of the user.
        In that case, a comment is added to the corresponding bugzilla if a bug ID is given or can be found from the change log,
        to easily link the pull request with the bugzilla bug.

        * Scripts/export-w3c-test-changes: Added.
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.reset_hard):
        (Git):
        (Git.am):
        (Git.commit):
        (Git.format_patch):
        (Git.request_pull):
        (Git.remote):
        (Git.push):
        (Git.checkout_new_branch):
        * Scripts/webkitpy/common/net/web.py:
        (Web.request): Copied from Chromium.
        * Scripts/webkitpy/common/net/web_mock.py: Copied needed code from Chromium.
        * Scripts/webkitpy/w3c/test_exporter.py: Added.
        (TestExporter):
        (TestExporter.__init__):
        (TestExporter._init_repository):
        (TestExporter.download_and_commit_patch):
        (TestExporter.clean):
        (TestExporter.create_branch_with_patch):
        (TestExporter.push_to_public_repository):
        (TestExporter.make_pull_request):
        (TestExporter.delete_local_branch):
        (TestExporter.create_git_patch):
        (TestExporter.create_upload_remote_if_needed):
        (TestExporter.do_export):
        (parse_args):
        (configure_logging):
        (configure_logging.LogHandler):
        (configure_logging.LogHandler.format):
        (main):
        * Scripts/webkitpy/w3c/test_exporter_unittest.py: Added.
        (TestExporterTest):
        (TestExporterTest.MockBugzilla):
        (TestExporterTest.MockBugzilla.__init__):
        (TestExporterTest.MockBugzilla.fetch_bug_dictionary):
        (TestExporterTest.MockBugzilla.post_comment_to_bug):
        (TestExporterTest.MockGit):
        (TestExporterTest.MockGit.clone):
        (TestExporterTest.MockGit.__init__):
        (TestExporterTest.MockGit.fetch):
        (TestExporterTest.MockGit.checkout):
        (TestExporterTest.MockGit.reset_hard):
        (TestExporterTest.MockGit.push):
        (TestExporterTest.MockGit.format_patch):
        (TestExporterTest.MockGit.delete_branch):
        (TestExporterTest.MockGit.checkout_new_branch):
        (TestExporterTest.MockGit.am):
        (TestExporterTest.MockGit.commit):
        (TestExporterTest.MockGit.remote):
        (TestExporterTest.test_export):
        * Scripts/webkitpy/w3c/common.py: Copied from chromium.
        * Scripts/webkitpy/w3c/wpt_github.py: Copied from chromium.
        * Scripts/webkitpy/w3c/wpt_github_mock.py: Copied from chromium.
        * Scripts/webkitpy/w3c/wpt_github_unittest.py: Copied from chromium.

2017-12-10  Konstantin Tokarev  <annulen@yandex.ru>

        [python] Modernize "except" usage for python3 compatibility
        https://bugs.webkit.org/show_bug.cgi?id=180612

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth.py:
        (CommitterAuth.auth_json):
        (CommitterAuth.authenticate):
        (CommitterAuth.is_webkit_committer):
        (CommitterAuth.is_webkit_trac_user):
        * BuildSlaveSupport/wait-for-SVN-server.py:
        (getLatestSVNRevision):
        * QueueStatusServer/handlers/updatebase.py:
        (UpdateBase._int_from_request):
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):
        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.generate_from_js_builtins):
        (BuiltinsGeneratorTests.detect_changes):
        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.parse_latest_entry_from_file):
        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.bug_id_for_this_commit):
        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.in_working_directory):
        (Git.clone):
        (Git._string_to_int_or_none):
        (Git._commit_on_branch):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.revisions_changing_file):
        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList.load_json):
        * Scripts/webkitpy/common/message_pool.py:
        (_Worker.run):
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.force_build.predicate):
        (Builder._fetch_revision_to_build_map):
        (BuildBot._fetch_build_dictionary):
        * Scripts/webkitpy/common/net/credentials.py:
        (Credentials._credentials_from_git):
        * Scripts/webkitpy/common/net/networktransaction.py:
        (NetworkTransaction.run):
        * Scripts/webkitpy/common/net/networktransaction_unittest.py:
        (NetworkTransactionTest.test_exception):
        (NetworkTransactionTest.test_timeout):
        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer._fetch_url):
        * Scripts/webkitpy/common/net/unittestresults.py:
        (UnitTestResults.results_from_string):
        * Scripts/webkitpy/common/prettypatch.py:
        (PrettyPatch.check_pretty_patch):
        (PrettyPatch.pretty_patch_text):
        * Scripts/webkitpy/common/prettypatch_unittest.py:
        (PrettyPatchTest.check_ruby):
        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._extract_tar):
        (AutoInstaller._unzip):
        (AutoInstaller._replace_domain_with_next_mirror):
        (AutoInstaller._download_to_stream):
        (AutoInstaller.install):
        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_darwin):
        (CrashLogs._find_newest_log_win):
        (CrashLogs._find_all_logs_darwin):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_process):
        (Executive.running_pids):
        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.maybe_make_directory):
        (FileSystem.remove):
        * Scripts/webkitpy/common/system/user.py:
        (User._wait_on_list_response):
        (User.edit):
        (User.page):
        (User.can_open_url):
        * Scripts/webkitpy/common/system/workspace.py:
        (Workspace.create_zip):
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._parse_definition_section):
        * Scripts/webkitpy/common/webkitunittest.py:
        (TestCase._assertRaisesRegexp):
        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.generate_from_json):
        (InspectorGeneratorTests.detect_changes):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder._read_test_names_from_file):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.upload_results):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator.upload_json_files):
        (JSONResultsGenerator._get_archived_json_results):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (MiscTests.test_parse_warning):
        (SemanticTests.test_bad_bugid):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._remove_stale_logs):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._is_running_on_port):
        (HttpServerBase._check_that_all_ports_are_available):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (BaseTest.assert_servers_are_down):
        (BaseTest.assert_servers_are_up):
        (BaseTest.integration_test_server__fails):
        (BaseTest.maybe_make_dir):
        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        (run_server):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket.is_running):
        (PyWebSocket._remove_stale_logs):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_merge_slave_config_json):
        (_merge_outputs_if_needed):
        (_upload_json):
        * Scripts/webkitpy/port/base.py:
        (Port._build_driver):
        (Port._build_image_diff):
        (Port._symbols_string):
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector.count_total_bytes_and_unique_leaks):
        (LeakDetector.check_for_leaks):
        * Scripts/webkitpy/port/leakdetector_valgrind.py:
        (LeakDetectorValgrind._parse_leaks_output):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.reset_preferences):
        (MacPort.stop_helper):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.assert_servers_are_down):
        (PortTestCase.assert_servers_are_up):
        (PortTestCase.integration_test_http_server__fails):
        (PortTestCase.integration_test_websocket_server__fails):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.write):
        (ServerProcess._wait_for_data_and_update_buffers_using_select):
        (ServerProcess._non_blocking_read_win32):
        * Scripts/webkitpy/port/win.py:
        (WinPort._runtime_feature_list):
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._xvfb_read_display_id):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONChecker.check):
        * Scripts/webkitpy/style/checkers/xml.py:
        (XMLChecker.check):
        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader.process_file):
        * Scripts/webkitpy/style/filereader_unittest.py:
        (TextFileReaderTest.test_process_file__does_not_exist):
        * Scripts/webkitpy/style/optparser.py:
        (ArgumentParser.parse):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (CreateBug.execute):
        (Rollout.execute):
        * Scripts/webkitpy/tool/bot/ircbot.py:
        (IRCBot.process_message):
        * Scripts/webkitpy/tool/bot/layouttestresultsreader.py:
        (LayoutTestResultsReader._read_file_contents):
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._run_command):
        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.run):
        * Scripts/webkitpy/tool/commands/abstractsequencedcommand.py:
        (AbstractSequencedCommand.execute):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchSequencingCommand._prepare_to_process):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.review_patch):
        * Scripts/webkitpy/tool/commands/queries.py:
        (FailureReason._blame_line_for_revision):
        * Scripts/webkitpy/tool/commands/queues.py:
        (AbstractQueue._cc_watchers):
        (AbstractQueue.run_webkit_patch):
        (CommitQueue.process_work_item):
        (StyleQueue.review_patch):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand._run_webkit_patch):
        * Scripts/webkitpy/tool/commands/stepsequence.py:
        (StepSequence.run_and_handle_errors):
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations._count_recent_patches):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (MultiCommandTool.main):
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (_rebaseline_test):
        (_move_test_baselines):
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng_unittest.py:
        (AddSvnMimetypeForPngTest.test_run):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        (Commit.run):
        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff._show_pretty_diff):
        * Scripts/webkitpy/tool/steps/haslanded.py:
        (HasLanded.diff_diff):
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/promptforbugortitle.py:
        (PromptForBugOrTitle.run):
        * Scripts/webkitpy/tool/steps/sortxcodeprojectfiles.py:
        (SortXcodeProjectFiles.run):
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py:
        (WebDriverW3CWebServer._wait_for_server.check_port):
        * TestResultServer/model/datastorefile.py:
        (DataStoreFile.save_data):
        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available):

2017-12-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix WTF::Hasher tuple expansion with variadic args
        https://bugs.webkit.org/show_bug.cgi?id=180623

        Reviewed by JF Bastien.

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

2017-12-09  Konstantin Tokarev  <annulen@yandex.ru>

        [python] Replace print >> operator with print() function for python3 compatibility
        https://bugs.webkit.org/show_bug.cgi?id=180611

        Reviewed by Michael Catanzaro.

        * CygwinDownloader/cygwin-downloader.py:
        (download_url_to_file):
        * Scripts/webkitpy/common/system/profiler.py:
        (Perf.profile_after_exit):
        * Scripts/webkitpy/common/version_check.py:
        * Scripts/webkitpy/layout_tests/lint_test_expectations.py:
        (main):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main):
        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        (run_server):
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        (ChangeLogAnalyzer._print_status):
        * Scripts/webkitpy/tool/commands/queries.py:
        (BugsToCommit.execute):
        (PatchesInCommitQueue.execute):
        (PatchesToCommitQueue.execute):
        (PatchesToReview._print_report):
        (WhatBroke._print_builder_line):
        (WhatBroke._print_blame_information_for_builder):
        (WhatBroke.execute):
        (ResultsFor._print_layout_test_results):
        (ResultsFor.execute):
        (FailureReason._print_blame_information_for_transition):
        (FailureReason._explain_failures_for_builder):
        (FailureReason._builder_to_explain):
        (FailureReason.execute):
        (FindFlakyTests._find_failures):
        (FindFlakyTests._print_statistics):
        (FindFlakyTests._walk_backwards_from):
        (execute):
        (PrintExpectations.execute):
        (PrintBaselines.execute):
        (PrintBaselines._print_baselines):
        (FindResolvedBugs.execute):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (AbstractParallelRebaselineCommand._run_webkit_patch):
        (AbstractParallelRebaselineCommand._rebaseline):
        * Scripts/webkitpy/tool/servers/gardeningserver.py:
        (GardeningHTTPRequestHandler.rebaselineall):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (GardeningServerTest.disabled_test_rebaselineall.run_command):
        (GardeningServerTest):

2017-12-08  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] The way to detect Windows 10 is wrong
        https://bugs.webkit.org/show_bug.cgi?id=179344
        <rdar://problem/35562264>

        Reviewed by Alex Christensen.

        Python2.7 doesn't return correct information on Windows 10.
        Use platform.win32_ver() instead of sys.getwindowsversion().

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._win_version):
        (PlatformInfo._win_version_str):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (fake_sys):
        (fake_sys.FakeSysModule):
        (fake_platform):
        (fake_platform.FakePlatformModule.win32_ver):
        (TestPlatformInfo.test_os_name_and_wrappers):
        (TestPlatformInfo.test_os_version):
        (TestPlatformInfo.test_display_name):
        (TestPlatformInfo.test_total_bytes_memory):

2017-12-08  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix runtime error after r225229
        https://bugs.webkit.org/show_bug.cgi?id=180614

        Reviewed by Alex Christensen.

        The list of fallback versions doesn't match with version name mapping introduced recently.
        It should be safe by creating the list automatically from the name map for consistency.
 
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.__init__):
        (VersionNameMap.to_name):
        (VersionNameMap.from_name):
        (VersionNameMap):
        (VersionNameMap.names):
        (VersionNameMap.mapping_for_platform):
        * Scripts/webkitpy/port/win.py:
        (WinCairoPort):
        (WinCairoPort.default_baseline_search_path):

2017-12-08  David Quesada  <david_quesada@apple.com>

        ApplicationManifestParser should strip whitespace from the raw input
        https://bugs.webkit.org/show_bug.cgi?id=180539
        rdar://problem/35915075

        Reviewed by Joseph Pecoraro.

        Added an API test for parsing manifests with surrounding whitespace.

        Also drive-by fix ApplicationManifestParserTest.Display. Earlier versions of the
        manifest spec explicitly stated that the "display" value should be treated as if
        it were run through String.prototype.trim(), which allowed for the really weird
        edge case of an array containing one string. This behavior was lost when I changed
        ApplicationManifestParser's JSON parsing from using JavaScriptCore to WTF's JSON
        parsing. Update the unit test accordingly.

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

2017-12-08  Konstantin Tokarev  <annulen@yandex.ru>

        [python] Replace print operator with print() function for python3 compatibility
        https://bugs.webkit.org/show_bug.cgi?id=180592

        Reviewed by Michael Catanzaro.

        * BuildSlaveSupport/wait-for-SVN-server.py:
        (getLatestSVNRevision):
        (waitForSVNRevision):
        * Scripts/download-latest-github-release.py:
        (find_latest_release):
        (main):
        * Scripts/update-wasm-gcc-torture.py:
        (update_lkgr):
        (untar_torture):
        (list_js_files):
        (waterfall_known_failures):
        * Scripts/update-webkit-wincairo-libs.py:
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.show_results):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.fetch_result):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (list_benchmark_plans):
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_from_idl):
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.detect_changes):
        (BindingsTests.run_tests):
        (BindingsTests.main):
        * Scripts/webkitpy/codegen/main.py:
        (BuiltinsGeneratorTests.generate_from_js_builtins):
        (BuiltinsGeneratorTests.detect_changes):
        (BuiltinsGeneratorTests.single_builtin_test):
        (BuiltinsGeneratorTests.run_test):
        (BuiltinsGeneratorTests.run_tests):
        (BuiltinsGeneratorTests.main):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.fetch_attachment):
        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder._fetch_revision_to_build_map):
        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_newest_log_win):
        * Scripts/webkitpy/common/system/outputcapture_unittest.py:
        (OutputCaptureTest.test_output_capture_scope):
        * Scripts/webkitpy/common/system/profiler.py:
        (GooglePProf.profile_after_exit):
        (Perf.profile_after_exit):
        * Scripts/webkitpy/common/system/user.py:
        (User.prompt_with_multiple_lists):
        (User.prompt_with_list):
        (User._warn_if_application_is_xcode):
        (User.edit_changelog):
        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.generate_from_json):
        (InspectorGeneratorTests.detect_changes):
        (InspectorGeneratorTests.run_tests):
        (InspectorGeneratorTests.main):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._print_expectation_line_for_test):
        (Manager._print_expectations_for_subset):
        (Manager._print_expectations_for_subset.if):
        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        (run_server):
        * Scripts/webkitpy/port/config_standalone.py:
        (main):
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_spindump.logging_run_command):
        (DarwinTest.test_sample_process.logging_run_command):
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.clean_up_test_run):
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_spindump.logging_run_command):
        (IOSDeviceTest.test_sample_process.logging_run_command):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_xcrun.throwing_run_command):
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        (test_count_total_bytes_and_unique_leaks.mock_run_script):
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_xcrun.throwing_run_command):
        * Scripts/webkitpy/style/checkers/contributors.py:
        (ContributorsChecker.check):
        * Scripts/webkitpy/tool/commands/abstractlocalservercommand.py:
        (AbstractLocalServerCommand.execute):
        * Scripts/webkitpy/tool/commands/adduserstogroups.py:
        (AddUsersToGroups.execute):
        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        (AnalyzeChangeLog._generate_jsons):
        (AnalyzeChangeLog.execute):
        (ChangeLogAnalyzer._set_filename):
        (ChangeLogAnalyzer.analyze):
        * Scripts/webkitpy/tool/commands/bugfortest.py:
        (BugForTest.execute):
        * Scripts/webkitpy/tool/commands/bugsearch.py:
        (execute):
        * Scripts/webkitpy/tool/commands/findusers.py:
        (FindUsers.execute):
        * Scripts/webkitpy/tool/commands/gardenomatic.py:
        (GardenOMatic.execute):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest.execute):
        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        (RebaselineServer._prepare_config):
        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute):
        (SetupGitClone._get_username_and_email):
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations._print_nominations):
        (SuggestNominations._print_counts):
        * Scripts/webkitpy/tool/commands/upload.py:
        (CommitMessageForCurrentDiff.execute):
        (CreateBug.prompt_for_bug_title_and_comment):
        * Scripts/webkitpy/tool/multicommandtool.py:
        (HelpCommand.execute):
        * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
        (TestGardeningHTTPRequestHandler._serve_text):
        (TestGardeningHTTPRequestHandler._serve_json):
        * Scripts/webkitpy/tool/steps/addsvnmimetypeforpng.py:
        (AddSvnMimetypeForPng.run):
        * Scripts/webkitpy/tool/steps/suggestreviewers.py:
        (SuggestReviewers.run):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.update_tests_options):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
        (WebDriverTestRunnerSelenium.run):
        * TestResultServer/model/jsonresults_unittest.py:
        * gtk/ycm_extra_conf.py:
        (FlagsForFile):
        * lldb/lldb_webkit.py:
        (btjs):

2017-12-08  Eric Carlson  <eric.carlson@apple.com>

        Move Logger from PAL to WTF so it can be used outside of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=180561

        Reviewed by Alex Christensen.

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

2017-12-08  Chris Dumez  <cdumez@apple.com>

        Different WebKitTestRunner instances should use different service worker registrations databases
        https://bugs.webkit.org/show_bug.cgi?id=180589

        Reviewed by Brady Eidson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):

2017-12-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        Tools/ImageDiff/cg/PlatformImageCG.cpp doesn't need to include <wtf/MathExtras.h>
        https://bugs.webkit.org/show_bug.cgi?id=180578

        Reviewed by Konstantin Tokarev.

        * ImageDiff/cg/PlatformImageCG.cpp: Removed unnecessary #include <wtf/MathExtras.h>.

2017-12-08  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix after r225671.

        * WebKitTestRunner/InjectedBundle/wpe/TestRunnerWPE.cpp:
        Include the ActivateFonts.h header to have a usable
        WTR::installFakeHelvetica() function declaration.

2017-12-07  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK+ and WPE build fix.

        Add TestRunner::installFakeHelvetica(), WTR::installFakeHelvetica()
        and WTF::uninstallFakeHelvetica() definitions, filling out the
        declarations added in r225641. This fills up missing symbols in the
        WKTR's InjectedBundle library, unbreaking layout tests for both
        configurations.

        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::installFakeHelvetica):
        (WTR::uninstallFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::inspectorTestStubURL):
        (WTR::TestRunner::installFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp:
        (WTR::installFakeHelvetica):
        (WTR::uninstallFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/wpe/TestRunnerWPE.cpp:
        (WTR::TestRunner::installFakeHelvetica):

2017-12-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use StaticLock instead of NeverDestroyed<Lock>
        https://bugs.webkit.org/show_bug.cgi?id=180507

        Reviewed by Saam Barati.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        (javaScriptThreadsMutex): Deleted.

2017-12-07  Alex Christensen  <achristensen@webkit.org>

        Always synchronously continue with fragment navigations
        https://bugs.webkit.org/show_bug.cgi?id=180544
        <rdar://problem/34815986> and <rdar://problem/35126690>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/DecidePolicyForNavigationAction.mm:
        (-[DecidePolicyForNavigationActionFragmentDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):
        Add a test that verifies that decidePolicyForNavigationAction is called for fragment navigations.

2017-12-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Add SPI to disallow user-installed fonts
        https://bugs.webkit.org/show_bug.cgi?id=180062
        <rdar://problem/35042408>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/InjectedBundle/ActivateFonts.h:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::resetAfterTest):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::resourcesDirectoryURL):
        (WTR::activateFonts):
        (WTR::installFakeHelvetica):
        (WTR::uninstallFakeHelvetica):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::installFakeHelvetica):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/fonts/FakeHelvetica-Helvetica-400.ttf: Added.
        * WebKitTestRunner/fonts/FakeHelvetica-Helvetica-500.ttf: Added.
        * WebKitTestRunner/fonts/FakeHelvetica-Helvetica2-400.ttf: Added.
        * WebKitTestRunner/fonts/FakeHelvetica-Helvetica2-500.ttf: Added.

2017-12-07  David Quesada  <david_quesada@apple.com>

        [Web App Manifest] Support display-mode media feature
        https://bugs.webkit.org/show_bug.cgi?id=180376
        rdar://problem/35837993

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp:
        (WebCore::operator<<):
        (ApplicationManifestParserTest::testDisplay):
        (TEST_F):
            Add unit tests for the parsing of the 'display' manifest property.

        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/display-mode.html: Added.
            Update API tests to include _WKApplicationManifest.displayMode.

        * WebKitTestRunner/TestController.cpp:
        (WTR::parseStringTestHeaderValueAsRelativePath):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):
            Teach WKTR to look for and apply an app manifest. A new <!--webkit-test-runner-->
            directive 'applicationManifest' can specify a path (relative to the test file itself)
            to a JSON app manifest to be applied to the web view before running the test.

2017-12-07  Eric Carlson  <eric.carlson@apple.com>

        Add WebRTC watchlist rule, update MediaStream rule
        https://bugs.webkit.org/show_bug.cgi?id=180536
        <rdar://problem/35914066>

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/common/config/watchlist:

2017-12-06  Chris Dumez  <cdumez@apple.com>

        We should be able to recover after a Service Worker process crash
        https://bugs.webkit.org/show_bug.cgi?id=180477

        Reviewed by Brady Eidson and Youenn Fablet.

        Add testRunner API to terminate the Service Worker process.

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

2017-12-02  Darin Adler  <darin@apple.com>

        Modernize some aspects of text codecs, eliminate WebKit use of strcasecmp
        https://bugs.webkit.org/show_bug.cgi?id=180009

        Reviewed by Alex Christensen.

        * DumpRenderTree/cg/PixelDumpSupportCG.cpp: Removed include of StringExtras.h.

        * TestWebKitAPI/CMakeLists.txt: Added LineEnding.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/LineEnding.cpp: Added. Has tests for the LineEnding
        functions rewritten in this patch.

        * TestWebKitAPI/Tests/WebCore/TextCodec.cpp: Updated test now that the decode
        function doesn't have defaults for as many arguments any more. Also changed so
        that the tests log the fact that the decode function returns an error and updated
        expected results to expect all the errors.

        * WebKitTestRunner/cg/TestInvocationCG.cpp: Ditto.

2017-12-06  Alexey Proskuryakov  <ap@apple.com>

        Exclude another leak callstack.

        * Scripts/webkitpy/port/leakdetector.py: (LeakDetector._callstacks_to_exclude_from_leaks):

2017-12-06  Jeff Miller  <jeffm@apple.com>

        -[WKWebViewConfiguration copyWithZone] doesn't copy _groupIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=180504

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm:
        Add a test to verify that the _groupIdentifier is copied.

2017-12-06  David Quesada  <david_quesada@apple.com>

        [Web App Manifest] Add SPI for fetching the manifest
        https://bugs.webkit.org/show_bug.cgi?id=180294
        rdar://problem/34747968

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ApplicationManifest.mm: Added.
            Added two API tests for _WKApplicationManifest:
            - Testing _WKApplicationManifest's conformance to NSCoding.
            - Testing -[WKWebView _getApplicationManifestWithCompletionHandler:], verifying the
              values of the resulting _WKApplicationManifest.
        (TestWebKitAPI::TEST):

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
            Added a new testRunner method getApplicationManifestThen(), used by the LayoutTests
            to request the document load its associated manifest. The layout tests formerly called
            an unimplemented function getManifestThen(), but I added 'Application' to somewhat
            differentiate this from the app cache manifest.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::getApplicationManifestThen):
        (WTR::TestRunner::didGetApplicationManifest):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2017-12-05  Stephan Szabo  <stephan.szabo@sony.com>

        Switch windows build to Visual Studio 2017
        https://bugs.webkit.org/show_bug.cgi?id=172412

        Reviewed by Per Arne Vollan.

        * Scripts/build-webkit:
        * Scripts/webkitdirs.pm:
        (visualStudioInstallDir):
        (visualStudioInstallDirFallback):
        (msBuildInstallDir):
        (setupAppleWinEnv):
        (setupCygwinEnv):
        (generateBuildSystemFromCMakeProject):
        (pickLegacyVisualStudioInstallation): Deleted.
        (visualStudioInstallDirLegacy): Deleted.
        (visualStudioVersion): Deleted.
        (visualStudioVersionFromInstallDir): Deleted.

2017-12-05  Alex Christensen  <achristensen@webkit.org>

        Fix crash when loading a file URL that does not have a fileSystemPath representation
        https://bugs.webkit.org/show_bug.cgi?id=180448
        <rdar://problem/22805921>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm:
        (TEST):
        Test opening a URL that used to crash WebKit.

2017-12-05  Michael Saboff  <msaboff@apple.com>

        Make WebKit build for ARM64_32
        https://bugs.webkit.org/show_bug.cgi?id=180447

        Reviewed by Mark Lam.

        Add an instance of the _TestWTFAlwaysMissing for arm64_32 architecture.

        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-iOS-v2.tbd:

2017-12-05  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Rename mastercfg_unittest to steps_unittest
        https://bugs.webkit.org/show_bug.cgi?id=180432

        Rubber-stamped by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Removed.
        * BuildSlaveSupport/build.webkit.org-config/steps_unittest.py: Copied from BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py.

2017-12-05  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Fix style issues in mastercfg_unittest.py
        https://bugs.webkit.org/show_bug.cgi?id=180439

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Added imports directly instead of relying
        on imports from other files. We will try to import minimum required modules. Currently we are importing
        everything from master.cfg, loadConfig.py, factories.py and steps.py

2017-12-05  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Rename MasterCfgTest to RunWebKitTestsTest
        https://bugs.webkit.org/show_bug.cgi?id=180391

        Rubber-stamped by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunWebKitTestsTest): Renamed from MasterCfgTest.

2017-12-01  Filip Pizlo  <fpizlo@apple.com>

        GC constraint solving should be parallel
        https://bugs.webkit.org/show_bug.cgi?id=179934

        Reviewed by JF Bastien.

        * Scripts/run-jsc-benchmarks: Add splay-latency test, since this change needed to be carefully validated with that benchmark.
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ConcurrentPtrHashSet.cpp: Added. This has unit tests of the new concurrent data structure. The tests focus on correctness under serial execution, which appears to be enough for now (it's so easy to catch a concurrency bug by just running the GC).
        (TestWebKitAPI::TEST):

2017-12-04  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement relation type properties
        https://bugs.webkit.org/show_bug.cgi?id=179500

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::AccessibilityUIElement::ariaDetailsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDescribedByReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDetailsReferencingElementAtIndex):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::ariaDetailsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageElementAtIndex):

2017-12-04  Simon Fraser  <simon.fraser@apple.com>

        Minor DisplayRefreshMonitor-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179802

        Reviewed by Sam Weinig.

        New trace point for when the CVDisplayLink fires on its own thread.

        * Tracing/SystemTracePoints.plist:

2017-12-04  David Quesada  <david_quesada@apple.com>

        Add a class for parsing application manifests
        https://bugs.webkit.org/show_bug.cgi?id=177973
        rdar://problem/34747949

        Reviewed by Geoffrey Garen.

        Add basic unit tests for ApplicationManifestParser. For each of the implemented top-level properties,
        attempt to parse manifests with varying types of valid and invalid data to ensure the resulting
        ApplicationManifest is configured with the appropriate values per the spec.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Add ENABLE_APPLICATION_MANIFEST feature flag.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ApplicationManifestParser.cpp: Added.
        (ApplicationManifestParserTest::SetUp):
        (ApplicationManifestParserTest::parseString):
        (ApplicationManifestParserTest::parseTopLevelProperty):
        (ApplicationManifestParserTest::testStartURL):
        (ApplicationManifestParserTest::testName):
        (ApplicationManifestParserTest::testDescription):
        (ApplicationManifestParserTest::testShortName):
        (ApplicationManifestParserTest::testScope):
        (assertManifestHasDefaultValues):
        (TEST_F):

2017-12-04  Aakash Jain  <aakash_jain@apple.com>

        Add docstring in EarlyWarningSystemTask to explain return values
        https://bugs.webkit.org/show_bug.cgi?id=180303

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/tool/bot/earlywarningsystemtask.py:
        (EarlyWarningSystemTask.run): Added docstring to explain return values.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.review_patch): Added comment to explain the result of unlocking a patch.

2017-12-04  JF Bastien  <jfbastien@apple.com>

        Update std::expected to match libc++ coding style
        https://bugs.webkit.org/show_bug.cgi?id=180264

        Reviewed by Alex Christensen.

        Update tests according to name changes as well as removal of
        now-gone APIs.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (std::experimental::fundamentals_v3::operator<<):
        (TestWebKitAPI::TEST):
        (WTF::operator<<): Deleted.
        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp:
        (TestWebKitAPI::testParseHTMLInteger):
        (TestWebKitAPI::testParseHTMLNonNegativeInteger):

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

        download-latest-github-release.py should use existing release ANY time latest is not found
        https://bugs.webkit.org/show_bug.cgi?id=180293

        Reviewed by Per Arne Vollan.

        * Scripts/download-latest-github-release.py:
        (find_latest_release):
        Handle all URLErrors, not just HTTPErrors. Stop special-casing 404s.

        (main):
        Rearrange logic so any failure to detect a latest release falls back to an existing release. Improve logging.

        (Status):
        (download_release):
        (load_version_info): Renamed from existing_version info.
        (has_latest_release): Deleted.
        Cleanup.

2017-12-04  Joseph Pecoraro  <pecoraro@apple.com>

        Exclude some more leak callstacks
        https://bugs.webkit.org/show_bug.cgi?id=180379

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._types_to_exclude_from_leaks):
        (LeakDetector._callstacks_to_exclude_from_leaks):
        (LeakDetector._leaks_args):
        (LeakDetector._types_to_exlude_from_leaks): Deleted.
        * Scripts/webkitpy/port/leakdetector_unittest.py:
        (LeakDetectorTest.test_leaks_args):

2017-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF shouldn't have both Thread and ThreadIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=180308

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree):
        (runThread): Deleted.
        (runPthread): Deleted.
        (testThreadIdentifierMap): Deleted.
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:
        * TestWebKitAPI/Tests/WTF/Threading.cpp: Added.
        (TestWebKitAPI::TEST):

2017-12-03  Aakash Jain  <aakash_jain@apple.com>

        webkitpy EWS keeps retrying a failing patch
        https://bugs.webkit.org/show_bug.cgi?id=180302

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._test_patch): Instead of returning false, call report_failure() 
        which raises an exception, this exception is catched by earlywarningsystem.py and
        it posts a comment on bugzilla. Returning false simply unlocks the patch and returns
        it to the queue.

2017-12-03  Darin Adler  <darin@apple.com>

        Add WTF::Hasher, an easier to use replacement for WTF::IntegerHasher
        https://bugs.webkit.org/show_bug.cgi?id=180318

        Reviewed by JF Bastien.

        * TestWebKitAPI/CMakeLists.txt: Added Hasher.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.

        * TestWebKitAPI/Tests/WTF/Hasher.cpp: Added. Contains tests of the new
        WTF::Hasher class.

        * TestWebKitAPI/Tests/WTF/StringHasher.cpp: Include StringHasher.h instead of
        Hasher.h.

2017-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: auto-install pytest instead of importing it from wpt tools directory
        https://bugs.webkit.org/show_bug.cgi?id=180243

        Reviewed by Brian Burg.

        We don't really need the (old) version included in wpt tools dir, so we can simply remove it and use autoinstall
        instead.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Check pytest.
        (AutoinstallImportHook._install_pytest): Install pytest.
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py: Import autoinstalled pytest.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.run): Update the subtest path since the new pytest uses a different strategy for
        rootdir.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py: Import autoinstalled pytest.

2017-12-01  Dewei Zhu  <dewei_zhu@apple.com>

        Hardcoded python path is not compatible with virtual environment.
        https://bugs.webkit.org/show_bug.cgi?id=180300

        Reviewed by Stephanie Lewis.

        Hardcoding '/usr/bin/python' does not work with python virtual environment.
        Use 'python' instead.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):

2017-12-01  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Move python code to load config from master.cfg in separate file
        https://bugs.webkit.org/show_bug.cgi?id=180278

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Moved appropriate code to loadConfig.py
        * BuildSlaveSupport/build.webkit.org-config/loadConfig.py: Ditto.
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Removed extra import.

2017-12-01  Brian Burg  <bburg@apple.com>

        Web Inspector: move Inspector::Protocol::Array<T> to JSON namespace
        https://bugs.webkit.org/show_bug.cgi?id=173662

        Reviewed by Joseph Pecoraro.

        Add duplicate test cases for JSON::ArrayOf<T> based on JSON::Array.

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

2017-12-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement SPI for clients to update a given attachment's data
        https://bugs.webkit.org/show_bug.cgi?id=180184
        <rdar://problem/35355731>

        Reviewed by Tim Horton.

        Adds two new API tests to exercise the attachment data update flow.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::ObserveAttachmentUpdatesForScope):
        (-[_WKAttachment synchronouslySetDisplayOptions:error:]):
        (-[_WKAttachment synchronouslyRequestData:]):
        (-[_WKAttachment synchronouslySetData:newContentType:newFilename:error:]):
        (TestWebKitAPI::TEST):

2017-12-01  Alicia Boya García  <aboya@igalia.com>

        [GTK] Add SampleMap.cpp API tests to CMake
        https://bugs.webkit.org/show_bug.cgi?id=180252

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/PlatformGTK.cmake:

2017-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add support for importing and running selenium tests
        https://bugs.webkit.org/show_bug.cgi?id=180145

        Reviewed by Brian Burg.

        We currently import and run W3C tests, which are the best ones to ensure our implementation is spec
        compliant. However, the selenium API is what user will actually use in the end, so it's important to ensure that
        we don't break the selenium support. This patch adds webdriver_test_runner_selenium.py and
        webdriver_selenium_executor.py to run selenium tests. The script import-w3c-webdriver-tests has been renamed as
        import-webdriver-tests and it can now import selenium tests too.

        * Scripts/import-w3c-webdriver-tests: Removed.
        * Scripts/import-webdriver-tests: Added.
        (Importer):
        (Importer.__init__):
        (Importer.download_tests):
        (Importer.import_tests):
        (Importer.import_tests.should_skip_file):
        * Scripts/webkitpy/webdriver_tests/webdriver_driver.py:
        (WebDriver.browser_path):
        (WebDriver):
        (WebDriver.browser_args):
        (WebDriver.selenium_name):
        * Scripts/webkitpy/webdriver_tests/webdriver_driver_gtk.py:
        (WebDriverGtk.browser_path):
        (WebDriverGtk):
        (WebDriverGtk.browser_args):
        (WebDriverGtk.capabilities):
        (WebDriverGtk.selenium_name):
        * Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py:
        (WebDriverWPE.browser_args):
        (WebDriverWPE.capabilities):
        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py: Added.
        (_ensure_directory_in_path):
        (CollectRecorder):
        (CollectRecorder.__init__):
        (CollectRecorder.pytest_collectreport):
        (WebDriverSeleniumExecutor):
        (WebDriverSeleniumExecutor.__init__):
        (WebDriverSeleniumExecutor.collect):
        (WebDriverSeleniumExecutor.run):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner):
        (WebDriverTestRunner.__init__):
        (WebDriverTestRunner.run):
        (WebDriverTestRunner.print_results):
        (WebDriverTestRunner.dump_results_to_json_file):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py: Added.
        (WebDriverTestRunnerSelenium):
        (WebDriverTestRunnerSelenium.__init__):
        (WebDriverTestRunnerSelenium._tests_dir):
        (WebDriverTestRunnerSelenium.collect_tests):
        (WebDriverTestRunnerSelenium.run):
        (WebDriverTestRunnerSelenium.results):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.__init__):
        (WebDriverTestRunnerW3C.run):
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:

2017-11-30  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r224791): cookies are shared between ephemeral sessions in the same process pool
        https://bugs.webkit.org/show_bug.cgi?id=180235

        Reviewed by Joseph Pecoraro.

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

2017-11-30  Stephan Szabo  <stephan.szabo@sony.com>

        Make LegacyCustomProtocolManager optional for network process
        https://bugs.webkit.org/show_bug.cgi?id=176230

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-30  Dewei Zhu  <dewei_zhu@apple.com>

        HTTP server driver is responsible for ensuring the dependencies of HTTP server.
        https://bugs.webkit.org/show_bug.cgi?id=180231

        Reviewed by Stephanie Lewis.

        Added the logic to ensure system environment meet the requirments of launching the http server.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver.serve):
        (SimpleHTTPServerDriver.set_device_id):
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver._ensure_http_server_dependencies):

2017-11-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Cannot build without Internet connection
        https://bugs.webkit.org/show_bug.cgi?id=180068

        Reviewed by Alex Christensen

        With no Internet connection, if libraries has been downloaded
        before, trust that version and keep building.

        * Scripts/download-latest-github-release.py:
        (Status):
        (current_release):
        (has_latest_release):
        (main):

2017-11-30  Alex Christensen  <achristensen@webkit.org>

        WKURLSchemeHandler.request should include HTTPBody
        https://bugs.webkit.org/show_bug.cgi?id=180220

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm:
        (-[FormSubmissionDelegate webView:startURLSchemeTask:]):

2017-11-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Add a script for automatically running the buildbot configurations on a test environment.
        https://bugs.webkit.org/show_bug.cgi?id=169084

        Reviewed by Michael Catanzaro.

        This new script does the following:
        - Creates a temporal workingdir.
        - Installs buildbot and its dependencies there (very same version used by the webkit.org buildbot master https://build.webkit.org/about ).
          This is important as there are problems that that may not be detected if you don't test with the same version that will be used on production.
        - Copies the buildmaster config files to the temporal workingdir.
        - Performs the required steps to start a buildmaster.
        - Creates the required config for each slave and starts all of them.

        The test buildmaster should be accessible at http://localhost:8710/ allowing to trigger manual builds.
        This allows to test any configuration changes on this test environment that is pretty much identical to the production one.

        * BuildSlaveSupport/build.webkit.org-config/run-buildbot-test.py: Added.
        (check_tcp_port_open):
        (upgrade_db_needed):
        (create_tempdir):
        (print_if_error_stdout_stderr):
        (setup_master_workdir):
        (wait_for_master_ready):
        (start_master):
        (get_list_workers):
        (start_worker):
        (clean):
        (cmd_exists):
        (check_buildbot_installed):
        (setup_virtualenv):
        (configdir_is_valid):
        (main):

2017-11-30  Aakash Jain  <aakash_jain@apple.com>

        [build.webkit.org] Move python code from master.cfg in separate files
        https://bugs.webkit.org/show_bug.cgi?id=180180

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Moved code to steps.py and master.cfg appropriately.
        * BuildSlaveSupport/build.webkit.org-config/factories.py: Moved all factory related code from master.cfg.
        * BuildSlaveSupport/build.webkit.org-config/steps.py: Moved all steps related code from master.cfg

2017-11-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKAttachmentTests.InPlaceImageAttachmentToggleDisplayMode times out on macOS bots
        https://bugs.webkit.org/show_bug.cgi?id=180200

        Reviewed by Alexey Proskuryakov.

        Rewrites an API test to avoid checking against the hard-coded platform-dependent size of an attachment element.
        Instead, first insert the attachment element as an icon and compute its size, and then check that the size of
        the element is restored to this original value after toggling the display mode to in-place mode and back.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[TestWKWebView attachmentElementSize]):
        (-[TestWKWebView waitForAttachmentElementSizeToBecome:]):
        (TestWebKitAPI::TEST):
        (platformAttachmentIconElementSize): Deleted.

2017-11-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Stop building Wayland in JHBuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=179951

        Reviewed by Žan Doberšek.

        Since Wayland is not used for running tests, and since it does not seem to depend on
        anything in the JHBuild moduleset, I think we can remove it safely without having to worry
        that the system version of Wayland might use libraries in the JHBuild environment (which
        would be unsafe).

        * wpe/install-dependencies: Install Wayland.
        * wpe/jhbuild.modules: Stop building Wayland.

2017-11-30  Alexey Proskuryakov  <ap@apple.com>

        Silence the BitVector leak for
        https://bugs.webkit.org/show_bug.cgi?id=121662

        The out of line data pointer isn't stored directly, so the leaks tool cannot see it.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):

2017-11-29  Aakash Jain  <aakash_jain@apple.com>

        Fix build.webkit.org broken unit-test after r225080
        https://bugs.webkit.org/show_bug.cgi?id=180176

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Updated expected_build_steps.

2017-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement SPI for clients to make an attachment element display in-place
        https://bugs.webkit.org/show_bug.cgi?id=180153
        <rdar://problem/35735252>

        Reviewed by Tim Horton.

        Adds new API tests to cover inserting in-place attachments and updating the display mode of existing attachments,
        as well as performing a few editing operations (paragraph insertion, cut/paste, list insertion) on attachment
        elements.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (platformAttachmentIconElementSize):
        (testVideoData):
        (testPDFData):
        (displayOptionsWithMode):
        (-[TestWKWebView waitForAttachmentElementSizeToBecome:]):
        (-[_WKAttachment synchronouslySetDisplayOptions:error:]):
        (TestWebKitAPI::TEST):

2017-11-29  Simon Fraser  <simon.fraser@apple.com>

        API test fix after r225288.

        Make the test work on iOS.

        * TestWebKitAPI/Tests/WebKit/NoHistoryItemScrollToFragment.mm:
        (-[DidScrollToFragmentScrollViewDelegate scrollViewDidScroll:]):
        (TestWebKitAPI::TEST):

2017-11-29  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r213590): Scrolling to anchors broken in web views when content loaded via HTML string
        https://bugs.webkit.org/show_bug.cgi?id=180155
        rdar://problem/34220827

        Reviewed by Zalan Bujtas.

        API test that loads a page with a relative anchor, and simulates a click to scroll to it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/NoHistoryItemScrollToFragment.mm: Added.
        (-[DidScrollToFragmentDelegate _webViewDidScroll:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/scroll-to-anchor.html: Added.

2017-11-29  Ryan Haddad  <ryanhaddad@apple.com>

        webkitpy EWS should be present on the dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=179801

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:
        (BubbleQueueServer): Add Webkitpy EWS.

2017-11-29  Simon Fraser  <simon.fraser@apple.com>

        Viewport unit values affected by Comand-+ zoom
        https://bugs.webkit.org/show_bug.cgi?id=145614

        Reviewed by Zalan Bujtas.
        
        Fix Command+ and Command- in MiniBrowser to do zooming, rather than being tied
        to editing commands.

        * MiniBrowser/mac/MainMenu.xib:

2017-11-29  Alex Christensen  <achristensen@webkit.org>

        Add test for _WKVisitedLinkStore.addVisitedLinkWithString
        https://bugs.webkit.org/show_bug.cgi?id=180152

        Reviewed by Chris Dumez.

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

2017-11-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Trying to use iOS versions from machines without iOS SDKs doesn't make sense
        https://bugs.webkit.org/show_bug.cgi?id=179534
        <rdar://problem/35469509>

        Reviewed by Brent Fulgham.

        Provide more specific information in builders.py so that machines do not try and calculate
        an iOS SDK version while running tests.

        * Scripts/webkitpy/port/builders.py: Explicitly specify a version for iOS Simulator.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._version_from_name): Attempt to extract the iOS version from the name
        of the port.
        (IOSSimulatorPort.ios_version): Use specified iOS version if a version is detected in
        in the provided name string (just like Mac).

2017-11-29  Robin Morisset  <rmorisset@apple.com>

        The recursive tail call optimisation is wrong on closures
        https://bugs.webkit.org/show_bug.cgi?id=179835

        Reviewed by Saam Barati.

        This just includes merge-sort-cps.js to the list of benchmarks ran by run-jsc-benchmarks --tail-bench

        * Scripts/run-jsc-benchmarks:

2017-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add an option to dump test results to a json file
        https://bugs.webkit.org/show_bug.cgi?id=180082

        Reviewed by Brian Burg.

        Add --json-output command line option to run-webdriver-tests to dump test results to a json file in a format
        compatible with the W3C report. WebDriverTestResult now represents a test file and contains a list of
        subtests, instead of having one WebDriverTestResult per subtest. This way we can store also the harness result
        and dump the results to different formats.

        * Scripts/run-webdriver-tests:
        * Scripts/webkitpy/webdriver_tests/webdriver_test_result.py:
        (WebDriverTestResult.__init__):
        (WebDriverTestResult):
        (WebDriverTestResult.add_subtest_results):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
        (WebDriverTestRunner.print_results):
        (WebDriverTestRunner):
        (WebDriverTestRunner.dump_results_to_json_file):
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.run):

2017-11-28  Alexey Proskuryakov  <ap@apple.com>

        Stop silencing leaks in TextCodecICU::registerCodecs, as the problem was fixed a while ago.
        https://bugs.webkit.org/show_bug.cgi?id=118505

        Reviewed by Joseph Pecoraro.

        * Scripts/valgrind/suppressions.txt:
        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):

2017-11-28  Ms2ger  <Ms2ger@igalia.com>

        Stop modifying self.expectations in TestExpectationLine.expected_behavior.
        https://bugs.webkit.org/show_bug.cgi?id=180074

        Reviewed by Simon Fraser.

        In particular, getting the property multiple times on a skipped test
        expectation line (which happens when using
        `Tools/Scripts/run-webkit-tests --print-expectations` if a directory
        containing multiple tests is skipped) would yield [pass, skip], then
        [pass, skip, skip], then [pass, skip, skip, skip], and so on.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationLine.expected_behavior): copy self.expectations before modifying it.

2017-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
        https://bugs.webkit.org/show_bug.cgi?id=173793

        Reviewed by Joseph Pecoraro.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/JSONValue.cpp: Renamed from Tools/TestWebKitAPI/Tests/JavaScriptCore/InspectorValue.cpp.
        (TestWebKitAPI::TEST):

2017-11-28  Ryan Haddad  <ryanhaddad@apple.com>

        Bugs filed from the flakiness dashboard should include a link to the dashboard
        https://bugs.webkit.org/show_bug.cgi?id=180090

        Reviewed by Aakash Jain.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (createBugHTML):
        Open the bug compose page in a new tab and include a link
        to the flakiness dashboard results for the selected test.

2017-11-28  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Standardize Version representation
        https://bugs.webkit.org/show_bug.cgi?id=179677
        <rdar://problem/35711277>

        Reviewed by Alex Christensen.

        Standardize a single method of representing versions in the Version object
        constructor. Provide static methods for converting string and lists/tuples
        to Version objects.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Parse Version object from string instead of using
        the constructor.
        (PlatformInfo.xcode_sdk_version): Ditto.
        (PlatformInfo.xcode_version): Ditto.
        (PlatformInfo._win_version): Construct Version object from list.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.xcode_sdk_version):
        (MockPlatformInfo.xcode_version):
        * Scripts/webkitpy/common/version.py:
        (Version):
        (Version.from_string): Parse string of the form 'x.x.x'.
        (Version.from_iterable): Construct a version object from a list, tuple or
        other indexable object.
        (Version.__init__): Construct a Version object from integers.
        * Scripts/webkitpy/common/version_name_map.py:
        (VersionNameMap.__init__): Use integer Version constructor.
        (VersionNameMap._automap_to_major_version): Ditto.
        (VersionNameMap.to_name):
        (VersionNameMap.strip_name_formatting): Construct Version from string.
        * Scripts/webkitpy/common/version_name_map_unittest.py:
        (VersionMapTestCase.test_mac_version_by_name): Use integer Version constructor.
        (VersionMapTestCase.test_mac_name_by_version): Ditto.
        (VersionMapTestCase.test_ios_name_by_version): Ditto.
        * Scripts/webkitpy/common/version_unittest.py:
        (VersionTestCase.test_string_constructor):
        (VersionTestCase.test_from_list):
        (VersionTestCase.test_from_tuple):
        (VersionTestCase.test_int_constructor):
        (VersionTestCase.test_len):
        (VersionTestCase.test_set_by_int):
        (VersionTestCase.test_set_by_string):
        (VersionTestCase.test_get_by_int):
        (VersionTestCase.test_get_by_string):
        (VersionTestCase.test_string):
        (VersionTestCase.test_contained_in):
        (VersionTestCase.test_compare_versions):
        (VersionTestCase.test_list_constructor): Deleted.
        (VersionTestCase.test_tuple_constructor): Deleted.
        (VersionTestCase.test_copy_constructor): Deleted.
        (VersionTestCase.test_none_constructor): Deleted.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Handle case where ios_version is None.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.ios_version): Return None rather than an empty version.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.simulator_runtime): Parse Version object from string instead
        of using the constructor.
        (IOSSimulatorPort.ios_version): Return None rather than an empty version.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator._parse_runtimes): Parse Version object from string instead of using
        the constructor.
        (Simulator._parse_devices): Ditto.
        * Scripts/webkitpy/xcode/simulator_unittest.py:

2017-11-28  Daniel Bates  <dabates@apple.com>

        [Cocoa] First pass at implementing alternative presentation button element
        https://bugs.webkit.org/show_bug.cgi?id=179785
        Part of <rdar://problem/34917108>

        Reviewed by Brent Fulgham.

        Add a test that substitutes the alternative presentation button for an element in
        the page and clicks it.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add test.
        * TestWebKitAPI/Tests/WebKitCocoa/ClickAlternativePresentationButton.mm: Added.
        (didClickAlternativePresentationButton):
        (-[ClickAlternativePresentationButton webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (-[AlternativePresentationButtonDelegate _webView:didClickAlternativePresentationButtonWithUserInfo:]):
        (-[AlternativePresentationButtonDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

2017-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r225166): [GTK] Skipped unit tests are considered failures after glib upgrade
        https://bugs.webkit.org/show_bug.cgi?id=180072

        Reviewed by Michael Catanzaro.

        This is a bug in GLib that has already been fixed. Backport the patch to fix it until there's a new GLib release
        we can depend on.

        * gtk/jhbuild.modules:
        * gtk/patches/glib-gtester-do-not-consider-skipped-tests-as-failures.patch: Added.

2017-11-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        webkitpy: PlatformInfo raises AssertionError "assert self.os_version is not None" in Cygwin since Bug 179621
        https://bugs.webkit.org/show_bug.cgi?id=180069

        Reviewed by Daniel Bates.

        "Version 10.0.16299" was interpreted as 0.0.16299. Fix the wrong
        regexp for 'ver' command.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._win_version_from_cmd): Replace \d with \d+.

2017-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: disable XSS auditor when running WebDriver tests
        https://bugs.webkit.org/show_bug.cgi?id=180075

        Reviewed by Carlos Alberto Lopez Perez.

        Some tests are now doing inline('<script>window.alert()</script>') which is rejected by the XSS auditor because
        the script source is part of the request URL.

        * Scripts/webkitpy/webdriver_tests/webdriver_driver_gtk.py:
        (WebDriverGtk.capabilities): Disable XSS auditor.

2017-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: add timeout option to run-webdriver-tests script
        https://bugs.webkit.org/show_bug.cgi?id=179940

        Reviewed by Carlos Alberto Lopez Perez.

        We need to handle timeouts to be able to run the tests in the bots. pytest doesn't support timeouts, but there's
        a plugin pytest_timeout that can be used for that.

        * Scripts/run-webdriver-tests: Add --timeout command line option.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module): Check if pytest_timeout is imported to install it.
        (AutoinstallImportHook._install_pytest_timeout): Install pytest_timeout from pypi.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
        (WebDriverTestRunnerW3C.__init__): Set PYTEST_TIMEOUT env var with the timeout given.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.run): Clarify that the timeout received by do_wdspec() is ignored, and pass 0 instead of 25.

2017-11-27  Aakash Jain  <aakash_jain@apple.com>

        Do not run webkitpy tests on multiple EWSes
        https://bugs.webkit.org/show_bug.cgi?id=179834

        Reviewed by Alexey Proskuryakov.

        Do not run webkitpy tests in every EWS. We now have
        a dedicated webkitpy test EWS.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Do not run webkitpy tests in EWSes. These tests will still run
        when --non-interactive option is not passed. 

2017-11-27  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Better name-version mapping (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=179621
        <rdar://problem/35589585>

        Reviewed by David Kilzer.

        Mapping version numbers to version names should occur in a central location.
        This has a few advantages. First, it makes iterating through versions easier.
        Second, it allows for apple_additions to define an additional set of name
        mappings. Lastly, it will allow, in a future patch, for us to track version
        instead of version name, only mapping version to version name when required.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo._determine_os_name): Use VersionNameMap instead of custom functions
        mapping version to name.
        (PlatformInfo._determine_linux_version): Deleted.
        (PlatformInfo._determine_mac_version): Deleted.
        (PlatformInfo._determine_win_version): Deleted.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_os_name_and_wrappers):
        (TestPlatformInfo.test_os_version):
        (TestPlatformInfo.test_display_name):
        (TestPlatformInfo.test_total_bytes_memory):
        * Scripts/webkitpy/common/version.py:
        (Version.contained_in): Add partial version mapping.
        * Scripts/webkitpy/common/version_name_map.py: Added.
        (VersionNameMap): Holds a mapping of version name to version object.
        (VersionNameMap.map): Don't re-create VersionNameMap every time.
        (VersionNameMap.__init__): Initialize mapping, use platform to
        define the default system platform.
        (VersionNameMap._automap_to_major_version): Some operating systems, such
        as iOS, have a naming scheme based on their major version and os name.
        Automatically generate such mappings.
        (VersionNameMap.to_name): Given a version object, platform name and
        table, find the closest matching version name.
        (VersionNameMap.strip_name_formatting): Remove spaces and extract the major version,
        if a version string is included in the name.
        (VersionNameMap.from_name): Return an os name and version given a version name.
        * Scripts/webkitpy/common/version_name_map_unittest.py: Added.
        (VersionMapTestCase):
        (VersionMapTestCase.test_default_system_platform):
        (VersionMapTestCase.test_mac_version_by_name):
        (VersionMapTestCase.test_ios_version_by_name):
        (VersionMapTestCase.test_mac_name_by_version):
        (VersionMapTestCase.test_ios_name_by_version):
        * Scripts/webkitpy/common/version_unittest.py:
        (VersionTestCase.test_contained_in):
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.ios_version): Map os_version name to version number.

2017-11-27  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Conditionally select DLL CRT or static CRT
        https://bugs.webkit.org/show_bug.cgi?id=170594

        Reviewed by Alex Christensen.

        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/win/CMakeLists.txt:

2017-11-27  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [GTK][WPE] Add "enable-encrypted-media" property to WebKitWebSettings
        https://bugs.webkit.org/show_bug.cgi?id=18005

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2017-11-27  Tim Horton  <timothy_horton@apple.com>

        One too many zeroes in macOS version number in FeatureDefines
        https://bugs.webkit.org/show_bug.cgi?id=180011

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-27  Per Arne Vollan  <pvollan@apple.com>

        [Win] The number of webkit-patch iterations on EWS should be configurable.
        https://bugs.webkit.org/show_bug.cgi?id=178517

        Reviewed by Darin Adler.

        Add a new RESET_AFTER_ITERATION argument to the EWS shell script.

        * EWSTools/start-queue-win.sh:

2017-11-27  Per Arne Vollan  <pvollan@apple.com>

        [Win] Switch to VS2017 on EWS bots.
        https://bugs.webkit.org/show_bug.cgi?id=178516

        Reviewed by Darin Adler.

        * EWSTools/start-queue-win.sh:

2017-11-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Layout test media/track/track-text-track-cue-list.html crash with g_source_set_ready_time: assertion 'source->ref_count > 0' failed
        https://bugs.webkit.org/show_bug.cgi?id=176806

        Reviewed by Carlos Alberto Lopez Perez.

        This was caused by a GLib bug that has already been fixed. Upgrade glib to 2.54.2.

        * gtk/jhbuild.modules:
        * gtk/patches/gdate-suppress-string-format-literal-warning.patch: Removed.

2017-11-24  Darin Adler  <darin@apple.com>

        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        (TestWebKitAPI::TEST): Added a test for OptionSet operator|.

2017-11-24  Mark Lam  <mark.lam@apple.com>

        Move unsafe jsc shell test functions to the $vm object.
        https://bugs.webkit.org/show_bug.cgi?id=179980

        Reviewed by Yusuke Suzuki.

        Always set --useDollarVM=true for jsc runs of benchmarks.  This is needed because
        some microbenchmarks relies on createBuiltin().

        Also set --useDollarVM=true for runExceptionFuzz and runExecutableAllocationFuzz.

        * Scripts/run-jsc-benchmarks:
        * Scripts/run-jsc-stress-tests:

2017-11-23  Darin Adler  <darin@apple.com>

        Reduce WTF::String operations that do unnecessary Unicode operations instead of ASCII
        https://bugs.webkit.org/show_bug.cgi?id=179907

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (changeWindowScaleIfNeeded): Use containsIgnoringASCIICase.
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::urlContains const): Ditto.

2017-11-22  Ali Juma  <ajuma@chromium.org>

        Implement VisualViewport API attributes
        https://bugs.webkit.org/show_bug.cgi?id=179385

        Reviewed by Frédéric Wang.

        Enable the VisualViewportAPI in layout tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

2017-11-22  Tim Horton <timothy_horton@apple.com> and Michael Catanzaro <mcatanzaro@igalia.com>

        Remove build-webkit's notion of feature flags having a default value
        https://bugs.webkit.org/show_bug.cgi?id=177338

        Reviewed by Carlos Alberto Lopez Perez.

        Delegate feature flag default values to the build system.
        (FeatureDefines.xcconfig for Xcode, WebKitFeatures.cmake and Options*.cmake for CMake, and FeatureDefines.h for everyone)

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Factory.__init__):
        Update GTK and WPE buildbot configuration to use --no-experimental-features on old stable
        bots instead of --default-cmake-features.
 
        * Scripts/build-webkit:
        (cMakeArgsFromFeatures): Deleted.
        Default feature values to 'undef'.
        Remove the --default-cmake-features argument; it is now the default.
        Add --no-experimental-features to replace it.
        Stop printing the default feature flag value in the help.
        Avoid propagating undefined values to the build system;
        only mention flags that are overridden on the command line.

        This has the nice side effect of using the default CMake features
        for CMake builds, but still allowing toggling of them using the
        prettier --FEATURE and --no-FEATURE arguments.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        No longer need to suppress CMake warnings about unused arguments.

        * Scripts/webkitperl/FeatureList.pm:
        Remove the default values from the feature list.

2017-11-22  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Pass --useDollarVM=true to all JSC tests.
        https://bugs.webkit.org/show_bug.cgi?id=179647

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2017-11-22  Commit Queue  <commit-queue@webkit.org>

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

        Compilation failed on WinCairo 64-bit Release (Requested by
        fredw on #webkit).

        Reverted changeset:

        "Implement VisualViewport API attributes"
        https://bugs.webkit.org/show_bug.cgi?id=179385
        https://trac.webkit.org/changeset/225093

2017-11-21  Ali Juma  <ajuma@chromium.org>

        Implement VisualViewport API attributes
        https://bugs.webkit.org/show_bug.cgi?id=179385

        Reviewed by Frédéric Wang.

        Enable the VisualViewportAPI in layout tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):

2017-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Run unit tests in the bots
        https://bugs.webkit.org/show_bug.cgi?id=179910

        Reviewed by Michael Catanzaro.

        Add a step to run unit tests in WPE test bots.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGLibAPITests):
        (RunGtkAPITests):
        (RunWPEAPITests):
        (TestFactory.__init__):
        (RunGtkAPITests.start): Deleted.
        (RunGtkAPITests.commandComplete): Deleted.
        (RunGtkAPITests.evaluateCommand): Deleted.
        (RunGtkAPITests.getText): Deleted.
        (RunGtkAPITests.getText2): Deleted.
        * wpe/jhbuild.modules: Upgrade WPEBackend-mesa to fix crashes when running unit tests.

2017-11-21  Tomas Popela  <tpopela@redhat.com>

        Fix WebKitGTK+ compilation

        Reviewed by Carlos Garcia Campos.

        File "/builddir/build/BUILD/webkitgtk-2.19.2/Tools/gtk/generate-gtkdoc", line 31, in <module>
        import common
        ImportError: No module named common

        * gtk/manifest.txt.in:
        Add Tools/glib/common.py to the tarball.

2017-11-21  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Avoid warning in jhbuildrc.
        https://bugs.webkit.org/show_bug.cgi?id=179913

        Reviewed by Carlos Garcia Campos.

        Apparently this is not quite a real python file; this declaration causes
        warnings like
          I: unknown keys defined in configuration file: top_level_directory
        which break run-webkit-tests.

        * gtk/jhbuildrc:

2017-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WPE make distcheck.

        * wpe/manifest.txt.in: Add generate-inspector-gresource-manifest.py to the tarball.

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ make distcheck.

        * gtk/manifest.txt.in: Add generate-inspector-gresource-manifest.py to the tarball.

2017-11-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Disable ACCELERATED_2D_CANVAS in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=179889

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2017-11-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, speculative attempt to fix run-gtk-tests after r225047
        https://bugs.webkit.org/show_bug.cgi?id=173772

        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available):

2017-11-20  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] New API to add, retrieve and delete cookies via WebKitCookieManager
        https://bugs.webkit.org/show_bug.cgi?id=177932

        Reviewed by Carlos Garcia Campos.

        Added new test cases to cover the newly added API for WebKitCookieManager:
        webkit_cookie_manager_add_cookie, webkit_cookie_manager_get_cookies and
        webkit_cookie_manager_delete_cookie.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerAddCookie): Added.
        (testCookieManagerGetCookies): Added.
        (testCookieManagerDeleteCookie): Added.
        (serverCallback): Small update to avoid hardcoding strings we reuse.
        (beforeAll): Added the new test cases to the test suite.

2017-11-20  Stephan Szabo  <stephan.szabo@sony.com>

        [Win] Update ruby JSC test writer for gigacage changes
        https://bugs.webkit.org/show_bug.cgi?id=178757

        Reviewed by Keith Miller.

        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb:
        Add additionalEnv to ruby test writer Plan

2017-11-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove ENABLE_ALLINONE_BUILD option
        https://bugs.webkit.org/show_bug.cgi?id=179823

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WPE build after r225047.

        Remove changes from an old patch committed by mistake in r225047.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add run-wpe-tests script to run WPE glib API tests
        https://bugs.webkit.org/show_bug.cgi?id=173772

        Reviewed by Michael Catanzaro.

        Move common code from run-gtk-tests to api_test_runner.py, to be shared by both run-gtk-tests and un-wpe-tests.

        * Scripts/run-gtk-tests:
        (GtkTestRunner):
        (GtkTestRunner.__init__):
        (GtkTestRunner._start_accessibility_daemons):
        (GtkTestRunner._setup_testing_environment):
        (GtkTestRunner._tear_down_testing_environment):
        (GtkTestRunner.is_glib_test):
        (GtkTestRunner.is_google_test):
        * Scripts/run-wpe-tests: Added.
        (WPETestRunner):
        (WPETestRunner.__init__):
        (WPETestRunner.is_glib_test):
        (WPETestRunner.is_google_test):
        * Scripts/webkitpy/port/headlessdriver.py: Added.
        (HeadlessDriver):
        (HeadlessDriver._setup_environ_for_test):
        (HeadlessDriver._start):
        * Scripts/webkitpy/port/headlessdriver_unittest.py: Added.
        (HeadlessDriverTest):
        (HeadlessDriverTest.make_driver):
        (HeadlessDriverTest.make_environment):
        (HeadlessDriverTest.test_environment_needed_variables):
        (HeadlessDriverTest.test_environment_forbidden_variables):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._driver_class):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::windowSnapshotImage):
        * glib/api_test_runner.py: Copied from Tools/Scripts/run-gtk-tests.
        (SkippedTest):
        (SkippedTest.__init__):
        (SkippedTest.__str__):
        (SkippedTest.skip_entire_suite):
        (SkippedTest.skip_for_build_type):
        (TestTimeout):
        (TestRunner):
        (TestRunner.__init__):
        (TestRunner._test_programs_base_dir):
        (TestRunner._get_tests_from_dir):
        (TestRunner._get_tests):
        (TestRunner._create_driver):
        (TestRunner._setup_testing_environment):
        (TestRunner._tear_down_testing_environment):
        (TestRunner._test_cases_to_skip):
        (TestRunner._should_run_test_program):
        (TestRunner._kill_process):
        (TestRunner._start_timeout):
        (TestRunner._start_timeout._alarm_handler):
        (TestRunner._stop_timeout):
        (TestRunner._waitpid):
        (TestRunner._run_test_glib):
        (TestRunner._run_test_glib.parse_line):
        (TestRunner._run_test_glib.parse_line.set_test_result):
        (TestRunner._get_tests_from_google_test_suite):
        (TestRunner._run_google_test):
        (TestRunner._run_google_test_suite):
        (TestRunner.is_glib_test):
        (TestRunner.is_google_test):
        (TestRunner._run_test):
        (TestRunner.run_tests):
        (add_options):
        * glib/common.py: Renamed from Tools/gtk/common.py.
        (get_build_path.is_valid_build_directory):
        * gtk/generate-gtkdoc:
        * gtk/jhbuildrc:
        * gtk/ycm_extra_conf.py:

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Build C API tests
        https://bugs.webkit.org/show_bug.cgi?id=179817

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/wpe/PlatformUtilitiesWPE.cpp:
        (TestWebKitAPI::Util::URLForNonExistentResource):
        (TestWebKitAPI::Util::isKeyDown):
        * TestWebKitAPI/wpe/PlatformWebViewWPE.cpp: Added.
        (TestWebKitAPI::PlatformWebView::PlatformWebView):
        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
        (TestWebKitAPI::PlatformWebView::initialize):
        (TestWebKitAPI::PlatformWebView::page const):
        (TestWebKitAPI::PlatformWebView::resizeTo):
        (TestWebKitAPI::PlatformWebView::simulateSpacebarKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateAltKeyPress):
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add env var WPE_USE_HEADLESS_VIEW_BACKEND
        https://bugs.webkit.org/show_bug.cgi?id=173770

        Reviewed by Michael Catanzaro.

        Move HeadlessViewBackend implementation to a common place and build it as a private static library to be used by
        WTR, GLib API tests and eventually C API tests too. WTR uses the HeadlessViewBackend unconditionally, but GLib
        API tests use it only when WPE_USE_HEADLESS_VIEW_BACKEND environment variable is present and not "0".

        * CMakeLists.txt: Include wpe/HeadlessViewBackend directory for developer builds.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testPrivateBrowsing):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextProxySettings):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (testWebViewEphemeral):
        * TestWebKitAPI/glib/PlatformWPE.cmake:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebViewBackend):
        (Test::createWebView):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::initializeWebView):
        * WebKitTestRunner/PlatformWPE.cmake:
        * wpe/HeadlessViewBackend/CMakeLists.txt: Added.
        * wpe/HeadlessViewBackend/HeadlessViewBackend.cpp: Renamed from Tools/WebKitTestRunner/wpe/HeadlessViewBackend.cpp.
        (HeadlessViewBackend::HeadlessViewBackend):
        * wpe/HeadlessViewBackend/HeadlessViewBackend.h: Renamed from Tools/WebKitTestRunner/wpe/HeadlessViewBackend.h.

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] webkit_web_view_new() should enable specifying wpe_view_backend object
        https://bugs.webkit.org/show_bug.cgi?id=178655

        Reviewed by Michael Catanzaro.

        Update unit tests to create web views using helper methods that have a different implementation for GTK and
        WPE. Also add a new test case to check the new API to create a WebKitWebView with a WPE backend. Use
        WKViewCreate in WTR and fix a memory leak in HeadlessViewBackend.

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        (testWebKitWebViewNavigationAfterSessionRestore):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (testWebResourceGetDataError):
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testWebViewNewWithUserContentManager):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (testWebViewWebContextLifetime):
        (testWebViewWebBackend):
        (testWebViewSettings):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataEphemeral):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::createWebView):
        * WebKitTestRunner/wpe/HeadlessViewBackend.cpp:
        (HeadlessViewBackend::~HeadlessViewBackend):
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::PlatformWebView):

2017-11-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] webkit_cookie_manager_delete_all_cookies doesn't delete the cookies if called before a web process is running
        https://bugs.webkit.org/show_bug.cgi?id=175265

        Reviewed by Michael Catanzaro.

        Add test case.

        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerPersistentStorageDeleteAll):
        (serverCallback):
        (beforeAll):

2017-11-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused TOUCH_ICON_LOADING feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179873

        Reviewed by Simon Fraser.

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

2017-11-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused LEGACY_VENDOR_PREFIXES feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179872

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, rolling out r225016.

        Break webkit-patch on Ubuntu and Debian Linux

        Reverted changeset:

        "webkitpy: Better name-version mapping (Part 1)"
        https://bugs.webkit.org/show_bug.cgi?id=179621
        https://trac.webkit.org/changeset/225016

2017-11-18  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Better name-version mapping (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=179621
        <rdar://problem/35589585>

        Reviewed by David Kilzer.

        Mapping version numbers to version names should occur in a central location.
        This has a few advantages. First, it makes iterating through versions easier.
        Second, it allows for apple_additions to define an additional set of name
        mappings. Lastly, it will allow, in a future patch, for us to track version
        instead of version name, only mapping version to version name when required.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo._determine_os_name): Use VersionNameMap instead of custom functions
        mapping version to name.
        (PlatformInfo._determine_linux_version): Deleted.
        (PlatformInfo._determine_mac_version): Deleted.
        (PlatformInfo._determine_win_version): Deleted.
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_os_name_and_wrappers):
        (TestPlatformInfo.test_os_version):
        (TestPlatformInfo.test_display_name):
        (TestPlatformInfo.test_total_bytes_memory):
        * Scripts/webkitpy/common/version.py:
        (Version.contained_in): Add partial version mapping.
        * Scripts/webkitpy/common/version_name_map.py: Added.
        (VersionNameMap): Holds a mapping of version name to version object.
        (VersionNameMap.map): Don't re-create VersionNameMap every time.
        (VersionNameMap.__init__): Initialize mapping, use platform to
        define the default system platform.
        (VersionNameMap._automap_to_major_version): Some operating systems, such
        as iOS, have a naming scheme based on their major version and os name.
        Automatically generate such mappings.
        (VersionNameMap.to_name): Given a version object, platform name and
        table, find the closest matching version name.
        (VersionNameMap.strip_name_formatting): Remove spaces and extract the major version,
        if a version string is included in the name.
        (VersionNameMap.from_name): Return an os name and version given a version name.
        * Scripts/webkitpy/common/version_name_map_unittest.py: Added.
        (VersionMapTestCase):
        (VersionMapTestCase.test_default_system_platform):
        (VersionMapTestCase.test_mac_version_by_name):
        (VersionMapTestCase.test_ios_version_by_name):
        (VersionMapTestCase.test_mac_name_by_version):
        (VersionMapTestCase.test_ios_name_by_version):
        * Scripts/webkitpy/common/version_unittest.py:
        (VersionTestCase.test_contained_in):

2017-11-17  John Wilander  <wilander@apple.com>

        Storage Access API: UI process should update network process about granted access
        https://bugs.webkit.org/show_bug.cgi?id=176943
        <rdar://problem/34440612>

        Reviewed by Alex Christensen.

        This adds the TestRunner function setStatisticsHasHadNonRecentUserInteraction()
        which enables testing of prevalent resources with user interaction outside the
        24 hour window.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStorageAccessAPIEnabled):
        (WTR::TestRunner::setStatisticsHasHadNonRecentUserInteraction):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsHasHadNonRecentUserInteraction):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        (WTR::TestController::setStatisticsHasHadNonRecentUserInteraction):

2017-11-17  Ryan Haddad  <ryanhaddad@apple.com>

        Disable failing API tests for rdar://problem/35344202.

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKitCocoa/WKHTTPCookieStore.mm:

2017-11-17  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Fix WKTR's methods for testing row header and column header presence and count
        https://bugs.webkit.org/show_bug.cgi?id=179837

        Reviewed by Chris Fleizach.

        Add support to rowHeaders() for tables. Return an empty array in rowHeaders()
        and columnHeaders() upon failure. Rename getRowHeaders() and getColumnHeaders()
        to getTableRowHeaders() and getTableColumnHeaders() respectively.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rowHeaders const):
        (WTR::AccessibilityUIElement::columnHeaders const):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):

2017-11-16  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Update WinCairoRequirements
        https://bugs.webkit.org/show_bug.cgi?id=179790

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake:

2017-11-16  Daniel Bates  <dabates@apple.com>

        Add feature define for alternative presentation button element
        https://bugs.webkit.org/show_bug.cgi?id=179692
        Part of <rdar://problem/34917108>

        Reviewed by Andy Estes.

        Only enabled on Cocoa platforms by default.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-16  Per Arne Vollan  <pvollan@apple.com>

        Win EWS bots should reboot after N webkit-patch iterations.
        https://bugs.webkit.org/show_bug.cgi?id=177970

        Reviewed by Brent Fulgham.

        * EWSTools/start-queue-win.sh:

2017-11-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add initial support for WebDriver
        https://bugs.webkit.org/show_bug.cgi?id=179727

        Reviewed by Michael Catanzaro.

        Make it possible to run WebDriver tests with WPE.

        * Scripts/run-webdriver-tests: Add --wpe alias for --platform=wpe.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.__init__): Initialize _display_server from options.
        (WPEPort._driver_class): Use WaylandDriver when wayland is passed as display server option.
        * Scripts/webkitpy/webdriver_tests/webdriver_driver.py:
        (WebDriver.browser_env): Add virtual method to get the environment that should be used.
        * Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py: Copied from Tools/Scripts/webkitpy/webdriver_tests/webdriver_driver.py.
        (WebDriverWPE):
        (WebDriverWPE.__init__):
        (WebDriverWPE.binary_path):
        (WebDriverWPE.browser_name):
        (WebDriverWPE.capabilities):
        (WebDriverWPE.browser_env):
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
        (WebDriverW3CExecutor.__init__): Update the environment with the one provided by the driver.
        * wpe/jhbuild.modules: Upgrade dyz to newer version that supports automation.

2017-11-15  Alex Christensen  <achristensen@webkit.org>

        WebViews scheduled in custom run loop modes should be able to do more than 50ms of work at a time
        https://bugs.webkit.org/show_bug.cgi?id=179742
        <rdar://problem/35519421>

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/mac/WebViewScheduleInRunLoop.mm:
        (-[ScheduleInRunLoopDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):
        Load more than one scheduled WebView to test work that typically takes more than 50 ms.

2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223781.

        The test is now returning false, so the FIXME is not needed
        anymore.

        Reverted changeset:

        "WebsiteDataStoreCustomPaths.mm is failing after r223718"
        https://bugs.webkit.org/show_bug.cgi?id=178596
        https://trac.webkit.org/changeset/223781

2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224863.

        Introduced LayoutTest crashes on iOS Simulator.

        Reverted changeset:

        "Move JSONValues to WTF and convert uses of InspectorValues.h
        to JSONValues.h"
        https://bugs.webkit.org/show_bug.cgi?id=173793
        https://trac.webkit.org/changeset/224863

2017-11-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove GTK web inspector images
        https://bugs.webkit.org/show_bug.cgi?id=179716

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache):
        * glib/generate-inspector-gresource-manifest.py:
        (get_filenames.should_ignore_resource):
        * gtk/manifest.txt.in:
        * wpe/manifest.txt.in:

2017-11-15  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION(r221877): 'future' handled incorrectly for mac
        https://bugs.webkit.org/show_bug.cgi?id=179711
        <rdar://problem/35546604>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Use platform/mac-<version> instead of
        platform/<version> as the baseline search path.

2017-11-14  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement AccessibleNode class and support label and role attributes
        https://bugs.webkit.org/show_bug.cgi?id=179494

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-11-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Windows] Fix error while launching subprocess on Windows Python
        https://bugs.webkit.org/show_bug.cgi?id=179637

        Reviewed by Alex Christensen.

        To pass environment variables to subprocess.popen on Windows Python 2,
        the dict values must be str not unicode.
        Also is_native_win() method is added to port.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.is_native_win):
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_native_win):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_os_name_and_wrappers):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__):

2017-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
        https://bugs.webkit.org/show_bug.cgi?id=173793

        Reviewed by Brian Burg.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/JSONValue.cpp: Renamed from Tools/TestWebKitAPI/Tests/JavaScriptCore/InspectorValue.cpp.
        (TestWebKitAPI::TEST):

2017-11-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use more verbose version info from simctl
        https://bugs.webkit.org/show_bug.cgi?id=179687
        <rdar://problem/35539392>

        Reviewed by Tim Horton.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator): Address FIXME, use more verbose version.
        (Simulator._parse_runtimes): 'Internal' no longer stands along, check os for this
        string instead.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Mock simctl output specifies iOS
        8.4.1, not iOS 8.4.

2017-11-14  Daniel Bates  <dabates@apple.com>

        Update comment in FeatureDefines.xcconfig to reflect location of Visual Studio property files
        for feature defines

        Following r195498 and r201917 the Visual Studio property files for feature defines have
        moved from directory WebKitLibraries/win/tools/vsprops to directory Source/cmake/tools/vsprops.
        Update the comment in FeatureDefines.xcconfig to reflect the new location and names of these
        files.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-14  Jer Noble  <jer.noble@apple.com>

        Enable Modern EME tests in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=179544

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2017-11-14  Commit Queue  <commit-queue@webkit.org>

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

        "Broke CLoop test mozilla/js1_6/Array/regress-304828.js"
        (Requested by mlam on #webkit).

        Reverted changeset:

        "Pass --useDollarVM=true to all JSC tests."
        https://bugs.webkit.org/show_bug.cgi?id=179647
        https://trac.webkit.org/changeset/224800

2017-11-14  Antti Koivisto  <antti@apple.com>

        Enable display:contents by default
        https://bugs.webkit.org/show_bug.cgi?id=179655

        Reviewed by Sam Weinig.

        No need to enable this specifically for tests anymore.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-11-14  Tim Horton  <timothy_horton@apple.com>

        Long pressing a phone number with spaces in it results in a link sheet instead of a data detectors sheet
        https://bugs.webkit.org/show_bug.cgi?id=179646
        <rdar://problem/35337288>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (-[ActionSheetObserver _dataDetectionContextForWebView:]):
        (TestWebKitAPI::TEST):
        Add a test that ensures that a phone number with spaces in it
        invokes a data detectors sheet, not a normal link sheet.

2017-11-14  Emilio Cobos Álvarez  <emilio@crisal.io>

        Add committer status for Emilio Cobos Álvarez.
        https://bugs.webkit.org/show_bug.cgi?id=179667

        Unreviewed.

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

2017-11-13  Mark Lam  <mark.lam@apple.com>

        Pass --useDollarVM=true to all JSC tests.
        https://bugs.webkit.org/show_bug.cgi?id=179647

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2017-11-13  Simon Fraser  <simon.fraser@apple.com>

        When navigating back to a page, compositing layers may not use accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=178749
        rdar://problem/35158946

        Reviewed by Dean Jackson.

        Fix WTR and DRT to parse "useAcceleratedDrawing" out of "webkit-test-runner" options
        and use it to set the state of the web view.

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

2017-11-13  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Windows] Fix Python error for subprocess.popen with close_fds
        https://bugs.webkit.org/show_bug.cgi?id=179553

        Reviewed by Per Arne Vollan.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._start):
        (ServerProcess._should_close_fds):

2017-11-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Require woff2 1.0.2 and drop direct brotli dependency
        https://bugs.webkit.org/show_bug.cgi?id=179630

        Reviewed by Frédéric Wang.

        * gtk/jhbuild.modules:

2017-11-08  Keith Miller  <keith_miller@apple.com>

        Async iteration should only fetch the next method once and add feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179451

        Reviewed by Geoffrey Garen.

        Add feature flag for Async iteration.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-13  Gabriel Ivascu  <givascu@igalia.com>

        [GTK] Automatically adjust font size when gtk-xft-dpi changes
        https://bugs.webkit.org/show_bug.cgi?id=142673

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2017-11-13  Jonathan Bedard  <jbedard@apple.com>

        check-webkit-style cannot construct valid iOS version without an iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=179616
        <rdar://problem/35507018>

        Reviewed by David Kilzer.

        Instead of throwing an exception when we ask for an unavailable SDK on Mac,
        we should return None.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.xcode_sdk_version): Return 'None' version if the machine does not
        have the requested SDK.

2017-11-13  Keith Miller  <keith_miller@apple.com>

        Uninitialized variable in sort-Xcode-project-file
        https://bugs.webkit.org/show_bug.cgi?id=179581

        Reviewed by Simon Fraser.

        Previously all the unified source files were named
        UnifiedSource<some-number>.mm. This was changed to
        UnifiedSource<some-number>-mm.mm to stop Xcode from creating
        hashes for mm and cpp unified source files with the same
        number. This broke the expectations in sort-Xcode-project-file.

        * Scripts/sort-Xcode-project-file:
        (sortChildrenByFileName):
        (sortFilesByFileName):

2017-11-13  JF Bastien  <jfbastien@apple.com>

        std::expected: fix and test move
        https://bugs.webkit.org/show_bug.cgi?id=179617

        Reviewed by Alex Christensen.

        Test that unique_ptr can be moved around properly, both has a
        value and an error (and in a <void, unique> specialization).

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (TestWebKitAPI::snowflake::reset):
        (TestWebKitAPI::snowflake::snowflake):
        (TestWebKitAPI::snowflake::~snowflake):
        (TestWebKitAPI::TEST):

2017-11-13  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Windows] Make the port's normalize_test_name() method platform independent.
        https://bugs.webkit.org/show_bug.cgi?id=179572

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/base.py:
        (Port.normalize_test_name):

2017-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement SPI for clients to request data for a given attachment
        https://bugs.webkit.org/show_bug.cgi?id=179586
        <rdar://problem/35355720>

        Reviewed by Darin Adler.

        Augments existing API tests in WKAttachmentTests to additionally check that -requestData: yields the correct
        result when performing various editing operations. Also adds a new API test that cuts and pastes an attachment
        inserted using WKWebView attachment SPI, and expects that the data of the attachment can still be fetched using
        the _WKAttachment SPI, as well as another test that inserts an empty NSData and expects that requestData: also
        yields an empty NSData result.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[NSData shortDescription]):
        (-[_WKAttachment synchronouslyRequestData:]):
        (-[_WKAttachment expectRequestedDataToBe:]):
        (TestWebKitAPI::TEST):

2017-11-12  Gabriel Ivascu  <givascu@igalia.com>

        [GTK] Add functionality to handle font sizes in points
        https://bugs.webkit.org/show_bug.cgi?id=179285

        Reviewed by Carlos Garcia Campos and Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):

2017-11-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        check-webkit-style: AttributeError: 'NoneType' object has no attribute 'major'
        https://bugs.webkit.org/show_bug.cgi?id=179522

        Reviewed by Aakash Jain.

        IOSSimulatorPort.ios_version should return a Version object.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.ios_version): Return a Version object.

2017-11-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] The way to detect Windows 10 is wrong
        https://bugs.webkit.org/show_bug.cgi?id=179344

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_win_version):

2017-11-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] LayoutTests doesn't read TextExpectations files correctly
        https://bugs.webkit.org/show_bug.cgi?id=179219

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser._parse_line):
        * Scripts/webkitpy/port/apple.py:
        (ApplePort.__init__):
        (ApplePort._allowed_port_names):
        (ApplePort):
        (ApplePort._future_port_name):
        (ApplePort._generate_all_test_configurations):
        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.default_baseline_search_path):
        (WinCairoPort):
        (WinCairoPort._future_port_name):

2017-11-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Treat 'future' version correctly
        https://bugs.webkit.org/show_bug.cgi?id=179345

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/port/win.py:
        (WinCairoPort.default_baseline_search_path):

2017-11-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Finish rolling out r224544

        Rubber-stamped by Tim Horton.

        Now that https://bugs.webkit.org/show_bug.cgi?id=179431 has been fixed, we can once again allow one of the API
        tests added in r224512 (WKAttachmentTests.AttachmentUpdatesWhenChangingFontStyles) to test toggling underline
        style with a selected attachment element.

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

2017-11-10  Alex Christensen  <achristensen@webkit.org>

        _WKThumbnailView initialization with WKWebView needs to call correct initWithFrame
        https://bugs.webkit.org/show_bug.cgi?id=179537
        <rdar://problem/35275219>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit/WKThumbnailView.mm:
        (-[WKThumbnailViewDelegate webView:didFinishNavigation:]):
        (TestWebKitAPI::TEST):

2017-11-10  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove find_system_pid from port classes
        https://bugs.webkit.org/show_bug.cgi?id=179514
        <rdar://problem/35456900>

        Reviewed by David Kilzer.

        Removing dead code.

        * Scripts/webkitpy/port/base.py:
        (Port.find_system_pid): Deleted.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._start):
        * Scripts/webkitpy/port/win.py:
        (WinPort.find_system_pid): Deleted.

2017-11-10  Aakash Jain  <aakash_jain@apple.com>

        fix style failures in webkitpy: multiple statements on one line (semicolon)
        https://bugs.webkit.org/show_bug.cgi?id=179530

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py: Removed semicolon.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py: Ditto.
        * Scripts/webkitpy/tool/steps/runtests.py: Ditto.

2017-11-10  Aakash Jain  <aakash_jain@apple.com>

        fix style failures in webkitpy: expected 2 blank lines found 1
        https://bugs.webkit.org/show_bug.cgi?id=179529

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Added a blank line to follow style guidelines.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: Ditto.
        * Scripts/webkitpy/common/system/platforminfo_mock.py: Ditto.
        * Scripts/webkitpy/common/version.py: Ditto.
        * Scripts/webkitpy/layout_tests/models/test_failures.py: Ditto.
        * Scripts/webkitpy/port/mac_unittest.py: Ditto.
        * Scripts/webkitpy/port/simulator_process.py: Ditto.

2017-11-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r224267): WebViews scheduled with custom run loop modes don't load
        https://bugs.webkit.org/show_bug.cgi?id=179515

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WebViewScheduleInRunLoop.mm: Added.
        (-[ScheduleInRunLoopDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2017-11-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [webkitpy] Fix PlatformInfo._win_version since r224657
        https://bugs.webkit.org/show_bug.cgi?id=179520

        Reviewed by Aakash Jain.

        There are two problems.

        The return value of sys.getwindowsversion() doesn't match with
        Version.__init__ expects. Truncate the 4th and 5th of it.

        _win_version_tuple_from_cmd was deleted in r224657. But, it is
        still needed for Cygwin Python.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._win_version): Return [0:3] of getwindowsversion().
        Call _win_version_from_cmd for Cygwin Python.
        (PlatformInfo._win_version_from_cmd): Restored.

2017-11-10  Guillaume Emont  <guijemont@igalia.com>

        build-jsc: build testmasm for all platforms using cmake
        https://bugs.webkit.org/show_bug.cgi?id=179512

        Reviewed by Michael Catanzaro.

        * Scripts/build-jsc:

2017-11-09  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Unify version parsing code
        https://bugs.webkit.org/show_bug.cgi?id=179426
        <rdar://problem/35415191>

        Unreviewed fix to r224657.

        * Scripts/webkitpy/common/version.py:
        (Version.__init__): Check if an object is iterable.

2017-11-09  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Unify version parsing code
        https://bugs.webkit.org/show_bug.cgi?id=179426
        <rdar://problem/35415191>

        Reviewed by David Kilzer.

        webkitpy needs to parse version strings or version lists frequently. Rather than
        duplicate this code each time it's needed, unify it in a Version class.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__): Convert mac version string to version object and
        use _win_version instead of _win_version_tuple.
        (PlatformInfo.xcode_sdk_version): Convert SDK version string to Version object
        before returning it.
        (PlatformInfo.xcode_version): Return Version object instead of version string.
        (PlatformInfo._determine_mac_version): Accept Version object instead of string,
        eliminate parsing.
        (PlatformInfo._determine_win_version): Accept Version object instead of tuple.
        (PlatformInfo._win_version): Return Version object instead of tuple, have Version
        object own version string parsing.
        (PlatformInfo._win_version_tuple): Renamed to _win_version().
        (PlatformInfo._win_version_tuple_from_cmd): Deleted.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.xcode_sdk_version): Return Version object instead of string.
        (MockPlatformInfo.xcode_version): Dittio.
        * Scripts/webkitpy/common/version.py: Added.
        (Version): Version object.
        (Version.__init__): Initialize the Version object with a string, integer,
        tuple of integers, list of integers or another Version object.
        (Version.__len__): Return 5 so that the Version object can be treated as
        a list or tuple.
        (Version.__getitem__): Get item in Version object by index or string.
        (Version.__setitem__): Set item in Version object by index or string.
        (Version.__str__): Convert version to printable string, omitting trailing 0's.
        (Version.__cmp__): Compare two version strings, major taking precedence over
        minor, minor taking precedence over build.
        * Scripts/webkitpy/common/version_unittest.py: Added.
        (VersionTestCase): Test behavior of Version object.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): ios_version now returns a Version object.
        (IOSPort._is_valid_ios_version): Deleted.
        (IOSPort.get_option): Deleted.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.determine_full_port_name): Use Version object instead of owning parsing.
        (IOSDevicePort.ios_version): Return Version object instead of string.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.simulator_runtime): Use from_version instead of from_version_string.
        (IOSSimulatorPort.ios_version): Return Version object instead of string.
        (IOSSimulatorPort.use_multiple_simulator_apps): Use Version object instead of string.
        * Scripts/webkitpy/xcode/simulator.py:
        (Runtime.from_version): Accept Version object instead of string.
        (Runtime.from_version_string): Replaced by from_version.
        (Runtime.__repr__): When printing, a runtime's version will be a Version object instead
        of a tuple.
        (Simulator._parse_runtimes): Use Version object instead of tuple.
        (Simulator._parse_devices): Ditto.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Use Version object instead of tuples.

2017-11-09  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Cannot find ImageDiff executable
        https://bugs.webkit.org/show_bug.cgi?id=179508

        Reviewed by Per Arne Vollan.

        * Scripts/webkitpy/port/win.py:
        (WinPort.is_cygwin):
        (WinPort._path_to_image_diff):
        (WinPort.find_system_pid):

2017-11-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo EWS] svn-apply: 'cp' is not recognized as an internal or external command
        https://bugs.webkit.org/show_bug.cgi?id=179469

        Reviewed by Per Arne Vollan.

        WinCairo EWS bots haven't installed Cygwin.

        * Scripts/svn-apply:
        (scmCopy): Use 'copy' function instead of 'cp' command.

2017-11-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Update dyz (WPE MiniBrowser)
        https://bugs.webkit.org/show_bug.cgi?id=179492

        Reviewed by Michael Catanzaro.

        Update it to the last version as of today.
        This version not longer uses the C API.

        * wpe/jhbuild.modules:

2017-11-09  Christopher Reid  <chris.reid@sony.com>

        Use enum classes within FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=175172

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:

2017-11-09  Brent Fulgham  <bfulgham@apple.com>

        Test fix after r224609
        https://bugs.webkit.org/show_bug.cgi?id=178565
        <rdar://problem/11115901>

        Unreviewed test fix after r224609.

        Correct two test cases that attempt to push local file URLs in violation of our
        same origin policies. The fix is to grant universal file access, as we do for similar
        LayoutTests.

        * TestWebKitAPI/Tests/WebKit/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):

2017-11-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, remove Dan from the soup network watchlist

        Per his request. It's not Hotel California; we should probably let him leave.

        * Scripts/webkitpy/common/config/watchlist:

2017-11-08  Don Olmstead  <don.olmstead@sony.com>

        Add Windows powershell EWS script
        https://bugs.webkit.org/show_bug.cgi?id=179453

        Reviewed by Brent Fulgham.

        * EWSTools/Start-Queue.ps1: Added.

2017-11-08  Jeremy Jones  <jeremyj@apple.com>

        HTMLMediaElement should not use element fullscreen on iOS
        https://bugs.webkit.org/show_bug.cgi?id=179418
        rdar://problem/35409277

        Reviewed by Eric Carlson.

        Add ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN to determine if HTMLMediaElement should use element full screen or not.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-08  Tim Horton  <timothy_horton@apple.com>

        [ios-simulator] API test WebKit.BundleParameters is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=178363
        <rdar://problem/35043144>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
        Add a test.

2017-11-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement delegate hooks for attachment element insertion and removal
        https://bugs.webkit.org/show_bug.cgi?id=179016
        <rdar://problem/35250890>

        Reviewed by Tim Horton.

        See WebCore/ChangeLog for more details.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[AttachmentUpdateObserver init]):
        (-[AttachmentUpdateObserver inserted]):
        (-[AttachmentUpdateObserver removed]):
        (-[AttachmentUpdateObserver _webView:didInsertAttachment:]):
        (-[AttachmentUpdateObserver _webView:didRemoveAttachment:]):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::ObserveAttachmentUpdatesForScope):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::~ObserveAttachmentUpdatesForScope):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::observer const):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::expectAttachmentUpdates):
        (-[TestWKWebView _synchronouslyExecuteEditCommand:argument:]):
        (-[TestWKWebView expectUpdatesAfterCommand:withArgument:expectedRemovals:expectedInsertions:]):
        (TestWebKitAPI::TEST):

2017-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Web Inspector: use JSON::{Array,Object,Value} instead of Inspector{Array,Object,Value}
        https://bugs.webkit.org/show_bug.cgi?id=173619

        Reviewed by Brian Burg.

        Update InspectorValue unit tests to use JSON namespace and add more basic tests to cover all the API.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/JavaScriptCore/InspectorValue.cpp:
        (TestWebKitAPI::TEST):

2017-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r224179): [GTK] Several WebViewEditor tests are failing since r224179
        https://bugs.webkit.org/show_bug.cgi?id=179366

        Reviewed by Michael Catanzaro.

        Use always a toplevel window for WebViewEditor tests instead of creating and destroying one only to flush editor
        state.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:

2017-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Build inspector resources using copy-user-interface-resources.pl script
        https://bugs.webkit.org/show_bug.cgi?id=179317

        Reviewed by Michael Catanzaro.

        Move generate-inspector-gresource-manifest.py to glib dir to be shared by GTK+ and WPE ports and update it to
        receive an input directory instead of a list of patterns.
        File::Copy::Recursive is required by copy-user-interface-resources.pl, so make sure it's installed.

        * glib/generate-inspector-gresource-manifest.py: Renamed from Tools/gtk/generate-inspector-gresource-manifest.py.
        (get_filenames):
        (get_filenames.should_ignore_resource):
        * gtk/install-dependencies:
        * wpe/generate-inspector-gresource-manifest.py: Removed.
        * wpe/install-dependencies:

2017-11-07  Don Olmstead  <don.olmstead@sony.com>

        Fix webkitpy tests after rev 224549.

        Unreviewed build fix.

        * Scripts/webkitpy/common/config/ports.py:
        (WinCairoPort.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_wincairo_port):

2017-11-07  Aakash Jain  <aakash_jain@apple.com>

        Enable webkitpy EWS bubbles
        https://bugs.webkit.org/show_bug.cgi?id=178539

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/config/queues.py: Added webkitpy EWS.

2017-11-07  Don Olmstead  <don.olmstead@sony.com>

        Add a WinCairo EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=179390

        Reviewed by Lucas Forschler.

        * QueueStatusServer/config/queues.py:
        * QueueStatusServer/model/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/common/config/ports_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:

2017-11-07  Aakash Jain  <aakash_jain@apple.com>

        fix check-webkit-style errors in webkitpy about not having two spaces before inline comment
        https://bugs.webkit.org/show_bug.cgi?id=171506

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_reverse_diff): Added two spaces before inline comment.
        (test_create_patch_is_full_patch): Ditto.
        * Scripts/webkitpy/common/thread/messagepump.py:
        (MessagePump): Ditto.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config): Ditto.
        * Scripts/webkitpy/style/checker.py: Ditto.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_preprocessor_in_include_section): Ditto.

2017-11-07  Aakash Jain  <aakash_jain@apple.com>

        Add support for webkitpy tests EWS
        https://bugs.webkit.org/show_bug.cgi?id=178480

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/ews.json: Added webkitpy EWS.
        * Scripts/webkitpy/common/net/generictestresults.py: Renamed from Scripts/webkitpy/common/net/bindingstestresults.py.
        * Scripts/webkitpy/common/net/generictestresults_unittest.py: Renamed from Scripts/webkitpy/common/net/bindingstestresults_unittest.py.
        * Scripts/webkitpy/tool/bot/patchanalysistask.py:
        (PatchAnalysisTask._test_patch): Do not retry webkitpy test since they are not flaky.
        * Scripts/webkitpy/tool/bot/bindingstestresultsreader.py: Updated import for BindingsTestResult.
        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py: Ditto.
        * Scripts/webkitpy/tool/bot/webkitpytestresultsreader.py: Copied from Scripts/webkitpy/tool/bot/bindingstestresultsreader.py.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.begin_work_queue): Added webkitpy test result reader.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py: Updated unit-tests.
        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py: Run webkitpy EWS only for relevant changes.
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Run webkitpy tests when --group=webkitpy is passed.
        (RunTests._run_webkitpy_tests): Method to invoke webkitpy tests.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (test_runtests_webkitpy): Added unit-test.

2017-11-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r224512 and r224521.
        https://bugs.webkit.org/show_bug.cgi?id=179388

        An API test added with this change is failing an assertion on
        the bots. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[Attachment Support] Implement delegate hooks for attachment
        element insertion and removal"
        https://bugs.webkit.org/show_bug.cgi?id=179016
        https://trac.webkit.org/changeset/224512

        "Remove stray logging from a newly added API test"
        https://trac.webkit.org/changeset/224521

2017-11-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove stray logging from a newly added API test

        This was only for debugging purposes, and should have been removed before landing.

        Rubber-stamped by Tim Horton.

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

2017-11-06  Jonathan Bedard  <jbedard@apple.com>

        Only build ImageDiff for mac
        https://bugs.webkit.org/show_bug.cgi?id=179349
        <rdar://problem/35376237>

        Reviewed by Tim Horton.

        * ImageDiff/Makefile:

2017-11-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal build after updating to a newer SDK

        There shouldn't be any need to include and implement these method stubs anymore,
        even when building against the shipping iOS 11 SDK.

        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[MockDropSession session]): Deleted.

2017-11-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement delegate hooks for attachment element insertion and removal
        https://bugs.webkit.org/show_bug.cgi?id=179016
        <rdar://problem/35250890>

        Reviewed by Tim Horton.

        Introduces new API tests to check that various editing operations will or won't result in the new attachment
        insertion and removal delegate hooks being fired. Additionally refactors an existing test to verify that
        attachments insertion and removal is observable by the UI delegate.

        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:
        (-[AttachmentUpdateObserver init]):
        (-[AttachmentUpdateObserver inserted]):
        (-[AttachmentUpdateObserver removed]):
        (-[AttachmentUpdateObserver _webView:didInsertAttachment:]):
        (-[AttachmentUpdateObserver _webView:didRemoveAttachment:]):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::ObserveAttachmentUpdatesForScope):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::~ObserveAttachmentUpdatesForScope):
        (TestWebKitAPI::ObserveAttachmentUpdatesForScope::expectAttachmentUpdates):

        Implement a testing mechanism to temporarily bind a UI delegate to a given WKWebView and listen for inserted or
        removed attachments over the course of a particular scope. The API tests use this mechanism to check that the UI
        delegate hooks added in this patch are invoked with the right attachments when performing edit commands.

        (-[TestWKWebView _synchronouslyExecuteEditCommand:argument:]):
        (-[TestWKWebView expectUpdatesAfterCommand:withArgument:expectedRemovals:expectedInsertions:]):
        (TestWebKitAPI::TEST):

2017-11-06  Christopher Reid  <chris.reid@sony.com>

        Use enum classes within FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=175172

        Reviewed by Myles C. Maxfield.

        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:

2017-11-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] -Wsign-compare warning in EventSenderProxyWPE.cpp
        https://bugs.webkit.org/show_bug.cgi?id=179039

        Reviewed by Žan Doberšek.

        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::releaseTouchPoint):

2017-11-06  Robin Morisset  <rmorisset@apple.com>

        Add a third benchmark to TailBench
        https://bugs.webkit.org/show_bug.cgi?id=178815

        Reviewed by Saam Barati.

        Add a new benchmark to TailBench: a BF interpreter written in a weird kinda functional style

        * Scripts/run-jsc-benchmarks:

2017-11-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Fix gtk-doc generation with gtk-doc master
        https://bugs.webkit.org/show_bug.cgi?id=179252

        Reviewed by Carlos Garcia Campos.

        gtkdoc-scangobj has changed to no longer use a shell when executing its subcommands. In
        particular, this means we can no longer rely on shell stuff in our run command that we use
        to run the scanner. We currently use the RUN envvar to set LD_LIBRARY_PATH, and the end
        result is gtkdoc-scangobj now attempts to execute our environment variable instead of the
        scanner itself. We can just set LD_LIBRARY_PATH directly, instead of using RUN, in order to
        make documentation generation work again.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_scangobj):

2017-11-04  Aishwarya Nirmal  <anirmal@apple.com>

        [Touch Bar Web API] Add support for menuitem tag
        https://bugs.webkit.org/show_bug.cgi?id=179020

        Reviewed by Ryosuke Niwa.

        Defines flags for the menu item test so that the element is recognized
        only while its test is being run.

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

2017-11-03  Andy Estes  <aestes@apple.com>

        [iOS] Append the platform name to the product directory on all embedded platforms
        https://bugs.webkit.org/show_bug.cgi?id=179271

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitdirs.pm:
        (determineConfigurationProductDir):

2017-11-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Add --wincairo option to run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=179217

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/port/factory.py:
        (platform_options):

2017-11-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Avoid duplicating code for dist and distcheck targets
        https://bugs.webkit.org/show_bug.cgi?id=179154

        Reviewed by Carlos Garcia Campos.

        Move the script out of Tools/gtk because it is already used by WPE. Also, drop the .py
        prefix because it is executable.

        * Scripts/make-dist: Renamed from Tools/gtk/make-dist.py.

2017-11-03  Jonathan Bedard  <jbedard@apple.com>

        TestController platformAdjustContext should use provided WKContext for Mac
        https://bugs.webkit.org/show_bug.cgi?id=179124
        <rdar://problem/35295176>

        Reviewed by Darin Adler.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration): Use the provided WKContext, since that is
        a WebProcessPool, instead of creating a second one.

2017-11-02  Christopher Reid  <chris.reid@sony.com>

        Add a FileSystem namespace to FileSystem.cpp
        https://bugs.webkit.org/show_bug.cgi?id=179063

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/Tests/WebCore/FileSystem.cpp:
        * TestWebKitAPI/Tests/WebCore/SecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebCore/SharedBufferTest.cpp:
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

2017-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][JHBuild] Update WPEBackend and WPEBackend-mesa
        https://bugs.webkit.org/show_bug.cgi?id=179169

        Reviewed by Michael Catanzaro.

        Update WPEBackend and WPEBackend-mesa to last master as of today.

        * wpe/jhbuild.modules:

2017-11-02  Frederic Wang  <fwang@igalia.com>

        Add references to bug 179167 in FIXME comments
        https://bugs.webkit.org/show_bug.cgi?id=179168

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-01  Jeremy Jones  <jeremyj@apple.com>

        Implement WKFullscreenWindowController for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=178924
        rdar://problem/34697120

        Reviewed by Simon Fraser.

        Enable ENABLE_FULLSCREEN_API for iOS.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-11-01  Simon Fraser  <simon.fraser@apple.com>

        Misc display list and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179150

        Reviewed by Tim Horton.

        Add system trace points for display list recording.

        * Tracing/SystemTracePoints.plist:

2017-11-01  Stephan Szabo  <stephan.szabo@sony.com>

        [Win] Detect Visual Studio 2017 location
        https://bugs.webkit.org/show_bug.cgi?id=175275

        Reviewed by Yusuke Suzuki.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/update-vswhere.py: Added.
        * Scripts/webkitdirs.pm:
        (requireModulesForVSWhere):
        (pickCurrentVisualStudioInstallation):
        (pickLegacyVisualStudioInstallation):
        (visualStudioInstallDir):
        (visualStudioInstallDirVSWhere):
        (visualStudioInstallDirLegacy):
        (visualStudioInstallDirFallback):
        (msBuildInstallDir):
        (visualStudioVersion):
        (visualStudioVersionFromInstallDir):
        (generateBuildSystemFromCMakeProject):

2017-11-01  Tim Horton  <timothy_horton@apple.com>

        Fix the !USE(QUICKLOOK) build
        https://bugs.webkit.org/show_bug.cgi?id=179128

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp:

2017-11-01  Frederic Wang  <fwang@igalia.com>

        Make iOS Find UI reveal matches in scrollable elements
        https://bugs.webkit.org/show_bug.cgi?id=178789

        Reviewed by Tim Horton.

        This patch exposes WKWebView's findString function in order to test the fix for bug 178789.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::findString): Dummy implementation of findString.
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::findString): Ditto.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: Declare findString.
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::findString): Dummy implementation of findString.
        * TestRunnerShared/UIScriptContext/UIScriptController.h: Declare findString.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::findString): Implement findString by forwarding the call to the
        web view.
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::findString): Dummy implementation of findString.

2017-11-01  Alex Christensen  <achristensen@webkit.org>

        Add a test for _WKInputDelegate.willSubmitFormValues
        https://bugs.webkit.org/show_bug.cgi?id=179086

        Reviewed by Darin Adler.

        Hidden input types are not included in this submission because FormSubmission::create ignores them
        because input.isTextField() returns false.  This is existing behavior that wasn't shown by a test.
        HTTPBodies are also not sent to WKURLSchemeHandlers.  This is existing behavior that wasn't shown by a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/_WKInputDelegate.mm: Added.
        (-[FormSubmissionDelegate _webView:willSubmitFormValues:userObject:submissionHandler:]):
        (TEST):

2017-10-31  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Add Inspector menu items to Mac MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=65218

        Reviewed by Joseph Pecoraro.

        Add Option-Command-I shortcut and corresponding Show/Close Web Inspector menu item to Mac MiniBrowser.
        Only works when browser window is focused, but at least WI can be opened without having to Inspect Element.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController showHideWebInspector:]):
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController showHideWebInspector:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController showHideWebInspector:]):

2017-10-31  Alex Christensen  <achristensen@webkit.org>

        Use asynchronous ResourceHandleClient calls for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=160677

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm:
        (TestWebKitAPI::TEST):
        The HTML being loaded contains an iframe, so testing if the main resource has loaded doesn't necessarily mean all subresources are loaded.
        Wait until they are loaded before continuing the test.  This is a test of editing commands once the page has loaded, not a test of loading.

2017-10-31  Commit Queue  <commit-queue@webkit.org>

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

        The patch requires non-standard perl modules in macOS and
        breaks AWFY (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "[Win] Detect Visual Studio 2017 location"
        https://bugs.webkit.org/show_bug.cgi?id=175275
        https://trac.webkit.org/changeset/224143

2017-10-31  Tim Horton  <timothy_horton@apple.com>

        Clean up some drag and drop feature flags
        https://bugs.webkit.org/show_bug.cgi?id=179082

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/ios/UIKitSPI.h:

2017-10-31  Tim Horton  <timothy_horton@apple.com>

        Fix up some content filtering feature flags
        https://bugs.webkit.org/show_bug.cgi?id=179079

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebKitCocoa/ContentFilteringPlugIn.mm:
        (-[MockContentFilterEnabler initWithCoder:]):
        (-[MockContentFilterEnabler dealloc]):

2017-10-31  Youenn Fablet  <youenn@apple.com>

        rwt should allow service worker to load localhost HTTPS resources with any certificate
        https://bugs.webkit.org/show_bug.cgi?id=179018

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): allowing any SSL certificate for service workers.

2017-10-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement WKWebView SPI for inserting attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=179013
        <rdar://problem/35249668>

        Reviewed by Tim Horton.

        Adds a new API test suite to exercise attachment element insertion and manipulation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm: Added.
        (webViewForTestingAttachments):
        (testHTMLData):
        (testImageData):
        (-[TestWKWebView synchronouslyInsertAttachmentWithFilename:contentType:data:options:]):
        (-[TestWKWebView valueOfAttribute:forQuerySelector:]):
        (TestWebKitAPI::TEST):

2017-10-31  Alex Christensen  <achristensen@webkit.org>

        Fix custom header field setting with reloads and asynchronous navigation action policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=179064

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        WKBundlePageWillSendSubmitEventCallback is called with incorrect frame parameter
        https://bugs.webkit.org/show_bug.cgi?id=176719

        Reviewed by Chris Dumez.

        Test that WKBundlePageWillSendSubmitEventCallback is called with separate frame and
        sourceFrame parameters when the target frame of the form submission is not the source frame.

        * TestWebKitAPI/Tests/WebKit/WillSendSubmitEvent.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKit/WillSendSubmitEvent_Bundle.cpp:
        (TestWebKitAPI::willSendSubmitEvent):
        * TestWebKitAPI/Tests/WebKit/auto-submitting-form.html:

2017-10-30  Alex Christensen  <achristensen@webkit.org>

        ASSERTION FAILED: internalValuesConsistent(m_url) in WebCore::URLParser::URLParser
        https://bugs.webkit.org/show_bug.cgi?id=178861

        Reviewed by Tim Horton.

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

2017-10-30  Commit Queue  <commit-queue@webkit.org>

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

        MotionMark regression (Requested by shallawa on #webkit).

        Reverted changeset:

        "When navigating back to a page, compositing layers may not
        use accelerated drawing"
        https://bugs.webkit.org/show_bug.cgi?id=178749
        https://trac.webkit.org/changeset/224078

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Fix build warnings
        https://bugs.webkit.org/show_bug.cgi?id=178899

        Reviewed by Carlos Alberto Lopez Perez.

        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (testContextMenuDownloadActions):
        (testBlobDownload):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        * WebKitTestRunner/PlatformWPE.cmake:
        * WebKitTestRunner/wpe/HeadlessViewBackend.cpp:
        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::threadDefaultContext): Deleted.

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Upstream or stop using cairo-egl-device-create-for-egl-surface.patch
        https://bugs.webkit.org/show_bug.cgi?id=178898

        Reviewed by Žan Doberšek.

        This patch seems to be unused.

        * wpe/jhbuild.modules:
        * wpe/patches/cairo-egl-device-create-for-egl-surface.patch: Removed.

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build more files under WebCore as unified sources and get rid of WebCorePlatformWPE build target
        https://bugs.webkit.org/show_bug.cgi?id=178964

        Reviewed by Carlos Alberto Lopez Perez.

        * TestWebKitAPI/PlatformWPE.cmake:

2017-10-12  Frederic Wang  <fwang@igalia.com>

        Remove support for running safari on the iOS simulator with Xcode < 9.0
        https://bugs.webkit.org/show_bug.cgi?id=178203

        Reviewed by Alexey Proskuryakov.

        This is a follow-up of r223234. We no longer support iOS WebKit development for Xcode < 9.0
        and do not have any iOS simulator builders in our infrastructure. Hence we can remove the
        special case to calculate the iOS simulator applications path for these old versions.

        * Scripts/webkitdirs.pm:
        (iosSimulatorApplicationsPath): Remove special case for XCode < 9.0

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Expose availability of certain editing commands in WebKitEditorState
        https://bugs.webkit.org/show_bug.cgi?id=168219

        Reviewed by Ryosuke Niwa.

        Test it.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        (loadContentsAndTryToCutSelection):
        (testWebViewEditorNonEditable):
        (testWebViewEditorEditorStateTypingAttributes):
        (testWebViewEditorInsertImage):
        (testWebViewEditorCreateLink):

2017-10-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build gst-plugins-base without pango support
        https://bugs.webkit.org/show_bug.cgi?id=178918

        Reviewed by Carlos Garcia Campos.

        We need to build gst-plugins-base without pango support for WPE. Let's use JHBuild
        conditions so we can make platform-specific changes in the shared GStreamer moduleset.

        * gstreamer/jhbuild.modules:
        * gtk/jhbuildrc:
        * wpe/jhbuildrc:

2017-10-27  Stephan Szabo  <stephan.szabo@sony.com>

        [Win] Detect Visual Studio 2017 location
        https://bugs.webkit.org/show_bug.cgi?id=175275

        Reviewed by Per Arne Vollan.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/update-vswhere.py: Added.
        * Scripts/webkitdirs.pm:
        (pickCurrentVisualStudioInstallation):
        (pickLegacyVisualStudioInstallation):
        (visualStudioInstallDir):
        (visualStudioInstallDirVSWhere):
        (visualStudioInstallDirLegacy):
        (visualStudioInstallDirFallback):
        (msBuildInstallDir):
        (visualStudioVersion):
        (visualStudioVersionFromInstallDir):
        (generateBuildSystemFromCMakeProject):

2017-10-27  Devin Rousso  <webkit@devinrousso.com>

        Create watchlist for files related WebInspector Recording
        https://bugs.webkit.org/show_bug.cgi?id=178965

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/common/config/watchlist:

2017-10-27  Jonathan Bedard  <jbedard@apple.com>

        Windows and WebViews are retained after re-configure
        https://bugs.webkit.org/show_bug.cgi?id=178902
        <rdar://problem/35211518>

        Reviewed by Alexey Proskuryakov.

        The test runner effectively leaks windows every time a test changes configuration.
        We give each test it's own AutoreleasePool to fix this problem.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest): Add an AutoRelease pool scoping a test run
        so that when a configuration changes, the old window and WebView are released.

2017-10-27  Eric Carlson  <eric.carlson@apple.com>

        NowPlayingInfo should contain a unique identifier
        https://bugs.webkit.org/show_bug.cgi?id=178872
        <rdar://problem/34924012>

        Unreviewed, fix a flakey test.

        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView hasActiveNowPlayingSession]): Update _lastUpdatedElapsedTime.
        (-[NowPlayingTestWebView _handleActiveNowPlayingSessionInfoResponse:title:duration:elapsedTime:]): Deleted.

2017-10-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        autoinstall can't download from http://pypi.python.org
        https://bugs.webkit.org/show_bug.cgi?id=178925

        Reviewed by Ryosuke Niwa.

        The web server pypi.python.org rejects non secure http.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook._install_mechanize): Use https instead of http.
        (AutoinstallImportHook._install_pep8): Ditto.
        (AutoinstallImportHook._install_pylint): Ditto.
        (AutoinstallImportHook._install_buildbot): Ditto.
        (AutoinstallImportHook._install_coverage): Ditto.

2017-10-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK][WPE] install-dependencies can't find libapache2-mod-php7.0 on Ubuntu 17.10
        https://bugs.webkit.org/show_bug.cgi?id=178854

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/base.py:
        (Port._debian_php_version): Return "-php7.1" if libphp7.1.so found.
        (Port._is_debian_php_version_7): Deleted.
        * gtk/install-dependencies: Install libapache2-mod-php instead of libapache2-mod-php7.0.
        * wpe/install-dependencies: Ditto.

2017-10-25  Simon Fraser  <simon.fraser@apple.com>

        When navigating back to a page, compositing layers may not use accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=178749
        rdar://problem/35158946

        Reviewed by Dean Jackson.

        Fix WTR and DRT to parse "useAcceleratedDrawing" out of "webkit-test-runner" options
        and use it to set the state of the web view.

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

2017-10-26  Alex Christensen  <achristensen@webkit.org>

        Move WKWebViewConfiguration validation to WKWebView construction
        https://bugs.webkit.org/show_bug.cgi?id=178840

        Reviewed by Tim Horton.

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

2017-10-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Demonstrate a possible structure of the WebGPU API
        https://bugs.webkit.org/show_bug.cgi?id=178874

        Reviewed by Dean Jackson.

        Over the past few weeks, we've been putting together an example showing that a WebGPU API
        which has implicit barriers can work on all three low-level graphics APIs. We've implemented
        it on top of Vulkan first, because this is the API which has the strictest requirements and
        is most difficult to use.

        With this API, this is a valid WebGPU snippet:

        auto device = WebGPU::Device::create(hInstance, hWnd);
        auto& commandQueue = device->getCommandQueue();
        auto& renderState = device->getRenderState(vertexShader, "main", fragmentShader, "main", { }, { }, { }, nullptr);
        
        … later, in the draw() function …
        
        auto renderPass = commandQueue->createRenderPass(nullptr);
        renderPass->setRenderState(renderState);
        renderPass->setViewport(0, 0, width, height);
        renderPass->setScissorRect(0, 0, width, height);
        renderPass->draw(3);
        commandQueue->commitRenderPass(std::move(renderPass));
        commandQueue->present();

        This snippet doesn’t hook up any vertex attributes or resources, which means the vertex
        shader has to say something like ({vec4(…), vec4(…), vec4(…)})[gl_VertexIndex]. It also
        passes in “nullptr” when creating the render pass, which means “render to the screen, rather
        than to a frame buffer.” You can also see that it doesn’t attach any resources to the draw
        call.

        In Direct3D 12 and Vulkan, resources are bound in sets, rather than individually. For
        example, a set might contain two uniform buffers, a texture, and another uniform buffer. At
        draw time, you swap in whole sets of resources with a single call. A shader invocation can
        access a collection of sets. Because all shader resource accesses are indirected through
        these sets, the shape of these sets needs to be supplied at the time you compile the render
        state. Here is a snippet which bounds a single set which contains a uniform buffer and a
        texture:

        auto buffer = device->getBuffer(bufferInitialContents);
        auto texture = device->getTexture(buffer width, height, WebGPU::PixelFormat::RGBA8, textureInitialContents);
        // One resource set, which holds a single uniform buffer object and a single texture
        auto& renderState = device->getRenderState(vertexShader, "main", fragmentShader, "main", { }, { }, { { WebGPU::ResourceType::UniformBufferObject, WebGPU::ResourceType::Texture } }, nullptr);
        
        … later, in the draw() function …
        
        auto renderPass = commandQueue->createRenderPass(nullptr);
        renderPass->setRenderState(renderState);
        renderPass->setResources(0, { WebGPU::UniformBufferObjectReference(buffer.get()), WebGPU::TextureReference(texture.get()) });
        …
        renderPass->draw(3);
        commandQueue->commitRenderPass(std::move(renderPass));
        commandQueue->present();
        
        The first argument to the setResources() call identifies which set to populate with the supplied resources.

        One tenant of the low-level graphics APIs is that, if you’ve enabled double buffering (or
        triple buffering), the GPU is executing one frame at the same time you are recording the
        next frame. This often means that you need duplicate resources so the CPU and GPU don’t step
        on each other’s toes. However, platforms have platform-specific requirements about whether
        or not they can be double / triple buffered, and we don’t want to expose this to the Web for
        fear of badly-authored programs.

        To solve this, resources are reference counted, and the return type of getBuffer() is an
        RAII type called BufferHolder which increments and decrements the reference count
        automatically. The reference count is also incremented and decremented when the GPU is using
        the resource in a Pass. When the reference count reaches 0, the resource isn’t destroyed;
        instead, it’s simply moved to a “free list” which getBuffer() may pull from. Therefore,
        applications don’t need to know whether the frame buffer is double buffered or triple
        buffered; they can just getBuffer() each frame, and the correct number of buffers will be
        created and recycled.
        
        {
            auto buffer = device->getBuffer(bufferSize); // These get recycled
            … populate the buffer …
            auto renderPass = commandQueue->createRenderPass(nullptr);
            renderPass->setRenderState(renderState);
            renderPass->setResources(0, { WebGPU::UniformBufferObjectReference(buffer.get()) });
            …
            renderPass->draw(…);
            commandQueue->commitRenderPass(std::move(renderPass));
        }
        commandQueue->present();

        In Direct3D and Vulkan, vertex buffers and index buffers are not part of the resource sets
        mentioned above. Instead, you tell the render state about the shape of the vertex and index
        buffers, and you swap them out independently in the draw loop. Metal and Vulkan have almost
        identical API to specify this shape of the vertex buffers, so I’ve mostly copied it. In this
        example, we have two vertex attributes, a vec2 and a vec3, which both come from the same
        buffer:
        
        // { Attribute format, offset within stride, buffer to pull from }
        std::vector<WebGPU::RenderState::VertexAttribute> vertexAttributes = { {WebGPU::RenderState::VertexFormat::Float2, 0, 0}, {WebGPU::RenderState::VertexFormat::Float3, sizeof(float) * 2, 0} };
        // A single vertex buffer, with a stride of 5 floats
        auto& renderState = device->getRenderState(vertexShader, "main", fragmentShader, "main", { sizeof(float) * 5 }, vertexAttributes, resourceTypes, nullptr);
        
        … later, in the draw() function …
        
        auto renderPass = commandQueue->createRenderPass(nullptr);
        renderPass->setRenderState(renderState);
        renderPass->setVertexAttributeBuffers({ vertexBuffer.get() }); // The one vertex buffer which both attributes pull from
        renderPass->setResources(…);
        …
        renderPass->draw(…);
        commandQueue->commitRenderPass(std::move(renderPass));
        commandQueue->present();

        You can also tell the RenderState about how many render targets you have and their formats,
        and then when you create the RenderPass, you specify the specific textures you want to
        render into.

        std::vector<WebGPU::PixelFormat> colorPixelFormats = { WebGPU::PixelFormat::RGBA8, WebGPU::PixelFormat::RGBA8 }; // Two render targets, with these formats
        auto& renderState = device->getRenderState(vertexShader, "main", fragmentShader, "main", vertexBufferStrides, vertexAttributes, resourceTypes, &colorPixelFormats);
        
        … later, in the draw() function …
        
        std::vector<std::reference_wrapper<WebGPU::Texture>> destinationTextures = { texture1->get(), texture2->get() };
        auto renderPass = commandQueue->createRenderPass(&destinationTextures);
        renderPass->setRenderState(renderState);
        …
        renderPass->draw(…);
        commandQueue->commitRenderPass(std::move(renderPass));
        
        // Now, draw one of the textures to the screen. Note that no synchronization is necessary here!
        auto renderPass = commandQueue->createRenderPass(nullptr);
        renderPass->setRenderState(renderState2);
        renderPass->setResources(0, { WebGPU:: TextureReference(texture1.get()) });
        …
        renderPass->draw(…);
        commandQueue->commitRenderPass(std::move(renderPass));
        commandQueue->present();

        Just like how in Metal has Render Encoders and Compute Encoders, WebGPU has RenderPasses
        and ComputePasses.

        auto& computeState = device->getComputeState(computeShader, "main", resourceTypes);
        …
        auto computePass = commandQueue->createComputePass();
        computePass->setComputeState(computeState);
        computePass->setResources(0, resources);
        computePass->dispatch(width, height, depth);
        commandQueue->commitComputePass(std::move(computePass));
        
        // Now, draw the resources we just computed. Note that no synchronization is necessary here!
        auto renderPass = commandQueue->createRenderPass(nullptr);
        renderPass->setRenderState(renderState);
        renderPass->setResources(0, resources });
        …
        renderPass->draw(…);
        commandQueue->commitRenderPass(std::move(renderPass));
        commandQueue->present();

        There are also two other types of passes: one that corresponds to a Metal blit encoder, and
        one that allows the CPU to change the contents of GPU buffers and textures. This last kind
        of pass is a little interesting: you can’t just change the contents of a buffer at any time
        you feel like it, because that resource might be in use by the GPU. Therefore, we need to do
        the same kind of synchronization that we already do at render pass boundaries.

        In addition, both Vulkan and Direct3D have a concept of a memory heap. A resource might
        exist inside a heap which is fast, but invisible from the CPU, or in a heap which is slow,
        but visible by the CPU. Certain operations are not possible from some types of images (e.g.
        non-tiled textures may not be able to be sampled from). The usual way to get around this
        problem is to have two resources: a slow staging resource which the CPU can see, and a fast
        resource which the CPU can’t see. Uploading data is a two-pass algorithm, where the CPU
        memcpy()s into the slow staging resource, and then a blit command is enqueued on the GPU to
        copy the contents of the staging resource to the real resource. This requires that the
        upload have access to the commandQueue so it can possibly enqueue a blit between the staging
        and real resources. Therefore, a pass is the right level of abstraction for these facilities.

        std::queue<boost::unique_future<std::vector<uint8_t>>> futureQueue; // Promises for data downloads from the GPU
        
        … later, in the draw() function …
        
        // See if any of the previously-enqueued downloads are finished
        while (!futureQueue.empty() && futureQueue.front(). has_value()) {
            std::vector<uint8_t>& data = futureQueue.front().get();
            // Use the downloaded data
            futureQueue.pop();
        }
        …
        auto hostAccessPass = commandQueue->createHostAccessPass();
        hostAccessPass->overwriteBuffer(buffer->get(), bufferContents); // Upload data to a resource
        
        futureQueue.emplace(hostAccessPass->getBufferContents(buffer->get()));
        commandQueue->commitHostAccessPass(std::move(hostAccessPass));
        
        You can also issue copy commands between resources entirely on the GPU:
        
        auto blitPass = commandQueue->createBlitPass();
        blitPass->copyTexture(source->get(), destination->get(), sourceX, sourceY, destinationX, destinationY, width, height);
        commandQueue->commitBlitPass(std::move(blitPass));

        * Scripts/webkitpy/style/checker.py:
        * WebGPUAPIStructure/Example/Example.cpp: Added.
        (readFile):
        (drawWebGPU):
        (wWinMain):
        (MyRegisterClass):
        (InitInstance):
        (WndProc):
        * WebGPUAPIStructure/Example/Example.h: Added.
        * WebGPUAPIStructure/Example/Example.ico: Added.
        * WebGPUAPIStructure/Example/Example.rc: Added.
        * WebGPUAPIStructure/Example/Example.vcxproj: Added.
        * WebGPUAPIStructure/Example/Example.vcxproj.filters: Added.
        * WebGPUAPIStructure/Example/Example.vcxproj.user: Added.
        * WebGPUAPIStructure/Example/resource.h: Added.
        * WebGPUAPIStructure/Example/small.ico: Added.
        * WebGPUAPIStructure/Example/stdafx.cpp: Added.
        * WebGPUAPIStructure/Example/stdafx.h: Added.
        * WebGPUAPIStructure/Example/targetver.h: Added.
        * WebGPUAPIStructure/WebGPU-Common/WebGPU-Common.vcxproj: Added.
        * WebGPUAPIStructure/WebGPU-Common/WebGPU-Common.vcxproj.filters: Added.
        * WebGPUAPIStructure/WebGPU-Common/WebGPU.cpp: Added.
        (WebGPU::BufferHolder::BufferHolder):
        (WebGPU::BufferHolder::~BufferHolder):
        (WebGPU::TextureHolder::TextureHolder):
        (WebGPU::TextureHolder::~TextureHolder):
        (WebGPU::SamplerHolder::SamplerHolder):
        (WebGPU::SamplerHolder::~SamplerHolder):
        * WebGPUAPIStructure/WebGPU-Common/WebGPU.h: Added.
        (WebGPU::Queue::~Queue):
        (WebGPU::RenderState::~RenderState):
        (WebGPU::ComputeState::~ComputeState):
        (WebGPU::Buffer::~Buffer):
        (WebGPU::Texture::~Texture):
        (WebGPU::Sampler::~Sampler):
        (WebGPU::TextureReference::TextureReference):
        (WebGPU::TextureReference::get const):
        (WebGPU::SamplerReference::SamplerReference):
        (WebGPU::SamplerReference::get const):
        (WebGPU::UniformBufferObjectReference::UniformBufferObjectReference):
        (WebGPU::UniformBufferObjectReference::get const):
        (WebGPU::ShaderStorageBufferObjectReference::ShaderStorageBufferObjectReference):
        (WebGPU::ShaderStorageBufferObjectReference::get const):
        (WebGPU::RenderPass::~RenderPass):
        (WebGPU::ComputePass::~ComputePass):
        (WebGPU::BlitPass::~BlitPass):
        (WebGPU::HostAccessPass::~HostAccessPass):
        (WebGPU::BufferHolder::get):
        (WebGPU::TextureHolder::get):
        (WebGPU::SamplerHolder::get):
        (WebGPU::Device::~Device):
        * WebGPUAPIStructure/WebGPU-Vulkan/BlitPassImpl.cpp: Added.
        (WebGPU::BlitPassImpl::BlitPassImpl):
        (WebGPU::BlitPassImpl::copyTexture):
        * WebGPUAPIStructure/WebGPU-Vulkan/BlitPassImpl.h: Added.
        * WebGPUAPIStructure/WebGPU-Vulkan/BufferImpl.cpp: Added.
        (WebGPU::BufferImpl::BufferImpl):
        (WebGPU::BufferImpl::decrementReferenceCount):
        * WebGPUAPIStructure/WebGPU-Vulkan/BufferImpl.h: Added.
        (WebGPU::BufferImpl::getBuffer const):
        (WebGPU::BufferImpl::getDeviceMemory const):
        (WebGPU::BufferImpl::incrementReferenceCount):
        (WebGPU::BufferImpl::getLength const):
        * WebGPUAPIStructure/WebGPU-Vulkan/ComputePassImpl.cpp: Added.
        (WebGPU::ComputePassImpl::ComputePassImpl):
        (WebGPU::ComputePassImpl::setComputeState):
        (WebGPU::ComputePassImpl::setResources):
        (WebGPU::ComputePassImpl::dispatch):
        * WebGPUAPIStructure/WebGPU-Vulkan/ComputePassImpl.h: Added.
        * WebGPUAPIStructure/WebGPU-Vulkan/ComputeStateImpl.cpp: Added.
        (WebGPU::ComputeStateImpl::ComputeStateImpl):
        * WebGPUAPIStructure/WebGPU-Vulkan/ComputeStateImpl.h: Added.
        (WebGPU::ComputeStateImpl::getPipeline const):
        (WebGPU::ComputeStateImpl::getPipelineLayout const):
        (WebGPU::ComputeStateImpl::getDescriptorSetLayouts const):
        * WebGPUAPIStructure/WebGPU-Vulkan/DeviceImpl.cpp: Added.
        (WebGPU::Device::create):
        (WebGPU::convertPixelFormat):
        (WebGPU::convertFormat):
        (WebGPU::debugReport):
        (WebGPU::DeviceImpl::DeviceImpl):
        (WebGPU::DeviceImpl::getCommandQueue):
        (WebGPU::DeviceImpl::prepareShader):
        (WebGPU::DeviceImpl::createPipelineLayout):
        (WebGPU::DeviceImpl::createCompatibleRenderPass):
        (WebGPU::convertVertexFormat):
        (WebGPU::DeviceImpl::getRenderState):
        (WebGPU::DeviceImpl::getComputeState):
        (WebGPU::DeviceImpl::getBuffer):
        (WebGPU::DeviceImpl::returnBuffer):
        (WebGPU::DeviceImpl::getTexture):
        (WebGPU::DeviceImpl::returnTexture):
        (WebGPU::DeviceImpl::getSampler):
        (WebGPU::DeviceImpl::returnSampler):
        (WebGPU::DeviceImpl::~DeviceImpl):
        * WebGPUAPIStructure/WebGPU-Vulkan/DeviceImpl.h: Added.
        (WebGPU::DeviceImpl::UniqueDebugReportCallbackEXT::UniqueDebugReportCallbackEXT):
        (WebGPU::DeviceImpl::UniqueDebugReportCallbackEXT::operator=):
        (WebGPU::DeviceImpl::UniqueDebugReportCallbackEXT::~UniqueDebugReportCallbackEXT):
        (WebGPU::DeviceImpl::UniqueDebugReportCallbackEXT::destroy):
        (WebGPU::DeviceImpl::TextureParameters::operator== const):
        (WebGPU::DeviceImpl::TextureParametersHash::operator() const):
        * WebGPUAPIStructure/WebGPU-Vulkan/HostAccessPassImpl.cpp: Added.
        (WebGPU::HostAccessPassImpl::HostAccessPassImpl):
        (WebGPU::HostAccessPassImpl::overwriteBuffer):
        (WebGPU::HostAccessPassImpl::getBufferContents):
        (WebGPU::HostAccessPassImpl::execute):
        * WebGPUAPIStructure/WebGPU-Vulkan/HostAccessPassImpl.h: Added.
        (WebGPU::HostAccessPassImpl::getFinishedEvent const):
        * WebGPUAPIStructure/WebGPU-Vulkan/PassImpl.cpp: Added.
        (WebGPU::PassImpl::PassImpl):
        (WebGPU::ResourceVisitor::operator()):
        (WebGPU::ResourceVisitor::getBindings const):
        (WebGPU::ResourceVisitor::releaseWriteDescriptorSets):
        (WebGPU::ResourceVisitor::getDescriptorImageInfos const):
        (WebGPU::ResourceVisitor::getDescriptorBufferInfos const):
        (WebGPU::ResourceVisitor::getBuffers const):
        (WebGPU::ResourceVisitor::getTextures const):
        (WebGPU::ResourceVisitor::getSamplers const):
        (WebGPU::ResourceVisitor::getImageCount const):
        (WebGPU::ResourceVisitor::getSamplerCount const):
        (WebGPU::ResourceVisitor::getUniformBufferCount const):
        (WebGPU::ResourceVisitor::getStorageBufferCount const):
        (WebGPU::PassImpl::setResources):
        (WebGPU::PassImpl::insertBuffer):
        (WebGPU::PassImpl::insertTexture):
        (WebGPU::PassImpl::insertSampler):
        * WebGPUAPIStructure/WebGPU-Vulkan/PassImpl.h: Added.
        (WebGPU::PassImpl::getCommandBuffer const):
        (WebGPU::PassImpl::iterateBuffers):
        (WebGPU::PassImpl::iterateTextures):
        (WebGPU::PassImpl::ResourceReference::ResourceReference):
        (WebGPU::PassImpl::ResourceReference::~ResourceReference):
        (WebGPU::PassImpl::ResourceReference::operator=):
        (WebGPU::PassImpl::ResourceReference::operator== const):
        (WebGPU::PassImpl::ResourceReference::get const):
        (WebGPU::PassImpl::ResourceReference::release):
        (WebGPU::PassImpl::ResourceReferenceHash::operator() const):
        * WebGPUAPIStructure/WebGPU-Vulkan/QueueImpl.cpp: Added.
        (WebGPU::QueueImpl::QueueImpl):
        (WebGPU::QueueImpl::prepareCurrentFrame):
        (WebGPU::QueueImpl::createSpecificRenderPass):
        (WebGPU::QueueImpl::createFramebuffer):
        (WebGPU::QueueImpl::createRenderPass):
        (WebGPU::QueueImpl::commitRenderPass):
        (WebGPU::QueueImpl::createComputePass):
        (WebGPU::QueueImpl::commitComputePass):
        (WebGPU::QueueImpl::createBlitPass):
        (WebGPU::QueueImpl::commitBlitPass):
        (WebGPU::QueueImpl::createHostAccessPass):
        (WebGPU::QueueImpl::commitHostAccessPass):
        (WebGPU::QueueImpl::present):
        (WebGPU::QueueImpl::commitPass):
        (WebGPU::QueueImpl::synchronizeResources):
        (WebGPU::QueueImpl::~QueueImpl):
        * WebGPUAPIStructure/WebGPU-Vulkan/QueueImpl.h: Added.
        * WebGPUAPIStructure/WebGPU-Vulkan/RenderPassImpl.cpp: Added.
        (WebGPU::RenderPassImpl::RenderPassImpl):
        (WebGPU::RenderPassImpl::setRenderState):
        (WebGPU::RenderPassImpl::setVertexAttributeBuffers):
        (WebGPU::RenderPassImpl::setResources):
        (WebGPU::RenderPassImpl::setViewport):
        (WebGPU::RenderPassImpl::setScissorRect):
        (WebGPU::RenderPassImpl::draw):
        * WebGPUAPIStructure/WebGPU-Vulkan/RenderPassImpl.h: Added.
        * WebGPUAPIStructure/WebGPU-Vulkan/RenderStateImpl.cpp: Added.
        (WebGPU::RenderStateImpl::RenderStateImpl):
        * WebGPUAPIStructure/WebGPU-Vulkan/RenderStateImpl.h: Added.
        (WebGPU::RenderStateImpl::getPipeline const):
        (WebGPU::RenderStateImpl::getPipelineLayout const):
        (WebGPU::RenderStateImpl::getDescriptorSetLayouts const):
        * WebGPUAPIStructure/WebGPU-Vulkan/SamplerImpl.cpp: Added.
        (WebGPU::SamplerImpl::SamplerImpl):
        (WebGPU::SamplerImpl::decrementReferenceCount):
        * WebGPUAPIStructure/WebGPU-Vulkan/SamplerImpl.h: Added.
        (WebGPU::SamplerImpl::getSampler):
        (WebGPU::SamplerImpl::incrementReferenceCount):
        (WebGPU::SamplerImpl::getFilter):
        (WebGPU::SamplerImpl::getMipmapMode):
        (WebGPU::SamplerImpl::getAddressMode):
        * WebGPUAPIStructure/WebGPU-Vulkan/TextureImpl.cpp: Added.
        (WebGPU::TextureImpl::TextureImpl):
        (WebGPU::TextureImpl::decrementReferenceCount):
        * WebGPUAPIStructure/WebGPU-Vulkan/TextureImpl.h: Added.
        (WebGPU::TextureImpl::getImage const):
        (WebGPU::TextureImpl::getImageView const):
        (WebGPU::TextureImpl::getFormat const):
        (WebGPU::TextureImpl::incrementReferenceCount):
        (WebGPU::TextureImpl::getWidth const):
        (WebGPU::TextureImpl::getHeight const):
        (WebGPU::TextureImpl::getTransferredToGPU const):
        (WebGPU::TextureImpl::setTransferredToGPU):
        * WebGPUAPIStructure/WebGPU-Vulkan/WebGPU-Vulkan.vcxproj: Added.
        * WebGPUAPIStructure/WebGPU-Vulkan/WebGPU-Vulkan.vcxproj.filters: Added.
        * WebGPUAPIStructure/WebGPU.sln: Added.

2017-10-26  Eric Carlson  <eric.carlson@apple.com>

        NowPlayingInfo should contain a unique identifier
        https://bugs.webkit.org/show_bug.cgi?id=178872

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm:
        (-[NowPlayingTestWebView hasActiveNowPlayingSession]): Use completion handler.
        (TestWebKitAPI::TEST): Cleanup tests. Use new API.
        (-[NowPlayingTestWebView waitForNowPlayingInfoToChange]): Deleted.

2017-10-26  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clear cached gUM prompt state
        https://bugs.webkit.org/show_bug.cgi?id=178754
        <rdar://problem/32742356>

        Unreviewed, fix a flakey test.

        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
        (-[GetUserMediaRepromptTestView haveStream:]): New, check several times for expected state.
        (TestWebKitAPI::TEST): Don't assume stream state changes in the page immediately.

2017-10-26  Andy Estes  <aestes@apple.com>

        [Payment Request] Enable Payment Request whenever Apple Pay is enabled
        https://bugs.webkit.org/show_bug.cgi?id=178880

        Reviewed by Tim Horton.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-10-26  Joseph Pecoraro  <pecoraro@apple.com>

        Add and update some watchlists
        https://bugs.webkit.org/show_bug.cgi?id=178304

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/config/watchlist:

2017-10-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223984.

        Caused LayoutTest assertion failures.

        Reverted changeset:

        "When navigating back to a page, compositing layers may not
        use accelerated drawing"
        https://bugs.webkit.org/show_bug.cgi?id=178749
        https://trac.webkit.org/changeset/223984

2017-10-26  Christopher Reid  <chris.reid@sony.com>

        Remove scopeguard from platform
        https://bugs.webkit.org/show_bug.cgi?id=178681

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:

2017-09-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: Add support to import and run W3C tests
        https://bugs.webkit.org/show_bug.cgi?id=177304

        Reviewed by Brian Burg.

        WPT has now several WebDriver tests, and new ones are going to be added to cover the whole spec. This patch
        adds the initial support for running W3C tests. The script import-w3c-webdriver-tests reuses parts of the W3C
        test downloader to download the tests and required tools from WPT repository into WebDriverTests
        directory. Tests can be run with run-webdriver-tests, a new script that works similar to other test runner
        scripts. For now it shows a summary at the end of the execution, there aren't expectations yet, since we are not
        ready to run those tests in the bots. Once we are ready to properly run the tests, we can add the expectations
        support and run the tests in the bots.

        * Scripts/import-w3c-webdriver-tests: Added.
        * Scripts/run-webdriver-tests: Added.
        * Scripts/webkitpy/style/checker.py: Skip WebDriverTests directory since it only contains third-party python
        code.
        * Scripts/webkitpy/thirdparty/__init__.py: Add support to autodownload mozlog and mozprocess since they are
        required by the WebDriver tests.
        * Scripts/webkitpy/webdriver_tests/__init__.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_driver.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_driver_gtk.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_result.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py: Added.
        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_web_server.py: Added.

2017-10-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clear cached gUM prompt state
        https://bugs.webkit.org/show_bug.cgi?id=178754
        <rdar://problem/32742356>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new test

        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm: Added.
        (-[GetUserMediaRepromptUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[GetUserMediaRepromptUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKit/getUserMedia.html:

2017-10-25  Ross Kirsling  <ross.kirsling@sony.com>

        Add committer status for Ross Kirsling
        https://bugs.webkit.org/show_bug.cgi?id=178832

        Unreviewed.

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

2017-10-25  Simon Fraser  <simon.fraser@apple.com>

        When navigating back to a page, compositing layers may not use accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=178749
        rdar://problem/35158946

        Reviewed by Dean Jackson.

        Fix WTR and DRT to parse "useAcceleratedDrawing" out of "webkit-test-runner" options
        and use it to set the state of the web view.

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

2017-10-25  Robin Morisset  <rmorisset@apple.com>

        Support the TailBench9000 benchmark in run-jsc-benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=178451

        Reviewed by Saam Barati.

        * Scripts/run-jsc-benchmarks:

2017-10-25  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Remove GLib API functions which use Cairo
        https://bugs.webkit.org/show_bug.cgi?id=178205

        Reviewed by Michael Catanzaro.

        Add PLATFORM(GTK) guards for the API tests (or parts of them) which use cairo_surface_t (web
        page snapshots and favicons) which are not available in the WPE version of the GLib API.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized):
        (testPrivateBrowsing):
        (testFaviconDatabase):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp:
        (testFindControllerHide):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2017-10-25  Zan Dobersek  <zdobersek@igalia.com>

        Make SERVICE_WORKER feature buildable on GTK, WPE
        https://bugs.webkit.org/show_bug.cgi?id=178574

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm: Add the --service-worker option
        that enables the SERVICE_WORKER feature flag. For now it's enabled
        on Apple's Cocoa ports (even when build-webkit isn't used for those
        builds, the flag is enabled here for consistency).

2017-10-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix name of Perl LibXML package on Fedora
        https://bugs.webkit.org/show_bug.cgi?id=178206
        <rdar://problem/35028586>

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

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Selecting and right-clicking URL-like strings with IDNA-disallowed characters in host or authority causes rendering engine crash
        https://bugs.webkit.org/show_bug.cgi?id=174267

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit/CanHandleRequest_Bundle.cpp:
        (TestWebKitAPI::runTest):

2017-10-24  Eric Carlson  <eric.carlson@apple.com>

        Web Inspector: Enable WebKit logging configuration and display
        https://bugs.webkit.org/show_bug.cgi?id=177027
        <rdar://problem/33964767>

        Reviewed by Joseph Pecoraro.

        Allow new 'dumpJSConsoleLogInStdErr' test header to redirect log console output to stderr.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Apply custom header fields from WebsitePolicies to same-domain requests
        https://bugs.webkit.org/show_bug.cgi?id=178356

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (expectHeaders):

2017-10-24  Stephan Szabo  <stephan.szabo@sony.com>

        [Win][JSCOnly] Make jsconly build testapi and dlls and copy dlls when running tests
        https://bugs.webkit.org/show_bug.cgi?id=177279

        Reviewed by Yusuke Suzuki.

        * Scripts/build-jsc:
        * Scripts/run-jsc-stress-tests:

2017-10-23  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/35045445>
        Update README to reference WebKit build archives, instead of 'nightly'

        Reviewed by Aakash Jain.

        * WebKitArchiveSupport/README:

2017-10-21  Tim Horton  <timothy_horton@apple.com>

        Turn on ccache for Mac cmake builds by default
        https://bugs.webkit.org/show_bug.cgi?id=177059

        Reviewed by Sam Weinig.

        * ccache/ccache-clang:
        * ccache/ccache-wrapper: Added.
        Add a pass-through ccache wrapper to be used with CMake, in addition
        to the existing faux-clang wrappers.

        * Scripts/build-webkit:
        Add --use-ccache and --no-use-ccache option, which will define
        WK_USE_CCACHE to YES or NO, respectively, which the underlying
        build systems respect. We do not define WK_USE_CCACHE if the option
        is not specified, because the underlying build systems have different
        default values.

2017-10-20  Aakash Jain  <aakash_jain@apple.com>

        Do not run binding tests on multiple EWSes
        https://bugs.webkit.org/show_bug.cgi?id=178599

        Reviewed by Alexey Proskuryakov. 

        Remove old code which runs bindings tests and ignore it's result. We now have
        a dedicated bindings test EWS.

        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Removed bindings tests code.
        * Scripts/webkitpy/tool/steps/runtests_unittest.py: Updated unit-tests.
        (RunTestsTest.test_webkit_run_unit_tests): Ditto.
        * Scripts/webkitpy/tool/steps/steps_unittest.py: Ditto.
        * Scripts/webkitpy/tool/commands/download_unittest.py: Ditto.

2017-10-20  Youenn Fablet  <youenn@apple.com>

        WebsiteDataStoreCustomPaths.mm is failing after r223718
        https://bugs.webkit.org/show_bug.cgi?id=178596

        Unreviewed.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST): Making default web site data store creation expected at the end of the test.
        We should probably not need need to create it.
        This should be fixed as a follow-up.

2017-10-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Provide basic timeline and animation interfaces
        https://bugs.webkit.org/show_bug.cgi?id=178526

        Reviewed by Dean Jackson.

        Remove the WEB_ANIMATIONS compile-time flag.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-10-20  Tomas Popela  <tpopela@redhat.com>

        Missing some perl packages in install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=178571

        Reviewed by Žan Doberšek.

        Install per-version and perl-Time-HiRes so we can use build-webkit
        script. Also add missing backlashes.

        * wpe/install-dependencies:

2017-10-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r222709 and r223572.
        https://bugs.webkit.org/show_bug.cgi?id=178587

        Still getting mac-wk2 EWS bots stuck (Requested by ap on
        #webkit).

        Reverted changesets:

        "Log stack-trace for run-webkit-tests when interrupted"
        https://bugs.webkit.org/show_bug.cgi?id=176393
        https://trac.webkit.org/changeset/222709

        "webkitpy: Hang when workers write to the same stack trace
        file"
        https://bugs.webkit.org/show_bug.cgi?id=178402
        https://trac.webkit.org/changeset/223572

2017-10-19  Nan Wang  <n_wang@apple.com>

        AX: Provide a way for Accessibility to cache the selection while retrieving rects for speak selection
        https://bugs.webkit.org/show_bug.cgi?id=176247
        <rdar://problem/34217143>

        Reviewed by Ryosuke Niwa.

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

2017-10-19  Sam Weinig  <sam@webkit.org>

        [Settings] Move global settings into their own file
        https://bugs.webkit.org/show_bug.cgi?id=178512

        Reviewed by Darin Adler.

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

2017-10-19  Andy Estes  <aestes@apple.com>

        [iOS] Conditionally rename DatabaseProcess to StorageProcess when building for iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=178181
        <rdar://problem/33660282>

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::databaseProcessName):

2017-10-19  Saam Barati  <sbarati@apple.com>

        Turn poly proto back on by default and remove the option
        https://bugs.webkit.org/show_bug.cgi?id=178525

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

2017-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Don't expose raw HTML in pasteboard to the web content
        https://bugs.webkit.org/show_bug.cgi?id=178422

        Reviewed by Wenson Hsieh.

        Added a test case for sanitizing web archive in the system pasteboard to strip privacy sensitive information
        such as local file paths and potentially harmful scripts like event handlers serialized by WebKit prior to r223462.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteWebArchive.mm:
        (PasteWebArchive.SanitizesHTML):

2017-10-18  Youenn Fablet  <youenn@apple.com>

        TestController should clear all fetch caches when resetting its state
        https://bugs.webkit.org/show_bug.cgi?id=178486

        Reviewed by Chris Dumez.

        Adding clearDOMCaches test runner method.
        Using that method when resetting state.

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

2017-10-18  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Use new class name from UIKit when checking UITextSuggestion type
        https://bugs.webkit.org/show_bug.cgi?id=178416

        Reviewed by Tim Horton.

        This updates our test using/mocking out UITextAutofillSuggestion instead of UIKeyboardLoginCredentialsSuggestion.

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:
        (-[UITextAutofillSuggestion initWithUsername:password:]): Copied from UIKit's implementation. This will serve as
        a mock of this method for builds not containingit.
        (+[UITextAutofillSuggestion autofillSuggestionWithUsername:password:]): Ditto.
        (TestWebKitAPI::TEST): Use +[UITextAutofillSuggestion autofillSuggestionWithUsername:password:] inline instead of
        helper function for creating a new suggestion.
        (newUIKeyboardLoginCredentialsSuggestion): Deleted.

        * TestWebKitAPI/ios/UIKitSPI.h:

2017-10-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        update-webkit-auxiliary-libs can't download WebKitAuxiliaryLibrary.zip due to 403 Forbidden
        https://bugs.webkit.org/show_bug.cgi?id=178381

        Reviewed by Alexey Proskuryakov.

        The web server developer.apple.com seems to reject HTTP requests
        without Accept header field.

        * Scripts/update-webkit-dependency: Add 'Accept' header field to requests.

2017-10-18  Aakash Jain  <aakash_jain@apple.com>

        webkitpy tests should have --json-output option
        https://bugs.webkit.org/show_bug.cgi?id=178481

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/test/main.py:
        (Tester._parse_args): Added json-output argument.
        (Tester._run_tests): Write output to json file.

2017-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r223291.

        See WebCore ChangeLog for more detail.

        Reverted changeset:

        "Remove Editor::simplifyMarkup"
        https://bugs.webkit.org/show_bug.cgi?id=178271
        https://trac.webkit.org/changeset/223291

2017-10-18  Chris Dumez  <cdumez@apple.com>

        Add an efficient data structure for WebCore to query if there is a Service Worker registered for a given origin
        https://bugs.webkit.org/show_bug.cgi?id=177876
        <rdar://problem/34813129>

        Reviewed by Ryosuke Niwa.

        Clear service worker registrations between test runs to avoid flakiness.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2017-10-18  Zan Dobersek  <zdobersek@igalia.com>

        Remove remnants of OpenWebRTC
        https://bugs.webkit.org/show_bug.cgi?id=178437

        Reviewed by Alejandro G. Castro.

        Drop OpenWebRTC packages from the GTK's Jhbuild modules file. Relevant
        patches are also removed.

        * gtk/jhbuild.modules:
        * gtk/patches/libnice-0001-TURN-allow-REALM-to-be-empty.patch: Removed.
        * gtk/patches/libnice-0001-nicesrc-spin-the-agent-mainloop-in-a-separate-thread.patch: Removed.
        * gtk/patches/rtspsrc-timeout-on-udpsrc-is-in-nanoseconds.patch: Removed.
        * gtk/patches/udpsrc-improve-timeouts.patch: Removed.

2017-10-17  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Hang when workers write to the same stack trace file
        https://bugs.webkit.org/show_bug.cgi?id=178402
        <rdar://problem/35033432>

        Reviewed by Aakash Jain.

        Workers can hang if they all write to the same stack trace file when receiving
        a SIGTERM. Attach the pid to the stack trace file name so that each worker
        writes to a different file.

        * Scripts/webkitpy/common/interupt_debugging.py:
        (log_stack_trace_on_term.handler): Name stack trace file path/<pid>-filename.
        (log_stack_trace_on_cntrl_c.handler): Ditto.

2017-10-17  John Wilander  <wilander@apple.com>

        Add and remove cookie partition accordingly in intermediary redirect requests
        https://bugs.webkit.org/show_bug.cgi?id=178369
        <rdar://problem/34467603>

        Reviewed by Brent Fulgham.

        Adds the function statisticsNotifyObserver().

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::statisticsNotifyObserver):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsNotifyObserver):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-10-17  Youenn Fablet  <youenn@apple.com>

        Cache API implementation should be able to compute storage size for WebKit client applications.
        https://bugs.webkit.org/show_bug.cgi?id=178350

        Reviewed by Chris Dumez.

        Adding support for a domCacheSize getter.

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

2017-10-17  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        [GStreamer][GTK][WPE] update-webkit-libs-jhbuild fails to detect changes in included moduleset files
        https://bugs.webkit.org/show_bug.cgi?id=178206

        Reviewed by Michael Catanzaro.

        The update-webkit-libs-jhbuild scripts computes MD5 sum of GTK/WPE jhbuild configuration files to check if it
        needs to rebuild the dependencies libraries. This patch fixes a bug when main GTK/WPE jhbuild modules
        configuration file includes additional files (for example GStreamer module). It parses jhbuild.modules file to
        check if additional files are included. If any, it computes MD5 sum for each of these included files.

        * Scripts/update-webkit-libs-jhbuild:
        (getJhbuildIncludedFilePaths): New function that returns included files in jhbuild.modules
        (jhbuildConfigurationCheckFile): New function to check if MD5 sum file changes.
        (jhbuildConfigurationChanged): Add MD5 sum check for included files.
        (saveMd5File): New function to save MD5 sum of a file.
        (saveJhbuildMd5): Add saving included files MD5 sum.
        (deleteJhbuildMd5): Delete included files MD5 sum
        * gtk/install-dependencies: Add perl-libXML lib that is used to parse jhbuild file.
        * wpe/install-dependencies: Ditto.

2017-10-17  Tomas Popela  <tpopela@redhat.com>

        Undefined WK_API_ENABLED warning when compiling COCOA content on WebKitGTK+
        https://bugs.webkit.org/show_bug.cgi?id=178208

        Check whether we are on COCOA platform before checking for
        WK_API_ENABLED.

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::clearDOMCache):

2017-10-17  Keith Miller  <keith_miller@apple.com>

        Change WebCore sources to work with unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=178229

        Rubber stamped by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-10-16  Christopher Reid  <chris.reid@sony.com>

        [Win] Webkit should still be able to build when unable to check if libraries are up to date
        https://bugs.webkit.org/show_bug.cgi?id=178367

        Adding a option to skip the check to see if windows libraries are up to date.
        This option is useful when testing modified libraries. This option also allows
        building webkit when GitHub blocks requests to verify the latest library version.


        Reviewed by Per Arne Vollan.

        * Scripts/build-webkit:

2017-10-12  Matt Rajca  <mrajca@apple.com>

        Add API support for quirk that lets an arbitrary click allow auto-play.
        https://bugs.webkit.org/show_bug.cgi?id=178227

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST): Added API test.

2017-10-16  Maureen Daum  <mdaum@apple.com>

        If an origin doesn't have databases in the Databases table we should still remove its information from disk in DatabaseTracker::deleteOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=178281
        <rdar://problem/34576132>

        Reviewed by Brent Fulgham.

        Verify that if there is an entry in the Origins table but no entries in the Databases
        table that we still remove the directory for the origin, and that we remove the
        entry from the Origins table.

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

2017-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Cannot access images included in the content pasted from Microsoft Word
        https://bugs.webkit.org/show_bug.cgi?id=124391
        <rdar://problem/26862741>

        Reviewed by Antti Koivisto.

        Added tests for sanitizing HTML contents for copy & paste and drag & drop.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyHTML.mm: Added.
        (readHTMLFromPasteboard): Added.
        (createWebViewWithCustomPasteboardDataEnabled): Added.
        (CopyHTML.Sanitizes): Added.

        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm:
        (createWebViewWithCustomPasteboardDataEnabled): Added to enable more tests on bots.

        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        (writeRTFToPasteboard): Added.
        (createWebViewWithCustomPasteboardDataEnabled): Added.
        (createHelloWorldString): Added.
        (PasteRTF.ExposesHTMLTypeInDataTransfer): Added.
        (PasteRTFD.ExposesHTMLTypeInDataTransfer): Added.
        (PasteRTFD.ImageElementUsesBlobURLInHTML): Added.

        * TestWebKitAPI/Tests/WebKitCocoa/copy-html.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/paste-rtfd.html: Store the clipboardData contents for
        PasteRTF.ExposesHTMLTypeInDataTransfer and PasteRTFD.ExposesHTMLTypeInDataTransfer.

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

2017-10-16  Youenn Fablet  <youenn@apple.com>

        Activate Cache API by default
        https://bugs.webkit.org/show_bug.cgi?id=178186

        Reviewed by Chris Dumez.

        Removing explicit activation of cache api.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCacheAPIEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-10-16  Ross Kirsling  <ross.kirsling@sony.com>

        run-webkit-tests help text should mention arguments too
        https://bugs.webkit.org/show_bug.cgi?id=178352

        Reviewed by Tim Horton.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2017-10-16  Maureen Daum  <mdaum@apple.com>

        If we fail to delete any database file, don't remove its information from the tracker database
        <rdar://problem/34576132> and https://bugs.webkit.org/show_bug.cgi?id=178251

        Reviewed by Brady Eidson.

        Add tests that verify we correctly delete databases and remove their information from
        the tracker database, even if the database doesn't exist. Verify that if we fail to
        delete a database, we don't remove its information from the tracker database.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Move DatabaseTrackerTest.cpp to DatabaseTrackerTest.mm so that we can use the cocoa
        method for creating a temporary directory in the tests.
        * TestWebKitAPI/Tests/WebCore/DatabaseTrackerTest.cpp: Removed.
        The existing test was copied to DatabaseTrackerTest.mm.
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::addToDatabasesTable):
        (TestWebKitAPI::removeDirectoryAndAllContents):
        (TestWebKitAPI::createFileAtPath):

2017-10-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223422.

        These tests are for a change that was rolled out in r223420

        Reverted changeset:

        "If we fail to delete any database file, don't remove its
        information from the tracker database"
        https://bugs.webkit.org/show_bug.cgi?id=178251
        https://trac.webkit.org/changeset/223422

2017-10-16  Maureen Daum  <mdaum@apple.com>

        If we fail to delete any database file, don't remove its information from the tracker database
        <rdar://problem/34576132> and https://bugs.webkit.org/show_bug.cgi?id=178251

        Reviewed by Brady Eidson.

        Add tests that verify we correctly delete databases and remove their information from
        the tracker database, even if the database doesn't exist. Verify that if we fail to
        delete a database, we don't remove its information from the tracker database.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Move DatabaseTrackerTest.cpp to DatabaseTrackerTest.mm so that we can use the cocoa
        method for creating a temporary directory in the tests.
        * TestWebKitAPI/Tests/WebCore/DatabaseTrackerTest.cpp: Removed.
        The existing test was copied to DatabaseTrackerTest.mm.
        * TestWebKitAPI/Tests/WebCore/cocoa/DatabaseTrackerTest.mm: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::addToDatabasesTable):
        (TestWebKitAPI::removeDirectoryAndAllContents):
        (TestWebKitAPI::createFileAtPath):

2017-10-16  David Kilzer  <ddkilzer@apple.com>

        Add RELEASE_ASSERT_WITH_SECURITY_IMPLICATION() macro
        <https://webkit.org/b/178269>

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add checker to warn about using
        ASSERT_WITH_SECURITY_IMPLICATION().
        (CppChecker.categories): Add 'security/assertion' to list of
        enabled checkers.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_debug_security_assertion): Add tests for
        new checker.

2017-10-16  Chris Dumez  <cdumez@apple.com>

        Clicks on Link with download attribute causes all (other) links to trigger download when clicked
        https://bugs.webkit.org/show_bug.cgi?id=178267
        <rdar://problem/34985016>

        Reviewed by Darin Adler.

        Use PassThrough policy in WKTR's InjectedBundle's decidePolicyForNewWindowAction so that the
        request is sent to the UIProcess. This gets WKTR's closer to Safari behavior and helps
        reproduce the bug. Without this change, I would not be able to write a regression test for
        this bug that is very easily reproducible in Safari.

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

2017-10-16  Emilio Cobos Álvarez  <emilio@crisal.io>

        Add Emilio Cobos Álvarez to the contributors list.
        https://bugs.webkit.org/show_bug.cgi?id=178334

        Reviewed by Antti Koivisto.

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

2017-10-07  Maciej Stachowiak  <mjs@apple.com>

        Improve --help documentation and add --list-plans to show available benchmarks.
        https://bugs.webkit.org/show_bug.cgi?id=178059

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.available_plans): New function that returns the list of available plans.
        (BenchmarkRunner.plan_directory): New method to centralize knowledge of where the plan files live.
        (BenchmarkRunner._find_plan_file): Updated to use BenchmarkRunner.plan_directory

        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        
        (parse_args): Help cleanup: Reordered options to put more common
        ones at the top. Fixed wording. Added help for each
        option. Explained default for each option that has one.

        New option: --list-plans which tells you the available benchmarks.
        
        Code cleanup: Removed use of dest where redundant, made variable
        names conforming to Python coding style.
        
        (run_benchmark_plan): Adapted for new variable names.
        (list_benchmark_plans): New helper for --list-plans option.
        (start): Account for --list-plans. Also use
        BechmarkRunner.available_plans and use
        BenchmarkRunner.plan_directory instead of duplicating
        code/knowledge here.

2017-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        On ToT, event.dataTransfer.getData("text/uri-list") returns an empty string when dragging an image
        https://bugs.webkit.org/show_bug.cgi?id=178301
        <rdar://problem/34990050>

        Reviewed by Darin Adler.

        Fixes issues in DumpRenderTree's LocalPasteboard to ensure that drag-drop-href-as-url.html exposes files, and
        also adds a new iOS drag and drop API test.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard setData:forType:]):

        Fixes LocalPasteboard's implementation of changeCount to incremement when the pasteboard owner changes, rather
        than every time data is changed. This is consistent with NSPasteboard behavior.

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

        Adds a new API test to verify that an image and HTTP URL written by the platform is correctly web exposed.

2017-10-15  Darin Adler  <darin@apple.com>

        UTF-8 decoding produces one replacement character per byte; Encoding standard requires one replacement character per illegal sequence instead
        https://bugs.webkit.org/show_bug.cgi?id=178207

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added test.
        * TestWebKitAPI/Tests/WebCore/TextCodec.cpp: Added.
        (TestWebKitAPI::decodeHexTestBytes): Decodes a string so we can write readable tests.
        (TestWebKitAPI::escapeNonPrintableASCIICharacters): Encodes a string so we can write readable tests.
        (TestWebKitAPI::TEST): Added some UTF-8 tests and UTF-8 invalid sequences tests.
        Would be smart to add more tests for other cases, exercising the fast ASCII loop for example, and
        other encodings.

2017-10-14  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] JHBuild build directory DependenciesWPE/Build is not removed by update-webkit-libs-jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=178212

        Reviewed by Michael Catanzaro.

        * Scripts/update-webkit-libs-jhbuild:
        (cleanJhbuild): The WPE JHBuild also uses a separate "Build" subdirectory, so do not skip
        cleaning it when "--wpe" is passed to the script.

2017-10-13  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Fontconfig fails build in JHBuild with “error: conflicting types for ‘FcObjectTypeHash’”
        https://bugs.webkit.org/show_bug.cgi?id=178283

        Reviewed by Žan Doberšek.

        * wpe/jhbuild.modules: Flag Fontconfig to be built inside the source directory, otherwise
        compilation fails. While at it, pass "--disable-docs" to cut a bit on build time.

2017-10-13  Youenn Fablet  <youenn@apple.com>

        Implement listing origins for which CacheStorage is storing data
        https://bugs.webkit.org/show_bug.cgi?id=178236

        Reviewed by Chris Dumez.

        Adding hasDOMCache API for checking whether origin is storing data through Cache API.

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

2017-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove Editor::simplifyMarkup
        https://bugs.webkit.org/show_bug.cgi?id=178271

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm: Removed.

2017-10-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GLib] WebKitNavigationAction should tell whether it is a redirect
        https://bugs.webkit.org/show_bug.cgi?id=178178

        Test that WebKitNavigationAction properly reports being a redirect.

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
        (testNavigationPolicy): test that loading /redirect leads to a redirect WebKitNavigationAction.
        (serverCallback): add a /redirect path to the server, which causes a redirect.

2017-10-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix webkitpy failure after r223273

        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_harnesslinks_conversion):

2017-10-12  Chris Dumez  <cdumez@apple.com>

        import-w3c-tests modifies test sources and sometimes causes them to fail
        https://bugs.webkit.org/show_bug.cgi?id=178234

        Reviewed by Ryosuke Niwa.

        Update import-w3c-tests to stop rewriting tests as this is causing some tests
        to fail unexpectedly.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.import_tests):

2017-10-12  Youenn Fablet  <youenn@apple.com>

        Layout Test http/tests/cache-storage/cache-clearing.https.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=178200

        Reviewed by Chris Dumez.

        Making clearDOMCache wait for removal completion to exit.
        This removes the risk to interact with the cache while deleting it which will end up be racy in tests.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::clearDOMCache):
        * WebKitTestRunner/TestController.cpp:
        (WTR::ClearDOMCacheCallbackContext::ClearDOMCacheCallbackContext):
        (WTR::clearDOMCacheCallback):
        (WTR::TestController::clearDOMCache):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2017-10-12  John Wilander  <wilander@apple.com>

        ResourceLoadObserver::logFrameNavigation() should use redirectResponse.url()
        https://bugs.webkit.org/show_bug.cgi?id=175257
        <rdar://problem/33359866>

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::isStatisticsRegisteredAsSubFrameUnder):
        (WTR::TestRunner::isStatisticsRegisteredAsRedirectingTo):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder):
            Not implemented.
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo):
            Not implemented.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::isStatisticsRegisteredAsSubFrameUnder):
            Implemented platform-specific.
        (WTR::TestController::isStatisticsRegisteredAsRedirectingTo):
            Implemented platform-specific.

2017-10-12  Andy Estes  <aestes@apple.com>

        [iOS] Conditionally rename DatabaseProcess to StorageProcess when building for iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=178181
        <rdar://problem/33660282>

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::databaseProcessName):

2017-10-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Emit SPIR-V from WSL compiler (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=177998

        Reviewed by Filip Pizlo.

        This patch implements the first half of a SPIR-V codegen phase for WSL.
        This includes all the operations which aren't actually emitting the contents
        of functions themselves. For example, this includes things like representing
        WSL types with SPIR-V types, and declaring shaders' inputs and outputs. A
        future patch will actually emit the contents of functions.

        There are two helper visitors here: SPIRVTypeAnalyzer which generates SPIR-V
        types from WSL types, and SPIRVPrimitiveVariableAnalyzer which identifies
        input and output variables from a shader (and assigns location values to
        each one).

        This patch is currently pursuing the "logical mode" detailed in
        https://bugs.webkit.org/show_bug.cgi?id=176967. In this mode, each pointer and
        array reference operation can be statically traced to the variable or array it
        is operating on.

        This has the interesting property where accessing a pointer inside an array is
        forbidden, because the array index may be computed at runtime, so the compiler
        can't know at compile time which variable the pointer operation will be
        accessing. However, this isn't true for structs; the program must statically
        state which struct member it is accessing. Therefore, pointers or array
        references must not transitively appear within an array, but they may appear
        within a struct. The same logic applies to array references; those get lowered
        to just two indexes in SPIR-V (a lower bound and an upper bound).

        So, outside of an array, SPIR-V types don't need to include any pointers because
        any operation with the pointer doesn't need access to the runtime value of the
        pointer. Inside of an array, pointers are forbidden. Therefore, SPIR-V types
        will never include any pointers.

        This means that, for example, WSL can represent a linked list in logical mode.
        However, a WSL program cannot iterate across the list, because that would require
        assigning to a pointer. So instead, a program using a linked list could only say
        something like "list.ptr->ptr->ptr->value".

        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/SPIR-V.js:
        (SPIRV.OperandChecker.prototype._isStar):
        (SPIRV.OperandChecker.prototype.nextComparisonType):
        (SPIRV.OperandChecker.prototype.finalize):
        (SPIRV.OperandChecker):
        * WebGPUShadingLanguageRI/SPIRV.html:
        * WebGPUShadingLanguageRI/SPIRVCodegen.js: Added.
        (findEntryPoints):
        (emitTypes.doEmitTypes):
        (emitTypes):
        (ConstantFinder.prototype.visitGenericLiteralType):
        (ConstantFinder):
        (generateSPIRV):
        * WebGPUShadingLanguageRI/SPIRVTypeAnalyzer.js: Added.
        (SPIRVTypeAnalyzer):
        (SPIRVTypeAnalyzer.prototype.get program):
        (SPIRVTypeAnalyzer.prototype.get typeMap):
        (SPIRVTypeAnalyzer.prototype.get currentId):
        (SPIRVTypeAnalyzer.prototype.get stack):
        (SPIRVTypeAnalyzer.prototype.visitTypeRef):
        (SPIRVTypeAnalyzer.prototype._encounterType):
        (SPIRVTypeAnalyzer.prototype.visitNullType):
        (SPIRVTypeAnalyzer.prototype.visitGenericLiteralType):
        (SPIRVTypeAnalyzer.prototype.visitNativeType):
        (SPIRVTypeAnalyzer.prototype.visitEnumType):
        (SPIRVTypeAnalyzer.prototype.visitPtrType):
        (SPIRVTypeAnalyzer.prototype.visitArrayRefType):
        (SPIRVTypeAnalyzer.prototype.visitArrayType):
        (SPIRVTypeAnalyzer.prototype.visitStructType):
        * WebGPUShadingLanguageRI/SPIRVVariableAnalyzer.js: Added.
        (SPIRVPrimitiveVariableAnalyzer):
        (SPIRVPrimitiveVariableAnalyzer.prototype.get program):
        (SPIRVPrimitiveVariableAnalyzer.prototype.get typeMap):
        (SPIRVPrimitiveVariableAnalyzer.prototype.get currentId):
        (SPIRVPrimitiveVariableAnalyzer.prototype.get currentLocation):
        (SPIRVPrimitiveVariableAnalyzer.prototype.get nameComponents):
        (SPIRVPrimitiveVariableAnalyzer.prototype.get result):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitTypeRef):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitNullType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitGenericLiteralType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitNativeType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitEnumType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitPtrType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitArrayRefType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitArrayType):
        (SPIRVPrimitiveVariableAnalyzer.prototype.visitStructType):
        * WebGPUShadingLanguageRI/WSL.md:
        * WebGPUShadingLanguageRI/index.html:

2017-09-29  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by JF Bastien.
        
        Add a mode to test disabling Gigacage.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:

2017-10-11  Sam Weinig  <sam@webkit.org>

        Remove out-parameter variants of copyToVector
        https://bugs.webkit.org/show_bug.cgi?id=178155

        Reviewed by Tim Horton.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (stopJavaScriptThreads):

2017-10-12  Sam Weinig  <sam@webkit.org>

        It should be possible to iterate just the values (and not the counts) of a HashCountedSet
        https://bugs.webkit.org/show_bug.cgi?id=178169

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp:
        (TestWebKitAPI::TEST):
        Add test for HashCountedSet's new values() range.

2017-10-11  Frederic Wang  <fwang@igalia.com>

        run-safari --ios-simulator is no longer working with Xcode 9
        https://bugs.webkit.org/show_bug.cgi?id=177595

        Reviewed by Daniel Bates.

        In Xcode 9, the path of the simulator application is now in a new CoreSimulator subdirectory
        of the iphoneOS SDK platform. This patch updates webkitdirs.pm to use the new path in
        Xcode 9 or higher so that it is possible to run Safari on the iOS simulator again. It also
        does some minor code refactoring to improve code reuse.

        * Scripts/configure-xcode-for-ios-development: Move sdkDirectory() and sdkPlatformDirectory()
        into webkitdirs.
        (sdkDirectory): Deleted.
        (sdkPlatformDirectory): Deleted.
        * Scripts/webkitdirs.pm: Expose new sdkDirectory() and sdkPlatformDirectory().
        (sdkDirectory): Moved from configure-xcode-for-ios-development.
        (sdkPlatformDirectory): Ditto.
        (XcodeSDKPath): Rely on sdkDirectory() to implement this function.
        (iosSimulatorApplicationsPath): In Xcode 9 or higher use the new path. It is calculated
        by relying on sdkPlatformDirectory().

2017-10-11  Dewei Zhu  <dewei_zhu@apple.com>

        run-benchmark script should set '__XPC_DYLD_FRAMEWORK_PATH' while launching local-built Safari on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=178199

        Reviewed by Saam Barati.

        '__XPC_DYLD_FRAMEWORK_PATH' should be set while launching Safari on run-benchmark script.
        'force_remove' function should support both file and directory.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (force_remove):

2017-10-11  Saam Barati  <sbarati@apple.com>

        Runtime disable poly proto because it may be a 3-4% Speedometer regression
        https://bugs.webkit.org/show_bug.cgi?id=178192

        Reviewed by JF Bastien.

        * Scripts/run-jsc-stress-tests:

2017-10-11  Youenn Fablet  <youenn@apple.com>

        Add API to clean CacheStorage data
        https://bugs.webkit.org/show_bug.cgi?id=178034

        Reviewed by Chris Dumez.

        Adding internals API to trigger deleting all or origin-persistent cache storage persistent data. 

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

2017-10-11  Chris Dumez  <cdumez@apple.com>

        [Geolocation] Expose Coordinates.floorLevel
        https://bugs.webkit.org/show_bug.cgi?id=178173
        <rdar://problem/34918936>

        Reviewed by Ryosuke Niwa.

        Add test infrastructure for testing Coordinates.floorLevel.

        * DumpRenderTree/TestRunner.cpp:
        (setMockGeolocationPositionCallback):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setMockGeolocationPosition):
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::setPosition):
        * WebKitTestRunner/GeolocationProviderMock.h:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setMockGeolocationPosition):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMockGeolocationPosition):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setMockGeolocationPosition):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2017-10-11  Youenn Fablet  <youenn@apple.com>

        Bump default cache storage quota to 20MB
        https://bugs.webkit.org/show_bug.cgi?id=178132

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration): Setting quota to 400kb

2017-10-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r223113 and r223121.
        https://bugs.webkit.org/show_bug.cgi?id=178182

        Reintroduced 20% regression on Kraken (Requested by rniwa on
        #webkit).

        Reverted changesets:

        "Enable gigacage on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        https://trac.webkit.org/changeset/223113

        "Use one virtual allocation for all gigacages and their
        runways"
        https://bugs.webkit.org/show_bug.cgi?id=178050
        https://trac.webkit.org/changeset/223121

2017-10-11  Ryosuke Niwa  <rniwa@webkit.org>

        Sanitize URL in pasteboard for other applications and cross origin content
        https://bugs.webkit.org/show_bug.cgi?id=178060
        <rdar://problem/34874518>

        Reviewed by Wenson Hsieh.

        Added API tests for sanitizing URLs copied from web content, and that the original URL is exposed to the web content.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/CopyURL.mm: Added.
        (readURLFromPasteboard): A helper function.
        * TestWebKitAPI/Tests/WebKitCocoa/copy-url.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (DataInteractionTests.DataTransferGetDataWhenDroppingCustomData): Rebaselined. https://www.apple.com is no longer
        normalized to https://www.apple.com/ by NSURL / UIPasteboard as expected.
        (DataInteractionTests.DataTransferSetDataValidURL): Added.
        (DataInteractionTests.DataTransferSetDataUnescapedURL): Added.
        (DataInteractionTests.qDataTransferSetDataInvalidURL): Added.

2017-10-11  Chris Dumez  <cdumez@apple.com>

        Modernize Geolocation code
        https://bugs.webkit.org/show_bug.cgi?id=178148

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setMockGeolocationPosition):

2017-10-11  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        [GStreamer] Many media source tests crashing with GStreamer-CRITICAL **: _gst_util_uint64_scale: assertion 'denom != 0' failed in gst_qtdemux_configure_stream()
        https://bugs.webkit.org/show_bug.cgi?id=176804

        Reviewed by Michael Catanzaro.

        Add patch to fix assert in qtdemux.

        * gstreamer/jhbuild.modules:
        * gstreamer/patches/gst-plugins-good-0009-qtdemux-fix-assert-when-moof-contains-one-sample.patch: Added.

2017-10-11  Tomas Popela  <tpopela@redhat.com>

        Use https for trac changeset and browser links
        https://bugs.webkit.org/show_bug.cgi?id=178167

        Reviewed by Alexey Proskuryakov.

        Switch the http://trac.webkit.org/changeset and
        http://trac.webkit.org/browser links that are printed by webkitpy to
        https. Also update the test expectations.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        (CommitterValidatorTest.test_flag_permission_rejection_message):
        * Scripts/webkitpy/common/config/urls.py:
        (view_source_url):
        (view_revision_url):
        * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py:
        (BugTest.test_commit_revision):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        * Scripts/webkitpy/common/net/buildbot/buildbot_unittest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (MainTest):
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json):
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.test_missing_bug_number):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/bot/flakytestreporter_unittest.py:
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_rollout):
        (IRCBotTest.test_revert):
        (IRCBotTest.test_multi_rollout):
        (IRCBotTest.test_rollout_with_r_in_svn_revision):
        (IRCBotTest.test_multi_rollout_with_r_in_svn_revision):
        (IRCBotTest.test_rollout_invalidate_reason):
        (test_multi_rollout_invalidate_reason):
        * Scripts/webkitpy/tool/bot/sheriff_unittest.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/newcommitbot_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (SuggestNominations._count_commit):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/servers/data/rebaselineserver/util.js:
        (getTracUrl):
        (getSortedKeys):
        * Scripts/webkitpy/tool/steps/closebugforlanddiff_unittest.py:
        (CloseBugForLandDiffTest.test_empty_state):
        * Scripts/webkitpy/tool/steps/commit_unittest.py:
        (CommitTest._test_check_test_expectations):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (UpdateChangeLogsForRevertTest):

2017-10-10  Ryosuke Niwa  <rniwa@webkit.org>

        Enable custom pasteboard data in DumpRenderTree and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=178154

        Reviewed by Wenson Hsieh.

        Fixed the bug that LocalPasteboard would fail to load the promise type if data is set after declaring types
        by delaying the call to provideDataForType until when dataForType is called.

        Without this fix, fast/events/dropzone-002.html would start failing after enabling custom pasteboard data.
        With this fix, fast/events/dropzone-005.html also starts passing.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTreePasteboard.mm:
        (-[LocalPasteboard addTypes:owner:]):
        (-[LocalPasteboard dataForType:]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-10-10  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA form role should be mapped to ATK_ROLE_LANDMARK; not ATK_ROLE_FORM
        https://bugs.webkit.org/show_bug.cgi?id=178137

        Reviewed by Chris Fleizach.

        Add handling for ATK_ROLE_LANDMARK resulting from the ARIA form role.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2017-10-10  Jonathan Bedard  <jbedard@apple.com>

        run-webkit-tests: upload test results to multiple servers
        https://bugs.webkit.org/show_bug.cgi?id=178012
        <rdar://problem/34856501>

        Reviewed by Lucas Forschler.

        Allowing uploading of results to multiple servers makes developing new results
        databases much easier, and does not complicate uploading logic.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.upload_results): Iterate through the list of results server hosts and
        send results to each one.
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Accept a list of test results servers.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator.__init__): Accept a list of test results servers.
        (JSONResultsGenerator.get_json): Pick which server to download from by index.
        (JSONResultsGenerator.upload_json_files): Upload the JSON to each results server.
        (JSONResultsGenerator._get_archived_json_results): Pick which server to download from.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Allow multiple test-results-servers and results-server-hosts to be
        passed to run-webkit-tests. 

2017-10-09  Youenn Fablet  <youenn@apple.com>

        Vector should be able to easily create from a list of movable only items
        https://bugs.webkit.org/show_bug.cgi?id=176432

        Reviewed by Darin Adler.

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

2017-09-29  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by JF Bastien.
        
        Add a mode to test disabling Gigacage.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:

2017-10-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r223015 and r223025.
        https://bugs.webkit.org/show_bug.cgi?id=178093

        Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
        #webkit).

        Reverted changesets:

        "Enable gigacage on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        http://trac.webkit.org/changeset/223015

        "Unreviewed, disable Gigacage on ARM64 Linux"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        http://trac.webkit.org/changeset/223025

2017-10-09  Sam Weinig  <sam@webkit.org>

        Make HashMap::keys() and HashMap::values() work with WTF::map/WTF::copyToVector
        https://bugs.webkit.org/show_bug.cgi?id=178072

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):
        
            Add tests for HashMap::keys() and HashMap::values() working with copyToVector.

2017-10-05  Frederic Wang  <fwang@igalia.com>

        Remove WOFF2 from Source/ThirdParty.
        https://bugs.webkit.org/show_bug.cgi?id=177862

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/style/checker.py: Remove woff2.
        * gtk/jhbuild.modules: Add new jhbuild module for woff2.

2017-10-08  Sam Weinig  <sam@webkit.org>

        It should be possible to create a ListHashSet with a std::initializer_list.
        https://bugs.webkit.org/show_bug.cgi?id=178070

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::TEST):
        Add a test for using std::initializer_list with ListHashSet.

2017-10-08  Sam Weinig  <sam@webkit.org>

        There should be a version of copyToVector that returns a Vector, rather than using an out parameter
        https://bugs.webkit.org/show_bug.cgi?id=177732

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):
        Add tests for the new copyToVector and copyToVectorOf functions.

2017-10-08  Darin Adler  <darin@apple.com>

        Fix bugs related to setting reflected floating point DOM attributes
        https://bugs.webkit.org/show_bug.cgi?id=178061

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/AtomicString.cpp: Added a test of the
        AtomicString::number function, based on the test cases we already
        had for String::numberToStringECMAScript, and with some additional
        cases with powers of 10 that check handling of trailng zeroes.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp: Added test cases to the
        existing tests of the String::numberToStringECMAScript function
        as above. Also added tests for String::number and for
        String::numberToStringFixedWidth. Also changed the tests to all use
        EXPECT instead of ASSERT macros since these are all non-fatal.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpFrameScrollPosition): Use StringBuilder::appendECMAScriptNumber
        instead of String::number.

2017-10-08  Dean Jackson  <dino@apple.com>

        Make sort-Xcode-project file handle UnifiedSources
        https://bugs.webkit.org/show_bug.cgi?id=178042

        Reviewed by Sam Weinig.

        Sort the UnifiedSource(\d+) files by number rather
        than alphabetically.

        * Scripts/sort-Xcode-project-file:
        (sortChildrenByFileName):
        (sortFilesByFileName):

2017-09-29  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by JF Bastien.
        
        Add a mode to test disabling Gigacage.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:

2017-10-06  Aishwarya Nirmal  <anirmal@apple.com>

        [iOS] Respect the "caret-color" CSS property when editing
        https://bugs.webkit.org/show_bug.cgi?id=177489
        <rdar://problem/34600419>

        Reviewed by Tim Horton.

        Adds test for iOS caret color support.

        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2017-10-06  Alex Christensen  <achristensen@webkit.org>

        Add more infrastructure to apply custom header fields to same-origin requests
        https://bugs.webkit.org/show_bug.cgi?id=177629

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp:
        (canonicalizeHTTPHeader):
        (shouldRemainUnchanged):
        (shouldBeInvalid):
        (shouldBecome):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):
        (expectHeaders):
        (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]):
        (-[CustomHeaderFieldsDelegate webView:stopURLSchemeTask:]):

        Test main resource requests, subresource requests, and cross-origin requests.

2017-10-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Tweak support for classifying form controls (followup to r222487)
        https://bugs.webkit.org/show_bug.cgi?id=177917
        <rdar://problem/34820122>

        Reviewed by Dean Jackson.

        Minor cleanup around autofill API tests added in r222487. Additionally, augments some of these API tests to
        verify that after blurring the focused element, the content view no longer accepts autofill credentials (see
        WebKit ChangeLog for more details). Also augments tests to verify that the URL in the autofill context matches
        the document URL.

        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:

        Remove the USE(APPLE_INTERNAL_SDK) guard for these API tests.

        (newUIKeyboardLoginCredentialsSuggestion):

        Add a stub implementation of UIKeyboardLoginCredentialsSuggestion. This allows
        [UIKeyboardLoginCredentialsSuggestion new] to return a nonnull object, which allows these API tests to verify
        that the credential filling codepath works as intended without any additional UIKit changes. Currently, tests
        for the value of username and password fields are passing even though the fields are not being populated because
        the expected string values are null, and the observed value is an empty string. We instead check the literal
        string values here instead of credentialSuggestion's properties, so that tests verifying the behavior of
        -insertTextSuggestion: will require username and password inputs to be populated.

        (-[TestInputDelegate _webView:focusShouldStartInputSession:]):
        (-[AutofillTestView initWithFrame:]):
        (-[AutofillTestView _autofillInputView]):
        (-[AutofillTestView textInputHasAutofillContext]):
        (TestWebKitAPI::TEST):

        Add an additional API test to verify that programmatic focus without user interaction (and also without testing
        overrides) does not activate autofill.

        (createUIKeyboardLoginCredentialsSuggestion): Deleted.
        (-[WKWebView _privateTextInput]): Deleted.
        * TestWebKitAPI/ios/UIKitSPI.h:

        Minor gardening to remove iOS version >= 11 guards that are now unnecessary. Additionally, add some more private
        header imports (with corresponding interface definitions for building and running with the public SDK).

2017-10-06  Antti Koivisto  <antti@apple.com>

        Minor WeakPtr improvements
        https://bugs.webkit.org/show_bug.cgi?id=177958

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::Base::createWeakPtr): Deleted.

2017-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix parsing of GTK unit tests output in bot configuration.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.commandComplete): Remove trailing ':' from the regular expression.

2017-10-06  Charles Turner  <cturner@igalia.com>

        Disable bmalloc when running Valgrind
        https://bugs.webkit.org/show_bug.cgi?id=177923

        Reviewed by Carlos Alberto Lopez Perez.

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

2017-10-06  Zan Dobersek  <zdobersek@igalia.com>

        Implement TestController::platformContext() for WPE, returning the
        m_context pointer as the GTK+ port does. This fixes the crashes on
        the WPE testers.

        Rubber-stamped by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/TestControllerWPE.cpp:
        (WTR::TestController::platformContext):

2017-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to configure and enable resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=177943

        Reviewed by Michael Catanzaro.

        Add a command line option to enable intelligent tracking prevention to MiniBrowser and tests cases to check the
        new API.

        * MiniBrowser/gtk/main.c:
        (main):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (serverCallback):
        (testWebsiteDataConfiguration):
        (testWebsiteDataEphemeral):
        (testWebsiteDataResourceLoadStats):
        (beforeAll):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::Test):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (directoryChangedCallback):
        (WebViewTest::waitUntilFileExists):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:

2017-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] All resource load statistics tests added in r212183 crash in GTK bots, timeout in GTK and WPE bots since r219049
        https://bugs.webkit.org/show_bug.cgi?id=168171

        Reviewed by Chris Dumez.

        Implement all resource load statistics functions in TestController using the C API. Also enable the FileMonitor
        unit test. This test requires a platform implementation of Util::run(), so I've added UtilitiesGLib.cpp with an
        iplementation common to glib based ports using WTF RunLoop abstraction.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp:
        * TestWebKitAPI/glib/UtilitiesGLib.cpp: Copied from Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::spinRunLoop):
        (TestWebKitAPI::Util::sleep):
        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp:
        * TestWebKitAPI/wpe/PlatformUtilitiesWPE.cpp:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::platformAdjustContext):
        (WTR::TestController::setStatisticsLastSeen):
        (WTR::TestController::setStatisticsPrevalentResource):
        (WTR::ResourceStatisticsCallbackContext::ResourceStatisticsCallbackContext):
        (WTR::resourceStatisticsCallback):
        (WTR::TestController::isStatisticsPrevalentResource):
        (WTR::TestController::setStatisticsHasHadUserInteraction):
        (WTR::TestController::isStatisticsHasHadUserInteraction):
        (WTR::TestController::setStatisticsGrandfathered):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::setStatisticsSubframeUnderTopFrameOrigin):
        (WTR::TestController::setStatisticsSubresourceUnderTopFrameOrigin):
        (WTR::TestController::setStatisticsSubresourceUniqueRedirectTo):
        (WTR::TestController::setStatisticsTimeToLiveUserInteraction):
        (WTR::TestController::setStatisticsTimeToLiveCookiePartitionFree):
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestController::statisticsUpdateCookiePartitioning):
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost):
        (WTR::TestController::statisticsSubmitTelemetry):
        (WTR::TestController::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestController::setStatisticsShouldClassifyResourcesBeforeDataRecordsRemoval):
        (WTR::TestController::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        (WTR::TestController::setStatisticsMinimumTimeBetweenDataRecordsRemoval):
        (WTR::TestController::setStatisticsGrandfatheringTime):
        (WTR::TestController::setStatisticsMaxStatisticsEntries):
        (WTR::TestController::setStatisticsPruneEntriesDownTo):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStore):
        (WTR::TestController::statisticsClearInMemoryAndPersistentStoreModifiedSinceHours):
        (WTR::TestController::statisticsClearThroughWebsiteDataRemovalCallback):
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestController::statisticsResetToConsistentState):
        * WebKitTestRunner/TestController.h:

2017-10-05  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Enable ENABLE_ENCRYPTED_MEDIA build-time setting
        https://bugs.webkit.org/show_bug.cgi?id=177261

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-10-05  Alex Christensen  <achristensen@webkit.org>

        Add ObjC equivalent of WKPageNavigationClient.didChangeBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=177966
        <rdar://problem/22387135>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[ListItemDelegate _webView:backForwardListItemAdded:removed:]):
        (-[ListItemDelegate webView:didFinishNavigation:]):
        (TEST):

2017-10-04  Megan Gardner  <megan_gardner@apple.com>

        check-webkit-style erroneously requires a space between the carrot and brace in obj-c blocks.
        https://bugs.webkit.org/show_bug.cgi?id=177897

        Reviewed by Dan Bernstein and Jonathan Bedard.

        Remove the check for a space between ^ and {, 
        as this is valid and expected Obj-C. Now check to make sure there is
        no space at all between ^ and {, and also that there is a space between
        the end of an argument list and the {.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (regex_for_lambdas_and_blocks):

2017-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Run WebKit2 C API tests in GTK+ bots again after the last WebKit2 -> WebKit rename.

        * Scripts/run-gtk-tests:
        (TestRunner):
        (TestRunner._run_test):

2017-10-05  Darin Adler  <darin@apple.com>

        Remove additional WebKitSystemInterface remnants
        https://bugs.webkit.org/show_bug.cgi?id=177948

        Reviewed by Andy Estes.

        * DumpRenderTree/PlatformMac.cmake: Removed code to link the
        WebKitSystemInterface library. Left in code that points to
        the WebKitLibraries directory, but maybe that can be removed by
        someone who is more certain it's no longer needed.

        * Scripts/copy-webkitlibraries-to-product-directory: Removed code
        to copy and delete WebKitSystemInterface libraries and headers.

        * WebKitTestRunner/PlatformMac.cmake: Removed code to link the
        WebKitSystemInterface library. Left in code that points to
        the WebKitLibraries directory, but maybe that can be removed by
        someone who is more certain it's no longer needed.

2017-10-05  Saam Barati  <sbarati@apple.com>

        Unreviewed. Try to make debug type profiler tests stop timing out.

        * Scripts/run-jsc-stress-tests:

2017-10-03  Frederic Wang  <fwang@igalia.com>

        Remove Brotli from Source/ThirdParty
        https://bugs.webkit.org/show_bug.cgi?id=177804

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Build brotli 1.0.1 from the official github repository.
        * Scripts/webkitpy/style/checker.py: Remove brotli.

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

        Stop linking with WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=177915

        Reviewed by Antti Koivisto.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunnerApp.xcconfig:

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

        Remove unnecessary includes of WebKitSystemInterface on Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=177912

        Reviewed by Saam Barati.

        * DumpRenderTree/mac/DumpRenderTree.mm:

2017-10-04  Megan Gardner  <megan_gardner@apple.com>

        Break out new touch debugging code into seperate file
        https://bugs.webkit.org/show_bug.cgi?id=177796

        Reviewed by Simon Fraser.

        Encapsulate the new debug touch code into it's own file.
        This allows for cleaner code and a better way to show the touches
        in a completely separate window, which should also be in screen
        coordinates, and not subject to any transforms that get put on the
        WebViews.

        * TestRunnerShared/spi/UIKitTestSPI.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/HIDDebugTouchWindow.h: Added.
        * WebKitTestRunner/ios/HIDDebugTouchWindow.mm: Added.
        (+[HIDDebugTouchWindow sharedHIDDebugTouchWindow]):
        (-[HIDDebugTouchWindow init]):
        (-[HIDDebugTouchWindow dealloc]):
        (-[HIDDebugTouchWindow updateDebugIndicatorForTouch:withPointInWindowCoordinates:isTouching:]):
        (-[HIDDebugTouchWindow initDebugViewsIfNeeded]):
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator init]):
        (-[HIDEventGenerator _createIOHIDEventWithInfo:]):
        (-[HIDEventGenerator _createIOHIDEventType:]):
        (-[HIDEventGenerator _updateTouchPoints:count:]):
        (-[HIDEventGenerator touchDownAtPoints:touchCount:]):
        (-[HIDEventGenerator touchDown:touchCount:]):
        (-[HIDEventGenerator liftUpAtPoints:touchCount:]):
        (-[HIDEventGenerator liftUp:touchCount:]):
        (-[HIDEventGenerator moveToPoints:touchCount:duration:]):
        (-[HIDEventGenerator initDebugViewsIfNeeded]): Deleted.
        (-[HIDEventGenerator updateDebugIndicatorForTouch:withPoint:isTouching:]): Deleted.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):

2017-10-04  JF Bastien  <jfbastien@apple.com>

        WTF: Update std::expected to match current proposal
        https://bugs.webkit.org/show_bug.cgi?id=177881

        Reviewed by Mark Lam.

        The proposal is likely to be in C++20 and I've been asked to help co-champion
        it. I'm therefore updating our implementation to more closely match the current
        proposal, and to make sure it'll work for us if standardized.

         - Rename UnexpectedType to Unexpected to match the proposal.
         - Remove relational operators, only equality / inequality remains.
         - Fix minor type signatures.
         - Add UnexpectedType typedef.
         - Uncomment rebind implementation.
         - Add in-place construction tag, as well as explicit error construction tag.
         - Add template unexpected constructor.
         - Note that make_unexpected isn't in the proposal anymore, but we keep it because we don't have C++17 deduction guides.
         - Remove hashing, which isn't in the proposal anymore.

        * TestWebKitAPI/Tests/WTF/Expected.cpp:
        (WTF::operator<<):
        (TestWebKitAPI::TEST):

2017-10-04  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=177888
        WebKitArchiveSupport - add API Gateway to source control
        This is a swagger configuration export via AWS API Gateway console.

        Rubber-stamped by Alexey Proskuryakov.

        * WebKitArchiveSupport/AWS-APIGateway: Added.
        * WebKitArchiveSupport/AWS-APIGateway/stage-v2.json: Added.

2017-10-04  Mark Lam  <mark.lam@apple.com>

        Add support for using Probe DFG OSR Exit behind a runtime flag.
        https://bugs.webkit.org/show_bug.cgi?id=177844
        <rdar://problem/34801425>

        Reviewed by Saam Barati.

        Enable --useProbeOSrExit=true for dfg-eager and ftl-no-cjit-validate-sampling-profiler
        test configurations.

        * Scripts/run-jsc-stress-tests:

2017-10-04  Jonathan Bedard  <jbedard@apple.com>

        webkitpy.tool.steps.steps_unittest.StepsTest.test_runtests_api is flakey
        https://bugs.webkit.org/show_bug.cgi?id=177751
        <rdar://problem/34769470>

        Reviewed by Daniel Bates.

        Port._build_path() calls Tools/Scripts/webkit-build-directory and caches this
        result. When capturing output from the MockExecutive, the first invocation of
        Port._build_path() will log the running of Tools/Scripts/webkit-build-directory
        but subsequent invocations will not.

        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest):
        (StepsTest.setUp): Cache the build path before running tests.

2017-10-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JHBuild][GTK][WKE] Circular dependency between harfbuzz and freetype6
        https://bugs.webkit.org/show_bug.cgi?id=177865

        Reviewed by Michael Catanzaro.

        Build freetype6 without harfbuzz support.
        This seems to be what distros like Fedora, Debian or OpenEmbedded do.
        Also explicitly enable support for freetype and fontconfig on harfbuzz.

        * gtk/jhbuild.modules: Enable also support for icu.
        * wpe/jhbuild.modules:

2017-10-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Test262] Update Test262 to Oct 4 version
        https://bugs.webkit.org/show_bug.cgi?id=177859

        Reviewed by Sam Weinig.

        * Scripts/import-test262-tests:

2017-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Use blob URL when pasting RTFD instead of overriding DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=177801
        <rdar://problem/34542270>

        Reviewed by Wenson Hsieh.

        Added a regression test for an assertion failure when pasting an empty RTFD as well as a test for pasting
        RTFD with an image, which should result in an image element with a blob URL.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteRTFD.mm:
        * TestWebKitAPI/Tests/WebKitCocoa/paste-rtfd.html:

2017-10-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GLib] Let WebCore know of low power situations
        https://bugs.webkit.org/show_bug.cgi?id=177810

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies: add upower-glib dev packages for Debian, Arch and Fedora.

2017-10-03  Saam Barati  <sbarati@apple.com>

        Implement polymorphic prototypes
        https://bugs.webkit.org/show_bug.cgi?id=176391

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2017-10-03  Myles C. Maxfield  <mmaxfield@apple.com> 

        Create a SPIR-V assembler 
        https://bugs.webkit.org/show_bug.cgi?id=177726 

        Reviewed by Filip Pizlo. 

        Khronos has released a json file containing every SPIR-V opcode and operand at 
        https://github.com/KhronosGroup/SPIRV-Headers/blob/master/include/spirv/1.2/spirv.core.grammar.json 
        This patch creates a function which loads this file (via the fetch API), parses it, and creates
        an object which holds two things: 
        - For each opcode, a class which accepts the appropriate operands 
        - For each enum type, an object which holds each enum value 
        The constructor for each opcode is smart enough to do some basic type-checking of the argument, 
        according to the types listed in Khronos's json file. 

        This patch also includes an example .html file which outputs a dummy SPIR-V program, 
        which happens to be compatible with the SPIR-V demo at 
        https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/demos/cube.cpp 
        If you modify this demo to use the generated SPIR-V program, you can see the result in 
        action.

        This patch also commits a copy of Khronos's json file mentioned above. This isn't the first 
        Khronos file we've committed into our repository with this license, so there shouldn't be any 
        problems there. 

        * WebGPUShadingLanguageRI/SPIR-V.js: Added. 
        (SPIRV.): 
        (SPIRVAssembler): 
        (SPIRVAssembler.prototype.append): 
        (SPIRVAssembler.prototype.get size): 
        (SPIRVAssembler.prototype.get storage): 
        (SPIRVAssembler.prototype.get result): 
        * WebGPUShadingLanguageRI/SPIRV.html: Added. 
        * WebGPUShadingLanguageRI/spirv.core.grammar.json: Added. 

2017-10-03  Chris Dumez  <cdumez@apple.com>

        SharedStringHashStore should support removing hashes
        https://bugs.webkit.org/show_bug.cgi?id=177770

        Reviewed by Alex Christensen.

        Add API test coverage.

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

2017-10-03  Dewei Zhu  <dewei_zhu@apple.com>

        Fix missing import for BenchmarkRunner.
        https://bugs.webkit.org/show_bug.cgi?id=177842

        Reviewed by Ryosuke Niwa.

        'show_results' requires BenchmarkRunner.

        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:

2017-10-03  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] Bump deps to add support for xdg-shell-unstable-v6 protocol
        https://bugs.webkit.org/show_bug.cgi?id=177820

        Reviewed by Žan Doberšek.

        gnome-shell does not advertize the xdg-shell protocol anymore, but xdg-shell-unstable-v6 instead.
        Support has been added in WPEBackend-mesa, we need to update the requirements.
        wayland-1.10 is needed for wl_proxy_get_version(), used in the generated headers.

        * wpe/jhbuild.modules:

2017-10-03  Alex Christensen  <achristensen@webkit.org>

        Add ObjC SPI equivalent to WKPageLoaderClient.willGoToBackForwardListItem
        https://bugs.webkit.org/show_bug.cgi?id=177825
        <rdar://problem/22387505>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[BackForwardDelegate _webView:willGoToBackForwardListItem:inPageCache:]):
        (-[BackForwardDelegate webView:didFinishNavigation:]):
        (TEST):

2017-10-03  Antti Koivisto  <antti@apple.com>

        Allow assigning WeakPtr<Derived> to WeakPtr<Base>
        https://bugs.webkit.org/show_bug.cgi?id=177817

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::Base::weakPtrFactory):
        (TestWebKitAPI::TEST):

2017-10-03  Youenn Fablet  <youenn@apple.com>

        Remove no longer needed WebRTC build infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=177756

        Reviewed by Alejandro G. Castro.

        * Scripts/generate-libwebrtc-cmake: Removed.
        * Scripts/webkitpy/libwebrtc/__init__.py: Removed.
        * Scripts/webkitpy/libwebrtc/generate_cmake.py: Removed.

2017-10-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA drag-and-drop attribute values should be exposed via AtkObject attributes
        https://bugs.webkit.org/show_bug.cgi?id=177763

        Reviewed by Chris Fleizach.

        Implement ariaIsGrabbed() and ariaDropEffects() for ATK.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::ariaIsGrabbed const):
        (WTR::AccessibilityUIElement::ariaDropEffects const):

2017-10-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Make WSL demo compatible with Microsoft Edge
        https://bugs.webkit.org/show_bug.cgi?id=177643

        Reviewed by Saam Barati.

        This patch does two things. The first is it migrates a loop over ParentNode.children to a legacy style loop
        because Microsoft Edge throws an exception when trying to use a for...of loop with it. This patch also hides
        the compilation behind a setTimeout(0) so there is some indication that something is happening during a
        compile.


        * Tools/WebGPUShadingLanguageRI/index.html:

2017-10-02  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] The value of aria-level is not exposed on non-heading roles
        https://bugs.webkit.org/show_bug.cgi?id=177775

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::hierarchicalLevel const):

2017-10-02  Geoffrey Garen  <ggaren@apple.com>

        WeakPtr should have a move constructor
        https://bugs.webkit.org/show_bug.cgi?id=177789

        Reviewed by Chris Dumez.

        Chris made me write an API test. It wasn't that painful.

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

2017-10-02  Filip Pizlo  <fpizlo@apple.com>

        WSL ^ should be *
        https://bugs.webkit.org/show_bug.cgi?id=177705

        Rubber stamped by Keith Miller.
        
        When I first wrote the prototype, I thought it would be cool to use ^ for pointers. Nobody agrees. I've
        gotten so much feedback to use *. This changes pointers to use *.

        * WebGPUShadingLanguageRI/DereferenceExpression.js:
        (DereferenceExpression.prototype.toString):
        (DereferenceExpression):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseType):
        (parsePossiblePrefix):
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.toString):
        (PtrType):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.js:
        (tests.simpleDereference):
        (tests.dereferenceStore):
        (tests.simpleMakePtr):
        (tests.loadNull):
        (tests.storeNull):
        (tests.returnNull):
        (tests.dereferenceDefaultNull):
        (tests.defaultInitializedNull):
        (tests.passNullToPtrMonomorphic):
        (tests.passNullToPtrPolymorphic):
        (tests.passNullAndNotNull):
        (tests.passNullAndNotNullFullPoly):
        (tests.passNullAndNotNullFullPolyReverse):
        (tests.chainGeneric):
        (tests.chainStruct):
        (tests.chainStructNewlyValid):
        (tests.chainStructDevice):
        (tests.paramChainStructDevice):
        (tests.simpleProtocolExtends):
        (tests.protocolExtendsTwo):
        (tests.overrideSubscriptStruct):
        (tests.overrideSubscriptStructAndDoStores):
        (tests.overrideSubscriptStructAndUsePointers):
        (tests.overrideSubscriptStructAndUsePointersIncorrectly):
        (tests.makeArrayRefFromPointer):
        (tests.nonArrayRefArrayLengthFail):
        (tests.constexprIsNotLValuePtr):
        (tests.genericAccessors):
        (tests.nestedSubscriptLValueEmulationSimple):
        (tests.nestedSubscriptLValueEmulationGeneric):
        (tests.shaderTypes):
        (tests.enumPtrBase):
        (tests.mutuallyRecursiveStructWithPointersBroken):
        (tests.mutuallyRecursiveStructWithPointers):
        (tests.linkedList):
        (tests.pointerToPointer):
        (tests.pointerGetter):
        (tests.operatorCastWithTypeVariableInferredFromReturnType):
        (tests.loneSetterPointer):
        (tests.anderWithNothingWrong):
        (tests.anderWithWrongNumberOfArguments):
        (tests.anderDoesntReturnPointer):
        (tests.anderDoesntTakeReference):
        (tests.anderWithArrayRef):
        (tests.pointerIndexGetter):
        (tests.loneIndexSetterPointer):
        (tests.indexAnderWithNothingWrong):
        (tests.indexAnderWithWrongNumberOfArguments):
        (tests.indexAnderDoesntReturnPointer):
        (tests.indexAnderDoesntTakeReference):
        (tests.indexAnderWithArrayRef):
        (tests.devicePtrPtr):
        (tests.threadgroupPtrPtr):
        (tests.constantPtrPtr):
        (tests.pointerIndexGetterInProtocol):
        (tests.loneIndexSetterPointerInProtocol):
        (tests.indexAnderWithNothingWrongInProtocol):
        (tests.indexAnderWithWrongNumberOfArgumentsInProtocol):
        (tests.indexAnderDoesntReturnPointerInProtocol):
        (tests.indexAnderDoesntTakeReferenceInProtocol):
        (tests.indexAnderWithArrayRefInProtocol):
        (tests.andReturnedArrayRef):

2017-10-02  Filip Pizlo  <fpizlo@apple.com>

        WSL should be fine with &foo()[i] if foo() returns a []
        https://bugs.webkit.org/show_bug.cgi?id=177704

        Reviewed by Saam Barati.
        
        Previously, we'd determine if a property access expression (base.field or base[index]) was an lvalue by
        asking if its base was an lvalue. This is right in all cases except if the base is of type []. Then, the
        property access expression is an lvalue so long as there is a setter or ander.
        
        This fixes the issue and adds a test.
        
        Also, this makes error messages in the case that something is not an lvalue a lot better. If something
        is not an lvalue because we could not find anders or setters, then we will tell you why we could not
        find them.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitAssignment):
        (Checker.prototype.visitReadModifyWriteExpression):
        (Checker.prototype.visitMakePtrExpression):
        (Checker.prototype._finishVisitingPropertyAccess):
        * WebGPUShadingLanguageRI/DotExpression.js:
        (DotExpression.prototype.get fieldName):
        (DotExpression.prototype.get isLValue): Deleted.
        (DotExpression.prototype.get addressSpace): Deleted.
        * WebGPUShadingLanguageRI/IndexExpression.js:
        (IndexExpression.prototype.get index):
        (IndexExpression.prototype.get isLValue): Deleted.
        (IndexExpression.prototype.get addressSpace): Deleted.
        * WebGPUShadingLanguageRI/PropertyAccessExpression.js:
        (PropertyAccessExpression):
        (PropertyAccessExpression.prototype.get isLValue):
        (PropertyAccessExpression.prototype.set isLValue):
        * WebGPUShadingLanguageRI/PropertyResolver.js:
        (PropertyResolver.prototype._visitRValuesWithinLValue.RValueFinder.prototype.visitMakeArrayRefExpression):
        (PropertyResolver.prototype._visitRValuesWithinLValue.RValueFinder):
        (PropertyResolver.prototype._visitRValuesWithinLValue):
        * WebGPUShadingLanguageRI/Test.js:
        (tests.storeNullArrayRef):
        (tests.andReturnedArrayRef):

2017-10-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Guard iOS webkitGetAsEntry API tests on older iOS versions

        Unreviewed test gardening. After r222688, these tests require custom pasteboard data to be enabled by default,
        so don't run them against shipping iOS.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:

2017-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] Crash in webkit_web_resource_get_data_finish()
        https://bugs.webkit.org/show_bug.cgi?id=177107

        Reviewed by Michael Catanzaro.

        Add a test case to check we handle errors when webkit_web_resource_get_data() fails.

        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
        (webViewloadChanged):
        (testWebResourceGetDataError):
        (beforeAll):

2017-10-02  Alex Christensen  <achristensen@webkit.org>

        Fix build after r222715
        https://bugs.webkit.org/show_bug.cgi?id=177697

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        Use the public API instead of the removed SPI.

2017-10-02  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r214201): WebProcess hangs during policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=177590
        <rdar://problem/33362929>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/JavaScriptDuringNavigation.mm: Added.
        (-[JSNavigationDelegate webView:didFinishNavigation:]):
        (-[JSNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[JSNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[JSNavigationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-10-02  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 Darin Adler.

        When run-webkit-tests is stuck, it is difficult to immediately tell
        why. Saving a stack-trace when run-webkit-tests is terminated
        or stopped with CNTRL-C will make such issues easier to debug.

        * Scripts/webkitpy/common/interupt_debugging.py: Added.
        (log_stack_trace): Given a Python frame object, log a stack trace to
        the provided 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_cntrl_c): Attach a listener to SIGINT so that a
        stack-trace can be logged when a program is CNTRL-Ced. 
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (main): Set handlers to log stack trace on interruption.

2017-10-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove ENABLE_CSS_REGIONS
        https://bugs.webkit.org/show_bug.cgi?id=177689

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2017-09-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Upgrade webkitgtk-test-fonts to version 0.0.7.

        This version upgrades liberation fonts to version 2, that has a wider glyph coverage.

        * gtk/jhbuild.modules:

2017-09-29  Alex Christensen  <achristensen@webkit.org>

        Expose WebPreferences::webGLEnabled through WKPreferences
        https://bugs.webkit.org/show_bug.cgi?id=177692
        <rdar://problem/24110556>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/Preferences.mm:
        (-[AlertSaver alert]):
        (-[AlertSaver webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-09-29  Alex Christensen  <achristensen@webkit.org>

        Fix WKWebViewConfigurationPrivate after r222663
        https://bugs.webkit.org/show_bug.cgi?id=177644

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

2017-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Image pasting is not working on tineye.com / gmail.com / GitHub.com due to lack of support for DataTransfer.items
        https://bugs.webkit.org/show_bug.cgi?id=170449
        <rdar://problem/31432525>

        Reviewed by Wenson Hsieh.

        Added an API test to paste an image from pasteboard. The test is shared between iOS and macOS.

        The tests to paste image files are only enabled on macOS since putting files into pasteboard isn't a thing on iOS.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/PasteImage.mm: Added.
        (writeImageDataToPasteboard):
        (writeBundleFileToPasteboard):
        * TestWebKitAPI/Tests/WebKitCocoa/paste-image.html: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/sunset-in-cupertino-100px.tiff: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/sunset-in-cupertino-200px.png: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/sunset-in-cupertino-400px.gif: Added.
        * TestWebKitAPI/Tests/WebKitCocoa/sunset-in-cupertino-600px.jpg: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm: Rebaselined the test now that types contain "Files".

2017-09-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Implement -[WKContentView hasText] for compatibility with the UITextInput protocol
        https://bugs.webkit.org/show_bug.cgi?id=177662
        <rdar://problem/33410373>

        Reviewed by Tim Horton.

        Add EditorState API tests to check that the value of -[WKContentView hasText] is correct when editing both plain
        and rich text areas.

        * TestWebKitAPI/EditingTestHarness.h:
        * TestWebKitAPI/EditingTestHarness.mm:
        (-[EditingTestHarness insertParagraph]):
        (-[EditingTestHarness insertText:]):
        (-[EditingTestHarness insertHTML:]):
        (-[EditingTestHarness selectAll]):
        (-[EditingTestHarness deleteBackwards]):
        * TestWebKitAPI/Tests/WebKitCocoa/EditorStateTests.mm:

        Add versions of EditingTestHarness helpers that don't require us to expect any editor state after executing the
        edit command.

        (TestWebKitAPI::checkContentViewHasTextWithFailureDescription):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView textInputContentView]):

2017-09-29  Charles Turner  <cturner@igalia.com>

        Update my status.

        Unreviewed.

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

2017-09-28  Commit Queue  <commit-queue@webkit.org>

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

        Breaks AppleWin build (Requested by dolmstead on #webkit).

        Reverted changeset:

        "[WinCairo][MiniBrowser] Add ca-bundle to display secure
        pages."
        https://bugs.webkit.org/show_bug.cgi?id=168486
        http://trac.webkit.org/changeset/222639

2017-09-28  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] object:state-changed notifications missing for multiple ARIA attributes
        https://bugs.webkit.org/show_bug.cgi?id=177542

        Add platform support for the notifications. Also add support for getting the
        boolean argument indicating whether the state has been set or unset.

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:

2017-09-28  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo][MiniBrowser] Add ca-bundle to display secure pages.
        Copy cacert.pem file into bundle directory.
        https://bugs.webkit.org/show_bug.cgi?id=168486

        Reviewed by Brent Fulgham.

        * MiniBrowser/win/CMakeLists.txt:

2017-09-28  Lucas Forschler  <lforschler@apple.com>

        check in AWS Lambda code used for WebKitArchiveSupport
        https://bugs.webkit.org/show_bug.cgi?id=177614
        
        Rubber-stamped by Alexey Proskuryakov.

        * WebKitArchiveSupport/lambda: Added.
        * WebKitArchiveSupport/lambda/delete-minified-s3-archive-from-dynamodb.py: Added.
        (lambda_handler):
        * WebKitArchiveSupport/lambda/delete-s3-archive-from-dynamodb.py: Added.
        (lambda_handler):
        * WebKitArchiveSupport/lambda/register-archive-in-dynamodb.py: Added.
        (lambda_handler):
        * WebKitArchiveSupport/lambda/register-minified-s3-archive-in-dynamodb.py: Added.
        (lambda_handler):

2017-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        WeakPtrFactory should allow downcasting
        https://bugs.webkit.org/show_bug.cgi?id=177389
        <rdar://problem/34604174>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
        (TestWebKitAPI::Base::foo):
        (TestWebKitAPI::Base::createWeakPtr):
        (TestWebKitAPI::Derived::foo):
        (TestWebKitAPI::TEST):

2017-09-28  Megan Gardner  <megan_gardner@apple.com>

        Add debug flag to WebKitTestRunner to show where touches are being generated
        https://bugs.webkit.org/show_bug.cgi?id=177583

        Reviewed by Tim Horton and Wenson Hsieh.

        Add a flag, and the ability to paint a dot where the HIDEventGenerator is creating fake touches to
        send through UIKit. This will help in debugging touch tests, because it will be easier to see if
        one is actually sending the touches at the locations that they expect. This will help differentiate between
        problems in the locations of the touches, and other problems that can come up when writing tests.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):
        * WebKitTestRunner/Options.cpp:
        (WTR::Options::Options):
        (WTR::handleOptionShowTouches):
        (WTR::OptionsHandler::OptionsHandler):
        * WebKitTestRunner/Options.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::shouldShowTouches const):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[DebugTouchView pointInside:withEvent:]):
        (-[HIDEventGenerator setShouldShowTouches:]):
        (-[HIDEventGenerator initDebugViews]):
        (-[HIDEventGenerator updateDebugUI:withPoint:isTouching:]):
        (-[HIDEventGenerator _createIOHIDEventWithInfo:]):
        (-[HIDEventGenerator _createIOHIDEventType:]):
        (-[HIDEventGenerator _updateTouchPoints:count:]):
        (-[HIDEventGenerator touchDownAtPoints:touchCount:]):
        (-[HIDEventGenerator liftUpAtPoints:touchCount:]):
        (-[HIDEventGenerator moveToPoints:touchCount:duration:]):
        (-[HIDEventGenerator markerEventReceived:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest const):
        * WebKitTestRunner/ios/mainIOS.mm:
        (-[WebKitTestRunnerApp _runTestController]):

2017-09-28  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Turn on exception scope verification for JSC tests.
        https://bugs.webkit.org/show_bug.cgi?id=162351
        <rdar://problem/29563911>

        Reviewed by Saam Barati.

        Update: I'm re-landing this patch now that test262 exception check validation
        failures have been fixed in r222617.  testapi still has some validation failures,
        but this patch does not affect testapi.

        Added the option to --validateExceptionChecks=true option to BASE_OPTIONS in
        run-jsc-stress-tests.  This turns on exception scope verification on JSC test
        runs (which currently does not include testapi).

        Some stats on time to run JSC stress and mozilla tests:
        1. Release build w/o --validateExceptionChecks=true: real 16m22.544s, user 156m24.080s, sys 123m3.649s
        2. Debug build w/o --validateExceptionChecks=true: real 78m34.206s, user 1661m57.008s, sys 73m21.177s
        3. Debug build w/ --validateExceptionChecks=true: real 77m41.106s, user 1656m13.924s, sys 73m42.309s
        4. Debug build w/ --validateExceptionChecks=true --dumpSimulatedThrows=true: real 92m56.918s, user 2012m56.441s, sys 75m14.174s

        The stats shows that (2) and (3) has effectively no time difference.  Hence, the
        cost of enabling --validateExceptionChecks=true is not significant.

        It would be nice to enable --dumpSimulatedThrows=true as well, but (4) is about
        21% slower than (3).  To avoid making debug test runs a lot slower, we'll leave
        --dumpSimulatedThrows=true off.  We can manually add that when we see a regression
        and need to debug the issue.  Otherwise, we wont pay the price for it.

        * Scripts/run-jsc-stress-tests:

2017-09-27  Alex Christensen  <achristensen@webkit.org>

        Add WKContentRuleList notify action type
        https://bugs.webkit.org/show_bug.cgi?id=177013
        <rdar://problem/31073936>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::InMemoryCompiledContentExtension::data):
        (TestWebKitAPI::InMemoryCompiledContentExtension::InMemoryCompiledContentExtension):
        (TestWebKitAPI::makeBackend):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::actionsEqual):
        (TestWebKitAPI::sequenceInstances):
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter): Deleted.
        (TestWebKitAPI::InMemoryCompiledContentExtension::~InMemoryCompiledContentExtension): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm: Added.
        (-[ContentRuleListNotificationDelegate _webView:URL:contentRuleListIdentifiers:notifications:]):
        (-[ContentRuleListNotificationDelegate webView:startURLSchemeTask:]):
        (-[ContentRuleListNotificationDelegate webView:stopURLSchemeTask:]):
        (-[ContentRuleListNotificationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (makeWarnContentRuleList):
        (TEST):

2017-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Drag event DataTransfer has unexpected types "dyn.ah62d4..."
        https://bugs.webkit.org/show_bug.cgi?id=172526
        <rdar://problem/32396081>

        Reviewed by Ryosuke Niwa.

        Adds new API tests on iOS to cover various cases of using DataTransfer.setData, DataTransfer.getData, and
        DataTransfer.types, as well as their interaction with platform objects (source NSItemProviders in the case of
        drag and drop, and the general UIPasteboard for copy and paste).

        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/dump-datatransfer-types.html: Added.

        Introduce a new API test harness that both drag-and-drop and copy-and-paste tests use to dump DataTransfer's
        web-exposed types and values.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (checkFirstTypeIsPresentAndSecondTypeIsMissing):
        (checkJSONWithLogging):
        (TestWebKitAPI::TEST):
        (checkTypeIdentifierAndIsNotOtherTypeIdentifier): Deleted.
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::checkJSONWithLogging):
        (TestWebKitAPI::setUpWebViewForPasteboardTests):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
        (TestWebKitAPI::Util::jsonMatchesExpectedValues):

2017-09-27  Lucas Forschler  <lforschler@apple.com>

        Add macOS High Sierra and iOS Simulator 11 support to bisect-builds.
        https://bugs.webkit.org/show_bug.cgi?id=177578

        Reviewed by Alexey Proskuryakov.

        * Scripts/bisect-builds:
        (minified_platforms):
        (unminified_platforms):

2017-09-27  Ryan Haddad  <ryanhaddad@apple.com>

        Update TestResultsServer for High Sierra queues.
        https://bugs.webkit.org/show_bug.cgi?id=177500

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2017-09-27  Lucas Forschler  <lforschler@apple.com>

        bisect-builds:add a README to the archive.
        https://bugs.webkit.org/show_bug.cgi?id=177376

        Reviewed by Alexey Proskuryakov & Jon Davis.

        * BuildSlaveSupport/built-product-archive:
        (addFilesToArchive): refactor function (was previously addLauncherToArchive)
        (createZip): Teach function to add the README
        (addLauncherToArchive): Deleted. (refactored to addFilesToArchive)
        * BuildSlaveSupport/run-webkit-archive: Deleted. (Moved to WebKitArchiveSupport)
        * WebKitArchiveSupport: Added.
        * WebKitArchiveSupport/README: Added. README which will be packaged up with the archive.
        * WebKitArchiveSupport/run-webkit-archive: Added. (Moved from BuildSlaveSupport)

2017-09-26  Tim Horton  <timothy_horton@apple.com>

        Mac CMake bot should provide verbose build output
        https://bugs.webkit.org/show_bug.cgi?id=177512

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        It's hard to diagnose weird bot-only build problems without the
        full verbose build output, so turn that on. The Xcode builders
        do it too, so why not CMake!

2017-09-26  Tim Horton  <timothy_horton@apple.com>

        Make it possible to easily get verbose ninja output from build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=177511

        Reviewed by Sam Weinig.

        * Scripts/build-webkit:
        Add a -v/--verbose argument to build-webkit, which sets the environment
        variable VERBOSE=1, which buildCMakeGeneratedProject already checks.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject):
        Add ninja verbosity arguments to @makeArgs, which are appended
        after the -- and thus handed to ninja; the previous implementation
        (appending to @args) would only work if @makeArgs was non-empty and thus
        the -- was included.

2017-09-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Followup (r222427): SynchronizedFixedQueue should not have a public constructor
        https://bugs.webkit.org/show_bug.cgi?id=177458

        Reviewed by Tim Horton.

        Fix the definition and the creation of SynchronizedFixedQueue.

        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp:
        (TestWebKitAPI::ToUpperConverter::ToUpperConverter):
        (TestWebKitAPI::ToUpperConverter::startProducing):
        (TestWebKitAPI::ToUpperConverter::startConsuming):
        (TestWebKitAPI::ToUpperConverter::stopProducing):
        (TestWebKitAPI::ToUpperConverter::stopConsuming):
        (TestWebKitAPI::ToUpperConverter::enqueueLower):

2017-09-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [ios-simulator] API test DataInteractionTests.ExternalSourceDataTransferItemGetFolderAsEntry is failing
        https://bugs.webkit.org/show_bug.cgi?id=177271

        Reviewed by Tim Horton and Megan Gardner.

        Rebaseline a failing API test.

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

2017-09-26  Per Arne Vollan  <pvollan@apple.com>

        Set LF eol-style on Windows shell script, because the script failed on one of the EWS
        bots, when it had the 'native' style.

        Unreviewed Windows EWS fix. 

        * EWSTools/start-queue-win.sh: Modified property svn:eol-style.

2017-09-26  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Notify parent process when a worker is spawned
        https://bugs.webkit.org/show_bug.cgi?id=177467
        <rdar://problem/34660194>

        Reviewed by Daniel Bates.

        When we fork the parent process, there may be resources in that process
        which workers will take ownership of. Notify ports when a new worker is created
        so that these resources can be correctly managed.

        * Scripts/webkitpy/common/message_pool.py:
        (_MessagePool._start_workers): After all workers are started, notify the caller
        that a worker has been created, unless we are running inline, in which case the
        parent process is still the worker.
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner._handle_did_spawn_worker): Notify the port that a worker process
        has been created.
        * Scripts/webkitpy/port/base.py:
        (Port.did_spawn_worker): Add function so that ports may manage any
        resources created on the parent process but managed by the provided worker.
        * Scripts/webkitpy/port/device.py:
        (Device.release_worker_resources): Call release_worker_resources on the
        platform_device if such a function is defined.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.did_spawn_worker): Release any worker resources on the iOS
        device object associated with the spawned worker.
        * Scripts/webkitpy/test/runner.py:
        (Runner.handle): Ignore the did_spawn_worker message during testing.

2017-09-26  Jer Noble  <jer.noble@apple.com>

        Thrown ObjC exception when right clicking on <img> containing mp4 link
        https://bugs.webkit.org/show_bug.cgi?id=177370

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuImgWithVideo.html: Added.
        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuImgWithVideo.mm: Added.
        (-[ContextMenuImgWithVideoDelegate _webView:contextMenu:forElement:]):
        (TestWebKitAPI::TEST):

2017-09-26  Per Arne Vollan  <pvollan@apple.com>

        [Win] 'webkit-patch clean' is failing on bot.
        https://bugs.webkit.org/show_bug.cgi?id=177488

        Reviewed by Brent Fulgham.

        If 'os.remove' throws an exception, catch it.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.discard_working_directory_changes):

2017-09-25  Frederik Riedel  <riedel@apple.com>

        Expose way to set values of classified form controls as {Legacy WebKit, WebKit} SPI
        https://bugs.webkit.org/show_bug.cgi?id=174394
        <rdar://problem/33183504>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm: Added.
        (-[WKWebView _privateTextInput]): Testing helpers.
        (TestWebKitAPI::TEST): Added test cases to test AutoFill for web views.
        * TestWebKitAPI/ios/UIKitSPI.h:

2017-09-25  Frederic Wang  <fwang@igalia.com>

        Change my status to reviewer and reformat with validate-committer-lists

        Unreviewed.

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

2017-09-25  Ryan Haddad  <ryanhaddad@apple.com>

        Add High Sierra bots to buildbot and dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=177437

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add High Sierra queues, move Leaks and JSC queues over from Sierra.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Update expected results.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js: Add High Sierra.
        (WebKitBuildbot):

2017-09-25  Chris Dumez  <cdumez@apple.com>

        [WK2] Add API to query if a download was user-initiated
        https://bugs.webkit.org/show_bug.cgi?id=177435
        <rdar://problem/34498422>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[DownloadDelegate _downloadDidStart:]):
        (-[DownloadDelegate _downloadDidFinish:]):
        (runTest):
        (TEST):
        (-[BlobDownloadDelegate _downloadDidStart:]):
        (-[BlobDownloadDelegate _downloadDidFinish:]):
        (-[RedirectedDownloadDelegate _downloadDidStart:]):
        (-[RedirectedDownloadDelegate _downloadDidFinish:]):

2017-09-25  Commit Queue  <commit-queue@webkit.org>

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

        broke iOS build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Add WKContentRuleList notify action type"
        https://bugs.webkit.org/show_bug.cgi?id=177013
        http://trac.webkit.org/changeset/222455

2017-09-25  Per Arne Vollan  <pvollan@apple.com>

        [Win] run-api-tests is failing.
        https://bugs.webkit.org/show_bug.cgi?id=177454

        Reviewed by Brent Fulgham.

        TestWebKit.exe has changed name to TestWebKitLegacy.exe.

        * Scripts/run-api-tests:
        (testToolPaths):

2017-09-25  Per Arne Vollan  <pvollan@apple.com>

        [Win] Cygwin 64-bit EWS process cannot find Visual Studio installation.
        https://bugs.webkit.org/show_bug.cgi?id=177244

        Reviewed by Alex Christensen.

        The 64-bit EWS shell process should try to find Visual Studio in the 32-bit program files folder.

        * EWSTools/start-queue-win.sh:

2017-09-25  Alex Christensen  <achristensen@webkit.org>

        Add WKContentRuleList notify action type
        https://bugs.webkit.org/show_bug.cgi?id=177013
        <rdar://problem/31073936>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::InMemoryCompiledContentExtension::data):
        (TestWebKitAPI::InMemoryCompiledContentExtension::InMemoryCompiledContentExtension):
        (TestWebKitAPI::makeBackend):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::actionsEqual):
        (TestWebKitAPI::sequenceInstances):
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter): Deleted.
        (TestWebKitAPI::InMemoryCompiledContentExtension::~InMemoryCompiledContentExtension): Deleted.
        * TestWebKitAPI/Tests/WebKitCocoa/ContentRuleListNotification.mm: Added.
        (-[ContentRuleListNotificationDelegate _webView:URL:contentRuleListIdentifiers:notifications:]):
        (-[ContentRuleListNotificationDelegate webView:startURLSchemeTask:]):
        (-[ContentRuleListNotificationDelegate webView:stopURLSchemeTask:]):
        (-[ContentRuleListNotificationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (makeWarnContentRuleList):
        (TEST):

2017-09-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r222160) [GTK] [Debug] Internal compiler error on the buildbot (huge memory usage by GCC)
        https://bugs.webkit.org/show_bug.cgi?id=177223

        Reviewed by Carlos Garcia Campos.

        When the user environment sets the variable NUMBER_OF_PROCESSORS
        this should be passed down to the build system (ninja or make) always.

        Playing with the number of this variable is needed when using icecc
        (as you usually want to launch more parallel build process than your
        number of cores), or when you want to limit the number of parallel
        build process for hardware capacity reasons.

        * Scripts/build-webkit:

2017-09-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] Incremental builds fail every time Web Inspector icons are removed
        https://bugs.webkit.org/show_bug.cgi?id=177349

        Reviewed by Carlos Garcia Campos.

        Removing GTK WebInspector image files always breaks the GTK and
        WPE ports incremental builds.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): Check the timestamp of
        Source/WebInspectorUI/UserInterface/Images/gtk directory if
        isGtk() or isWPE().

2017-09-24  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Object attributes are missing for ARIA live region roles
        https://bugs.webkit.org/show_bug.cgi?id=171174

        Reviewed by Chris Fleizach.

        Add support for testing property values for AXARIALive, AXARIAAtomic, and
        AXARIARelevant. Also add handling for testing whether AXElementBusy is
        "supported" (in ATK, busy is a state and is supported on all elements
        regardless of whether the state is present or absent from the state set).

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSupported):

2017-09-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed Mac CMake build fixup after r222194

        * DumpRenderTree/PlatformMac.cmake:

2017-09-22  Zalan Bujtas  <zalan@apple.com>

        WeakPtrFactory should populate m_ref lazily.
        https://bugs.webkit.org/show_bug.cgi?id=177375

        Reviewed by Geoffrey Garen.

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

2017-09-22  Filip Pizlo  <fpizlo@apple.com>

        WSL should report an error if you try to create an operator overload that will never be called
        https://bugs.webkit.org/show_bug.cgi?id=177092

        Reviewed by JF Bastien.
        
        This adds all kinds of checks to ensure that your operator overloads make sense. This adds all
        kinds of tests for those checks.
        
        In the process of writing those tests, I hit an awesome bug: function instantiation was
        instantiating all types, which meant that if that instantiated function needed to resolve calls
        to protocol functions, we'd fail because we would have cloned top-level struct types. We need
        to preserve the uninstantiated argument types, type arguments, and return type (for casts) in
        order to be able to resolve protocol calls. But we also need the instantiated version of the
        type arguments for execution. So, this adds some more stuff to the CallExpression class.
        
        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/ArrayRefType.js:
        (ArrayRefType.prototype.unifyImpl):
        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType.prototype.get isArray):
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.resolve):
        (CallExpression.prototype.resolve):
        (CallExpression.prototype.resolveToOverload):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype._checkOperatorOverload):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype.visitProtocolDecl):
        (Checker.prototype.visitMakeArrayRefExpression):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype._createEPtr):
        * WebGPUShadingLanguageRI/EPtr.js:
        (EPtr):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype._snapshot):
        (Evaluator.prototype._runBody):
        (Evaluator.prototype.visitFunctionLikeBlock):
        (Evaluator.prototype.visitCallExpression):
        (Evaluator):
        (Evaluator.prototype.runFunc): Deleted.
        * WebGPUShadingLanguageRI/ExternalOrigin.js: Added.
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution.prototype.visitCallExpression):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution):
        (FuncInstantiator.prototype.getUnique.InstantiationInstantiateImmediates.prototype.visitCallExpression):
        (FuncInstantiator.prototype.getUnique.InstantiationInstantiateImmediates):
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitFuncDef):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/LateChecker.js:
        (LateChecker.prototype.visitReferenceType):
        (LateChecker.prototype._checkShaderType):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer._textIsIdentifierImpl):
        (Lexer.textIsIdentifier):
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseType.getAddressSpace):
        (parseType):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.unifyImpl):
        * WebGPUShadingLanguageRI/ReferenceType.js:
        (ReferenceType):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitReferenceType):
        (Rewriter.prototype.processDerivedCallData):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (intToString):
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitFuncDef):
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js:
        (StructLayoutBuilder.prototype.visitCallExpression):
        (StructLayoutBuilder):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (checkNumber):
        (set target):
        (tests.literalBool):
        (tests.identityBool):
        (tests.intSimpleMath):
        (tests.uintSimpleMath):
        (tests.uint8SimpleMath):
        (tests.equality):
        (tests.logicalNegation):
        (tests.notEquality):
        (tests.equalityTypeFailure):
        (tests.generalNegation):
        (tests.add1):
        (tests.simpleGeneric):
        (tests.nameResolutionFailure):
        (tests.simpleVariable):
        (tests.simpleAssignment):
        (tests.simpleDefault):
        (tests.simpleDereference):
        (tests.dereferenceStore):
        (tests.simpleMakePtr):
        (tests.threadArrayLoad):
        (tests.threadArrayLoadIntLiteral):
        (tests.deviceArrayLoad):
        (tests.threadArrayStore):
        (tests.deviceArrayStore):
        (tests.deviceArrayStoreIntLiteral):
        (tests.simpleProtocol):
        (tests.typeMismatchReturn):
        (tests.typeMismatchVariableDecl):
        (tests.typeMismatchAssignment):
        (tests.typeMismatchReturnParam):
        (tests.badAdd):
        (tests.lexerKeyword):
        (tests.simpleNoReturn):
        (tests.simpleUnreachableCode):
        (tests.simpleStruct):
        (tests.genericStructInstance):
        (tests.doubleGenericCallsDoubleGeneric):
        (tests.doubleGenericCallsSingleGeneric):
        (tests.loadNull):
        (tests.storeNull):
        (tests.returnNull):
        (tests.dereferenceDefaultNull):
        (tests.defaultInitializedNull):
        (tests.passNullToPtrMonomorphic):
        (tests.passNullToPtrPolymorphic):
        (tests.passNullToPolymorphic):
        (tests.loadNullArrayRef):
        (tests.storeNullArrayRef):
        (tests.returnNullArrayRef):
        (tests.dereferenceDefaultNullArrayRef):
        (tests.defaultInitializedNullArrayRef):
        (tests.defaultInitializedNullArrayRefIntLiteral):
        (tests.passNullToPtrMonomorphicArrayRef):
        (tests.passNullToPtrPolymorphicArrayRef):
        (tests.returnIntLiteralUint):
        (tests.returnIntLiteralDouble):
        (tests.badIntLiteralForInt):
        (tests.badIntLiteralForUint):
        (tests.badIntLiteralForDouble):
        (tests.passNullAndNotNull):
        (tests.passNullAndNotNullFullPoly):
        (tests.passNullAndNotNullFullPolyReverse):
        (tests.nullTypeVariableUnify):
        (tests.doubleNot):
        (tests.simpleRecursion):
        (tests.protocolMonoSigPolyDef):
        (tests.protocolPolySigPolyDef):
        (tests.protocolDoublePolySigDoublePolyDef):
        (tests.protocolDoublePolySigDoublePolyDefExplicit):
        (tests.variableShadowing):
        (tests.ifStatement):
        (tests.ifElseStatement):
        (tests.ifElseIfStatement):
        (tests.ifElseIfElseStatement):
        (tests.returnIf):
        (tests.simpleWhile):
        (tests.protocolMonoPolySigDoublePolyDefExplicit):
        (tests.ambiguousOverloadSimple):
        (tests.ambiguousOverloadOverlapping):
        (tests.ambiguousOverloadTieBreak):
        (tests.intOverloadResolution):
        (tests.intOverloadResolutionReverseOrder):
        (tests.intOverloadResolutionGeneric):
        (tests.intLiteralGeneric):
        (tests.intLiteralGenericWithProtocols):
        (tests.uintLiteralGeneric):
        (tests.uintLiteralGenericWithProtocols):
        (tests.intLiteralGenericSpecific):
        (tests.simpleConstexpr):
        (tests.break):
        (tests.continue):
        (tests.doWhile):
        (tests.forLoop):
        (tests.chainConstexpr):
        (tests.chainGeneric):
        (tests.chainStruct):
        (tests.chainStructNewlyValid):
        (tests.chainStructDevice):
        (tests.paramChainStructDevice):
        (tests.simpleProtocolExtends):
        (tests.protocolExtendsTwo):
        (tests.prefixPlusPlus):
        (tests.prefixPlusPlusResult):
        (tests.postfixPlusPlus):
        (tests.postfixPlusPlusResult):
        (tests.prefixMinusMinus):
        (tests.prefixMinusMinusResult):
        (tests.postfixMinusMinus):
        (tests.postfixMinusMinusResult):
        (tests.plusEquals):
        (tests.plusEqualsResult):
        (tests.minusEquals):
        (tests.minusEqualsResult):
        (tests.timesEquals):
        (tests.timesEqualsResult):
        (tests.divideEquals):
        (tests.divideEqualsResult):
        (tests.twoIntLiterals):
        (tests.unifyDifferentLiterals):
        (tests.unifyDifferentLiteralsBackwards):
        (tests.unifyVeryDifferentLiterals):
        (tests.unifyVeryDifferentLiteralsBackwards):
        (tests.assignUintToInt):
        (tests.buildArrayThenSumIt):
        (tests.buildArrayThenSumItUsingArrayReference):
        (tests.overrideSubscriptStruct):
        (tests.overrideSubscriptStructAndDoStores):
        (tests.overrideSubscriptStructAndUsePointers):
        (tests.overrideSubscriptStructAndUsePointersIncorrectly):
        (tests.makeArrayRefFromLocal):
        (tests.makeArrayRefFromPointer):
        (tests.makeArrayRefFromArrayRef):
        (tests.simpleLength):
        (tests.nonArrayRefArrayLengthSucceed):
        (tests.nonArrayRefArrayLengthFail):
        (tests.constexprIsNotLValuePtr):
        (tests.constexprIsNotLValueAssign):
        (tests.constexprIsNotLValueRMW):
        (tests.assignLength):
        (tests.assignLengthHelper):
        (tests.simpleGetter):
        (tests.simpleSetter):
        (tests.genericAccessors):
        (tests.bitSubscriptAccessor):
        (tests.nestedSubscriptLValueEmulationSimple):
        (tests.nestedSubscriptLValueEmulationGeneric):
        (tests.boolBitAnd):
        (tests.boolBitOr):
        (tests.boolBitXor):
        (tests.boolBitNot):
        (tests.intBitAnd):
        (tests.intBitOr):
        (tests.intBitXor):
        (tests.intBitNot):
        (tests.intLShift):
        (tests.intRShift):
        (tests.uintBitAnd):
        (tests.uintBitOr):
        (tests.uintBitXor):
        (tests.uintBitNot):
        (tests.uintLShift):
        (tests.uintRShift):
        (tests.uint8BitAnd):
        (tests.uint8BitOr):
        (tests.uint8BitXor):
        (tests.uint8BitNot):
        (tests.uint8LShift):
        (tests.uint8RShift):
        (tests.floatMath):
        (tests.genericCastInfer):
        (tests.booleanMath):
        (tests.typedefArray):
        (tests.shaderTypes):
        (tests.builtinVectors):
        (tests.instantiateStructInStruct):
        (tests.instantiateStructInStructWithInt2):
        (tests.simpleEnum):
        (tests.enumWithManualValues):
        (tests.enumWithoutZero):
        (tests.enumDuplicates):
        (tests.enumWithSomeManualValues):
        (tests.enumConstexprGenericFunction):
        (tests.enumConstexprGenericStruct):
        (tests.trap):
        (tests.swizzle):
        (tests.enumWithExplicitIntBase):
        (tests.enumWithUintBase):
        (tests.enumFloatBase):
        (tests.enumPtrBase):
        (tests.enumArrayRefBase):
        (tests.emptyStruct):
        (tests.enumStructBase):
        (tests.enumNoMembers):
        (tests.simpleSwitch):
        (tests.exhaustiveUint8Switch):
        (tests.notQuiteExhaustiveUint8Switch):
        (tests.notQuiteExhaustiveUint8SwitchWithDefault):
        (tests.switchFallThrough):
        (tests.switchBreak):
        (tests.enumSwitchBreakExhaustive):
        (tests.enumSwitchBreakNotQuiteExhaustive):
        (tests.enumSwitchBreakNotQuiteExhaustiveWithDefault):
        (tests.simpleRecursiveStruct):
        (tests.mutuallyRecursiveStruct):
        (tests.mutuallyRecursiveStructWithPointersBroken):
        (tests.mutuallyRecursiveStructWithPointers):
        (tests.linkedList):
        (tests.pointerToPointer):
        (tests.arrayRefToArrayRef):
        (tests.pointerGetter):
        (tests.loneSetter):
        (tests.setterWithMismatchedType):
        (tests.setterWithMatchedType):
        (tests.operatorWithUninferrableTypeVariable):
        (tests.operatorWithoutUninferrableTypeVariable):
        (tests.operatorCastWithUninferrableTypeVariable):
        (tests.operatorCastWithTypeVariableInferredFromReturnType):
        (tests.incWrongArgumentLength):
        (tests.decWrongArgumentLength):
        (tests.incWrongTypes):
        (tests.decWrongTypes):
        (tests.plusWrongArgumentLength):
        (tests.minusWrongArgumentLength):
        (tests.timesWrongArgumentLength):
        (tests.divideWrongArgumentLength):
        (tests.moduloWrongArgumentLength):
        (tests.bitAndWrongArgumentLength):
        (tests.bitOrWrongArgumentLength):
        (tests.bitXorWrongArgumentLength):
        (tests.lShiftWrongArgumentLength):
        (tests.rShiftWrongArgumentLength):
        (tests.bitNotWrongArgumentLength):
        (tests.equalsWrongArgumentLength):
        (tests.lessThanWrongArgumentLength):
        (tests.lessEqualWrongArgumentLength):
        (tests.greaterWrongArgumentLength):
        (tests.greaterEqualWrongArgumentLength):
        (tests.equalsWrongReturnType):
        (tests.notEqualsOverload):
        (tests.lessThanWrongReturnType):
        (tests.lessEqualWrongReturnType):
        (tests.greaterThanWrongReturnType):
        (tests.greaterEqualWrongReturnType):
        (tests.dotOperatorWrongArgumentLength):
        (tests.dotOperatorSetterWrongArgumentLength):
        (tests.loneSetterPointer):
        (tests.setterWithNoGetterOverload):
        (tests.setterWithNoGetterOverloadFixed):
        (tests.anderWithNothingWrong):
        (tests.anderWithWrongNumberOfArguments):
        (tests.anderDoesntReturnPointer):
        (tests.anderDoesntTakeReference):
        (tests.anderWithArrayRef):
        (tests.pointerIndexGetter):
        (tests.loneIndexSetter):
        (tests.notLoneIndexSetter):
        (tests.indexSetterWithMismatchedType):
        (tests.indexOperatorWrongArgumentLength):
        (tests.indexOperatorSetterWrongArgumentLength):
        (tests.loneIndexSetterPointer):
        (tests.indexSetterWithNoGetterOverload):
        (tests.indexSetterWithNoGetterOverloadFixed):
        (tests.indexAnderWithNothingWrong):
        (tests.indexAnderWithWrongNumberOfArguments):
        (tests.indexAnderDoesntReturnPointer):
        (tests.indexAnderDoesntTakeReference):
        (tests.indexAnderWithArrayRef):
        (tests.devicePtrPtr):
        (tests.threadgroupPtrPtr):
        (tests.constantPtrPtr):
        (tests.pointerIndexGetterInProtocol):
        (tests.loneIndexSetterInProtocol):
        (tests.notLoneIndexSetterInProtocol):
        (tests.indexSetterWithMismatchedTypeInProtocol):
        (tests.indexOperatorWrongArgumentLengthInProtocol):
        (tests.indexOperatorSetterWrongArgumentLengthInProtocol):
        (tests.loneIndexSetterPointerInProtocol):
        (tests.indexSetterWithNoGetterOverloadInProtocol):
        (tests.indexSetterWithNoGetterOverloadFixedInProtocol):
        (tests.indexAnderWithNothingWrongInProtocol):
        (tests.indexAnderWithWrongNumberOfArgumentsInProtocol):
        (tests.indexAnderDoesntReturnPointerInProtocol):
        (tests.indexAnderDoesntTakeReferenceInProtocol):
        (tests.indexAnderWithArrayRefInProtocol):
        (doTest):
        (this.window.let._.of.doTest):
        (TEST_literalBool): Deleted.
        (TEST_identityBool): Deleted.
        (TEST_intSimpleMath): Deleted.
        (TEST_uintSimpleMath): Deleted.
        (TEST_uint8SimpleMath): Deleted.
        (TEST_equality): Deleted.
        (TEST_logicalNegation): Deleted.
        (TEST_notEquality): Deleted.
        (TEST_equalityTypeFailure): Deleted.
        (): Deleted.
        (TEST_add1): Deleted.
        (TEST_simpleGeneric): Deleted.
        (TEST_nameResolutionFailure): Deleted.
        (TEST_simpleAssignment): Deleted.
        (TEST_simpleDefault): Deleted.
        (TEST_simpleDereference): Deleted.
        (TEST_dereferenceStore): Deleted.
        (TEST_simpleMakePtr): Deleted.
        (TEST_threadArrayLoad): Deleted.
        (TEST_threadArrayLoadIntLiteral): Deleted.
        (TEST_deviceArrayLoad): Deleted.
        (TEST_threadArrayStore): Deleted.
        (TEST_deviceArrayStore): Deleted.
        (TEST_deviceArrayStoreIntLiteral): Deleted.
        (TEST_simpleProtocol): Deleted.
        (TEST_typeMismatchReturn): Deleted.
        (TEST_simpleNoReturn): Deleted.
        (TEST_genericStructInstance): Deleted.
        (TEST_doubleGenericCallsDoubleGeneric): Deleted.
        (TEST_doubleGenericCallsSingleGeneric): Deleted.
        (TEST_dereferenceDefaultNull): Deleted.
        (TEST_dereferenceDefaultNullArrayRef): Deleted.
        (TEST_returnIntLiteralDouble): Deleted.
        (TEST_badIntLiteralForInt): Deleted.
        (TEST_passNullAndNotNullFullPoly): Deleted.
        (TEST_passNullAndNotNullFullPolyReverse): Deleted.
        (TEST_nullTypeVariableUnify.recurse): Deleted.
        (TEST_nullTypeVariableUnify.everyOrder): Deleted.
        (TEST_nullTypeVariableUnify.everyPair): Deleted.
        (TEST_nullTypeVariableUnify): Deleted.
        (TEST_simpleRecursion): Deleted.
        (TEST_protocolPolySigPolyDef): Deleted.
        (TEST_protocolDoublePolySigDoublePolyDef): Deleted.
        (TEST_protocolDoublePolySigDoublePolyDefExplicit): Deleted.
        (TEST_variableShadowing): Deleted.
        (TEST_ifStatement): Deleted.
        (TEST_ifElseStatement): Deleted.
        (TEST_ifElseIfStatement): Deleted.
        (TEST_ifElseIfElseStatement): Deleted.
        (TEST_returnIf): Deleted.
        (TEST_simpleWhile): Deleted.
        (TEST_protocolMonoPolySigDoublePolyDefExplicit): Deleted.
        (TEST_intOverloadResolution): Deleted.
        (TEST_intOverloadResolutionReverseOrder): Deleted.
        (TEST_intOverloadResolutionGeneric): Deleted.
        (TEST_intLiteralGeneric): Deleted.
        (TEST_intLiteralGenericWithProtocols): Deleted.
        (TEST_uintLiteralGeneric): Deleted.
        (TEST_uintLiteralGenericWithProtocols): Deleted.
        (TEST_intLiteralGenericSpecific): Deleted.
        (TEST_simpleConstexpr): Deleted.
        (TEST_break): Deleted.
        (TEST_forLoop): Deleted.
        (TEST_chainConstexpr): Deleted.
        (TEST_chainGeneric): Deleted.
        (TEST_chainStruct): Deleted.
        (TEST_chainStructNewlyValid): Deleted.
        (TEST_chainStructDevice): Deleted.
        (TEST_paramChainStructDevice): Deleted.
        (TEST_simpleProtocolExtends): Deleted.
        (TEST_protocolExtendsTwo): Deleted.
        (TEST_prefixPlusPlus): Deleted.
        (TEST_prefixPlusPlusResult): Deleted.
        (TEST_postfixPlusPlus): Deleted.
        (TEST_postfixPlusPlusResult): Deleted.
        (TEST_prefixMinusMinus): Deleted.
        (TEST_prefixMinusMinusResult): Deleted.
        (TEST_postfixMinusMinus): Deleted.
        (TEST_postfixMinusMinusResult): Deleted.
        (TEST_plusEquals): Deleted.
        (TEST_plusEqualsResult): Deleted.
        (TEST_minusEquals): Deleted.
        (TEST_minusEqualsResult): Deleted.
        (TEST_timesEquals): Deleted.
        (TEST_timesEqualsResult): Deleted.
        (TEST_divideEquals): Deleted.
        (TEST_divideEqualsResult): Deleted.
        (TEST_twoIntLiterals): Deleted.
        (TEST_unifyDifferentLiterals): Deleted.
        (TEST_buildArrayThenSumItUsingArrayReference): Deleted.
        (TEST_overrideSubscriptStruct): Deleted.
        (TEST_overrideSubscriptStructAndDoStores): Deleted.
        (TEST_overrideSubscriptStructAndUsePointers): Deleted.
        (TEST_overrideSubscriptStructAndUsePointersIncorrectly): Deleted.
        (TEST_makeArrayRefFromPointer): Deleted.
        (TEST_makeArrayRefFromArrayRef): Deleted.
        (TEST_nonArrayRefArrayLengthSucceed): Deleted.
        (TEST_nonArrayRefArrayLengthFail): Deleted.
        (TEST_simpleSetter): Deleted.
        (TEST_genericAccessors): Deleted.
        (TEST_bitSubscriptAccessor): Deleted.
        (TEST_nestedSubscriptLValueEmulationSimple): Deleted.
        (TEST_nestedSubscriptLValueEmulationGeneric): Deleted.
        (TEST_boolBitAnd): Deleted.
        (TEST_boolBitOr): Deleted.
        (TEST_boolBitXor): Deleted.
        (TEST_boolBitNot): Deleted.
        (TEST_intBitAnd): Deleted.
        (TEST_intBitOr): Deleted.
        (TEST_intBitXor): Deleted.
        (TEST_intBitNot): Deleted.
        (TEST_intLShift): Deleted.
        (TEST_intRShift): Deleted.
        (TEST_uintBitAnd): Deleted.
        (TEST_uintBitOr): Deleted.
        (TEST_uintBitXor): Deleted.
        (TEST_uintBitNot): Deleted.
        (TEST_uintLShift): Deleted.
        (TEST_uintRShift): Deleted.
        (TEST_uint8BitAnd): Deleted.
        (TEST_uint8BitOr): Deleted.
        (TEST_uint8BitXor): Deleted.
        (TEST_uint8BitNot): Deleted.
        (TEST_uint8LShift): Deleted.
        (TEST_uint8RShift): Deleted.
        (TEST_floatMath): Deleted.
        (TEST_booleanMath): Deleted.
        (TEST_typedefArray): Deleted.
        (TEST_shaderTypes): Deleted.
        (TEST_instantiateStructInStruct): Deleted.
        (TEST_instantiateStructInStructWithInt2): Deleted.
        (TEST_simpleEnum): Deleted.
        (TEST_enumWithManualValues): Deleted.
        (TEST_enumWithoutZero): Deleted.
        (TEST_enumConstexprGenericFunction): Deleted.
        (TEST_enumConstexprGenericStruct): Deleted.
        (TEST_trap): Deleted.
        (TEST_enumWithExplicitIntBase): Deleted.
        (TEST_enumWithUintBase): Deleted.
        (TEST_enumFloatBase): Deleted.
        (TEST_enumStructBase): Deleted.
        (TEST_simpleSwitch): Deleted.
        (TEST_exhaustiveUint8Switch): Deleted.
        (TEST_notQuiteExhaustiveUint8Switch): Deleted.
        (TEST_switchFallThrough): Deleted.
        (TEST_switchBreak): Deleted.
        (TEST_enumSwitchBreakExhaustive): Deleted.
        (TEST_enumSwitchBreakNotQuiteExhaustive): Deleted.
        (TEST_simpleRecursiveStruct): Deleted.
        (TEST_linkedList): Deleted.
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isArray):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.wrap):
        * WebGPUShadingLanguageRI/TypeVariableTracker.js:
        (TypeVariableTracker.prototype.set get return):
        (TypeVariableTracker.prototype.visitVariableRef):
        (TypeVariableTracker):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/index.html:

2017-09-22  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r222394.

        This broke the Windows Debug Build.

        Reverted changeset:

        "Remove build-webkit's notion of feature flags having a
        default value"
        https://bugs.webkit.org/show_bug.cgi?id=177338
        http://trac.webkit.org/changeset/222394

2017-09-22  Tim Horton <timothy_horton@apple.com> and Michael Catanzaro <mcatanzaro@igalia.com>

        Remove build-webkit's notion of feature flags having a default value
        https://bugs.webkit.org/show_bug.cgi?id=177338

        Reviewed by Alex Christensen.

        Delegate feature flag default values to the build system.
        (FeatureDefines.xcconfig for Xcode, WebKitFeatures.cmake and Options*.cmake for CMake, and FeatureDefines.h for everyone)

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Factory.__init__):
        Update GTK and WPE buildbot configuration to use --no-experimental-features on old stable
        bots instead of --default-cmake-features.

        * Scripts/build-webkit:
        (cMakeArgsFromFeatures):
        Default feature values to 'undef'.
        Remove the --default-cmake-features argument; it is now the default.
        Add --no-experimental-features to replace it.
        Stop printing the default feature flag value in the help.
        Avoid propagating undefined values to the build system;
        only mention flags that are overridden on the command line.

        This has the nice side effect of using the default CMake features
        for CMake builds, but still allowing toggling of them using the
        prettier --FEATURE and --no-FEATURE arguments.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        No longer need to suppress CMake warnings about unused arguments.

        * Scripts/webkitperl/FeatureList.pm:
        Remove the default values from the feature list.

2017-09-21  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed, add the ability to skip a test262 test.

        * Scripts/run-jsc-stress-tests:
        Other handlers have :skip but a few didn't.

2017-09-21  Ryan Haddad  <ryanhaddad@apple.com>

        Change architecture for ios-ews queue to arm64.
        https://bugs.webkit.org/show_bug.cgi?id=177332

        Reviewed by Alexey Proskuryakov.

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

2017-09-21  Tim Horton  <timothy_horton@apple.com>

        Use 'ninja' from the SDK if it exists
        https://bugs.webkit.org/show_bug.cgi?id=177330

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (canUseNinja):
        Check for ninja with xcrun in addition to commandExists() for Cocoa platforms.

        (generateBuildSystemFromCMakeProject):
        (canUseNinjaGenerator): Deleted.
        Remove canUseNinjaGenerator; as noted in bug 177057, the Ninja generator
        is available in all versions of CMake supported by WebKit.

2017-09-21  Chris Dumez  <cdumez@apple.com>

        Regression(r222308): new API tests are failing for !NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=177321

        Reviewed by Alex Christensen.

        Unskip API tests now that they pass everywhere.

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

2017-09-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix ability to run tests in browser.

        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/index.html:

2017-09-21  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore failure to get updated selenium version
        https://bugs.webkit.org/show_bug.cgi?id=177205
        <rdar://problem/34531669>

        Reviewed by Lucas Forschler.

        Sometime asking PyPI for the latest version of Selenium fails. We should try and
        fallback to, at a minimum, version 3.5.0 or a newer installed version.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.greater_than_equal_to_version): Return true if the second
        version string is greater than or equal to the first version string.
        (AutoinstallImportHook._install_selenium): If we can't get the latest PyPI url,
        fallback to version 3.5.0 or a newer installed version.

2017-09-21  Filip Pizlo  <fpizlo@apple.com>

        WSL should have some post-instantiation type checking
        https://bugs.webkit.org/show_bug.cgi?id=177303

        Reviewed by Keith Miller.
        
        This patch removes the Primitive protocol! Yay!
        
        The Primitive protocol was an attempt to handle the fact that Metal wouldn't allow us to point a
        non-thread pointer at data structures that have pointers. This type checking rule interacts badly with
        generics. I was able to get it to mostly work by making Primitive into a dynamic protocol - a type
        belongs to it if it happens to be isPrimitive.
        
        But that was a mistake, since it makes it hard to create pointers that are generic over address space.
        Also, it's not an appropriate rule for targeting SPIR-V logical mode. That rule will be different, and
        possibly more complicated.
        
        All of these kinds of rules are easier to implement of we run them after instantiation, since then they
        don't get in the way of generics. That's what this patch does.
        
        This means that we get all of the same type checking power as before, and we still can catch the errors
        that Metal requires us to check for. It's easier to do those checks now.
        
        Finally, this removes the shader type checker's incomplete reimplementation of isPrimitive (which was
        called NonNumericSearcher). The shader type checker calls isPrimitive now.

        * WebGPUShadingLanguageRI/AddressSpace.js:
        (needsPrimitiveProtocol): Deleted.
        (protocolSuffix): Deleted.
        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype._checkShaderType):
        (Checker.prototype._checkShaderType.NonNumericSearcher): Deleted.
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitArrayRefType): Deleted.
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitPtrType): Deleted.
        (Checker.prototype.visitReferenceType): Deleted.
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitFuncDef):
        * WebGPUShadingLanguageRI/Inline.js:
        (_inlineFunction):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/LateChecker.js: Added.
        (LateChecker):
        (LateChecker.prototype.visitReferenceType):
        (LateChecker.prototype._checkShaderType):
        (LateChecker.prototype.visitFuncDef):
        * WebGPUShadingLanguageRI/LexerToken.js:
        (LexerToken.prototype.get isInternal): Deleted.
        * WebGPUShadingLanguageRI/NativeType.js:
        (NativeType):
        (NativeType.prototype.get name):
        (NativeType.prototype.get isPrimitive):
        (NativeType.prototype.set isPrimitive):
        (NativeType.prototype.toString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseNative):
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js:
        (programWithUnnecessaryThingsRemoved):
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        * WebGPUShadingLanguageRI/ReferenceType.js:
        (ReferenceType.prototype.get elementType):
        (ReferenceType.prototype.get isPrimitive): Deleted.
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/StatementCloner.js:
        (StatementCloner.prototype.visitNativeType):
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js:
        (synthesizeStructAccessors):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_passNullAndNotNullFullPoly):
        (TEST_passNullAndNotNullFullPolyReverse):
        (TEST_nullTypeVariableUnify):
        (TEST_chainStructNewlyValid):
        (TEST_chainStructDevice):
        (TEST_chainStructInvalid): Deleted.
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isPrimitive):

2017-09-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, temporarily disable new API tests introduced in r222308 until they pass on El Capitan

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

2017-09-21  Commit Queue  <commit-queue@webkit.org>

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

        This patch broke builds on some Win EWS bots. (Requested by
        perarne on #webkit).

        Reverted changeset:

        "[Win] Cygwin 64-bit EWS process cannot find Visual Studio
        installation."
        https://bugs.webkit.org/show_bug.cgi?id=177244
        http://trac.webkit.org/changeset/222272

2017-09-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix a bug in the interactive app that was introduced by bad merging.

        * WebGPUShadingLanguageRI/FlattenedStructOffsetGatherer.js:
        (FlattenedStructOffsetGatherer.prototype.visitTypeRef):
        (FlattenedStructOffsetGatherer):
        * WebGPUShadingLanguageRI/index.html:

2017-09-20  Filip Pizlo  <fpizlo@apple.com>

        WSL should support switch
        https://bugs.webkit.org/show_bug.cgi?id=176978

        Reviewed by Keith Miller.
        
        This adds fairly complete support for switch statements. This includes things like verifying
        whether or not a default statement is needed. This even works when the programmer lists all of
        the values of an integer type.
        
        To test that last part, this patch adds uint8 support. It's easy add it, but of course it
        meant adding a lot of tests.
        
        This also fixes enum bugs, since switch does things to enums that we previously didn't test.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitSwitchStatement):
        * WebGPUShadingLanguageRI/EnumLiteral.js:
        (EnumLiteral.prototype.get valueForSelectedType):
        * WebGPUShadingLanguageRI/EnumType.js:
        (EnumType.prototype.allValues):
        (EnumType.prototype.valuesEqual):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitSwitchStatement):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCallExpression):
        (Inliner):
        (Inliner.prototype.visitCastExpression): Deleted.
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        (Intrinsics):
        * WebGPUShadingLanguageRI/LoopChecker.js:
        (LoopChecker):
        (LoopChecker.prototype.visitFuncDef):
        (LoopChecker.prototype.visitWhileLoop):
        (LoopChecker.prototype.visitDoWhileLoop):
        (LoopChecker.prototype.visitForLoop):
        (LoopChecker.prototype.visitSwitchStatement):
        (LoopChecker.prototype.visitBreak):
        (LoopChecker.prototype.visitContinue):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.commit):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseSwitchCase):
        (parseSwitchStatement):
        (parseStatement):
        (parseBlockBody):
        (parseBlock):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker.prototype._mergeReturnStyle):
        (ReturnChecker.prototype.visitIfStatement):
        (ReturnChecker.prototype.visitWhileLoop):
        (ReturnChecker.prototype.visitDoWhileLoop):
        (ReturnChecker.prototype.visitForLoop):
        (ReturnChecker.prototype.visitSwitchStatement):
        (ReturnChecker.prototype.visitContinue):
        (ReturnChecker):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitSwitchStatement):
        (Rewriter.prototype.visitSwitchCase):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (uint8.operator):
        (bool.operator):
        (_generateSwizzle):
        * WebGPUShadingLanguageRI/SwitchCase.js: Added.
        (SwitchCase):
        (SwitchCase.prototype.get origin):
        (SwitchCase.prototype.get isDefault):
        (SwitchCase.prototype.get value):
        (SwitchCase.prototype.get body):
        (SwitchCase.prototype.toString):
        * WebGPUShadingLanguageRI/SwitchStatement.js: Added.
        (SwitchStatement):
        (SwitchStatement.prototype.get origin):
        (SwitchStatement.prototype.get value):
        (SwitchStatement.prototype.add):
        (SwitchStatement.prototype.get switchCases):
        (SwitchStatement.prototype.toString):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (makeUint8):
        (makeEnum):
        (checkUint8):
        (TEST_uint8SimpleMath):
        (TEST_equality):
        (TEST_notEquality):
        (TEST_uint8BitAnd):
        (TEST_uint8BitOr):
        (TEST_uint8BitXor):
        (TEST_uint8BitNot):
        (TEST_uint8LShift):
        (TEST_uint8RShift):
        (TEST_enumWithExplicitIntBase):
        (TEST_enumWithUintBase):
        (TEST_enumFloatBase):
        (TEST_enumStructBase):
        (TEST_simpleSwitch):
        (TEST_exhaustiveUint8Switch):
        (TEST_notQuiteExhaustiveUint8Switch):
        (TEST_switchFallThrough):
        (TEST_switchBreak):
        (TEST_enumSwitchBreakExhaustive):
        (TEST_enumSwitchBreakNotQuiteExhaustive):
        (doTest):
        * WebGPUShadingLanguageRI/UnificationContext.js:
        (UnificationContext):
        (UnificationContext.prototype.addExtraNode):
        (UnificationContext.prototype.get nodes):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/index.html:

2017-09-20  Filip Pizlo  <fpizlo@apple.com>

        WSL needs a way to verify that structs are not cyclic
        https://bugs.webkit.org/show_bug.cgi?id=177044

        Reviewed by Myles Maxfield.
        
        This adds a recursive type checking phase. Even before adding this phase, the compiler would
        successfully detect recursive types - but at the cost of also rejecting programs that had
        recursive types indirectly through pointers. To make both things work, I had to change Visitor
        to no longer visit TypeRef.type by default. This resulted in some other changes in a few other
        parts of the code that previously relied on that behavior.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CheckRecursiveTypes.js: Added.
        (checkRecursiveTypes):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitArrayRefType):
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitPtrType):
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitTypeRef):
        (Checker.prototype._checkShaderType.NonNumericSearcher):
        (Checker.prototype._checkShaderType):
        (Checker.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/RecursiveTypeChecker.js: Added.
        (RecursiveTypeChecker):
        (RecursiveTypeChecker.prototype.visitFuncDef):
        (RecursiveTypeChecker.prototype.visitNativeFunc):
        (RecursiveTypeChecker.prototype.visitStructType):
        (RecursiveTypeChecker.prototype.visitReferenceType):
        (RecursiveTypeChecker.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js:
        (StructLayoutBuilder.prototype.visitTypeRef):
        (StructLayoutBuilder):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleRecursiveStruct):
        * WebGPUShadingLanguageRI/TypeDefResolver.js:
        (TypeDefResolver.prototype.visitTypeRef):
        (TypeDefResolver):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/index.html:

2017-09-21  Ryan Haddad  <ryanhaddad@apple.com>

        Update TestResultsServer for iOS 11 queues.
        https://bugs.webkit.org/show_bug.cgi?id=177285

        Reviewed by Alexey Proskuryakov.

        * TestResultServer/static-dashboards/builders.jsonp:

2017-09-21  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r221465) WKWebViews without WebGL delegate callbacks crash when WebGL contexts are created
        https://bugs.webkit.org/show_bug.cgi?id=177306
        <rdar://problem/34351988>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKitCocoa/WebGLPolicy.mm:
        (-[WebGLTestDelegate webView:startURLSchemeTask:]):
        (-[DelegateWithoutWebGL webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-09-20  Joseph Pecoraro  <pecoraro@apple.com>

        Update test262 tests
        https://bugs.webkit.org/show_bug.cgi?id=177220

        Reviewed by Saam Barati and Yusuke Suzuki.

        * Scripts/import-test262-tests:
        - better detect upstream git repository url from import location
        - update JSTest test262 resources when importing from repository
        - take seconds instead of 20+ minutes to write yaml with --failures
        - update "negative" command to only include just the exception type

2017-09-20  Chris Dumez  <cdumez@apple.com>

        [WK2] Add API to get the redirect chain of a WKDownload
        https://bugs.webkit.org/show_bug.cgi?id=176628
        <rdar://problem/34338279>

        Reviewed by Alex Christensen.

        Add API test coverage for the 2 cases:
        1. Download started as a download and is redirected while
           downloading.
        2. Download started as a load and was redirected during the
           initial load.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[RedirectedDownloadDelegate _download:didReceiveServerRedirectToURL:]):
        (-[RedirectedDownloadDelegate _downloadDidFinish:]):
        (TEST):

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Add infrastructure for adding custom headers to requests per website
        https://bugs.webkit.org/show_bug.cgi?id=177255

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp: Added.
        (shouldRemainUnchanged):
        (shouldBeInvalid):
        (shouldBecome):
        (TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
        (TEST):

2017-09-20  Daniel Bates  <dabates@apple.com>

        Spelling and grammar dots should not overlap
        https://bugs.webkit.org/show_bug.cgi?id=177265
        <rdar://problem/34556424>

        Reviewed by David Hyatt.

        Add unit tests for the subdivision algorithm.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/MarkerSubrange.cpp: Added.
        (WebCore::operator<<):
        (WebCore::operator==):
        (TestWebKitAPI::TEST):

2017-09-20  Filip Pizlo  <fpizlo@apple.com>

        WSL should not type-check functions in the standard library that it does not use
        https://bugs.webkit.org/show_bug.cgi?id=177269

        Reviewed by JS Bastien.
        
        Once we added all of the swizzling operators, the size of the standard library ballooned to the point
        where it's just not practical to compile anything anymore. If you want to compile
        "int foo(int x) { return x}" then it will take some ridiculous amount of time (many seconds) because WSL
        will have to type check all of those swizzling operators.
        
        This change makes it so that after parsing the whole program, we remove the things that we aren't using.
        We can make a really good estimate of what we need even before doing any name resolution. In practice,
        this change removes almost all of the things from Program before we get to the hard work of type
        checking. That's true because the standard library contains _many_ things and you'd have to try very
        hard to use all of them.
        
        This is a 13x speed-up for Test.js. It went from 155 seconds to 12 seconds on my machine.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/ConstexprTypeParameter.js:
        (ConstexprTypeParameter.prototype.get origin):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer):
        (Lexer.prototype.get originKind):
        * WebGPUShadingLanguageRI/LexerToken.js:
        (LexerToken.prototype.get lexer):
        (LexerToken.prototype.get origin):
        (LexerToken.prototype.get originKind):
        (LexerToken.prototype.get isInternal):
        * WebGPUShadingLanguageRI/NameContext.js:
        (isWildcardKind):
        (NameContext.prototype.add):
        (NameContext.prototype.get let):
        (NameContext.prototype.mapFor): Deleted.
        * WebGPUShadingLanguageRI/NameFinder.js: Added.
        (NameFinder):
        (NameFinder.get worklist):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/OriginKind.js: Added.
        (isOriginKind):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        * WebGPUShadingLanguageRI/ProgramWithUnnecessaryThingsRemoved.js: Added.
        (programWithUnnecessaryThingsRemoved):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (doTest):
        * WebGPUShadingLanguageRI/index.html:

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Remove ActionType::CSSDisplayNoneStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=177275

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::TEST_F):

2017-09-20  Jonathan Bedard  <jbedard@apple.com>

        Device iOS 11 builds fail with FileProvider linker errors
        https://bugs.webkit.org/show_bug.cgi?id=177272
        <rdar://problem/34557680>

        Reviewed by David Kilzer.

        For iOS device and simulator, the SYSTEM_LIBRARY_DIR should never
        be on the framework search path as neither platform should ever link
        with Mac frameworks.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Remove ActionType::InvalidAction
        https://bugs.webkit.org/show_bug.cgi?id=177262

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):

2017-09-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Make a playground where people can try WSL
        https://bugs.webkit.org/show_bug.cgi?id=177125

        Reviewed by Filip Pizlo.

        This patch creates a webpage, index.html, which lets users type in a WSL program and
        run it, and see the results.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker):
        (Checker.prototype._checkShaderType.NonNumericSearcher):
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitArrayRefType):
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitPtrType):
        (Checker.prototype._checkShaderType):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype._requireBool):
        * WebGPUShadingLanguageRI/FlattenedStructOffsetGatherer.js: Copied from Tools/WebGPUShadingLanguageRI/CallFunction.js.
        (FlattenedStructOffsetGatherer):
        (FlattenedStructOffsetGatherer.prototype.get result):
        (FlattenedStructOffsetGatherer.prototype.visitReferenceType):
        (FlattenedStructOffsetGatherer.prototype.visitField):
        (FlattenedStructOffsetGatherer.prototype.visitNativeType):
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/Inline.js:
        (resolveInlinedFunction):
        * WebGPUShadingLanguageRI/NameContext.js:
        (NameContext.prototype.get let):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_shaderTypes):
        * WebGPUShadingLanguageRI/index.html: Added.

2017-09-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [WSL] Restrict vertex and fragment entry points according to WSL.md
        https://bugs.webkit.org/show_bug.cgi?id=177253

        Reviewed by Filip Pizlo.

        Entry points can't have template arguments, and their argument/return types need to be restricted.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker):
        (Checker.prototype._checkShaderType.NonNumericSearcher):
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitArrayRefType):
        (Checker.prototype._checkShaderType.NonNumericSearcher.prototype.visitPtrType):
        (Checker.prototype._checkShaderType):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype._requireBool):
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_shaderTypes):

2017-09-20  Per Arne Vollan  <pvollan@apple.com>

        [Win] Cygwin 64-bit EWS process cannot find Visual Studio installation.
        https://bugs.webkit.org/show_bug.cgi?id=177244

        Reviewed by Alex Christensen.

        The 64-bit EWS shell process should try to find Visual Studio in the 32-bit program files folder.

        * EWSTools/start-queue-win.sh:

2017-09-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Create vector swizzle operators in WSL's standard library
        https://bugs.webkit.org/show_bug.cgi?id=177116

        Reviewed by Filip Pizlo.

        Because there are 481 possible swizzling operators, StandardLibrary.js generates them
        instead of including them by hand.

        Adding so many functions slows down the compiler quite a bit.

        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (intToString):
        (_generateSwizzle):

2017-09-20  Ms2ger  <Ms2ger@igalia.com>

        [WPE] Update fontconfig to 2.12.4.
        https://bugs.webkit.org/show_bug.cgi?id=177228

        Reviewed by Carlos Garcia Campos.

        * wpe/jhbuild.modules:
        * wpe/patches/fontconfig-avoid-conflicts-with-integer-width-macros-from-TS-18.patch: Removed.

2017-09-19  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL should be able to trap when something fatal happens
        https://bugs.webkit.org/show_bug.cgi?id=177110

        Reviewed by Filip Pizlo.

        WSL programs can include a statement "trap;" which causes the entry
        point to immediately return the default value of its return type.
        This is implemented by throw/catch and populateDefaultValue().

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/EvaluationCommon.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitTrapStatement):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseStatement):
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker.prototype.visitTrapStatement):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitTrapStatement):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        * WebGPUShadingLanguageRI/TrapStatement.js: Copied from Tools/WebGPUShadingLanguageRI/EvaluationCommon.js.
        (TrapStatement):
        (TrapStatement.prototype.get origin):
        (TrapStatement.prototype.toString):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed follow-up to r222229, remove invalid triggers.

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

2017-09-19  Simon Fraser  <simon.fraser@apple.com>

        tiled-drawing/tiled-backing-in-window.html fails on Retina displays
        https://bugs.webkit.org/show_bug.cgi?id=177113

        Reviewed by Tim Horton.

        This test removes the view from the window, and then dumps the layer tree, at which point
        some layers would report a contentsScale of 2 on Retina displays.

        This occurs because WebKitTestRunner overrides the default device scale factor on NSWindow,
        but windowless views fall back to [NSScreen mainScreen].backingScaleFactor (in WebViewImpl::intrinsicDeviceScaleFactor()).

        Fix by having PlatformWebView::changeWindowScaleIfNeeded() call -_setOverrideDeviceScaleFactor: on the view.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

2017-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r215613): Incorrect corners clipping with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=176498
        <rdar://problem/34112607>

        Reviewed by Tim Horton.

        Add WebCore API tests for RoundedRect::contains().

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/RoundedRectTests.cpp: Added.
        (TestWebKitAPI::layoutRect):
        (TestWebKitAPI::TEST):

2017-09-19  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to use any class that is iterable and has a size getter
        https://bugs.webkit.org/show_bug.cgi?id=177026

        Reviewed by Darin Adler.

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

2017-09-19  Ryan Haddad  <ryanhaddad@apple.com>

        Update bot configuration for iOS 11.
        https://bugs.webkit.org/show_bug.cgi?id=177165

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * 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.ios-simulator-10 img.logo): Deleted.
        (table.queue-grid tr.platform.ios-10 img.logo): Deleted.
        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        (ShouldBuildTest.test_should_build):

2017-09-19  Filip Pizlo  <fpizlo@apple.com>

        Primitive protocol should have capital name
        https://bugs.webkit.org/show_bug.cgi?id=177097

        Reviewed by JF Bastien.
        
        As soon as I started programming in WSL, I found that I preferred to capitalize protocol names. So, my
        early decision to call the primitive protocol "primitive" instead of "Primitive" seems absurd now. This
        change reverses that decision.
        
        Aesthetically, this is a slight improvement. For example:
        
            struct Bar<T:Primitive> {
                Foo<device T^> f;
            }

        This makes more sense since all of the non-keyword type identifiers are capital.
        
        The one place where this is an aesthetic regression is native primitive typedefs, which now look like:
        
            native Primitive typedef bool;
        
        I'm happy with that tradeoff, since native typedefs are only in the standard library. Users don't see
        this.

        * WebGPUShadingLanguageRI/AddressSpace.js:
        (protocolSuffix):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/NativeType.js:
        (NativeType.prototype.toString):
        (NativeType):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseNative):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_passNullAndNotNullFullPoly):
        (TEST_passNullAndNotNullFullPolyReverse):

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        Cannot put typedefs of templated structs inside structs
        https://bugs.webkit.org/show_bug.cgi?id=177123

        Reviewed by Michael Saboff.
        
        Ever since I wrote the generic type instantiation code in WSL, it had a bizarre stink to it. I
        did not know what it was, until I met this test case:
        
            struct Foo { int2 x; }
        
        The problem was that Type has a getter called instantiatedType, which invoked
        InstantiateImmediates. That's great. Where we went wrong was that TypeRef overrode
        instantiatedType, and then InstantiateImmediates called TypeRef.instantiatedType from its
        visitTypeRef. What a mess. None of that was necessary for anything, and it was just wrong. This
        patch fixes it so that:
        
        - Type has an instantiatedType getter, which does InstantiateImmediates. I didn't change this.
          This was the only part of the status quo that really made sense.
        
        - TypeRef no longer overrides instantiatedType.
        
        - InstantianteImmediates.prototype.visitTypeRef now does what TypeRef's instantiatedType would
          have done.
        
        And voila! This test case passes and so do all of the other test cases.
        
        The reason why that specific test case did not work was that the use of a TypeDef (int2) for
        a generic type instantiation (vec2<int>) caused there to be two TypeRef's in a row, sorta like
        this, if we could use wrap() to denote a TypeRef that just wrapped another type:
        
            wrap(vec2<int>)
        
        We would call instantiatedType on this monstrosity. Since TypeRef overrode instantiatedType,
        we would stop there because that TypeRef has no type arguments - it's just a wrapper. Well,
        actually, we'd do something a bit stranger than stopping there - there's more to the story -
        but the effect was the same. Now we do InstantiateImmediates, which recursively builds a new
        type. This chews through the wrapper and then instantiates the wrapped type, as we want it to.
        Also, this approach no longer has the stink. instantiatedType isn't overriden by anyone
        anymore!

        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/InstantiateImmediates.js:
        (InstantiateImmediates.prototype.visitTypeRef):
        (InstantiateImmediates.prototype.visitReferenceType): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_instantiateStructInStructWithInt2):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.wrap):
        (TypeRef.prototype.setTypeAndArguments):
        (TypeRef.prototype.toString):
        (TypeRef):
        (TypeRef.prototype.get instantiatedType): Deleted.

2017-09-19  Per Arne Vollan  <pvollan@apple.com>

        [Win] WebKit fails to build with 64-bit Perl.
        https://bugs.webkit.org/show_bug.cgi?id=177106

        Reviewed by Brent Fulgham.

        Visual Studio is installed in the 32-bit program files folder.
 
        * Scripts/webkitdirs.pm:
        (programFilesPathX86):
        (visualStudioInstallDir):
        (msBuildInstallDir):

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        [WSL] Cannot put templated structs inside structs
        https://bugs.webkit.org/show_bug.cgi?id=177120

        Reviewed by Myles Maxfield.
        
        It turns out that we still need to instantiate structs even if not passing type arguments,
        since its fields may need to be instantiated.
        
        This makes Myles's test case pass. When writing the test case, I encountered parser bugs, and
        I fixed them.

        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitReferenceType):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseSuffixOperator):
        (parsePossibleSuffix):
        (parsePostIncrement):
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.instantiate):
        * WebGPUShadingLanguageRI/Test.js:
        (checkNumber):
        (checkEnum):
        (TEST_instantiateStructInStruct):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.prototype.get instantiatedType):
        (TypeRef.prototype.get isPrimitive):

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        WSL should support enum
        https://bugs.webkit.org/show_bug.cgi?id=176977

        Reviewed by Myles Maxfield.
        
        This implements enum. Enums members are referenced Java-style. For example, if we have an enum like:
        
            enum Bank {
                GP,
                FP
            }
        
        Then you refer to the members by saying Bank.GP and Bank.FP.
        
        Also adds a hack that makes operator- on a literal fold the literal. This fixes two issues:
        
        - Lets you use negative literals in constexprs.
        - Means that negative literals also get literal type unification.
        
        WSL's constexpr support is really thin, but I think it's all we really need for now.
        
        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitEnumType):
        (Checker.prototype.visitEnumLiteral):
        * WebGPUShadingLanguageRI/ConstexprFolder.js: Added.
        (ConstexprFolder.prototype.visitCallExpression):
        (ConstexprFolder.prototype.visitTypeOrVariableRef):
        (ConstexprFolder):
        * WebGPUShadingLanguageRI/CreateLiteral.js:
        (createLiteral.GenericLiteral.prototype.get valueForSelectedType):
        (createLiteral.GenericLiteral.prototype.get negConstexpr):
        * WebGPUShadingLanguageRI/DoubleLiteral.js:
        (let.DoubleLiteral.createLiteral.negConstexpr):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitEnumLiteral):
        * WebGPUShadingLanguageRI/EnumLiteral.js: Added.
        (EnumLiteral):
        (EnumLiteral.prototype.get member):
        (EnumLiteral.prototype.get type):
        (EnumLiteral.prototype.get isConstexpr):
        (EnumLiteral.prototype.unifyImpl):
        (EnumLiteral.prototype.toString):
        * WebGPUShadingLanguageRI/EnumMember.js: Added.
        (EnumMember):
        (EnumMember.prototype.get origin):
        (EnumMember.prototype.get name):
        (EnumMember.prototype.toString):
        * WebGPUShadingLanguageRI/EnumType.js: Added.
        (EnumType):
        (EnumType.prototype.add):
        (EnumType.prototype.get origin):
        (EnumType.prototype.get name):
        (EnumType.prototype.get baseType):
        (EnumType.prototype.get memberNames):
        (EnumType.prototype.memberByName):
        (EnumType.prototype.get members):
        (EnumType.prototype.get memberMap):
        (EnumType.prototype.get isPrimitive):
        (EnumType.prototype.populateDefaultValue):
        (EnumType.prototype.get size):
        (EnumType.prototype.toString):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitGenericLiteral):
        (Evaluator.prototype.visitEnumLiteral):
        * WebGPUShadingLanguageRI/FloatLiteral.js:
        (let.FloatLiteral.createLiteral.negConstexpr):
        * WebGPUShadingLanguageRI/FoldConstexprs.js: Added.
        (foldConstexprs):
        * WebGPUShadingLanguageRI/IntLiteral.js:
        (let.IntLiteral.createLiteral.negConstexpr):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseConstexpr):
        (parsePossibleSuffix):
        (parseEnumMember):
        (parseEnumType):
        (parse):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitEnumType):
        (Rewriter.prototype.visitEnumMember):
        (Rewriter.prototype.visitEnumLiteral):
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.get origin):
        (StructType.prototype.instantiate):
        * WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js: Added.
        (synthesizeEnumFunctions):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (checkEnum):
        (TEST_simpleEnum):
        (TEST_enumWithManualValues):
        (TEST_enumWithoutZero):
        (TEST_enumConstexprGenericFunction):
        (TEST_enumConstexprGenericStruct):
        * WebGPUShadingLanguageRI/UintLiteral.js:
        (let.UintLiteral.createLiteral.negConstexpr):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        WSL prepare() should cache the parsed standard library
        https://bugs.webkit.org/show_bug.cgi?id=177118

        Reviewed by Myles Maxfield.
        
        The execution time of Test.js is too damn high!
        
        So I made it 2x faster by caching the parsed standard library.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CloneProgram.js: Added.
        (cloneProgram):
        * WebGPUShadingLanguageRI/Prepare.js:
        (let.prepare):
        (prepare): Deleted.
        * WebGPUShadingLanguageRI/StatementCloner.js: Added.
        (StatementCloner.prototype.visitFuncDef):
        (StatementCloner.prototype.visitNativeFunc):
        (StatementCloner.prototype.visitNativeType):
        (StatementCloner.prototype.visitTypeDef):
        (StatementCloner.prototype.visitStructType):
        (StatementCloner.prototype.visitConstexprTypeParameter):
        (StatementCloner.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (doTest):

2017-09-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Rename WebKit target to WebKitLegacy and rename WebKit2 target to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=174558

        Reviewed by Alex Christensen.

        With help from Stephan Szabo, thanks!

        * DumpRenderTree/PlatformMac.cmake:
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/GCControllerWin.cpp:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        * DumpRenderTree/win/HistoryDelegate.h:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/win/TextInputControllerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/mac/CMakeLists.txt:
        * MiniBrowser/win/AccessibilityDelegate.cpp:
        * MiniBrowser/win/AccessibilityDelegate.h:
        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/Common.cpp:
        * MiniBrowser/win/DOMDefaultImpl.h:
        * MiniBrowser/win/MiniBrowser.cpp:
        * MiniBrowser/win/MiniBrowser.h:
        * MiniBrowser/win/MiniBrowserWebHost.cpp:
        * MiniBrowser/win/MiniBrowserWebHost.h:
        * MiniBrowser/win/PageLoadTestClient.h:
        * MiniBrowser/win/PrintWebUIDelegate.cpp:
        * MiniBrowser/win/PrintWebUIDelegate.h:
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        * MiniBrowser/win/ResourceLoadDelegate.h:
        * MiniBrowser/win/WebDownloadDelegate.h:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/Tests/WebKitLegacy/win/ScaleWebView.cpp:
        * TestWebKitAPI/Tests/WebKitLegacy/win/WebViewDestruction.cpp:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformWPE.cmake:

2017-09-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Fill out vector types in WSL's standard library
        https://bugs.webkit.org/show_bug.cgi?id=177063

        Reviewed by Filip Pizlo.

        Now that we have struct types, operator&[], and operator==, fill out a few of the builtin vector types in the
        standard library. This patch creates three new types: vec2, vec3, and vec4, each of which takes a type
        argument, so you can say vec4<float>. This patch also adds typedefs of int4, uint4, float4, and double4 (along
        with their 2- and 3- length siblings).

        This patch does not include the swizzling operators, so you can't say float4.yzw.

        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (operator.T.vec2.T):
        (bool.operator.T.Equatable):
        (thread.T.operator.T):
        (operator.T.vec3.T):
        (operator.T.vec4.T):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_builtinVectors):

2017-09-18  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL needs to annotate vertex shaders and fragment shaders
        https://bugs.webkit.org/show_bug.cgi?id=177066

        Reviewed by Filip Pizlo.

        Metal Shading Language requires annotating vertex and fragment shaders, so this information needs to be in
        the source WSL file.

        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get shaderType):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseFuncDecl):
        (parseProtocolFuncDecl):
        (parseFuncDef):
        (parseNativeFunc):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/Test.js:

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        WSL should know that constexpr parameters are not lvalues
        https://bugs.webkit.org/show_bug.cgi?id=177104

        Reviewed by Saam Barati.
        
        This should be an error:
        
            void foo<int x>()
            {
                x = 42;
            }
        
        Previously, it wasn't, because VariableRef always thought that it was an LValue. This patch
        teaches the type checker that not all VariableRefs are LValues.

        * WebGPUShadingLanguageRI/ConstexprTypeParameter.js:
        (ConstexprTypeParameter.prototype.get varIsLValue):
        * WebGPUShadingLanguageRI/FuncParameter.js:
        (FuncParameter.prototype.get varIsLValue):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_nonArrayRefArrayLengthSucceed):
        (TEST_nonArrayRefArrayLengthFail):
        (TEST_nonArrayRefArrayLength): Deleted.
        (TEST_assignLength): Deleted.
        * WebGPUShadingLanguageRI/VariableDecl.js:
        (VariableDecl.prototype.get varIsLValue):
        * WebGPUShadingLanguageRI/VariableRef.js:
        (VariableRef.prototype.get isLValue):

2017-09-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222170.

        The API test added with this change is failing.

        Reverted changeset:

        "Allow WTF::map to use any class that is iterable and has a
        size getter"
        https://bugs.webkit.org/show_bug.cgi?id=177026
        http://trac.webkit.org/changeset/222170

2017-09-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Add a section in WSL's documentation about how API objects and WSL interact
        https://bugs.webkit.org/show_bug.cgi?id=177089

        Reviewed by Filip Pizlo.

        No global variables; entry points accept arguments. Buffers are array references ([]),
        and texture and sampler opaque types exist. Data is passed between stages in return
        values.

        * WebGPUShadingLanguageRI/WSL.md:

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix typo.

        * WebGPUShadingLanguageRI/WSL.md:

2017-09-18  Filip Pizlo  <fpizlo@apple.com>

        WSL cannot use typedefs of arrays
        https://bugs.webkit.org/show_bug.cgi?id=177061

        Reviewed by Saam Barati.
        
        This test case didn't work before because of a missing visit call in Checker.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_typedefArray):

2017-09-18  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to use any class that is iterable and has a size getter
        https://bugs.webkit.org/show_bug.cgi?id=177026

        Reviewed by Darin Adler.

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

2017-09-16  Filip Pizlo  <fpizlo@apple.com>

        Figure out how WSL will support field overloads like float4.xz and friends
        https://bugs.webkit.org/show_bug.cgi?id=177031

        Reviewed by JF Bastien.
        
        WSL needs to support getters and setters, so that we can do things like:
        
            float4 vec;
            vec.zx = float2(1, 2);
            // z = 1, x = 2
        
        There's no way to express this float4.zx returning a pointer to something, since it's doing swizzling.
        It could return a crazy smart pointer, but that sounds like a lot of work. So, I decided to go for
        lvalue emulation instead.
        
        The idea of lvalue emulation is that when we try to make an lvalue work for an assignment or RMW
        operation (like += and friends), we consider the possibility that we have to first load the value using
        a getter and then store it with a setter. This patch makes this work recursively, so that this will
        work:
        
            float4 vec;
            vec.zwx.y = 42;
            // now w is 42
        
        This works because we decompose it automatically:
        
            float4 vec;
            float3 tmp = vec.zwx;
            tmp.y = 42;
            vec.zwx = tmp;
        
        This'll work to any depth.
        
        To check if this works, this patch adds two substantial new tests called TEST_genericAccessors() and
        TEST_bitSubscriptAccessor(). This tests that this stuff works with a lot of generic types, and that it's
        possible to turn integers into bitvectors using subscript overloading. This patch also adds smaller unit
        tests also.
        
        Oh, and it's now possible to get an array's length.

        * WebGPUShadingLanguageRI/AddressSpace.js:
        (needsPrimitiveProtocol):
        (protocolSuffix):
        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/AnonymousVariable.js: Added.
        (AnonymousVariable):
        (AnonymousVariable.prototype.get origin):
        (AnonymousVariable.prototype.get name):
        (AnonymousVariable.prototype.toString):
        * WebGPUShadingLanguageRI/ArrayRefType.js:
        (ArrayRefType.prototype.argumentForAndOverload):
        (ArrayRefType.prototype.argumentTypeForAndOverload):
        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType.prototype.argumentForAndOverload):
        (ArrayType.prototype.argumentTypeForAndOverload):
        (ArrayType):
        * WebGPUShadingLanguageRI/Assignment.js:
        (Assignment):
        * WebGPUShadingLanguageRI/CallAssignment.js: Removed.
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.resolve):
        (CallExpression.prototype.resolve):
        (CallExpression.prototype.resolveToOverload):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProgram):
        (Checker.prototype.visitFuncDef):
        (Checker.prototype.visitNativeFunc):
        (Checker.prototype.visitProtocolDecl):
        (Checker.prototype.visitIdentityExpression):
        (Checker.prototype.visitReadModifyWriteExpression):
        (Checker.prototype.visitAnonymousVariable):
        (Checker.prototype.visitMakeArrayRefExpression):
        (Checker.prototype._finishVisitingPropertyAccess):
        (Checker.prototype.visitDotExpression):
        (Checker.prototype.visitIndexExpression):
        (Checker.prototype.visitCallExpression):
        (Checker):
        (Checker.prototype.visitProtocolDecl.NoticeTypeVariable.prototype.visitTypeRef): Deleted.
        (Checker.prototype.visitProtocolDecl.NoticeTypeVariable.prototype.visitVariableRef): Deleted.
        (Checker.prototype.visitProtocolDecl.NoticeTypeVariable): Deleted.
        (Checker.prototype.visitProtocolDecl.set throw): Deleted.
        * WebGPUShadingLanguageRI/CommaExpression.js:
        * WebGPUShadingLanguageRI/DotExpression.js:
        (DotExpression):
        (DotExpression.prototype.get struct):
        (DotExpression.prototype.get getFuncName):
        (DotExpression.prototype.get andFuncName):
        (DotExpression.prototype.get setFuncName):
        * WebGPUShadingLanguageRI/EBuffer.js:
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitAnonymousVariable):
        (EBufferBuilder.prototype.visitLetExpression): Deleted.
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitIdentityExpression):
        (Evaluator.prototype.visitMakePtrExpression):
        (Evaluator.prototype.visitAnonymousVariable):
        (Evaluator.prototype.visitDotExpression): Deleted.
        (Evaluator.prototype.visitLetExpression): Deleted.
        * WebGPUShadingLanguageRI/ExpressionFinder.js:
        (ExpressionFinder.prototype.visitReadModifyWriteExpression):
        (ExpressionFinder.prototype.visitIdentityExpression):
        * WebGPUShadingLanguageRI/ForLoop.js:
        (ForLoop.prototype.toString):
        (ForLoop):
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution.prototype.visitCallExpression):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution):
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitFuncDef):
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitNativeFunc):
        (FuncInstantiator.prototype.getUnique.Instantiate):
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/IdentityExpression.js: Added.
        (IdentityExpression):
        (IdentityExpression.prototype.get target):
        (IdentityExpression.prototype.get unifyNode):
        (IdentityExpression.prototype.get isConstexpr):
        (IdentityExpression.prototype.get isLValue):
        (IdentityExpression.prototype.get addressSpace):
        (IdentityExpression.prototype.toString):
        * WebGPUShadingLanguageRI/IndexExpression.js: Added.
        (IndexExpression):
        (IndexExpression.prototype.get array):
        (IndexExpression.prototype.get index):
        (IndexExpression.prototype.get isLValue):
        (IndexExpression.prototype.get addressSpace):
        (IndexExpression.prototype.get getFuncName):
        (IndexExpression.prototype.get andFuncName):
        (IndexExpression.prototype.get setFuncName):
        (IndexExpression.prototype.toString):
        * WebGPUShadingLanguageRI/InferTypesForCall.js:
        (inferTypesForCall):
        * WebGPUShadingLanguageRI/Inline.js:
        (_inlineFunction):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCallExpression):
        (Inliner.prototype.visitDotExpression): Deleted.
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/LetExpression.js: Removed.
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js:
        (MakeArrayRefExpression.prototype.becomeConvertPtrToArrayRefExpression): Deleted.
        * WebGPUShadingLanguageRI/NameContext.js:
        (NameContext):
        (NameContext.prototype.add):
        (NameContext.prototype.doStatement):
        (NameContext.prototype.handleDefining): Deleted.
        (NameContext.prototype.isDefined): Deleted.
        (NameContext.prototype.define): Deleted.
        (NameContext.prototype.defineAll): Deleted.
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.doStatement):
        (NameResolver.prototype.visitProtocolDecl):
        (NameResolver.prototype.visitProgram): Deleted.
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/NativeFuncInstance.js:
        (NativeFuncInstance):
        (NativeFuncInstance.prototype.get implementationData):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.visit):
        (Node.visit):
        (Node.unify): Deleted.
        * WebGPUShadingLanguageRI/NormalUsePropertyResolver.js: Added.
        (NormalUsePropertyResolver.prototype.visitDotExpression):
        (NormalUsePropertyResolver.prototype.visitIndexExpression):
        (NormalUsePropertyResolver):
        * WebGPUShadingLanguageRI/Parse.js:
        (finishParsingPostIncrement):
        (parsePossibleSuffix):
        (finishParsingPreIncrement):
        (genericParseCommaExpression):
        (parseFuncName):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/Program.js:
        (Program):
        (Program.prototype.get globalNameContext):
        (Program.prototype.add):
        * WebGPUShadingLanguageRI/PropertyAccessExpression.js: Added.
        (PropertyAccessExpression):
        (PropertyAccessExpression.prototype.get resultType):
        (PropertyAccessExpression.prototype.rewriteAfterCloning):
        (PropertyAccessExpression.prototype.updateCallsAfterChangingBase):
        (PropertyAccessExpression.prototype.emitGet):
        (PropertyAccessExpression.prototype.emitSet):
        * WebGPUShadingLanguageRI/PropertyResolver.js: Added.
        (PropertyResolver.prototype._visitPropertyAccess):
        (PropertyResolver.prototype.visitDotExpression):
        (PropertyResolver.prototype.visitIndexExpression):
        (PropertyResolver.prototype._handleReadModifyWrite):
        (PropertyResolver.prototype.visitReadModifyWriteExpression):
        (PropertyResolver.prototype.visitAssignment):
        (PropertyResolver.visitMakePtrExpression):
        (PropertyResolver.prototype.visitMakeArrayRefExpression):
        (PropertyResolver):
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.argumentForAndOverload):
        (PtrType.prototype.argumentTypeForAndOverload):
        (PtrType.prototype.returnTypeFromAndOverload):
        * WebGPUShadingLanguageRI/ReadModifyWriteExpression.js: Added.
        (ReadModifyWriteExpression):
        (ReadModifyWriteExpression.prototype.get lValue):
        (ReadModifyWriteExpression.prototype.oldValueRef):
        (ReadModifyWriteExpression.prototype.newValueRef):
        (ReadModifyWriteExpression.prototype.toString):
        * WebGPUShadingLanguageRI/ResolveNames.js:
        (createNameResolver):
        (resolveNamesInTypes):
        (resolveNamesInProtocols):
        (resolveNamesInFunctions):
        (resolveNames): Deleted.
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/ResolveProperties.js: Added.
        (resolveProperties):
        * WebGPUShadingLanguageRI/ResolveTypeDefs.js:
        (resolveTypeDefsInTypes):
        (resolveTypeDefsInProtocols):
        (resolveTypeDefsInFunctions):
        (resolveTypeDefs): Deleted.
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker.prototype._isBoolCastFromLiteralTrue):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter):
        (Rewriter.prototype.visitVariableDecl):
        (Rewriter.prototype.visitTypeRef):
        (Rewriter.prototype.visitAssignment):
        (Rewriter.prototype.visitReadModifyWriteExpression):
        (Rewriter.prototype.visitDereferenceExpression):
        (Rewriter.prototype._handlePropertyAccessExpression):
        (Rewriter.prototype.visitDotExpression):
        (Rewriter.prototype.visitIndexExpression):
        (Rewriter.prototype.visitReturn):
        (Rewriter.prototype.visitGenericLiteralType):
        (Rewriter.prototype.visitNullType):
        (Rewriter.prototype.processDerivedCallData):
        (Rewriter.prototype.visitCallExpression):
        (Rewriter.prototype.visitFunctionLikeBlock):
        (Rewriter.prototype.visitIfStatement):
        (Rewriter.prototype.visitForLoop):
        (Rewriter.prototype.visitAnonymousVariable):
        (Rewriter.prototype.visitIdentityExpression):
        (Rewriter.prototype.visitLetExpression): Deleted.
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js:
        (StructLayoutBuilder.prototype.visitNativeFuncInstance):
        (StructLayoutBuilder):
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.instantiate):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution.prototype.get map):
        * WebGPUShadingLanguageRI/SuffixCallAssignment.js: Removed.
        * WebGPUShadingLanguageRI/SynthesizeStructAccessors.js: Added.
        (synthesizeStructAccessors.createTypeParameters):
        (synthesizeStructAccessors.):
        (synthesizeStructAccessors.createFieldType):
        (synthesizeStructAccessors.createTypeRef):
        (synthesizeStructAccessors.setupAnder):
        (synthesizeStructAccessors):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (checkNumber):
        (TEST_simpleProtocol):
        (TEST_assignLength):
        (TEST_simpleSetter):
        (TEST_genericAccessors):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isRef):
        (Type.prototype.argumentForAndOverload):
        (Type.prototype.argumentTypeForAndOverload):
        (Type.prototype.returnTypeFromAndOverload):
        (Type):
        * WebGPUShadingLanguageRI/TypeParameterRewriter.js: Added.
        (TypeParameterRewriter.prototype.visitConstexprTypeParameter):
        (TypeParameterRewriter.prototype.visitTypeVariable):
        (TypeParameterRewriter):
        * WebGPUShadingLanguageRI/TypeVariableTracker.js: Added.
        (TypeVariableTracker):
        * WebGPUShadingLanguageRI/Value.js:
        (Value.prototype.become):
        (Value):
        * WebGPUShadingLanguageRI/VariableRef.js:
        (VariableRef.prototype.get unifyNode):
        (VariableRef.prototype.get addressSpace):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitNativeFuncInstance):
        (Visitor.prototype.visitProtocolDecl):
        (Visitor): Deleted.
        * WebGPUShadingLanguageRI/VisitorBase.js: Removed.

2017-09-18  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream WKSetCrashReportApplicationSpecificInformation() from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=177048

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        (WTR::setCrashReportApplicationSpecificInformationToURL):

2017-09-18  Tim Horton  <timothy_horton@apple.com>

        build-webkit spawns fewer subprocesses than ninja uses by default
        https://bugs.webkit.org/show_bug.cgi?id=177057

        Reviewed by Alex Christensen.

        * Scripts/build-webkit:
        By default, ninja will parallelize over (cores + 2) jobs. build-webkit
        specifies -j(cores), which overrides this. Remove our override if building
        with ninja; just let it do its own thing. In my testing, this minor
        change is the difference between ~10% idle CPU time and 0.

2017-09-18  Lucas Forschler  <lforschler@apple.com>

        Land a patch to verify svn->git update is working.

2017-09-18  Ms2ger  <Ms2ger@igalia.com>

        Update my status.

        Unreviewed.

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

2017-09-17  Filip Pizlo  <fpizlo@apple.com>

        Start working on WSL documentation
        https://bugs.webkit.org/show_bug.cgi?id=177064

        Reviewed by Mylex Maxfield.
        
        This is a work in progress. I'd like to check it in and then keep adding to it.

        * WebGPUShadingLanguageRI/WSL.md: Added.

2017-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL needs to understand && and ||
        https://bugs.webkit.org/show_bug.cgi?id=177062

        Reviewed by Filip Pizlo.

        Very similar to LogicalNot.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitLogicalExpression):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitLogicalExpression):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/LogicalExpression.js: Added.
        (LogicalExpression):
        (LogicalExpression.prototype.get text):
        (LogicalExpression.prototype.get left):
        (LogicalExpression.prototype.get right):
        (LogicalExpression.prototype.toString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseLeftLogicalExpression):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitLogicalExpression):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-18  Ms2ger  <Ms2ger@igalia.com>

        Update my status.

        Unreviewed.

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

2017-09-17  Filip Pizlo  <fpizlo@apple.com>

        Start working on WSL documentation
        https://bugs.webkit.org/show_bug.cgi?id=177064

        Reviewed by Mylex Maxfield.
        
        This is a work in progress. I'd like to check it in and then keep adding to it.

        * WebGPUShadingLanguageRI/WSL.md: Added.

2017-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL needs to understand && and ||
        https://bugs.webkit.org/show_bug.cgi?id=177062

        Reviewed by Filip Pizlo.

        Very similar to LogicalNot.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitLogicalExpression):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitLogicalExpression):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/LogicalExpression.js: Added.
        (LogicalExpression):
        (LogicalExpression.prototype.get text):
        (LogicalExpression.prototype.get left):
        (LogicalExpression.prototype.get right):
        (LogicalExpression.prototype.toString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseLeftLogicalExpression):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitLogicalExpression):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL needs float and double support
        https://bugs.webkit.org/show_bug.cgi?id=177058

        Reviewed by Filip Pizlo.

        Use the existing int and uint types as a model. The types themselves are straighforward. Just like int and uint,
        you can't pass a float as a double argument and vice-versa. This patch adds operator+, -, *, and / for floats
        and doubles.

        Float literals are more complicated. If your number has a "." character in it, it is treated as a float literal.
        You can add a suffix of "f" or "d" to force the literal to pretend to be a float or a double. These literals are
        able to masquerade as either floats or doubles (unlike an explicit type). However, these literals are not able
        to masquerade as ints or uints. There's also a nice check that your float literal can actually fit in a float.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/DoubleLiteral.js: Copied from Tools/WebGPUShadingLanguageRI/Type.js.
        (let.DoubleLiteral.createLiteral.createType):
        * WebGPUShadingLanguageRI/DoubleLiteralType.js: Copied from Tools/WebGPUShadingLanguageRI/Type.js.
        (let.DoubleLiteralType.createLiteralType.verifyAsArgument):
        * WebGPUShadingLanguageRI/FloatLiteral.js: Copied from Tools/WebGPUShadingLanguageRI/Type.js.
        (let.FloatLiteral.createLiteral.createType):
        * WebGPUShadingLanguageRI/FloatLiteralType.js: Copied from Tools/WebGPUShadingLanguageRI/Type.js.
        (let.FloatLiteralType.createLiteralType.verifyAsArgument):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/NativeType.js:
        (NativeType):
        (NativeType.prototype.get isFloating):
        (NativeType.prototype.set isFloating):
        (NativeType.prototype.get isFloat): Deleted.
        (NativeType.prototype.set isFloat): Deleted.
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTerm):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitGenericLiteral):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (uint.operator):
        (int.operator):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (makeFloat):
        (makeDouble):
        (checkNumber):
        (checkFloat):
        (checkDouble):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isFloating):
        (Type.prototype.get isFloat): Deleted.

2017-09-17  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=177038
        Add an option to run-jsc-stress-tests to limit tests variations to a basic set

        Reviewed by JF Bastien.

        Added the --basic option that runs defaults tests with the following modes, default, no-llint,
        no-cjit-validate-phases, no-cjit-collect-continuously, dfg-eager and for FTL platforms: no-ftl,
        ftl-eager-no-cjit and ftl-no-cjit-small-pool.  This takes about half the time as running all
        16 modes of a full run.

        * Scripts/run-jsc-stress-tests:

2017-09-16  Tim Horton  <timothy_horton@apple.com>

        Fix the Tools build with CMake on macOS
        https://bugs.webkit.org/show_bug.cgi?id=177030

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/CMakeLists.txt:
        Add a workaround identical to what the gtest CMakeLists has.

2017-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump fontconfig version to 2.12.4
        https://bugs.webkit.org/show_bug.cgi?id=176997

        Reviewed by Michael Catanzaro.

        It's the latest stable version and we can get rid of the patches we have.

        * WebKitTestRunner/gtk/fonts/fonts.conf: Remove hinting config we no longer need with newer FreeType and
        deprecated <blank> that current fontconfig just ignores.
        * gtk/jhbuild.modules:
        * gtk/patches/fontconfig-2.11.1-add-autogen.patch: Removed.
        * gtk/patches/fontconfig-Avoid-conflicts-with-integer-width-macros-from-TS-18661-1-2014.patch: Removed.
        * gtk/patches/fontconfig-Fix-the-build-issue-with-gperf-3.1.patch: Removed.
        * gtk/patches/fontconfig-fix-osx-cache.diff: Removed.

2017-09-15  Lucas Forschler  <lforschler@apple.com>

        Move run-webkit-archive from Tools/Scripts to Tools/BuildSlaveSupport
        
        Reviewed by Alexey Proskuryakov.

        * Scripts/run-webkit-archive: Removed.

2017-09-15  Lucas Forschler  <lforschler@apple.com>

        teach build.webkit.org to include run-webkit-archive in the root folder of uploaded macOS archives.
        https://bugs.webkit.org/show_bug.cgi?id=176965

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/built-product-archive:
        (addLauncherToArchive): Helper function to add the launcher script
        (createZip): teach function about addLauncherToArchive
        * BuildSlaveSupport/run-webkit-archive: Added.
        (check_for_valid_platform): Add logic to ensure platform is Darwin
        (find_dyld_framework_path): Find the dyld framework path
        (run_safari_for_webkit_development): launch SafariForWebKitDevelopment
        (set_dyld_framework_path): export the environment for dydl framework path

2017-09-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [WSL] Small cleanup in Evaluator
        https://bugs.webkit.org/show_bug.cgi?id=176971

        Reviewed by Filip Pizlo.

        Use the symbols for break and continue instead of the objects themselves.

        No tests because there is no behavior change.

        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitWhileLoop):
        (Evaluator.prototype.visitDoWhileLoop):
        (Evaluator.prototype.visitForLoop):
        (Evaluator.prototype.visitBreak):
        (Evaluator.prototype.visitContinue):

2017-09-15  Filip Pizlo  <fpizlo@apple.com>

        WSL Evaluator should only allocate EBuffers when dealing with intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=176973

        Reviewed by Myles Maxfield.
        
        Whether or not two temporary values share the same EBuffer is ultimately observable in WSL,
        because you can do this:
        
            thread int^ operator&[](thread int^ ptr, uint index)
            {
                g_ptr = ptr;
                return ptr;
            }
        
        And then this is a thing:
        
            42[0];
            // g_ptr now points to 42's location
        
        Normally this would have a lot of bad implications. But in WSL, if you did choose to do this,
        you'd get a pointer to something well-defined: the EBuffer of 42's GenericLiteral. Each static
        occurrence of a literal gets its own location, and the semantics of the language call for
        42 to be stored into this location when `42` "executes". So, while the programmer could do all
        kinds of strange things, at least the strangeness they would see is something we can spec.
        
        But to do this, the interpreter needs to allocate EBuffers in the same way a compiler would.
        It cannot allocate them during execution, except when interacting with intrinsics, which won't
        know the difference.
        
        In the process, I found places that needed to use AutoWrapper instead of TypeRef.wrap.

        * WebGPUShadingLanguageRI/AutoWrapper.js:
        (AutoWrapper.prototype.visitGenericLiteralType):
        (AutoWrapper.prototype.visitNullType):
        (AutoWrapper):
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype.resolve):
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/CreateLiteralType.js:
        (createLiteralType.GenericLiteralType.prototype.commitUnification):
        * WebGPUShadingLanguageRI/EBuffer.js:
        (EBuffer):
        (EBuffer.setCanAllocateEBuffers):
        (EBuffer.disallowAllocation):
        (EBuffer.allowAllocation):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitVariableDecl):
        (EBufferBuilder.prototype.visitFuncDef):
        (EBufferBuilder.prototype.visitFunctionLikeBlock):
        (EBufferBuilder.prototype.visitCallExpression):
        (EBufferBuilder.prototype.visitMakePtrExpression):
        (EBufferBuilder.prototype.visitGenericLiteral):
        (EBufferBuilder.prototype.visitNullLiteral):
        (EBufferBuilder.prototype.visitBoolLiteral):
        (EBufferBuilder.prototype.visitLogicalNot):
        (EBufferBuilder):
        * WebGPUShadingLanguageRI/EPtr.js:
        (EPtr.box):
        (EPtr.prototype.box):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype._snapshot):
        (Evaluator.prototype.runFunc):
        (Evaluator.prototype._runBody):
        (Evaluator.prototype.visitFunctionLikeBlock):
        (Evaluator.prototype.visitMakePtrExpression):
        (Evaluator.prototype.visitGenericLiteral):
        (Evaluator.prototype.visitNullLiteral):
        (Evaluator.prototype.visitBoolLiteral):
        (Evaluator.prototype.visitLogicalNot):
        (Evaluator.prototype.visitCallExpression):
        (Evaluator):
        (Evaluator.prototype.runBody): Deleted.
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/InstantiateImmediates.js:
        (InstantiateImmediates.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitMakePtrExpression):
        (Rewriter.prototype.visitGenericLiteral):
        (Rewriter.prototype.visitNullLiteral):
        (Rewriter.prototype.processDerivedCallData):
        (Rewriter.prototype.visitFunctionLikeBlock):
        (Rewriter.prototype.visitLogicalNot):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.prototype.toString):
        (TypeRef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-14  Filip Pizlo  <fpizlo@apple.com>

        Rationalize how WSL's operator&[] works
        https://bugs.webkit.org/show_bug.cgi?id=176958

        Reviewed by Myles Maxfield.
        
        This makes operator&[] work with non-array-ref types. The way this works is that if you do base[index]
        then we pattern match base's type and proceed accordingly:
        
            If base's type is T^:
                => Reject
            
            If base's type is T[]:
                => Accept
            
            If base's type is T[c]:
                => Wrap it with a MakeArrayRefExpression and accept.
            
            All other cases:
                => Wrap it with a MakePtrExpression and accept.
        
        This makes it possible for operator&[] to work with lvalues. It also means that operator&[] gets to
        "see" the temporary values we create via snapshot() in the interpreter. We'll have to fix that, and I've
        filed bug 176973 for that. Once that's fixed, this will have well-defined behavior, though with the very
        peculiar caveat that an expression like this:
        
             totallyNotAnLValue()[42]
        
        Could be used to get a pointer to a non-lvalue. But we can be extremely precise about what that means
        and prohibit dangling pointers, which is kinda crazy.
        
        In order to do this, I had to make MakeArrayRefExpression work, so I did that and added tests for it.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/ArrayRefType.js:
        (ArrayRefType.prototype.unifyImpl):
        (ArrayRefType.prototype.toString):
        (ArrayRefType):
        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType):
        (ArrayType.prototype.get numElementsValue):
        (ArrayType.prototype.get size):
        (ArrayType.prototype.populateDefaultValue):
        (ArrayType.prototype.unifyImpl):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/ConvertPtrToArrayRefExpression.js: Added.
        (ConvertPtrToArrayRefExpression):
        (ConvertPtrToArrayRefExpression.prototype.get lValue):
        (ConvertPtrToArrayRefExpression.prototype.toString):
        * WebGPUShadingLanguageRI/CreateLiteral.js:
        (createLiteral.GenericLiteral.withType):
        (createLiteral.GenericLiteral.prototype.get isLiteral):
        (createLiteral.GenericLiteral.prototype.unifyImpl):
        * WebGPUShadingLanguageRI/DotExpression.js:
        (DotExpression.prototype.get addressSpace):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitMakeArrayRefExpression):
        (Evaluator.prototype.visitConvertPtrToArrayRefExpression):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/MakeArrayRefExpression.js: Added.
        (MakeArrayRefExpression):
        (MakeArrayRefExpression.prototype.get lValue):
        (MakeArrayRefExpression.prototype.becomeConvertPtrToArrayRefExpression):
        (MakeArrayRefExpression.prototype.toString):
        * WebGPUShadingLanguageRI/MakePtrExpression.js:
        (MakePtrExpression.prototype.toString):
        (MakePtrExpression):
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.toString):
        (PtrType):
        * WebGPUShadingLanguageRI/ReferenceType.js:
        (ReferenceType):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitArrayType):
        (Rewriter.prototype.visitMakeArrayRefExpression):
        (Rewriter.prototype.visitConvertPtrToArrayRefExpression):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_buildArrayThenSumItUsingArrayReference):
        (TEST_overrideSubscriptStruct):
        (TEST_overrideSubscriptStructAndUsePointers):
        (TEST_overrideSubscriptStructAndUsePointersIncorrectly):
        (TEST_makeArrayRefFromPointer):
        (TEST_makeArrayRefFromArrayRef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-14  Filip Pizlo  <fpizlo@apple.com>

        WSL should support ++, --, +=, and all of those things
        https://bugs.webkit.org/show_bug.cgi?id=176975

        Reviewed by Myles Maxfield.
        
        This adds an internal AST construct called LetExpression, that allows us to anonymously capture
        a value. This change uses LetExpression to implement prefix and suffix ++/-- and all of the
        +=/-=/etc.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitVariableDecl):
        (EBufferBuilder.prototype.visitLetExpression):
        (EBufferBuilder):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitLetExpression):
        * WebGPUShadingLanguageRI/LetExpression.js: Added.
        (LetExpression):
        (LetExpression.prototype.get origin):
        (LetExpression.prototype.get name):
        (LetExpression.prototype.toString):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/Parse.js:
        (isCallExpression):
        (finishParsingPostIncrement):
        (parsePossibleSuffix):
        (finishParsingPreIncrement):
        (parsePreIncrement):
        (parsePossiblePrefix):
        (parsePossibleAssignment):
        (parsePostIncrement):
        (parseEffectfulExpression):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFunctionLikeBlock):
        (Rewriter.prototype.visitLetExpression):
        (Rewriter):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        (int.operator):
        (uint.operator):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_prefixPlusPlus):
        (TEST_prefixPlusPlusResult):
        (TEST_postfixPlusPlus):
        (TEST_postfixPlusPlusResult):
        (TEST_prefixMinusMinus):
        (TEST_prefixMinusMinusResult):
        (TEST_postfixMinusMinus):
        (TEST_postfixMinusMinusResult):
        (TEST_plusEquals):
        (TEST_plusEqualsResult):
        (TEST_minusEquals):
        (TEST_minusEqualsResult):
        (TEST_timesEquals):
        (TEST_timesEqualsResult):
        (TEST_divideEquals):
        (TEST_divideEqualsResult):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-15  Brent Fulgham  <bfulgham@apple.com>

        Provide mechanism to immediately end tests
        https://bugs.webkit.org/show_bug.cgi?id=176364
        <rdar://problem/34254780>

        Reviewed by Alex Christensen.

        WebKitTestRunner does not output state if the top loading frame has not been removed. This prevents some
        tests that attempt to exercise failed load state from working properly.
        
        This change adds a new 'forceImmediateCompletion' handler for DumpRenderTree and WebKitTestRunner so
        that we can properly test these conditions.

        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::forceImmediateCompletion): Added.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::forceImmediateCompletion): Ditto.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::forceImmediateCompletion): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-09-15  Youenn Fablet  <youenn@apple.com>

        Add an URL method to remove both query string and fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=176911

        Reviewed by Alex Christensen.

        Adding unit test for new URL method as well as modified setQuery and setFragmentIdentifier.

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

2017-09-14  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Add an option to build WebKitLegacy and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=176891

        Since TestWebKitAPI and MiniBrowser/win are used for WebKitLegacy,
        those subdirectories are ignored for WebKit build.

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2017-09-14  Lucas Forschler  <lforschler@apple.com>

        Create a launcher for webkit-archives
        https://bugs.webkit.org/show_bug.cgi?id=176964

        Reviewed by Aakash Jain.

        * Scripts/run-webkit-archive: Added.
        (find_dyld_framework_path):
        (run_safari_for_webkit_development):
        (set_dyld_framework_path):
        (main):

2017-09-14  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's drawHeader, drawFooter, headerHeight, and footerHeight
        https://bugs.webkit.org/show_bug.cgi?id=176889
        <rdar://problem/29270035>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PrintDelegate _webView:printFrame:]):
        (-[PrintDelegate _webViewHeaderHeight:]):
        (-[PrintDelegate _webViewFooterHeight:]):
        (-[PrintDelegate _webView:drawHeaderInRect:forPageWithTitle:URL:]):
        (-[PrintDelegate _webView:drawFooterInRect:forPageWithTitle:URL:]):
        (callbacksEqual):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView hostWindow]):

2017-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222033.

        This change caused API test WebKit.PrintFrame to time out.

        Reverted changeset:

        "Add WKUIDelegatePrivate equivalent of WKPageUIClient's
        drawHeader, drawFooter, headerHeight, and footerHeight"
        https://bugs.webkit.org/show_bug.cgi?id=176889
        http://trac.webkit.org/changeset/222033

2017-09-14  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to take function as parameter
        https://bugs.webkit.org/show_bug.cgi?id=176909

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::multiplyByTwo):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::multiplyByTwoMoveOnly):

2017-09-14  Filip Pizlo  <fpizlo@apple.com>

        WSL IntLiteralType should become int32 if unified with a type variable
        https://bugs.webkit.org/show_bug.cgi?id=176707

        Reviewed by Myles Maxfield.
        
        This makes it so that this works:
        
            T foo<T>(T x) { return x; }
            foo(42); // T becomes int32
        
        Previously, it did not work because IntLiteralType did not recognize TypeVariable as a number. Also,
        TypeVariable would try to evaluate protocol inheritance of IntLiteralType, which would not go well. One
        of the tests that this patch adds didn't just fail; it gave such an absurd 7-line type error that I felt
        like I was using SML.
        
        This fixes the problem by introducing what I think is a super deterministic way of handling literals and
        type variables:
        
        Before verifying a unification context, we now give all literals a chance to perform an extra 
        unification step. This is a two-phase process. This ensures that the unification performed by one 
        literal does not throw off the logic of some other literal. For example, if we do:
        
            void foo<T>(T, T) { }
            foo(42, 42u);
        
        Then we want to always fail to compile, rather than sometimes succeeding. So, we first ask each literal
        if it thinks that it needs to do extra unification. Both of the literals will report that they want to
        in this case, because they will notice that they got unified with either at type variable or a literal,
        which isn't specific enough. Then after they all register to do extra unification, they will both try to
        unify with their preferred types (int32 for 42, uint32 for 42u). The first one will succeed, and the
        second will give an error.
        
        Without the special two-phase arrangement, it was possible to either get a type error or not depending 
        on the order - for example foo(42, 42u) might fail while foo(42u, 42) succeeds. It was definitely not
        decidable, at least not unless you mandate the unification order as part of the type system spec. I 
        think that would have been nuts.
        
        Both IntLiteral and UintLiteral are now "flexible"; the uint one will reject non-int or signed int
        types and will prefer uint, but otherwise it's the same logic. This means that this will be valid:
        
            uint8 x = 5u;
        
        But this is still wrong:
        
            int x = 5u;
        
        To make this easy, I turned IntLiteral and UintLiteral (and IntLiteralType and UintLiteralType) into
        factory-built generic types (see createLiteral() and createLiteralType()). Because visitors use the
        constructor's declared name (GenericLiteral and GenericLiteralType in this case), it means that we can
        share a ton of code between the different literals. I love that ES6 lets you do that.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/CreateLiteral.js: Added.
        (createLiteral.GenericLiteral):
        (createLiteral.GenericLiteral.prototype.get value):
        (createLiteral.GenericLiteral.prototype.get isConstexpr):
        (createLiteral.GenericLiteral.prototype.toString):
        (createLiteral):
        * WebGPUShadingLanguageRI/CreateLiteralType.js: Added.
        (createLiteralType.GenericLiteralType):
        (createLiteralType.GenericLiteralType.prototype.get origin):
        (createLiteralType.GenericLiteralType.prototype.get value):
        (createLiteralType.GenericLiteralType.prototype.get isPrimitive):
        (createLiteralType.GenericLiteralType.prototype.get isUnifiable):
        (createLiteralType.GenericLiteralType.prototype.get isLiteral):
        (createLiteralType.GenericLiteralType.prototype.typeVariableUnify):
        (createLiteralType.GenericLiteralType.prototype.unifyImpl):
        (createLiteralType.GenericLiteralType.prototype.prepareToVerify):
        (createLiteralType.GenericLiteralType.prototype.verifyAsArgument):
        (createLiteralType.GenericLiteralType.prototype.verifyAsParameter):
        (createLiteralType.GenericLiteralType.prototype.conversionCost):
        (createLiteralType.GenericLiteralType.prototype.commitUnification):
        (createLiteralType.GenericLiteralType.prototype.toString):
        (createLiteralType):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitIntLiteral): Deleted.
        (Evaluator.prototype.visitUintLiteral): Deleted.
        * WebGPUShadingLanguageRI/IntLiteral.js:
        (let.IntLiteral.createLiteral.createType):
        (IntLiteral): Deleted.
        (IntLiteral.prototype.get value): Deleted.
        (IntLiteral.prototype.get isConstexpr): Deleted.
        (IntLiteral.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/IntLiteralType.js:
        (IntLiteralType): Deleted.
        (IntLiteralType.prototype.get origin): Deleted.
        (IntLiteralType.prototype.get value): Deleted.
        (IntLiteralType.prototype.get isPrimitive): Deleted.
        (IntLiteralType.prototype.get isUnifiable): Deleted.
        (IntLiteralType.prototype.typeVariableUnify): Deleted.
        (IntLiteralType.prototype.unifyImpl): Deleted.
        (IntLiteralType.prototype.verifyAsArgument): Deleted.
        (IntLiteralType.prototype.verifyAsParameter): Deleted.
        (IntLiteralType.prototype.conversionCost): Deleted.
        (IntLiteralType.prototype.commitUnification): Deleted.
        (IntLiteralType.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/LiteralTypeChecker.js:
        (LiteralTypeChecker.prototype.visitIntLiteralType): Deleted.
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.prepareToVerify):
        (Node.prototype.commitUnification):
        (Node.prototype.get isLiteral):
        * WebGPUShadingLanguageRI/NullType.js:
        (NullType.prototype.get isLiteral):
        (NullType.prototype.toString):
        (NullType):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTerm):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitGenericLiteralType):
        (Rewriter.prototype.visitIntLiteral): Deleted.
        (Rewriter.prototype.visitIntLiteralType): Deleted.
        (Rewriter.prototype.visitUintLiteral): Deleted.
        (Rewriter.prototype.visitBoolLiteral): Deleted.
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (makeUint):
        (checkUint):
        (TEST_uintSimpleMath):
        (TEST_equality):
        (TEST_notEquality):
        (TEST_intLiteralGeneric):
        (TEST_intLiteralGenericWithProtocols):
        (TEST_uintLiteralGeneric):
        (TEST_uintLiteralGenericWithProtocols):
        (TEST_intLiteralGenericSpecific):
        (TEST_twoIntLiterals):
        (TEST_unifyDifferentLiterals):
        (makeUInt): Deleted.
        (checkUInt): Deleted.
        * WebGPUShadingLanguageRI/Type.js:
        * WebGPUShadingLanguageRI/UintLiteral.js:
        (let.UintLiteral.createLiteral.createType):
        (UintLiteral): Deleted.
        (UintLiteral.prototype.get value): Deleted.
        (UintLiteral.prototype.get isConstexpr): Deleted.
        (UintLiteral.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/UintLiteralType.js: Added.
        (let.UintLiteralType.createLiteralType.verifyAsArgument):
        * WebGPUShadingLanguageRI/UnificationContext.js:
        (UnificationContext.prototype.verify):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):

2017-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221868.

        Rolling out this change while we investigate test262 failures.

        Reverted changeset:

        "Turn on exception scope verification for JSC tests."
        https://bugs.webkit.org/show_bug.cgi?id=162351
        http://trac.webkit.org/changeset/221868

2017-09-14  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's drawHeader, drawFooter, headerHeight, and footerHeight
        https://bugs.webkit.org/show_bug.cgi?id=176889
        <rdar://problem/29270035>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PrintDelegate _webView:printFrame:]):
        (-[PrintDelegate _webViewHeaderHeight:]):
        (-[PrintDelegate _webViewFooterHeight:]):
        (-[PrintDelegate _webView:drawHeaderInRect:forPageWithTitle:URL:]):
        (-[PrintDelegate _webView:drawFooterInRect:forPageWithTitle:URL:]):
        (callbacksEqual):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView hostWindow]):

2017-09-14  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add a switch to start the mini-browser in full-screen mode
        https://bugs.webkit.org/show_bug.cgi?id=176904

        Reviewed by Carlos Garcia Campos.

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

2017-09-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix a typo that was preventing a test from running.

        * WebGPUShadingLanguageRI/Test.js:

2017-09-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fail to build using internal jhbuild if libgtk3-dev is not installed in the system
        https://bugs.webkit.org/show_bug.cgi?id=176778

        Reviewed by Carlos Alberto Lopez Perez.

        We are building gtk+ in the jhbuild with introspection disabled, but Gtk-3.gir is required to build the
        WebKitGTK+ introspection. Also, if wayland-protocols is not installed, gtk+ is built without the wayland backend
        and it's no possible to enable the wayland target in WebKitGTK+ either.

        * gtk/jhbuild.modules: Do not disable introspection when building gtk+ and add wayland-protocols as a dependency.

2017-09-14  Maureen Daum  <mdaum@apple.com>

        Introduce the option to mark an HTML element as having AutoFill available.
        https://bugs.webkit.org/show_bug.cgi?id=176710

        Reviewed by Alex Christensen.

        Add an API test that verifies after we mark a field as having AutoFill available,
        Accessibility also considers it to have AutoFill available.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add AutoFillAvailable.mm
        * TestWebKitAPI/Tests/WebKitCocoa/AutoFillAvailable.mm: Added.
        Create an input element, mark it as having AutoFill available, then focus it so that
        we can get the accessibility information for it. Ask accessibility whether it considers
        the field to have AutoFill available, and pick the alert message based on that.
        (-[AutoFillAvailable webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (TEST):
        (-[AutoFillAvailableDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        Verify that we get the alert message indicating that accessibility indeed considers
        the input element as having AutoFill available after we explicitly marked it as so.

2017-09-13  John Wilander  <wilander@apple.com>

        Introduce Storage Access API (document parts) as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=175759
        <rdar://problem/34414107>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
            Turns the feature on for tests.

2017-09-13  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221976.

        The test introduced was flaky from point of addition.

        Reverted changeset:

        "Introduce Storage Access API (document parts) as an
        experimental feature"
        https://bugs.webkit.org/show_bug.cgi?id=175759
        http://trac.webkit.org/changeset/221976

2017-09-13  Lucas Forschler  <lforschler@apple.com>

        Compress spindumps on client side before packaging into layout test results zip (mac & ios)
        https://bugs.webkit.org/show_bug.cgi?id=176853

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/test-result-archive:
        (main):
        (gzip_file): use gzip to compress a file, removing original
        (compress_spindumps): find and compress spindumps matching a filter
        (archive_test_results): refactor to snake_case
        (archiveTestResults): Deleted.

2017-09-13  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's setIsResizable, getWindowFrame, and setWindowFrame
        https://bugs.webkit.org/show_bug.cgi?id=176857
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[ModalDelegate _webViewRunModal:]):
        (-[ModalDelegate _webView:setResizable:]):
        (-[WindowFrameDelegate _webView:setWindowFrame:]):
        (-[WindowFrameDelegate _webView:getWindowFrameWithCompletionHandler:]):
        (-[WindowFrameDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):
        (-[ResizableDelegate _webView:setResizable:]):
        (-[ResizableDelegate _webView:getIsResizableWithCompletionHandler:]):
        (-[ResizableDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

2017-09-13  Youenn Fablet  <youenn@apple.com>

        Add a lambda-based map for Vectors
        https://bugs.webkit.org/show_bug.cgi?id=176487

        Reviewed by Darin Adler.

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

2017-09-13  John Wilander  <wilander@apple.com>

        Introduce Storage Access API (document parts) as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=175759
        <rdar://problem/33666847>

        Reviewed by Alex Christensen.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
            Turns the feature on for tests.

2017-09-13  Per Arne Vollan  <pvollan@apple.com>

        [Win] DRT option --gc-between-tests is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=176849

        Reviewed by Brent Fulgham.

        Perform GC after the test if this option is enabled. This patch also set the initial value of the flag
        to true, in order to catch GC related issues in the test in which they occur.
 
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2017-09-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support DataTransfer.getData and DataTransfer.setData when dragging or dropping
        https://bugs.webkit.org/show_bug.cgi?id=176672
        <rdar://problem/34353723>

        Reviewed by Ryosuke Niwa.

        Adds new tests and tweaks existing DataInteractionTests to cover the tweaks made in this patch.
        SinglePlainTextURLTypeIdentifiers: Verify that inline presentation style is requested when dragging plaintext.
        SinglePlainTextWordTypeIdentifiers: Verify that inline presentation style is requested when dragging a link.
        ExternalSourceInlineTextToFileInput:
                Verify that an item provider marked as preferring inline presentation does not trigger file uploads by
                dragging a piece of inline text into a file input.
        CanStartDragOnDivWithDraggableAttribute:
                Verify that DataTransfer.setData and DataTransfer.getData work as expected by moving a draggable div.
                The test harness writes the id of the draggable div via the DataTransfer, and upon drop, reads the id
                back to figure out which element to append to the drop destination.

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

2017-09-12  Ryosuke Niwa  <rniwa@webkit.org>

        Dragging & dropping a file creates an attachment element even when it's disabled
        https://bugs.webkit.org/show_bug.cgi?id=176769

        Reviewed by Tim Horton.

        Added a webkit-test-runner flag to enable attachment element via runtime flag since this feature is now hidden
        behind a runtime-enabled flag which needs to be set at the time of global object initialization.

        * DumpRenderTree/TestOptions.h:
        (TestOptions): Added.
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2017-09-11  Filip Pizlo  <fpizlo@apple.com>

        WSL should allow you to say "protocol Foo : Bar { ... }"
        https://bugs.webkit.org/show_bug.cgi?id=176238

        Reviewed by Mylex Maxfield.
        
        This makes protocol "subtyping" work. It's not really subtyping. Protocol A inherits protocol B
        if every signature in B can be resolved against some signature in A. Also, you can explicitly
        subtype protocols using extends syntax ("protocol Foo : Bar, Baz { ... }").
        
        Also makes the diagnostics when type variable constraints fail a _lot_ better. This will even
        tell you diagnostics about why a function didn't match when protocols are not inheriting, and
        then it will tell you why the inheritance failed.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/AutoWrapper.js:
        (AutoWrapper.prototype.visitTypeVariable):
        (AutoWrapper):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/ConstexprTypeParameter.js:
        (ConstexprTypeParameter.prototype.verifyAsArgument):
        (ConstexprTypeParameter.prototype.verifyAsParameter):
        * WebGPUShadingLanguageRI/FlattenProtocolExtends.js: Added.
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.get typeParametersForCallResolution):
        * WebGPUShadingLanguageRI/InferTypesForCall.js:
        (inferTypesForCall):
        * WebGPUShadingLanguageRI/IntLiteralType.js:
        (IntLiteralType.prototype.verifyAsArgument):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolDecl):
        (NameResolver.prototype.visitProtocolRef): Deleted.
        (NameResolver.prototype.visitProtocolFuncDecl): Deleted.
        (NameResolver.prototype.visitTypeDef): Deleted.
        (NameResolver.prototype.visitStructType): Deleted.
        (NameResolver.prototype._resolveTypeArguments): Deleted.
        (NameResolver.prototype.visitTypeRef): Deleted.
        (NameResolver.prototype.visitReferenceType): Deleted.
        (NameResolver.prototype.visitVariableDecl): Deleted.
        (NameResolver.prototype.visitVariableRef): Deleted.
        (NameResolver.prototype.visitReturn): Deleted.
        (NameResolver.prototype.visitCallExpression): Deleted.
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.equals):
        * WebGPUShadingLanguageRI/NullType.js:
        (NullType.prototype.verifyAsArgument):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseProtocolDecl):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        (ProtocolDecl): Deleted.
        (ProtocolDecl.prototype.add): Deleted.
        (ProtocolDecl.prototype.get signatures): Deleted.
        (ProtocolDecl.prototype.signaturesByName): Deleted.
        (ProtocolDecl.prototype.get typeVariable): Deleted.
        (ProtocolDecl.prototype.signaturesByNameWithTypeVariable): Deleted.
        (ProtocolDecl.prototype.inherits): Deleted.
        (ProtocolDecl.prototype.hasHeir): Deleted.
        (ProtocolDecl.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/ProtocolFuncDecl.js:
        (ProtocolFuncDecl.prototype.get typeParametersForCallResolution):
        (ProtocolFuncDecl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitProtocolDecl):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_nullTypeVariableUnify):
        (TEST_simpleProtocolExtends):
        (TEST_protocolExtendsTwo):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.inherits):
        * WebGPUShadingLanguageRI/TypeDefResolver.js:
        (TypeDefResolver.prototype.visitTypeRef):
        (TypeDefResolver):
        * WebGPUShadingLanguageRI/TypeVariable.js:
        (TypeVariable.prototype.inherits):
        (TypeVariable.prototype.verifyAsArgument):
        (TypeVariable.prototype.verifyAsParameter):
        * WebGPUShadingLanguageRI/UnificationContext.js:
        (UnificationContext.prototype.verify):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolDecl):
        (Visitor.prototype.visitTypeRef): Deleted.
        (Visitor.prototype.visitNativeType): Deleted.
        (Visitor.prototype.visitNativeTypeInstance): Deleted.
        (Visitor.prototype.visitTypeDef): Deleted.
        (Visitor.prototype.visitStructType): Deleted.
        (Visitor.prototype.visitTypeVariable): Deleted.
        (Visitor.prototype.visitConstexprTypeParameter): Deleted.
        (Visitor.prototype.visitField): Deleted.
        (Visitor.prototype.visitElementalType): Deleted.
        (Visitor.prototype.visitReferenceType): Deleted.
        (Visitor.prototype.visitPtrType): Deleted.
        (Visitor.prototype.visitArrayRefType): Deleted.
        (Visitor.prototype.visitArrayType): Deleted.
        (Visitor.prototype.visitVariableDecl): Deleted.
        (Visitor.prototype.visitAssignment): Deleted.
        (Visitor.prototype.visitDereferenceExpression): Deleted.
        (Visitor.prototype.visitDotExpression): Deleted.
        (Visitor.prototype.visitMakePtrExpression): Deleted.
        (Visitor.prototype.visitVariableRef): Deleted.
        (Visitor.prototype.visitIfStatement): Deleted.
        (Visitor.prototype.visitWhileLoop): Deleted.
        (Visitor.prototype.visitDoWhileLoop): Deleted.
        (Visitor.prototype.visitForLoop): Deleted.
        (Visitor.prototype.visitReturn): Deleted.
        (Visitor.prototype.visitContinue): Deleted.
        (Visitor.prototype.visitBreak): Deleted.
        (Visitor.prototype.visitIntLiteral): Deleted.
        (Visitor.prototype.visitIntLiteralType): Deleted.
        (Visitor.prototype.visitUintLiteral): Deleted.
        (Visitor.prototype.visitNullLiteral): Deleted.
        (Visitor.prototype.visitBoolLiteral): Deleted.
        (Visitor.prototype.visitNullType): Deleted.
        (Visitor.prototype.visitCallExpression): Deleted.
        (Visitor.prototype.visitLogicalNot): Deleted.
        (Visitor.prototype.visitFunctionLikeBlock): Deleted.
        * WebGPUShadingLanguageRI/WrapChecker.js:
        (WrapChecker.prototype.visitTypeVariable):
        (WrapChecker):

2017-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove duplicated test results from LayoutTest platform directories
        https://bugs.webkit.org/show_bug.cgi?id=176686

        Reviewed by Michael Catanzaro.

        After several rebaselines we might end up with the same result in the platform directory than the common result
        without noticing it. This patch adds a script to detect those cases and remove all duplicated results from the
        repository.

        * Scripts/check-for-duplicated-platform-test-results: Added.
        (check_duplicate):
        (check_duplicate.sha1):
        (platform_list):

2017-09-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        The EWS build system is forcing a non UTF-8 locale and breaks meson.
        https://bugs.webkit.org/show_bug.cgi?id=176761

        Reviewed by Michael Catanzaro.

        On 2011 in order to disable GCC smartquotes (UTF-8 pretty quotes)
        that were causing trouble with the commit-queue server, the tooling
        for the EWS bots started to force an LC_ALL=C locale.

        This was needed back then apparently because the commit-queue server
        was unable to handle properly UTF-8 text.

        6 years forward and none of the ports that commit-queue tests before
        landing a patch use GCC, but Clang. So this should not be an issue anymore.

        Forcing a non UTF-8 locale breaks the Meson build system (that the
        GTK/WPE ports use for some dependencies of its JHBuild dependencies
        local build system).
        It has also the potential to break things in subtle ways that are
        hard to debug and detect. So better stop doing this.

        This patch also changes TERM=none to TERM=dumb that is the proper
        way to disable VT100 codes (see bug 127922).

        * Scripts/webkitpy/common/system/environment.py:
        (Environment.to_dictionary):
        (Environment.disable_jhbuild_VT100_output):
        * Scripts/webkitpy/common/system/environment_unittest.py:
        (EnvironmentTest.test_disable_jhbuild_VT100_output):
        * Scripts/webkitpy/port/base.py:
        (Port._build_driver):
        (Port._build_image_diff):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_build_driver):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:

2017-09-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Run tests with G_DEBUG=fatal-criticals
        https://bugs.webkit.org/show_bug.cgi?id=176755

        Reviewed by Carlos Garcia Campos.

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

2017-09-12  Alex Christensen  <achristensen@webkit.org>

        Fix build after r221922.
        https://bugs.webkit.org/show_bug.cgi?id=176728

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[ModalDelegate _webViewRunModal:]):
        (-[ModalDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):
        svn-apply inserted the test too early in the file :(
        Shift it down to where all the used static variables are declared.

2017-09-12  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's runModal
        https://bugs.webkit.org/show_bug.cgi?id=176728
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[ModalDelegate _webViewRunModal:]):
        (-[ModalDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2017-09-12  Daniel Bates  <dabates@apple.com>

        REGRESSION (r215784): The title of right-to-left pages are empty
        https://bugs.webkit.org/show_bug.cgi?id=176746
        <rdar://problem/34211419>

        Reviewed by Brent Fulgham.

        Add unit test to ensure we do not regress StringWithDirection.truncateFromEnd().

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/StringWithDirection.cpp: Added.
        (TestWebKitAPI::TEST):

2017-09-12  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's decidePolicyForNotificationPermissionRequest
        https://bugs.webkit.org/show_bug.cgi?id=176768
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[NotificationDelegate initWithAllowNotifications:]):
        (-[NotificationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[NotificationDelegate _webView:requestNotificationPermissionForSecurityOrigin:decisionHandler:]):
        (TEST):

2017-09-12 Brent Fulgham  <bfulgham@apple.com>

        Show punycode to user if a URL mixes Armenian Seh or Vo with other scripts
        https://bugs.webkit.org/show_bug.cgi?id=176578
        <rdar://problem/33906231>

        Reviewed by Alex Christensen.

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

2017-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Freetype] Doesn't support coloured fonts
        https://bugs.webkit.org/show_bug.cgi?id=156579

        Reviewed by Michael Catanzaro.

        Bump webkitgtk-test-fonts to 0.0.6 version that includes the EmijoOne font.

        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:

2017-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support DataTransfer.setDragImage when starting a drag on iOS
        https://bugs.webkit.org/show_bug.cgi?id=176721
        <rdar://problem/34373660>

        Reviewed by Tim Horton.

        In DataInteractionSimulator, ask the UIDragInteractionDelegate (WKContentView) for targeted drag previews after
        retrieving UIDragItems during a lift. Remember these previews after the drag and drop simulation is complete, so
        API tests (currently, just DragLiftPreviewDataTransferSetDragImage) can verify that the generated drag previews
        are as expected.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DataTransfer-setDragImage.html: Added.

        Adds a new test harness containing 5 draggable elements, each generating a drag image using different codepaths.
        DragLiftPreviewDataTransferSetDragImage uses this page to check that the frame of the targeted drag preview in
        each scenario is as expected.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (checkCGRectIsEqualToCGRectWithLogging):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator liftPreviews]):

2017-09-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r221272): WKWebView gets stuck zoomed in if the web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=176767
        <rdar://problem/34196874>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm:
        (TEST):
        Add a test ensuring that override layout size persists through Web
        Content process crash.

2017-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Support tapping to add items to the current drag session in web content
        https://bugs.webkit.org/show_bug.cgi?id=176421
        <rdar://problem/31144674>

        Reviewed by Tim Horton.

        Adds a new drag and drop test that begins a drag on a text selection, adds an image and a link, and then drops
        into a contenteditable area. This verifies that the text, link and image are inserted into the editable area
        upon drop.

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

2017-09-11  Lucas Forschler  <lforschler@apple.com>

        bisect-builds: add --list option
        https://bugs.webkit.org/show_bug.cgi?id=174836

        Reviewed by Aakash Jain & Stephanie Lewis.

        * Scripts/bisect-builds:
        (parse_args): add --list option
        (minified_platforms): update supported platform list (add ios simulator)
        (print_list_and_exit): helper function to print list and exit

2017-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] ExternalSourceDataTransferItemGetAsEntry tests produce inconsistent results on test automation bots
        https://bugs.webkit.org/show_bug.cgi?id=176736

        Reviewed by Andy Estes and Megan Gardner.

        The test output dumped when dropping a file in DataTransferItem-getAsEntry.html should adhere to some deterministic order.
        Currently, this is not enforced, so on some systems, these tests fail due to expected test output being out of order. To
        fix this, simply have the test harness alphabetically sort the output before writing to the textarea.

        * TestWebKitAPI/Tests/WebKitCocoa/DataTransferItem-getAsEntry.html:
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-09-11  Ryosuke Niwa  <rniwa@webkit.org>

        webkitbot should recognize commands even when colon is omitted
        https://bugs.webkit.org/show_bug.cgi?id=176680
        <rdar://problem/29933898>

        Reviewed by Daniel Bates.

        Recognize the IRC command even when : and , were not present.
        Unfortunately, there is no unit test for this code at the moment.

        * Scripts/webkitpy/common/net/irc/ircbot.py:
        (IRCBot.on_pubmsg):

2017-09-11  Lucas Forschler  <lforschler@apple.com>

        bisect-builds doesn't work due to missing requests module
        https://bugs.webkit.org/show_bug.cgi?id=175709
        
        Reviewed by Ryosuke Niwa.

        * Scripts/bisect-builds: use urllib2 instead of the requests module.
        (get_s3_location_for_revision):
        (main):

2017-09-11  Filip Pizlo  <fpizlo@apple.com>

        WSL Substitution should probably wrap type variables of substituted types rather than just wrapping the whole type
        https://bugs.webkit.org/show_bug.cgi?id=176677

        Reviewed by Mylex Maxfield.
        
        This adds a checker that verifies that all type references and variable references are wrapped.
        
        Then this fixes errors found by that checker by making Substitution auto-wrap replacements rather than
        manually wrapping the outer type (for types) and cloning (for values).

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/AutoWrapper.js: Added.
        (AutoWrapper.prototype.visitVariableRef):
        (AutoWrapper.prototype.visitTypeRef):
        (AutoWrapper.prototype.visitConstexprTypeParameter):
        (AutoWrapper.prototype.visitFuncParameter):
        (AutoWrapper.prototype.visitVariableDecl):
        (AutoWrapper.prototype.visitStructType):
        (AutoWrapper.prototype.visitNativeType):
        (AutoWrapper):
        * WebGPUShadingLanguageRI/CheckWrapped.js:
        (checkExpressionWrapped):
        (checkProgramWrapped):
        (checkWrapped): Deleted.
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/ExpressionFinder.js: Added.
        (ExpressionFinder):
        (ExpressionFinder.prototype.visitFunc):
        (ExpressionFinder.prototype.visitFuncParameter):
        (ExpressionFinder.prototype.visitConstexprTypeParameter):
        (ExpressionFinder.prototype.visitAssignment):
        (ExpressionFinder.prototype.visitCallExpression):
        (ExpressionFinder.prototype.visitReturn):
        (ExpressionFinder.prototype.visitWhileLoop):
        (ExpressionFinder.prototype.visitDoWhileLoop):
        (ExpressionFinder.prototype.visitIfStatement):
        (ExpressionFinder.prototype.visitForLoop):
        (ExpressionFinder.prototype.visitVariableDecl):
        * WebGPUShadingLanguageRI/NativeFuncInstance.js:
        (NativeFuncInstance):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.substituteToUnification):
        (Node):
        (Node.prototype.clone): Deleted.
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js:
        (StructLayoutBuilder.prototype.visitReferenceType):
        (StructLayoutBuilder.prototype.visitField):
        (StructLayoutBuilder):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution):
        (Substitution.prototype.visitTypeRef):
        (Substitution.prototype.visitVariableRef):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_chainConstexpr):
        (TEST_chainGeneric):
        (TEST_chainStruct):
        (TEST_chainStructInvalid):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitNativeTypeInstance):
        * WebGPUShadingLanguageRI/WrapChecker.js:
        (WrapChecker.prototype._foundUnwrapped.originString):
        (WrapChecker.prototype._foundUnwrapped):
        (WrapChecker):

2017-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Fix multiple master.cfg unit test failures.
        https://bugs.webkit.org/show_bug.cgi?id=176745

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestFactory.__init__): Add missing ':'.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Update expected results for Windows and iOS build steps.

2017-09-11  Jonathan Bedard  <jbedard@apple.com>

        Older versions should adopt newer version's expectations on mac
        https://bugs.webkit.org/show_bug.cgi?id=176699
        <rdar://problem/34367907>

        Reviewed by Alexey Proskuryakov.

        Before:
                mac-elcapitan-wk2
                mac-elcapitan
                mac-wk2
                mac
                wk2
        After:
                mac-elcapitan-wk2
                mac-elcapitan
                mac-sierra-wk2
                mac-sierra
                mac-wk2
                mac
                wk2

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): Use VERSION_FALLBACK_ORDER to have old
        versions inherit expectations from newer versions.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_layout_test_searchpath_with_apple_additions): Check new behavior
        with older versions inheriting expectations from newer versions.

2017-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Skip JSC test wsl-tests.yaml/Test.js
        https://bugs.webkit.org/show_bug.cgi?id=176727

        Unreviewed test gardening.

        * WebGPUShadingLanguageRI/wsl-tests.yaml:

2017-09-11  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's decidePolicyForGeolocationPermissionRequest
        https://bugs.webkit.org/show_bug.cgi?id=176642
        <rdar://problem/29270035>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[GeolocationDelegate initWithAllowGeolocation:]):
        (-[GeolocationDelegate _webView:requestGeolocationPermissionForFrame:decisionHandler:]):
        (-[GeolocationDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-09-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Elements in the DOM with the `draggable` attribute should be draggable
        https://bugs.webkit.org/show_bug.cgi?id=176664
        <rdar://problem/32596156>

        Reviewed by Tim Horton.

        Adds a new API test checking that elements marked as drag sources via the `draggable` attribute can be dragged
        with a non-null drag preview. Additionally, refactor the drag and drop simulator to not plumb drag/drop
        interaction delegate calls through to the WKContentView via -_simulate*-prefixed testing SPI, but rather
        by grabbing the WKWebView's drag and drop interaction delegates (i.e. the WKContentView) and calling delegate
        methods directly. This avoids requiring boilerplate plumbing on WKWebView and WKContentView for each of the drag
        and drop delegate methods, so these have been removed from WKWebView and WKContentView.

        Additionally, renames MockDataOperationSession and MockDataInteractionSession to MockDragSession and
        MockDropSession, respectively, and adjusts their ivars on DataInteractionSimulator to match.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/custom-draggable-div.html: Added.

        Add a new test harness covering dragging and dropping elements with the draggable attribute, using DataTransfer
        API (setData and getData) as well.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[WKWebView dropInteractionDelegate]):
        (-[WKWebView dragInteractionDelegate]):
        (-[WKWebView dropInteraction]):
        (-[WKWebView dragInteraction]):

        Add testing utilities to ask a WKWebView for information about its drag/drop interactions and delegates. In this
        case, this will return the WKWebView's WKContentView.

        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator simulateAllTouchesCanceled:]):
        (-[DataInteractionSimulator runFrom:to:additionalItemRequestLocations:]):
        (-[DataInteractionSimulator _concludeDataInteractionAndPerformOperationIfNecessary]):
        (-[DataInteractionSimulator _sendQueuedAdditionalItemRequest]):
        (-[DataInteractionSimulator _advanceProgress]):

        When beginning a drag session, ask the delegate for targeted lift previews and verify that these are non-null.
        This check would fail prior to the tweak in DragDropInteractionState in this patch.

        (-[DataInteractionSimulator _webView:showCustomSheetForElement:]):
        (-[MockDataOperationSession initWithProviders:location:window:allowMove:]): Deleted.
        (-[MockDataOperationSession session]): Deleted.
        (-[MockDataOperationSession isLocal]): Deleted.
        (-[MockDataOperationSession progress]): Deleted.
        (-[MockDataOperationSession setProgressIndicatorStyle:]): Deleted.
        (-[MockDataOperationSession progressIndicatorStyle]): Deleted.
        (-[MockDataOperationSession operationMask]): Deleted.
        (-[MockDataOperationSession localDragSession]): Deleted.
        (-[MockDataOperationSession hasItemsConformingToTypeIdentifier:]): Deleted.
        (-[MockDataOperationSession canCreateItemsOfClass:]): Deleted.
        (-[MockDataOperationSession loadObjectsOfClass:completion:]): Deleted.
        (-[MockDataInteractionSession initWithWindow:allowMove:]): Deleted.
        (-[MockDataInteractionSession localOperationMask]): Deleted.
        (-[MockDataInteractionSession externalOperationMask]): Deleted.

        Replace various places where we called -_simulate* methods on WKWebView with calls to the
        UIDragInteractionDelegate or UIDropInteractionDelegate (the WKContentView) instead. Also, adjust for some
        mechanical renaming of drag and drop sessions.

        (-[MockDataInteractionSession session]): Deleted.
        * TestWebKitAPI/ios/UIKitSPI.h:

2017-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Make the WPT entry point for LayoutTests/http/wpt more discoverable
        https://bugs.webkit.org/show_bug.cgi?id=176494

        Reviewed by Youenn Fablet.

        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        (run_server):
        Output a tip for how to access the http/wpt tests.

2017-09-11  Mark Lam  <mark.lam@apple.com>

        Turn on exception scope verification for JSC tests.
        https://bugs.webkit.org/show_bug.cgi?id=162351
        <rdar://problem/29563911>

        Reviewed by Saam Barati.

        Added the option to --validateExceptionChecks=true option to BASE_OPTIONS in
        run-jsc-stress-tests.  This turns on exception scope verification on JSC test
        runs (which currently does not include testapi).

        Some stats on time to run JSC stress and mozilla tests:
        1. Release build w/o --validateExceptionChecks=true: real 16m22.544s, user 156m24.080s, sys 123m3.649s
        2. Debug build w/o --validateExceptionChecks=true: real 78m34.206s, user 1661m57.008s, sys 73m21.177s
        3. Debug build w/ --validateExceptionChecks=true: real 77m41.106s, user 1656m13.924s, sys 73m42.309s
        4. Debug build w/ --validateExceptionChecks=true --dumpSimulatedThrows=true: real 92m56.918s, user 2012m56.441s, sys 75m14.174s

        The stats shows that (2) and (3) has effectively no time difference.  Hence, the
        cost of enabling --validateExceptionChecks=true is not significant.

        It would be nice to enable --dumpSimulatedThrows=true as well, but (4) is about
        21% slower than (3).  To avoid making debug test runs a lot slower, we'll leave
        --dumpSimulatedThrows=true off.  We can manually add that when we see a regression
        and need to debug the issue.  Otherwise, we wont pay the price for it.

        * Scripts/run-jsc-stress-tests:

2017-09-11  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL should support for loops
        https://bugs.webkit.org/show_bug.cgi?id=176682

        Reviewed by Filip Pizlo.

        Follows the pattern of the existing infrastructure of while loops.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitForLoop):
        * WebGPUShadingLanguageRI/ForLoop.js: Copied from Tools/WebGPUShadingLanguageRI/LoopChecker.js.
        (ForLoop):
        (ForLoop.prototype.get origin):
        (ForLoop.prototype.get initialization):
        (ForLoop.prototype.get condition):
        (ForLoop.prototype.get increment):
        (ForLoop.prototype.get body):
        (ForLoop.prototype.toString):
        * WebGPUShadingLanguageRI/LoopChecker.js:
        (LoopChecker.prototype.visitForLoop):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitForLoop):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseFor):
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker.prototype._isBoolCastFromLiteralTrue):
        (ReturnChecker.prototype.visitWhileLoop):
        (ReturnChecker.prototype.visitDoWhileLoop):
        (ReturnChecker.prototype.visitForLoop):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitForLoop):
        (Rewriter):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_forLoop):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitForLoop):

2017-09-11  Robin Morisset  <rmorisset@apple.com>

        Just added myself to the contributors.json file as a committer

        Unreviewed

2017-09-10  Filip Pizlo  <fpizlo@apple.com>

        IntLiteral should prefer int32 during overload resolution
        https://bugs.webkit.org/show_bug.cgi?id=176675

        Reviewed by Myles Maxfield.
        
        This makes intLiteralType prefer to resolve to int over other types.
        
        This also adds tests that if you pass intLiteral to T, then you can make it work by saying
        int(intLiteral).

        * WebGPUShadingLanguageRI/IntLiteralType.js:
        (IntLiteralType):
        (IntLiteralType.prototype.conversionCost):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.conversionCost):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitIntLiteralType):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_intOverloadResolution):
        (TEST_intOverloadResolutionReverseOrder):
        (TEST_intOverloadResolutionGeneric):
        (TEST_intLiteralGeneric):
        * WebGPUShadingLanguageRI/UnificationContext.js:
        (UnificationContext.prototype.get conversionCost):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitIntLiteralType):

2017-09-10  Filip Pizlo  <fpizlo@apple.com>

        WSL should be able to handle a simple constexpr type parameter
        https://bugs.webkit.org/show_bug.cgi?id=176676

        Reviewed by Myles Maxfield.
        
        This adds a test that uses a constexpr type parameter, and then fixed enough bugs to get this to work.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype.resolve):
        * WebGPUShadingLanguageRI/CheckWrapped.js: Added.
        (checkWrapped):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitCallExpression):
        (Evaluator):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.substituteToUnification):
        (Node.prototype.clone):
        (Node):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution):
        (Substitution.prototype.visitVariableRef):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleConstexpr):
        * WebGPUShadingLanguageRI/WrapChecker.js: Added.
        (WrapChecker):
        (WrapChecker.prototype.visitVariableRef):
        (WrapChecker.prototype.visitTypeRef):
        (WrapChecker.prototype.visitIntLiteral):
        (WrapChecker.prototype._foundUnwrapped):
        (WrapChecker.visitConstexprTypeParameter):
        (WrapChecker.prototype.visitFuncParameter):
        (WrapChecker.prototype.visitVariableDecl):
        (WrapChecker.prototype.visitStructType):
        (WrapChecker.prototype.visitNativeType):

2017-09-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Bump freetype version to 2.8.0
        https://bugs.webkit.org/show_bug.cgi?id=176501

        Reviewed by Michael Catanzaro.

        Bump freetype on WPE like r221670 did on GTK.

        * wpe/jhbuild.modules:
        * wpe/patches/freetype6-2.4.11-truetype-font-height-fix.patch: Removed.

2017-09-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION: [GTK] Generated HTML API documentation is missing descriptions
        https://bugs.webkit.org/show_bug.cgi?id=176667

        Reviewed by Michael Catanzaro.

        This is happening since we moved the implementation files to glib dirs. The generate-gtkdoc script assumes that
        header and implementation files are always in the same directory. To reduce the input we pass to gtk-doc we
        ignore cpp files for which there isn't a public header. The code to do this check doesn't consider cpp files in
        a different directory than the header file. It also assumes that header and cpp files have the same filename
        except for the extension, which is true in all cases but WebKitWebView that we have two files WebKitWebView.cpp
        and WebKitWebViewGtk.cpp.

        * gtk/generate-gtkdoc:
        (files_to_ignore): Check also cpp files with the Gtk suffix.
        (files_to_ignore.add_file_if_exists): Check if a file with the given name exists in any of the source dirs.

2017-09-10  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL should support while loops
        https://bugs.webkit.org/show_bug.cgi?id=176581

        Reviewed by Filip Pizlo.

        There are a few interesting pieces to this patch:
        1. Because the evaluator is just a node-based descent through the tree, the implementation of break
        and continue are just "throw".
        2. The ReturnChecker now has to return a three-state enum because of nested blocks. The outer block
        cares about if the inner block has "break" as opposed to it having no returns nor breaks/continues.
        3. ReturnChecker will treat "while (true)" the same as { }, but will not descend deeper for things
        like "while (3 == 3)".
        4. This patch also adds a few more boolean conditional functions like operator<().
        5. I added another pass which makes sure there are no bare break/return keywords outside of loops.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Break.js: Copied from Tools/WebGPUShadingLanguageRI/CheckUnreachableCode.js.
        (Break):
        (Break.prototype.get origin):
        (Break.prototype.toString):
        * WebGPUShadingLanguageRI/CheckLoops.js: Copied from Tools/WebGPUShadingLanguageRI/CheckReturns.js.
        (checkLoops):
        * WebGPUShadingLanguageRI/CheckReturns.js:
        (checkReturns):
        * WebGPUShadingLanguageRI/CheckUnreachableCode.js:
        (checkUnreachableCode):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Continue.js: Copied from Tools/WebGPUShadingLanguageRI/CheckReturns.js.
        (Continue):
        (Continue.prototype.get origin):
        (Continue.prototype.toString):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitWhileLoop):
        (Evaluator.prototype.visitBreak):
        (Evaluator.prototype.visitContinue):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/LoopChecker.js: Copied from Tools/WebGPUShadingLanguageRI/ReturnChecker.js.
        (LoopChecker):
        (LoopChecker.prototype.visitFuncDef):
        (LoopChecker.prototype.visitWhileLoop):
        (LoopChecker.prototype.visitBreak):
        (LoopChecker.prototype.visitContinue):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitWhileLoop):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.visit):
        * WebGPUShadingLanguageRI/Parse.js:
        (parsePossibleRelationalInequality):
        (parseBreak):
        (parseContinue):
        (parseWhile):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker):
        (ReturnChecker.prototype.visitFuncDef):
        (ReturnChecker.prototype.visitBlock):
        (ReturnChecker.prototype.visitIfStatement):
        (ReturnChecker.prototype.visitWhileLoop):
        (ReturnChecker.prototype.visitReturn):
        (ReturnChecker.prototype.visitBreak):
        (ReturnChecker.prototype.visitContinue):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitContinue):
        (Rewriter.prototype.visitBreak):
        (Rewriter.prototype.visitWhileLoop):
        (Rewriter):
        * WebGPUShadingLanguageRI/StandardLibraryPrologue.js:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_returnIf):
        (TEST_simpleWhile):
        * WebGPUShadingLanguageRI/UnreachableCodeChecker.js:
        (UnreachableCodeChecker):
        (UnreachableCodeChecker.prototype.visitBlock):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitWhileLoop):
        (Visitor.prototype.visitContinue):
        (Visitor.prototype.visitBreak):
        * WebGPUShadingLanguageRI/WhileLoop.js: Copied from Tools/WebGPUShadingLanguageRI/CheckReturns.js.
        (WhileLoop):
        (WhileLoop.prototype.get origin):
        (WhileLoop.prototype.get conditional):
        (WhileLoop.prototype.get body):
        (WhileLoop.prototype.toString):

2017-09-07  Filip Pizlo  <fpizlo@apple.com>

        WSL overload resolution should not be cascading
        https://bugs.webkit.org/show_bug.cgi?id=176333

        Reviewed by Myles Maxfield.
        
        This removes the cascading nature of overload resolution that WSL used to have, and replaces it with
        something C++-like. If there are multiple overload candidates that match the callsite, then we resolve
        them against each other. Anytime a function cannot be resolved onto another function, it is removed,
        since this means that this function is in some way more general than the other one, and we are just
        looking for the most specific function.
        
        If this process ends with only one function being selected, then we succeed, else we fail.
        
        Also changed the syntax for defining generic casts to:
        
        operator<T> Thingy<T>(things)
        
        Also fixed parsing of cast expressions. It's now possible to say a cast expression in WSL.
        
        The removal of cascading causes some problems. For example, the following two operators in our standard
        library are ambiguous for bool(bool):
        
        operator<T> T(T)
        operator<T:Equatable> bool(T)
        
        I think that what we really want is to say that the following operators are restricted to the standard
        library:
        
        operator<T> T()
        operator<T> T(T)
        
        It should not be possible to ever overload these.
        
        These changes are mostly tested by existing tests and the changes in the standard library, which has to
        be parsed for every test.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/ArrayRefType.js:
        (ArrayRefType.prototype.unifyImpl):
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression):
        (CallExpression.prototype.get isCast):
        (CallExpression.prototype.get returnType):
        (CallExpression.prototype.resolve):
        (CallExpression.prototype.becomeCast):
        (CallExpression.prototype.setCastData):
        (CallExpression.prototype.toString):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitLogicalNot):
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.get returnTypeForOverloadResolution):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.FindTypeVariable.prototype.visitTypeVariable):
        (FuncInstantiator.prototype.getUnique.FindTypeVariable):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution.prototype.visitCallExpression):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution):
        * WebGPUShadingLanguageRI/FunctionLikeBlock.js:
        (FunctionLikeBlock.prototype.toString):
        (FunctionLikeBlock):
        * WebGPUShadingLanguageRI/InferTypesForCall.js: Added.
        (inferTypesForCall):
        * WebGPUShadingLanguageRI/Inline.js:
        (resolveInlinedFunction):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer):
        (Lexer.prototype.next):
        * WebGPUShadingLanguageRI/NameContext.js:
        (NameContext):
        (NameContext.prototype.mapFor):
        (NameContext.prototype.add):
        (NameContext.prototype.get let):
        (NameContext.prototype.Symbol.iterator):
        (NameContext.get currentStatement): Deleted.
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProgram):
        (NameResolver.prototype.determinePossibleOverloads):
        (NameResolver.prototype.visitProtocolFuncDecl):
        (NameResolver.prototype.visitCallExpression):
        (NameResolver):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.visit):
        * WebGPUShadingLanguageRI/Parse.js:
        (parsePossiblePrefix):
        (parseFuncDecl):
        (parseNativeFunc):
        (parseNative):
        (parsePreferredFuncDef):
        (parse):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/Program.js:
        (Program.prototype.resolveFuncOverload): Deleted.
        (Program.prototype.get nameContext): Deleted.
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        (ProtocolDecl.prototype.inherits):
        (ProtocolDecl.prototype.hasHeir):
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.unifyImpl):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitProtocolFuncDecl):
        (Rewriter.prototype.processDerivedCallData):
        (Rewriter.prototype.visitCastExpression): Deleted.
        * WebGPUShadingLanguageRI/StandardLibrary.js: Added.
        (preferred.operator.T.T):
        (operator.T.Equatable.bool):
        * WebGPUShadingLanguageRI/StandardLibraryEpilogue.js: Removed.
        * WebGPUShadingLanguageRI/StandardLibraryPrologue.js: Removed.
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (doLex):
        (checkUInt):
        (checkBool):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.prototype.toString):
        (TypeRef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitCallExpression):
        (Visitor.prototype.visitCastExpression): Deleted.

2017-09-10  Brady Eidson  <beidson@apple.com>

        Try to avoid creating the default WKWebsiteDataStore until its actually needed.
        <rdar://problem/33164453> and https://bugs.webkit.org/show_bug.cgi?id=176551

        Reviewed by Tim Horton.

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

2017-09-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve Ctrl+W and Ctrl+Q shortcuts in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=176619

        Reviewed by Carlos Garcia Campos.

        There are two different problems here. First, Ctrl+W is closing the entire window. That made
        sense when I implemented the shortcut a couple years ago, but now MiniBrowser supports tabs
        and it should really close only one single tab. Fix that.

        Next, the keyboard shortcuts are not using webkit_web_view_try_close() and so are bypassing
        onbeforeunload handlers, which are respected when closing with the mouse. Fix that too.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowTryCloseCurrentWebView):
        (browserWindowTryClose):
        (browser_window_init):

2017-09-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Add "if" statements to WSL
        https://bugs.webkit.org/show_bug.cgi?id=176294

        Reviewed by Filip Pizlo.
        
        Rolling back in after skipping Test.js on debug.

        Fairly straightforward implementation. ReturnChecker only returns true iff there is an else block,
        and both the if body and the else body recursively return true.

        In order to accept both syntaxes:
        if (foo)
            bar;
        ... and ...
        if (foo) {
            bar;
        }
        This patch lets parseStatement() call parseBlock(). This means that the following is valid:
        int x = 7;
        if (foo) {
            int x = 8;
            // x is 8 here!
        }
        // x is 7 here!

        This production means that these blocks don't require "if" statements, so you can just have:
        int foo() {
           int x = 7;
           {
               int x = 8;
               // x is 8 here!
           }
           // x is 7 here!
        }

        However, this patch doesn't touch the following use-case:
        if (int x = bar()) {
            // use x here
        }

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitIfStatement):
        * WebGPUShadingLanguageRI/IfStatement.js: Copied from Tools/WebGPUShadingLanguageRI/TypeDef.js.
        (IfStatement):
        (IfStatement.prototype.get origin):
        (IfStatement.prototype.get conditional):
        (IfStatement.prototype.get body):
        (IfStatement.prototype.get elseBody):
        (IfStatement.prototype.toString):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitIfStatement):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTypeParameters):
        (parseIfStatement):
        (parseStatement):
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker.prototype.visitIfStatement):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitIfStatement):
        (Rewriter):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_variableShadowing):
        (TEST_ifStatement):
        (TEST_ifElseStatement):
        (TEST_ifElseIfStatement):
        (TEST_ifElseIfElseStatement):
        (TEST_returnIf):
        (TEST_protocolMonoPolySigDoublePolyDefExplicit): Deleted.
        * WebGPUShadingLanguageRI/TypeDef.js:
        (TypeDef.prototype.toString):
        (TypeDef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitIfStatement):

2017-09-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed, fix typo forwad -> forward

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowUpdateNavigationActions):
        (backForwardlistChanged):
        (browserWindowSwitchTab):
        (backForwadlistChanged): Deleted.

2017-09-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221801.

        This change introduced a webkitpy test failure.

        Reverted changeset:

        "bisect-builds doesn't work due to missing requests module"
        https://bugs.webkit.org/show_bug.cgi?id=175709
        http://trac.webkit.org/changeset/221801

2017-09-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221776.

        This change caused wsl-tests.yaml/Test.js to time out on Debug
        JSC bots.

        Reverted changeset:

        "Add "if" statements to WSL"
        https://bugs.webkit.org/show_bug.cgi?id=176294
        http://trac.webkit.org/changeset/221776

2017-09-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        MiniBrowser closes tab instead of window on close signal
        https://bugs.webkit.org/show_bug.cgi?id=176587

        Reviewed by Carlos Garcia Campos.

        This has been broken since we added support for multiple tabs. We need to run try_close for
        every open tab, not just the current one. If there are no onbeforeonload handlers then all
        tabs will close; if there are some, then they'll be respected, but the remaining tabs will
        be closed.

        Note that we cannot simply iterate through the tabs of the GtkNotebook, as we'd be deleting
        tabs as we go, so save all the tabs into a separate list and then try to close each in turn.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowTryClose):
        (browserWindowDeleteEvent):

2017-09-09  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix.

        * TestWebKitAPI/PlatformWPE.cmake:
        Link WebCore archives into the TestWebCore binary as a group.

2017-09-08  Lucas Forschler  <lforschler@apple.com>

        bisect-builds doesn't work due to missing requests module
        https://bugs.webkit.org/show_bug.cgi?id=175709
        
        Reviewed by Ryosuke Niwa.

        * Scripts/bisect-builds: update import to webkitpy.thirdparty.autoinstalled
        * Scripts/webkitpy/thirdparty/__init__.py: add logic to install requests module.
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook):
        (AutoinstallImportHook._install_requests):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports):

2017-09-08  Lucas Forschler  <lforschler@apple.com>

        Test commit to verify trac sync is working.

2017-09-08  Lucas Forschler  <lforschler@apple.com>

        Test commit to verify git sync is working.

2017-09-08  Lucas Forschler  <lforschler@apple.com>

        bisect-builds should not print out extracting command
        https://bugs.webkit.org/show_bug.cgi?id=175632
        
        Reviewed by Alexey Proskuryakov.

        * Scripts/bisect-builds:
        (extract_archive):

2017-09-07  Joseph Pecoraro  <pecoraro@apple.com>

        WebKit should claim that it can show responses for a broader range of JSON MIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=176252
        <rdar://problem/34212885>

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKNavigationResponse.mm: Added.
        (-[WKNavigationResponseTestNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[WKNavigationResponseTestNavigationDelegate webView:didCommitNavigation:]):
        (-[WKNavigationResponseTestSchemeHandler webView:startURLSchemeTask:]):
        (-[WKNavigationResponseTestSchemeHandler webView:stopURLSchemeTask:]):
        (TEST):
        Test for canShowMIMEType with multiple JSON mime types and a garbage mime type.
        Previously canShowMIMEType would have been YES for "application/json" but
        NO for "application/vnd.api+json". Now it shows YES for both.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWPE.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/MIMETypeRegistry.cpp: Added.
        (TestWebKitAPI::TEST):
        Tests for MIMETypeRegistry's dynamic JSON mime type detection.

2017-09-07  Matthew Stewart  <matthew_r_stewart@apple.com>

        Add Live PLT implemented with WebDriver
        https://bugs.webkit.org/show_bug.cgi?id=176436

        Reviewed by Stephanie Lewis.

        Adds a new PLT that runs on live websites.

        * Scripts/run-webdriver-plt.py: Added.
        (parse_args):
        (start):
        (make_suites):
        (main):
        * Scripts/webkitpy/webdriver_plt/__init__.py: Added.
        * Scripts/webkitpy/webdriver_plt/liveplt.py: Added.
        (PageLoadTest):
        (PageLoadTest.__init__):
        (PageLoadTest.start):
        (PageLoadTest.run_suite):
        (PageLoadTest._get_driver_for_browser):
        (PageLoadTest._setup_browser_window):
        (PageLoadTest.run_one_test):
        (PageLoadTest.get_results):
        * Scripts/webkitpy/webdriver_plt/pltresults.py: Added.
        (PLTResults):
        (PLTResults.__init__):
        (PLTResults.__add__):
        (PLTResults.add_timing_result):
        (PLTResults.mean):
        (PLTResults.geometric_mean):
        (PLTResults.mean_coef_variance):
        (PLTResults.print_results):
        (PLTResults.print_url_results):
        (PLTResults._format_time):
        * Scripts/webkitpy/webdriver_plt/suites/__init__.py: Added.
        * Scripts/webkitpy/webdriver_plt/suites/arabic.suite: Added.
        * Scripts/webkitpy/webdriver_plt/suites/cjk.suite: Added.
        * Scripts/webkitpy/webdriver_plt/suites/news.suite: Added.
        * Scripts/webkitpy/webdriver_plt/suites/search.suite: Added.
        * Scripts/webkitpy/webdriver_plt/suites/shopping.suite: Added.
        * Scripts/webkitpy/webdriver_plt/suites/social.suite: Added.
        * Scripts/webkitpy/webdriver_plt/suites/suite.py: Added.
        (Suite):
        (Suite.__init__):
        (Suite.get_available_suites):
        * Scripts/webkitpy/webdriver_plt/urlresults.py: Added.
        (URLResults):
        (URLResults.__init__):
        (URLResults.__add__):
        (URLResults.mean):
        (URLResults.coef_variance):
        (URLResults.print_results):
        (URLResults._format_time):

2017-09-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Add "if" statements to WSL
        https://bugs.webkit.org/show_bug.cgi?id=176294

        Reviewed by Filip Pizlo.

        Fairly straightforward implementation. ReturnChecker only returns true iff there is an else block,
        and both the if body and the else body recursively return true.

        In order to accept both syntaxes:
        if (foo)
            bar;
        ... and ...
        if (foo) {
            bar;
        }
        This patch lets parseStatement() call parseBlock(). This means that the following is valid:
        int x = 7;
        if (foo) {
            int x = 8;
            // x is 8 here!
        }
        // x is 7 here!

        This production means that these blocks don't require "if" statements, so you can just have:
        int foo() {
           int x = 7;
           {
               int x = 8;
               // x is 8 here!
           }
           // x is 7 here!
        }

        However, this patch doesn't touch the following use-case:
        if (int x = bar()) {
            // use x here
        }

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitIfStatement):
        * WebGPUShadingLanguageRI/IfStatement.js: Copied from Tools/WebGPUShadingLanguageRI/TypeDef.js.
        (IfStatement):
        (IfStatement.prototype.get origin):
        (IfStatement.prototype.get conditional):
        (IfStatement.prototype.get body):
        (IfStatement.prototype.get elseBody):
        (IfStatement.prototype.toString):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitIfStatement):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTypeParameters):
        (parseIfStatement):
        (parseStatement):
        * WebGPUShadingLanguageRI/ReturnChecker.js:
        (ReturnChecker.prototype.visitIfStatement):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitIfStatement):
        (Rewriter):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_variableShadowing):
        (TEST_ifStatement):
        (TEST_ifElseStatement):
        (TEST_ifElseIfStatement):
        (TEST_ifElseIfElseStatement):
        (TEST_returnIf):
        (TEST_protocolMonoPolySigDoublePolyDefExplicit): Deleted.
        * WebGPUShadingLanguageRI/TypeDef.js:
        (TypeDef.prototype.toString):
        (TypeDef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitIfStatement):

2017-09-07  Lucas Forschler  <lforschler@apple.com>

        Test commit after server upgrade from subversion 1.9.5 to 1.9.7

2017-09-07  Chris Dumez  <cdumez@apple.com>

        [WK2] Add C API to retrieve the originating page of a WKDownload
        https://bugs.webkit.org/show_bug.cgi?id=176557
        <rdar://problem/34314776>

        Reviewed by Alex Christensen.

        Add layout test coverage for both the ObjC and C API.

        * TestWebKitAPI/Tests/WebKit/mac/ContextMenuDownload.mm:
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[RedirectedDownloadDelegate _downloadDidStart:]):
        (TEST):

2017-09-07  Filip Pizlo  <fpizlo@apple.com>

        WSL Node.prototype.visit should probably do memoization
        https://bugs.webkit.org/show_bug.cgi?id=176286

        Reviewed by Mark Lam.
        
        Visitors can sometimes revisit the same thing. For example, we may visit a FuncDef because it belongs
        to Program and we may visit it again because a CallExpression resolved to it. That's just plain silly.
        
        Our tests don't currently do this, so it's not a performance problem, yet. Also, we usually avoid that
        kind of repetitive visiting inside the visitor implementations. But as far as I can tell, this is an
        emergent property rather than a deliberate design.
        
        This change just makes the policy super explicit. If you visit something more than once with the same
        visitor, you get the same answer back. This is achieved by means of a memo table inside each visitor.
        
        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.visit):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor):
        * WebGPUShadingLanguageRI/VisitorBase.js: Added.
        (VisitorBase):

2017-09-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Directory Upload] Extend drag and drop support to iOS
        https://bugs.webkit.org/show_bug.cgi?id=176492
        <rdar://problem/34291584>

        Reviewed by Tim Horton.

        Adds two new iOS drag and drop unit tests, which both exercise the DataTransferItem.webKitGetAsEntry codepath
        upon drop. (...)GetFolderAsEntry creates a new folder in the temporary directory and uses it to generate an item
        provider. This item provider is then dropped over a custom drop handling element, which writes information about
        the exposed FileSystemEntries into a textarea. (...)ExternalSourceDataTransferItemGetPlainTextFileAsEntry does
        something similar, except that it only drops a plain text file instead.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/DataTransferItem-getAsEntry.html: Added.

        Introduce a new test page that dumps information about DataTransferItems' file system entries upon drop.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (runTestWithTemporaryTextFile):
        (runTestWithTemporaryFolder):

        Introduce helpers to set up and tear down temporary files and folders over the duration of a test.

        (TestWebKitAPI::setUpTestWebViewForDataTransferItems):
        (TestWebKitAPI::TEST):

2017-09-07  Filip Pizlo  <fpizlo@apple.com>

        WSL should check recursion
        https://bugs.webkit.org/show_bug.cgi?id=176553

        Reviewed by Michael Saboff and Mark Lam.
        
        This adds a recursion checker. Previously, we would only check for recursion during inlining, but that
        generally only happens when we call the function.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CheckRecursion.js: Added.
        (checkRecursion):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/RecursionChecker.js: Added.
        (RecursionChecker):
        (RecursionChecker.prototype.visitFuncDef):
        (RecursionChecker.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleRecursion):

2017-09-07  Chris Dumez  <cdumez@apple.com>

        [WK2] Notify client when downloads are redirected
        https://bugs.webkit.org/show_bug.cgi?id=176481
        <rdar://problem/34309065>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
        (-[UIDownloadAsFileTestDelegate _webView:contextMenu:forElement:]):
        (-[RedirectedDownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[RedirectedDownloadDelegate _download:didReceiveServerRedirectToURL:]):
        (-[RedirectedDownloadDelegate _downloadDidFinish:]):
        (TEST):
        Add API test coverage.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::downloadDidReceiveServerRedirectToURL):
        * WebKitTestRunner/TestController.h:
        Add layout test infrastructure.

2017-09-07  Per Arne Vollan  <pvollan@apple.com>

        [Win] fast/canvas/2d.getPath.modification.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=176534

        Reviewed by Alex Christensen.

        We need to enable Inspector additions at runtime in order to expose the getPath function.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2017-09-07  Filip Pizlo  <fpizlo@apple.com>

        WSL tests should run in run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=176550

        Reviewed by Keith Miller.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * WebGPUShadingLanguageRI/wsl-tests.yaml: Added.

2017-09-07  Lucas Forschler  <lforschler@apple.com>

        bisect-builds started failing with invalid json
        https://bugs.webkit.org/show_bug.cgi?id=176478
        
        Once we hit 1000 items in our dynamoDB, we ran into an upper limit on the AWS API Gateway looping mechanism. 
        This prevented us from doing a body mapping template to reformat the json. This fix is to simply return the raw json, 
        and adjust the json parsing in our code. The AWS rest API has been fixed, and updated to v2. 
        
        This change is for the script which operates against the endpoint.
        
        Reviewed by Aakash Jain.

        * Scripts/bisect-builds:
        (get_sorted_revisions):

2017-09-07  Filip Pizlo  <fpizlo@apple.com>

        [WSL] Rationalize how protocol inheritance deals with type parameters
        https://bugs.webkit.org/show_bug.cgi?id=176334

        Reviewed by Mark Lam.
        
        This adds a bunch of tests for structs, protocols, and functions interacting in interesting
        ways. The most complex of these tests triggers the case where the protocol contains a function
        with one type parameter and the real function has more than one. This should give a WTypeError,
        and now it does.
        
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        (ProtocolDecl.prototype.hasHeir): Fix the handling of a mismatch of number of type parameters by actually passing the type parameters and then correctly handling the error.
        * WebGPUShadingLanguageRI/Test.js: Add a bunch of tests for this case and a lot of other protocol cases.
        (TEST_protocolMonoSigPolyDef):
        (TEST_protocolPolySigPolyDef):
        (TEST_protocolDoublePolySigDoublePolyDef):
        (TEST_protocolDoublePolySigDoublePolyDefExplicit):
        (TEST_protocolMonoPolySigDoublePolyDefExplicit):
        * WebGPUShadingLanguageRI/TypeVariable.js:
        (TypeVariable.prototype.get origin): This wasn't implemented before, which made error reporting harder.

2017-09-07  Per Arne Vollan  <pvollan@apple.com>

        [Win] Dashboard test is failing.
        https://bugs.webkit.org/show_bug.cgi?id=176527

        Reviewed by Brent Fulgham.

        Skip test on Windows since WebKitTestRunner is required, but not built on Windows.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (TestFactory.__init__):

2017-09-07  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][CMake] Add "dist" and "distcheck" targets
        https://bugs.webkit.org/show_bug.cgi?id=176448

        Reviewed by Carlos Garcia Campos.

        Add "dist" and "distcheck" CMake targets, which create release tarballs.
        These are available only when configuring with -DDEVELOPER_MODE=TRUE.

        * wpe/manifest.txt.in: Added.

2017-09-07  Per Arne Vollan  <pvollan@apple.com>

        [Win] Enable DatatransferItems in DRT.
        https://bugs.webkit.org/show_bug.cgi?id=176424

        Reviewed by Brent Fulgham.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2017-09-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump libxml2 version to 1.9.5
        https://bugs.webkit.org/show_bug.cgi?id=176502

        Reviewed by Carlos Alberto Lopez Perez.

        It has been released very recently, but it fixes the issues that prevented us from upgrading to 1.9.4.

        * gtk/jhbuild.modules:

2017-09-06  Joseph Pecoraro  <pecoraro@apple.com>

        Remove new-run-webkit-httpd as it appears to be old
        https://bugs.webkit.org/show_bug.cgi?id=176493

        Reviewed by Alexey Proskuryakov.

        * Scripts/new-run-webkit-httpd: Removed.

2017-09-06  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's pageDidScroll
        https://bugs.webkit.org/show_bug.cgi?id=176482
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[DidScrollDelegate _webViewDidScroll:]):
        (TEST):

2017-09-06  Eric Carlson  <eric.carlson@apple.com>

        Require LoggingHelper overrides to provide identifier
        https://bugs.webkit.org/show_bug.cgi?id=176477

        Reviewed by Jer Noble.

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

2017-09-06  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's pinnedStateDidChange
        https://bugs.webkit.org/show_bug.cgi?id=176474
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PinnedStateObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST):

2017-09-06  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r221694.

        broke build

        Reverted changeset:

        "Add WKUIDelegatePrivate equivalent of WKPageUIClient's
        pinnedStateDidChange"
        https://bugs.webkit.org/show_bug.cgi?id=176474
        http://trac.webkit.org/changeset/221694

2017-09-06  Per Arne Vollan  <pvollan@apple.com>

        [Win] test-webkitpy test timeout_context_unittest is failing.
        https://bugs.webkit.org/show_bug.cgi?id=176471

        Reviewed by Brent Fulgham.

        This assert failure is possibly caused by different time resolution on
        various platforms.
 
        * Scripts/webkitpy/common/timeout_context_unittest.py:
        (TimeoutContextTests.test_timeout_data):

2017-09-06  Aakash Jain  <aakash_jain@apple.com>

        status-bubbles turn orange after checking relevance of patch
        https://bugs.webkit.org/show_bug.cgi?id=176457

        Reviewed by Alexey Proskuryakov.

        * QueueStatusServer/handlers/statusbubble.py: Added "Checked relevance of patch" as a progress_statuses.

2017-09-06  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's pinnedStateDidChange
        https://bugs.webkit.org/show_bug.cgi?id=176474
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PinnedStateObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST):

2017-09-06  Filip Pizlo  <fpizlo@apple.com>

        WSL: Inliner doesn't allow double-negation
        https://bugs.webkit.org/show_bug.cgi?id=176440

        Reviewed by Mylex Maxfield.
        
        The problem was that we were visiting the operands to calls while inside doVisit. This is too strict
        since it rejects nested calls like foo(foo(x)). The solution is to visit the operands to calls before
        entering doVisit.
        
        This also fixes some other issues in the parser that made the Inliner's error really strange.

        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCallExpression):
        (Inliner):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseOperatorFuncDefValues):
        (parseNonOperatorFuncDefValues):
        (parseGenericFuncDefValues):
        (parseFuncDecl):
        * WebGPUShadingLanguageRI/Test.js:
        * WebGPUShadingLanguageRI/VisitingSet.js:
        (VisitingSet.prototype.doVisit):
        (VisitingSet):

2017-09-06  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL should support the bool type
        https://bugs.webkit.org/show_bug.cgi?id=176285

        Reviewed by Filip Pizlo.

        I forgot to commit a couple files.

        * WebGPUShadingLanguageRI/StandardLibraryEpilogue.js: Added.
        (const.standardLibraryEpilogue.operator.bool.T.Equatable):
        * WebGPUShadingLanguageRI/StandardLibraryPrologue.js: Added.
        (operator.T.T):

2017-09-06  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL should correctly handle the interaction between casting operators and complex types
        https://bugs.webkit.org/show_bug.cgi?id=176316

        Reviewed by Filip Pizlo.

        This allows the standard library to include all identity cast operators for all exsting
        and yet-to-exist types. The standard library now has a function with the signature:
        operator T<><T>(T). This means "for all T, define a cast operator from T to T<>." The
        duplicate <>s lets us say things like operator OutputVector<T><T>(InputVector<T> x).

        For testing, this patch also adds the ability to cast an arbitrary Equatable type to bool,
        by comparing the value to the default value for that type.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CastExpression.js: Copied from Tools/WebGPUShadingLanguageRI/NativeFuncInstance.js.
        (CastExpression):
        (CastExpression.prototype.get functionName):
        (CastExpression.prototype.get returnType):
        (CastExpression.prototype.toString):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitNativeFunc):
        (FuncInstantiator.prototype.getUnique.Instantiate):
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCastExpression):
        (Inliner):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        * WebGPUShadingLanguageRI/NativeFuncInstance.js:
        (NativeFuncInstance):
        * WebGPUShadingLanguageRI/Parse.js:
        (parsePossiblePrefix):
        (parseFuncDecl):
        (parseOperatorFuncDefValues): Deleted.
        (parseNonOperatorFuncDefValues): Deleted.
        (parseGenericFuncDefValues): Deleted.
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/Program.js:
        (Program.prototype.resolveFuncOverload):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.processDerivedCallData):
        (Rewriter.prototype.visitCastExpression):
        (Rewriter.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/StandardLibrary.js: Removed.
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        * WebGPUShadingLanguageRI/TypeDefResolver.js:
        (TypeDefResolver):
        (TypeDefResolver.prototype.visitFuncDef): Deleted.
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitCastExpression):

2017-09-06  Daniel Bates  <dabates@apple.com>

        Copy WebKit Permalink may generate wrong URL with SVN checkout
        https://bugs.webkit.org/show_bug.cgi?id=176427

        Reviewed by Darin Adler.

        Fixes an issue where Copy WebKit Permalink would generate an incorrect URL for
        any file not in the top-level directory of the repository when using an SVN
        checkout of WebKit.

        Copy WebKit Permalink changes directories to the containing directory D of the
        active Xcode document F before running "svn info <path to F>". Currently we use
        the value of "Path" from the output of "svn info" when generating the permalink.
        This path is relative to D. But we want the path to F relative to the top-level
        checkout directory. We need to explicitly compute this.

        * CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:

2017-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump freetype version to 2.8.0
        https://bugs.webkit.org/show_bug.cgi?id=176351

        Reviewed by Carlos Alberto Lopez Perez.

        Remove the patch we were using since it was reverted upstream.

        * gtk/jhbuild.modules:
        * gtk/patches/freetype6-2.4.11-truetype-font-height-fix.patch: Removed.

2017-09-06  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Win] Tools/TestWebKitAPI/Tests/WTF/PriorityQueue.cpp fails to compile with MSVC 2015
        https://bugs.webkit.org/show_bug.cgi?id=176442

        Reviewed by Keith Miller.

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

2017-09-05  Darin Adler  <darin@apple.com>

        Fix a few minor problems found while working toward removing unneeded calls to updateStyle
        https://bugs.webkit.org/show_bug.cgi?id=176279

        Reviewed by Antti Koivisto.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setSelectedChild const): Handle null here. The old code instead
        would trigger an Objective-C exception unnecessarily.

2017-09-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Add plumbing for WKContentView to ask the web process for additional drag items
        https://bugs.webkit.org/show_bug.cgi?id=176348
        Work towards <rdar://problem/31144674>

        Reviewed by Tim Horton.

        Introduces new test infrastructure to simulate tapping to add additional items to the current drag session. We
        add -[DataInteractionSimulator runFrom:to:additionalItemRequestLocations:], for which the last argument is a
        dictionary mapping progress (a double between 0 and 1) to NSValues representing the location from which the drag
        and drop simulation will request an additional drag item. During the simulated drag and drop, when the progress
        value exceeds a value in the map of remaining additional item request locations, we halt drag simulation
        progress for that runloop and instead request additional items from the location specified.

        The only (useful) passing test we can create using the new machinery is one that verifies that preventDefault()
        on dragstart works as expected, preventing additional items from being added. While this trivially passes now,
        since the web-process-side of the additional items flow is not yet implemented, it should continue to pass after
        the web process portion is implemented.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/selected-text-image-link-and-editable.html: Added.

        Add a new test page that contains some non-editable text, an image, a link, and a rich text editable area.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[MockDragDropSession addItems:]):

        Convenience method to add additional mock drag items to a drag or drop session.

        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator runFrom:to:]):

        Converted into a convenience wrapper around the latter version, passing in nil for the additional item request
        locations dictionary.

        (-[DataInteractionSimulator runFrom:to:additionalItemRequestLocations:]):
        (-[DataInteractionSimulator _enqueuePendingAdditionalItemRequestLocations]):
        (-[DataInteractionSimulator _sendQueuedAdditionalItemRequest]):

        New helper methods to detect when and where additional items should be "added", and subsequently simulate adding
        drag items at these given locations.

        (-[DataInteractionSimulator _advanceProgress]):

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

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's mouseDidMoveOverElement
        https://bugs.webkit.org/show_bug.cgi?id=176428
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[MouseMoveOverElementDelegate _webView:mouseDidMoveOverElement:withFlags:userInfo:]):
        (TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView mouseMoveToPoint:withFlags:]):

2017-09-05  Matthew Stewart  <matthew_r_stewart@apple.com>

        Benchmark Runner WebDriver maximize window on browser launch
        https://bugs.webkit.org/show_bug.cgi?id=175702

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py:
        (LinuxBrowserDriver.launch_webdriver): added driver.maximize_window()
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver._launch_webdriver): added driver.maximize_window()
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        (WebDriverBenchmarkRunner._run_one_test): added driver.quit()

2017-09-05  Matthew Stewart  <matthew_r_stewart@apple.com>

        Fix Benchmark Runner selenium autoinstall imports
        https://bugs.webkit.org/show_bug.cgi?id=175727

        Reviewed by Stephanie Lewis.

        This fixes run-benchmark taking a long time to start with WebDriver.

        Inside webdriver's __init__.py file, it imports many other modules.
        So if we try to directly import autoinstalled.selenium.webdriver, it
        will re-run the autoinstall __init__.py for each new imported module
        that contains ".selenium"
        TODO: fix this inside the autoinstall code, to only do one install per
        import.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py:
        (LinuxChromeDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py:
        (LinuxFirefoxDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_driver):
        (OSXChromeCanaryDriver.launch_driver):
        (create_chrome_options):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_driver):
        (OSXFirefoxNightlyDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        (WebDriverBenchmarkRunner._run_one_test):

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

        EWS should report when a step succeeds
        https://bugs.webkit.org/show_bug.cgi?id=176332
        <rdar://problem/25224607>

        Reviewed by Sam Weinig.

        Most of the EWSes report only if a step fails, but do not report when a step succeed. For e.g.: If a build succeeds,
        EWS does not report it. Information about a step passing is sometimes very valuable, especially when waiting for a 
        patch to complete processing. Sometimes, patch authors know that their changes are not covered by any tests. Having EWS 
        display that build was successful and it is currently running tests is valuable.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.command_passed): Update the EWS status server when a command pass. This is
        similar to what is done in Commit Queue and Style Queue.
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (EarlyWarningSystemTest._default_expected_logs): Updated unit-tests appropriately.

2017-09-05  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL should support the bool type
        https://bugs.webkit.org/show_bug.cgi?id=176285

        Reviewed by Filip Pizlo.

        Very similar to the int and uint types. This patch also adds support for a logical negation expression "!x".
        This patch also reverts the ability of the program author to create their own "operator!()", and instead
        adds the ability of the program author to create their own "operator bool()". The code is generic, so
        programmers can make two arbitrary types Foo and Bar, and implement a "operator Bar(Foo)." The logical
        negation expression is a built-in, and requires its argument be a bool.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/BoolLiteral.js: Copied from Tools/WebGPUShadingLanguageRI/NativeFunc.js.
        (BoolLiteral):
        (BoolLiteral.prototype.get value):
        (BoolLiteral.prototype.get isConstexpr):
        (BoolLiteral.prototype.toString):
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitBoolLiteral):
        (Evaluator.prototype.visitLogicalNot):
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get isCast):
        (Func.prototype.toDeclString):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        (FuncDef.prototype.get body):
        (FuncDef.prototype.rewrite):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/LogicalNot.js: Copied from Tools/WebGPUShadingLanguageRI/NativeFunc.js.
        (LogicalNot):
        (LogicalNot.prototype.get operand):
        (LogicalNot.prototype.toString):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTerm):
        (parsePossiblePrefix):
        (parsePossibleRelationalEquality):
        (parseFuncName):
        (parseOperatorFuncDefValues):
        (parseNonOperatorFuncDefValues):
        (parseGenericFuncDefValues):
        (parseFuncDecl):
        (parseProtocolFuncDecl):
        (parseFuncDef):
        (parseNative):
        (parse):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitBoolLiteral):
        (Rewriter.prototype.visitLogicalNot):
        (Rewriter):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (makeUInt):
        (makeBool):
        (checkUInt):
        (checkBool):
        (TEST_literalBool):
        (TEST_identityBool):
        (TEST_intSimpleMath):
        (TEST_uintSimpleMath):
        (TEST_equality):
        (TEST_logicalNegation):
        (TEST_notEquality):
        (TEST_equalityTypeFailure):
        (TEST_add1): Deleted.
        * WebGPUShadingLanguageRI/TypeDefResolver.js:
        (TypeDefResolver.prototype.visitFuncDef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitBoolLiteral):
        (Visitor.prototype.visitLogicalNot):

2017-09-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221603.

        This caused accessibility/mac/select-element-selection-with-
        optgroups.html to consistently timeout on macOS

        Reverted changeset:

        "Fix a few minor problems found while working toward removing
        unneeded calls to updateStyle"
        https://bugs.webkit.org/show_bug.cgi?id=176279
        http://trac.webkit.org/changeset/221603

2017-09-05  Youenn Fablet  <youenn@apple.com>

        WebKitTestRunner should set the cache storage directory path
        https://bugs.webkit.org/show_bug.cgi?id=176373

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration const):

2017-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        test262: Completion values for control flow do not match the spec
        https://bugs.webkit.org/show_bug.cgi?id=171265

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:
        Include a :failDueToOutdatedOrBadTest to mark failures with justification.

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

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's unavailablePluginButtonClicked
        https://bugs.webkit.org/show_bug.cgi?id=176274
        <rdar://problem/29270035>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[PluginDelegate _webView:unavailablePluginButtonClickedWithReason:pluginInfo:]):
        (TEST):

2017-09-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Wrong use of PLUGIN_ARCHITECTURE(X11) in several places
        https://bugs.webkit.org/show_bug.cgi?id=176329

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt: Build TestNetscapePlugIn when NETSCAPE_PLUGIN_API is enabled and only link to X11 libraries
        when building the X11 target.
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * DumpRenderTree/TestNetscapePlugIn/Tests/unix/CallInvalidateRectWithNullNPPArgument.cpp: Renamed from Tools/DumpRenderTree/TestNetscapePlugIn/Tests/x11/CallInvalidateRectWithNullNPPArgument.cpp.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NP_Initialize):
        (NPP_HandleEvent):
        (NPP_GetValue):

2017-09-04  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::LogObserver::level const):

2017-09-03  Darin Adler  <darin@apple.com>

        Fix a few minor problems found while working toward removing unneeded calls to updateStyle
        https://bugs.webkit.org/show_bug.cgi?id=176279

        Reviewed by Antti Koivisto.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setSelectedChild const): Handle null here. The old code instead
        would trigger an Objective-C exception unnecessarily.

2017-09-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Refactor drag and drop logic in WKContentView in preparation for supporting multiple drag items in a drag session
        https://bugs.webkit.org/show_bug.cgi?id=176264
        <rdar://problem/31144674>

        Reviewed by Darin Adler.

        Adds two new iOS drag and drop tests to check that the clientX and clientY attributes of mouse events propagated
        to the page during drop are correct. Each test drags from an image element and drops into three custom-drop-
        handling elements; `dragenter`, `dragover`, and `drop` event listeners on the body then use the clientX and
        clientY event attributes to hit-test for drop target elements. The first test is suffixed with "-Basic"; the
        second test, suffixed with "-WithScrollOffset", makes the document scrollable to check that clientY is correct
        when scrolled.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/drop-targets.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::testDragAndDropOntoTargetElements):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView stringByEvaluatingJavaScript:]):

        Log a warning message when an API test fails due to JavaScript evaluation in TestWKWebView.

2017-09-03  Filip Pizlo  <fpizlo@apple.com>

        WSL IntLiteral should have variable type so that it can unify with things like uint
        https://bugs.webkit.org/show_bug.cgi?id=176209

        Reviewed by Mylex Maxfield.
        
        This introduces IntLiteralType, which can unify with any number type that can represent the
        int literal.
        
        This means that all of the following are legal:
        
            double x = 0; // 0 unifies with double
            double y = x + 5; // should resolve to double+double
            double z = array[0]; // 0 unifies with uint
        
        We can do similar things with float literals, so that you don't have to suffix "f" all the
        time.
        
        I think that this is very different from what C does. C just supports implicit type
        conversions. That's why "double x = 0" works in C. We don't do type conversions. Instead, we
        let each literal unify itself with one type.
        
        Also updated Test.html so that it runs again and is better at printing things.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/IntLiteral.js:
        (IntLiteral):
        (IntLiteral.prototype.toString):
        * WebGPUShadingLanguageRI/IntLiteralType.js: Added.
        (IntLiteralType):
        (IntLiteralType.prototype.get origin):
        (IntLiteralType.prototype.get value):
        (IntLiteralType.prototype.get isPrimitive):
        (IntLiteralType.prototype.get isUnifiable):
        (IntLiteralType.prototype.typeVariableUnify):
        (IntLiteralType.prototype.unifyImpl):
        (IntLiteralType.prototype.verifyAsArgument):
        (IntLiteralType.prototype.verifyAsParameter):
        (IntLiteralType.prototype.commitUnification):
        (IntLiteralType.prototype.toString):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.):
        (Intrinsics):
        * WebGPUShadingLanguageRI/LiteralTypeChecker.js:
        (LiteralTypeChecker.prototype.visitIntLiteralType):
        (LiteralTypeChecker):
        * WebGPUShadingLanguageRI/NativeType.js:
        (NativeType):
        (NativeType.prototype.get isNumber):
        (NativeType.prototype.set isNumber):
        (NativeType.prototype.get isInt):
        (NativeType.prototype.set isInt):
        (NativeType.prototype.get isFloat):
        (NativeType.prototype.set isFloat):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitIntLiteral):
        (Rewriter.prototype.visitIntLiteralType):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.html:
        * WebGPUShadingLanguageRI/Test.js:
        (this.window.this.print):
        (doPrep):
        (doLex):
        (checkNumber):
        (checkInt):
        (TEST_nameResolutionFailure):
        (TEST_threadArrayLoadIntLiteral):
        (TEST_deviceArrayStoreIntLiteral):
        (TEST_returnIntLiteralDouble):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isNumber):
        (Type.prototype.get isInt):
        (Type.prototype.get isFloat):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitIntLiteral):
        (Visitor.prototype.visitIntLiteralType):

2017-09-03  Filip Pizlo  <fpizlo@apple.com>

        Add more tests for null behavior in WSL
        https://bugs.webkit.org/show_bug.cgi?id=176318

        Reviewed by Myles Maxfield.
        
        This adds more tests for the unification behavior of null. In the process, I found a couple
        small bugs and fixed them.

        * WebGPUShadingLanguageRI/Checker.js:
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution.prototype.visitCallExpression):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_passNullAndNotNullFullPoly):
        (TEST_passNullAndNotNullFullPolyReverse):
        (TEST_nullTypeVariableUnify.recurse):
        (TEST_nullTypeVariableUnify.everyOrder):
        (TEST_nullTypeVariableUnify.everyPair):
        (TEST_nullTypeVariableUnify):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.wrap):
        * WebGPUShadingLanguageRI/TypeVariable.js:
        (TypeVariable.prototype.verifyAsArgument):

2017-09-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r221494 and r221500.
        https://bugs.webkit.org/show_bug.cgi?id=176258

        This caused the windows build to fail. (Requested by mlewis13
        on #webkit).

        Reverted changesets:

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221494

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221500

2017-09-03  Darin Adler  <darin@apple.com>

        REGRESSION (r220052): [Sierra] API test VideoControlsManager.VideoControlsManagerFullSizeVideoInWideMainFrame is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=175329

        Reviewed by Wenson Hsieh.

        These tests rely on using setTimeout to wait a run loop iteration for the
        video controls to appear. With changes to how loading occurs, it can now
        take two run loop iterations. The concept here is inherently a bit flaky
        and racy -- end users will not be able to tell how many run loop cycles it
        takes for controls to come up, and websites can't tell either -- but for now
        changing the tests to wait one more run loop should get rid of the flakiness.

        * TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm: Re-enable test.

        * TestWebKitAPI/Tests/WebKitCocoa/full-size-autoplaying-video-with-audio.html: Add a
        second setTimeout and a comment.
        * TestWebKitAPI/Tests/WebKitCocoa/skinny-autoplaying-video-with-audio.html: Ditto.
        * TestWebKitAPI/Tests/WebKitCocoa/wide-autoplaying-video-with-audio.html: Ditto.

2017-09-03  Sam Weinig  <sam@webkit.org>

        Make webkit-patch post --no-review enable EWS just like webkit-patch post-commits --no-review
        https://bugs.webkit.org/show_bug.cgi?id=176321

        Reviewed by Darin Adler.

        * Scripts/webkitpy/tool/commands/upload.py:
        Add the SubmitToEWS step to Post command

2017-09-03  Chris Dumez  <cdumez@apple.com>

        Have getFileMetadata() return a std::optional<FileMetadata>
        https://bugs.webkit.org/show_bug.cgi?id=176293

        Reviewed by Darin Adler.

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

2017-09-02  Filip Pizlo  <fpizlo@apple.com>

        WSL should support structs
        https://bugs.webkit.org/show_bug.cgi?id=176290

        Reviewed by Mylex Maxfield.
        
        This adds parsing of struct types and makes them work.
        
        This required adding a struct layout phase, which in turn required being a bit more careful
        about how we instantiate functions and types. We cannot have any instantiation TypeRefs left
        once we're doing struct layout.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/DotExpression.js: Added.
        (DotExpression):
        (DotExpression.prototype.get struct):
        (DotExpression.prototype.get fieldName):
        (DotExpression.prototype.get isLValue):
        (DotExpression.prototype.toString):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype._createEPtr):
        * WebGPUShadingLanguageRI/EPtr.js:
        (EPtr.prototype.copyFrom): Deleted.
        (EPtr.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitAssignment):
        (Evaluator.prototype.visitDotExpression):
        * WebGPUShadingLanguageRI/Field.js:
        (Field):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef.prototype.rewrite):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/Inline.js:
        (inline):
        (_inlineFunction):
        (resolveInlinedFunction):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitDotExpression):
        * WebGPUShadingLanguageRI/InstantiateImmediates.js:
        (InstantiateImmediates.prototype.visitTypeRef):
        (InstantiateImmediates.prototype.visitVariableDecl):
        (InstantiateImmediates):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype._resolveTypeArguments):
        (NameResolver.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.visit):
        * WebGPUShadingLanguageRI/OverloadResolutionFailure.js: Added.
        (OverloadResolutionFailure):
        (OverloadResolutionFailure.prototype.get func):
        (OverloadResolutionFailure.prototype.get reason):
        (OverloadResolutionFailure.prototype.toString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parsePossibleSuffix):
        (parseField):
        (parseStructType):
        (parse):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitDotExpression):
        (Rewriter.prototype.visitVariableRef):
        * WebGPUShadingLanguageRI/StructLayoutBuilder.js: Added.
        (StructLayoutBuilder):
        (StructLayoutBuilder.prototype.visitStructType):
        (StructLayoutBuilder.prototype.get offset):
        (StructLayoutBuilder.prototype.visitField):
        (StructLayoutBuilder.prototype.visitVariableRef):
        (StructLayoutBuilder.prototype.visitVariableDecl):
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.add):
        (StructType.prototype.instantiate):
        (StructType.prototype.populateDefaultValue):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution.prototype.visitTypeRef):
        (Substitution.prototype.visitVariableRef):
        (Substitution):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_genericStructInstance):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.inherits):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.instantiate):
        * WebGPUShadingLanguageRI/VariableRef.js:
        (VariableRef.wrap):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitTypeRef):
        (Visitor.prototype.visitDotExpression):
        (Visitor.prototype.visitVariableRef):

2017-09-02  Filip Pizlo  <fpizlo@apple.com>

        WSL NullType should be a special type variable so it can unify with any pointer type
        https://bugs.webkit.org/show_bug.cgi?id=176235

        Reviewed by Myles Maxfield.
        
        Null is just a type variable that plays by weird rules:
        
        - Other type variables don't recognize it, so if it's unified with T, it fails.
        - It behaves like a type variable for pointer and array reference types.
        - It arises only in argument (RHS) position.
        - Once Checker finds it to be equals to something, we need to remember what that was.
        
        I refactored some of the type system code to allow for the possibility of type variables being
        unified during equals() tests. It turns out that we were playing fast and loose here; I needed
        to beef up UnificationContext.prototype.verify. I added tests for this.
        
        I added an equalsWithCommit() that triggers commitUnification(), which allows NullType to
        remember what type it got unified with.
        
        NullLiteral then just instantiates its own NullType, which is what Checker uses as the type of
        the NullLiteral. Everything else just works.
        
        This adds a bunch of tests to make sure we generate type errors in various weird cases while
        also accepting a number of safe cases.
        
        I also added a way to run the tests in-browser.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/ArrayRefType.js:
        (ArrayRefType.prototype.get isArrayRef):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/ConstexprTypeParameter.js:
        (ConstexprTypeParameter.prototype.typeVariableUnify):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitDereferenceExpression):
        (Evaluator.prototype.visitNullLiteral):
        * WebGPUShadingLanguageRI/Func.js:
        (Func.prototype.toString):
        (Func):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc.prototype.toDeclString):
        (NativeFunc):
        (NativeFunc.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/NativeFuncInstance.js:
        (NativeFuncInstance.prototype.toDeclString):
        (NativeFuncInstance):
        (NativeFuncInstance.prototype.toString): Deleted.
        * WebGPUShadingLanguageRI/Node.js:
        (Node.unify):
        (Node.prototype._typeVariableUnifyImpl):
        (Node.prototype.equals):
        * WebGPUShadingLanguageRI/NullLiteral.js: Added.
        (NullLiteral):
        (NullLiteral.prototype.toString):
        * WebGPUShadingLanguageRI/NullType.js:
        (NullType):
        (NullType.prototype.get isPrimitive):
        (NullType.prototype.get isUnifiable):
        (NullType.prototype.typeVariableUnify):
        (NullType.prototype.unifyImpl):
        (NullType.prototype.verifyAsArgument):
        (NullType.prototype.verifyAsParameter):
        (NullType.prototype.toString):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTerm):
        (parseType.getAddressSpace):
        (parseType):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitNullLiteral):
        * WebGPUShadingLanguageRI/Test.html: Added.
        * WebGPUShadingLanguageRI/Test.js:
        (this.window.this.print):
        (TEST_doubleGenericCallsSingleGeneric):
        (TEST_dereferenceDefaultNull):
        (TEST_dereferenceDefaultNullArrayRef):
        (doTest):
        (let.s.in.this.s.startsWith.string_appeared_here.s.match): Deleted.
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isArrayRef):
        * WebGPUShadingLanguageRI/TypeVariable.js:
        (TypeVariable.prototype.typeVariableUnify):
        * WebGPUShadingLanguageRI/UnificationContext.js:
        (UnificationContext.prototype.verify):
        (UnificationContext):
        (UnificationContext.prototype.isUnunified): Deleted.
        * WebGPUShadingLanguageRI/VariableRef.js:
        (VariableRef.prototype.get unifyNode):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitNullLiteral):

2017-09-03  Sam Weinig  <sam@webkit.org>

        Remove CanvasProxy
        https://bugs.webkit.org/show_bug.cgi?id=176288

        Reviewed by Yusuke Suzuki.

        CanvasProxy does not appear to be in any current HTML spec
        and was disabled and unimplemented in our tree. Time to 
        get rid of it.

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

2017-09-01  Filip Pizlo  <fpizlo@apple.com>

        WSL should check unreachable code and no returns
        https://bugs.webkit.org/show_bug.cgi?id=176262

        Reviewed by Myles Maxfield.
        
        This adds phases to check whether non-void functions return and whether there is any code after
        a return in any block. Added tests for simple versions of both of those things. We cannot add
        more complex versions until we support control flow statements.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CheckReturns.js: Added.
        (checkReturns):
        * WebGPUShadingLanguageRI/CheckUnreachableCode.js: Added.
        (checkUnreachableCode):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseReturn):
        * WebGPUShadingLanguageRI/Prepare.js:
        (prepare):
        * WebGPUShadingLanguageRI/ReturnChecker.js: Added.
        (ReturnChecker.prototype.visitFuncDef):
        (ReturnChecker.prototype.visitBlock):
        (ReturnChecker.prototype.visitReturn):
        (ReturnChecker):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleNoReturn):
        * WebGPUShadingLanguageRI/UnreachableCodeChecker.js: Added.
        (UnreachableCodeChecker.prototype.visitBlock):
        (UnreachableCodeChecker):

2017-09-01  Filip Pizlo  <fpizlo@apple.com>

        WSL should use & for getting a ^ and @ for getting a []
        https://bugs.webkit.org/show_bug.cgi?id=176245

        Reviewed by Myles Maxfield.
        
        Using \ as an operator was a bad decision since that's an escape character in so many contexts.
        
        Henceforth, & is for making pointers, for example:
        
        thread int^ foo() { int x; return &x; }
        
        And @ is for making array references, for example:
        
        thread int[] foo() { int[42] x; return @x; }
        
        Having separate operators makes it easy to have pointers to fixed-size arrays:
        
        thread int[42]^ foo() { int[42] x; return &x; }

        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/MakePtrExpression.js:
        (MakePtrExpression.prototype.toString):
        (MakePtrExpression):
        * WebGPUShadingLanguageRI/Parse.js:
        (parsePossibleSuffix):
        (parsePossiblePrefix):
        (parseFuncName):
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleMakePtr):

2017-09-01  Myles C. Maxfield  <mmaxfield@apple.com>

        WSL's lexer will never emit keyword tokens
        https://bugs.webkit.org/show_bug.cgi?id=176248

        Reviewed by Filip Pizlo.

        Because all tokens are also identified as idents, we need to handle them together.

        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/Test.js:
        (doLex):
        (checkLexerToken):
        (TEST_lexerKeyword):

2017-09-01  Alex Christensen  <achristensen@webkit.org>

        Rename WebKit2 API tests after directory rename
        https://bugs.webkit.org/show_bug.cgi?id=176250

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/Lots of files...
        Renamed WebKit2 to WebKit and WebKit1 to WebKitLegacy.

2017-09-01  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's toolbarsAreVisible
        https://bugs.webkit.org/show_bug.cgi?id=176246
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[ToolbarDelegate _webView:getToolbarsAreVisibleWithCompletionHandler:]):
        (-[ToolbarDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-09-01  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:

2017-09-01  Filip Pizlo  <fpizlo@apple.com>

        WSL should have more tests of type checking failures
        https://bugs.webkit.org/show_bug.cgi?id=176244

        Reviewed by Myles Maxfield.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_typeMismatchReturn):

2017-09-01  Filip Pizlo  <fpizlo@apple.com>

        WSL should be be able to call a function declared in a protocol from a generic function
        https://bugs.webkit.org/show_bug.cgi?id=176242

        Reviewed by Myles Maxfield.
        
        It turns out that we need to know when a function is resolved to a protocol signature, so we
        need to have a type for this. This introduces ProtocolFuncDecl.
        
        Also, this introduces parsing of protocol decls.
        
        When instantiating a function, we need to rewrite its CallExpressions if they were previously
        resolved to a PrtococolFuncDecl instead of a FuncDef or NativeFunc. In that case, we need to
        rerun the resolution on the program. That resolution is guaranteed to succeed if the type
        system works correctly.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallExpression.js:
        (CallExpression.prototype.resolve):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype._createEPtr):
        * WebGPUShadingLanguageRI/Func.js:
        (Func):
        (Func.prototype.get origin):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef):
        (FuncDef.prototype.get origin): Deleted.
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution.prototype.visitCallExpression):
        (FuncInstantiator.prototype.getUnique.InstantiationSubstitution):
        * WebGPUShadingLanguageRI/NativeFunc.js:
        (NativeFunc):
        (NativeFunc.prototype.get origin): Deleted.
        * WebGPUShadingLanguageRI/NativeFuncInstance.js:
        (NativeFuncInstance):
        * WebGPUShadingLanguageRI/Node.js:
        (Node.prototype.substitute):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseProtocolFuncDecl):
        (parseProtocolDecl):
        (parse):
        * WebGPUShadingLanguageRI/Program.js:
        (Program):
        (Program.prototype.get protocols):
        (Program.prototype.add):
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        (ProtocolDecl.prototype.add):
        (ProtocolDecl.prototype.hasHeir):
        (ProtocolDecl.prototype.addSignature): Deleted.
        * WebGPUShadingLanguageRI/ProtocolFuncDecl.js: Added.
        (ProtocolFuncDecl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitStructType):
        (Rewriter.prototype.visitTypeVariable):
        (Rewriter.prototype.visitProtocolFuncDecl):
        (Rewriter.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.instantiate):
        * WebGPUShadingLanguageRI/Substitution.js:
        (Substitution):
        (Substitution.mapping): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleGeneric):
        (TEST_simpleAssignment):
        (TEST_simpleDefault):
        (TEST_simpleDereference):
        (TEST_dereferenceStore):
        (TEST_simpleMakePtr):
        (TEST_threadArrayLoad):
        (TEST_deviceArrayLoad):
        (TEST_threadArrayStore):
        (TEST_deviceArrayStore):
        (TEST_simpleProtocol):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitProtocolFuncDecl):

2017-09-01  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::LogObserver::level const):

2017-09-01  Ross Kirsling  <ross.kirsling@sony.com>

        download-latest-github-release.py should have friendlier output for non-404 errors
        https://bugs.webkit.org/show_bug.cgi?id=176201

        Reviewed by Brent Fulgham.

        * Scripts/download-latest-github-release.py:

2017-09-01  Filip Pizlo  <fpizlo@apple.com>

        [WSL] Add tests for storing to arrays
        https://bugs.webkit.org/show_bug.cgi?id=176237

        Reviewed by Myles Maxfield.
        
        Storing to arrays works now.

        * WebGPUShadingLanguageRI/ArrayType.js:
        (ArrayType):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_threadArrayStore):
        (TEST_deviceArrayStore):

2017-09-01  Alex Christensen  <achristensen@webkit.org>

        Replace WKUIDelegatePrivate's isPlayingMediaDidChange with KVO _isPlayingAudio on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=176212

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[AudioObserver observeValueForKeyPath:ofObject:change:context:]):
        (TEST):
        (-[MediaDelegate _webView:isPlayingMediaDidChange:]): Deleted.

2017-09-01  Filip Pizlo  <fpizlo@apple.com>

        WSL Rewriter should be an identity on things that aren't inside function bodies
        https://bugs.webkit.org/show_bug.cgi?id=176208

        Reviewed by Myles Maxfield.
        
        Previously, if the Rewriter encountered a FunctionDef, StructType, NativeType, etc., then it
        would either crash or try to rewrite them. That's unfortunate because we use the Rewriter to
        rewrite struct and function bodies. If a function calls another function, then rewriting the
        caller should not mean also rewriting the callee. Previously we "fixed" this by religiously
        wrapping references to types with TypeDef and doing other such hacks. But that's subtly wrong.
        It only worked because Rewriter wasn't rewriting TypeRef.type. I think that Rewriter has to
        rewrite that in the long run because it may refer to another TypeRef, and it may be an
        instantiation that is using types that themselves need to be rewritten.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/NullType.js:
        (NullType):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFuncDef):
        (Rewriter.prototype.visitNativeFunc):
        (Rewriter.prototype.visitNativeFuncInstance):
        (Rewriter.prototype.visitNativeType):
        (Rewriter.prototype.visitTypeDef):
        (Rewriter.prototype.visitStructType):
        (Rewriter.prototype.visitTypeVariable):
        (Rewriter.prototype.visitConstexprTypeParameter):
        (Rewriter.prototype.visitNativeTypeInstance):
        (Rewriter.prototype.visitTypeRef):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitNativeTypeInstance):

2017-09-01  Alex Christensen  <achristensen@webkit.org>

        Disable ObjC WebGL policy SPI on iOS
        https://bugs.webkit.org/show_bug.cgi?id=176233

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/WebGLPolicy.mm:

2017-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Improve the way unit test are run and the results reported
        https://bugs.webkit.org/show_bug.cgi?id=176104

        Reviewed by Carlos Alberto Lopez Perez.

        There are several issues with the way unit tests are run by run-gtk-tests and also with the way results are
        reported:

         - The results summary only mentions the test binaries, not the actual test cases, so you always have to scroll
           up to find the actual test cases failing.
         - The number of reported failures is the number of test binaries that failed, so if a new test case fails for
           the same binary in a new revision, we won't notice it just looking at the number of failures.
         - We show detailed information about skipped test in the results summary, which is just noise.
         - In the case of glib tests, when a test case times out, we finish the test suite, instead of continuing with the
           rest of the test cases like we do for normal failures or crashes. If a new test case fails after a test case that
           timed out we will not notice it until we fix or skip the test cases timing out.
         - In the case of glib tests, the timeout is applied to the whole suite, instead of per test case, we have a hack
           to make it longer only for that. It has worked so far, but it doesn't scale, and it's an ugly hack.
         - It's not currently possible to detect flaky tests, because again, we know the binaries/suites that failed but
           not the actual test cases.

        This patch fixes all these issues and makes it possible to add support for flaky tests in a follow up patch.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.commandComplete): Update the RunGtkAPITests step to parse the new output.
        * Scripts/run-gtk-tests:
        (TestRunner._start_timeout): Helper to start the timeout if needed.
        (TestRunner._start_timeout._alarm_handler): Raise timeout exception.
        (TestRunner._stop_timeout): Helper to stop the timeout if needed.
        (TestRunner._waitpid): Merged waitpid and return_code_from_exit_status.
        (TestRunner._run_test_glib): Do not double the timeout anymore, we now start/stop the timeout for every test
        case. Return a dictionary where keys are test cases and values the results only in case of failures.
        (TestRunner._run_test_glib.parse_line): Update the parser to also detect test cases and the results.
        (TestRunner._run_test_glib.parse_line.set_test_result): Helper to set the result of a test case.
        (TestRunner._run_google_test): Return a dictionary where key is the test case and value is the result only in
        case of failure.
        (TestRunner._run_google_test_suite): Updated now that _run_google_test returns a dictionary.
        (TestRunner.run_tests): Handle the results dictionary and show the results with information about test cases
        failing and grouped by test binaries.

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL should support loading from arrays
        https://bugs.webkit.org/show_bug.cgi?id=176207

        Reviewed by Saam Barati.
        
        Getting a test that loads from arrays to work required doing a lot of things:
        
        - a[i] now parses to ^(operator\[](a, i)).
        - added operator\[] for four array reference types.
        - to make thread|threadgroup|device T[] work, you need T:primitive.
        - so this adds the magical primitive protocol.
        
        This required a little bit of rejuggling in the name resolver and type checker. The main thing
        is that to prevent the rewriter from copying the types referenced by some function, you need to
        make sure that when you add a reference to a type, you wrap it in a TypeRef. This doesn't
        completely feel right, but I'm sure we'll figure out the balance eventually. See bug 176208.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/EArrayRef.js: Added.
        (EArrayRef):
        (EArrayRef.prototype.get ptr):
        (EArrayRef.prototype.get length):
        (EArrayRef.prototype.toString):
        * WebGPUShadingLanguageRI/EPtr.js:
        (EPtr.prototype.plus):
        (EPtr.prototype.toString):
        (EPtr):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitUintLiteral):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitNativeFunc):
        (FuncInstantiator.prototype.getUnique.Instantiate):
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer.prototype.next):
        (Lexer):
        * WebGPUShadingLanguageRI/NameContext.js:
        (NameContext.prototype.recognizeIntrinsics):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProtocolRef):
        * WebGPUShadingLanguageRI/NativeFuncInstance.js:
        (NativeFuncInstance.prototype.get isNative):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTerm):
        (parseTypeDef):
        (parseNative):
        (parsePossibleSuffix):
        (parse):
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        (ProtocolDecl):
        * WebGPUShadingLanguageRI/ProtocolRef.js:
        (ProtocolRef.prototype.get isPrimitive):
        (ProtocolRef):
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.populateDefaultValue): Deleted.
        * WebGPUShadingLanguageRI/ReferenceType.js:
        (ReferenceType.prototype.populateDefaultValue):
        (ReferenceType):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitUintLiteral):
        (Rewriter.prototype.visitFunc): Deleted.
        (Rewriter.prototype.visitTypeVariable): Deleted.
        (Rewriter.prototype.visitConstexprTypeParameter): Deleted.
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_threadArrayLoad):
        (TEST_deviceArrayLoad):
        * WebGPUShadingLanguageRI/TypeRef.js:
        (TypeRef.prototype.get instantiatedType):
        * WebGPUShadingLanguageRI/TypeVariable.js:
        (TypeVariable.prototype.toString):
        (TypeVariable):
        * WebGPUShadingLanguageRI/UintLiteral.js: Added.
        (UintLiteral):
        (UintLiteral.prototype.get value):
        (UintLiteral.prototype.get isConstexpr):
        (UintLiteral.prototype.toString):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitNativeFuncInstance):
        (Visitor.prototype.visitTypeVariable):
        (Visitor.prototype.visitPtrType):
        (Visitor.prototype.visitArrayRefType):
        (Visitor.prototype.visitUintLiteral):
        * WebGPUShadingLanguageRI/WTrapError.js: Added.
        (WTrapError):

2017-08-31  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's isPlayingAudioDidChange
        https://bugs.webkit.org/show_bug.cgi?id=176203
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[MediaDelegate _webView:isPlayingMediaDidChange:]):
        (-[MediaDelegate webView:didFinishNavigation:]):
        (TEST):

2017-08-31  Alex Christensen  <achristensen@webkit.org>

        Add ObjC SPI corresponding to WKPageLoaderClient's webGLLoadPolicy and resolveWebGLLoadPolicy
        https://bugs.webkit.org/show_bug.cgi?id=175779
        <rdar://problem/22367975>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WebGLPolicy.mm: Added.
        (-[WebGLTestDelegate webView:startURLSchemeTask:]):
        (-[WebGLTestDelegate webView:stopURLSchemeTask:]):
        (-[WebGLTestDelegate _webView:webGLLoadPolicyForURL:decisionHandler:]):
        (-[WebGLTestDelegate _webView:resolveWebGLLoadPolicyForURL:decisionHandler:]):
        (-[WebGLTestDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (urlsEqual):
        (runTest):
        (TEST):

2017-08-31  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make USE_CF conditional within Windows
        https://bugs.webkit.org/show_bug.cgi?id=176173

        Reviewed by Alex Christensen.

        * DumpRenderTree/config.h:
        * MiniBrowser/win/CMakeLists.txt:
        * MiniBrowser/win/stdafx.h:
        * TestWebKitAPI/PlatformWin.cmake:

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL should support makeptr (\)
        https://bugs.webkit.org/show_bug.cgi?id=176197

        Reviewed by Saam Barati.
        
        This required introducing some sanity about how pointers are carried around in the evaluator.
        It turns out that we need to be careful about when a pointer to an rvalue is dereferenced. It
        should be dereferenced basically immediately. If it cannot be, then we need to snapshot the
        value. To do that, we need to know the types of things in a few more places. That's what this
        change accomplishes.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/DereferenceExpression.js:
        (DereferenceExpression.prototype.get isLValue):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype._snapshot):
        (Evaluator.prototype.runBody):
        (Evaluator.prototype.visitFunctionLikeBlock):
        (Evaluator.prototype.visitDereferenceExpression):
        (Evaluator.prototype.visitMakePtrExpression):
        (Evaluator.prototype.visitCommaExpression):
        (Evaluator.prototype.visitCallExpression):
        (Evaluator):
        (Evaluator.prototype._dereference): Deleted.
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitFuncDef):
        (FuncInstantiator.prototype.getUnique.Instantiate.prototype.visitNativeFunc):
        (FuncInstantiator.prototype.getUnique.Instantiate):
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/FunctionLikeBlock.js:
        (FunctionLikeBlock):
        (FunctionLikeBlock.prototype.get returnType):
        (FunctionLikeBlock.prototype.toString):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCallExpression):
        (Inliner):
        * WebGPUShadingLanguageRI/MakePtrExpression.js: Added.
        (MakePtrExpression):
        (MakePtrExpression.prototype.get lValue):
        (MakePtrExpression.prototype.toString):
        * WebGPUShadingLanguageRI/NativeFuncInstance.js: Added.
        (NativeFuncInstance):
        (NativeFuncInstance.prototype.get func):
        (NativeFuncInstance.prototype.toString):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitMakePtrExpression):
        (Rewriter.prototype.visitCallExpression):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_dereferenceStore):
        (TEST_simpleMakePtr):
        * WebGPUShadingLanguageRI/Value.js:
        (Value.prototype.get isLValue):
        (Value):
        * WebGPUShadingLanguageRI/VariableRef.js:
        (VariableRef.prototype.get isLValue):
        (VariableRef.prototype.get addressSpace):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitMakePtrExpression):
        (Visitor.prototype.visitCallExpression):

2017-08-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221445.

        This change broke Sierra Release builds.

        Reverted changeset:

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221445

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL should support dereference (^)
        https://bugs.webkit.org/show_bug.cgi?id=176192

        Reviewed by Myles Maxfield.
        
        This implements DereferenceExpression.
        
        It also renames Evaluator.prototype.visitFunctionBody, because that name confusingly implies
        that there is a class named FunctionBody. It's now called runBody.
        
        I made the check to see if a type is a pointer type be the isPtr method, so that we can have
        other pointer types that are implemented via something other than PtrType. We might want it if
        for example we wanted a pointer type that is generic over address space.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/DereferenceExpression.js: Added.
        (DereferenceExpression):
        (DereferenceExpression.prototype.get ptr):
        (DereferenceExpression.prototype.toString):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitFunctionLikeBlock):
        (Evaluator.prototype._dereference):
        (Evaluator.prototype.visitDereferenceExpression):
        (Evaluator.prototype.visitFunctionBody): Deleted.
        * WebGPUShadingLanguageRI/PtrType.js:
        (PtrType.prototype.get isPtr):
        (PtrType.prototype.populateDefaultValue):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitAssignment):
        (Rewriter.prototype.visitDereferenceExpression):
        * WebGPUShadingLanguageRI/Test.js:
        (TEST_simpleDereference):
        * WebGPUShadingLanguageRI/Type.js:
        (Type.prototype.get isPtr):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitDereferenceExpression):

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        There should only be one callFunction API in WSL
        https://bugs.webkit.org/show_bug.cgi?id=176189

        Reviewed by Saam Barati.
        
        This removes the need for callFunctionByRef, which was weird. It's now the case the TypedValue
        is always a tuple of type and ePtr, and TypedValue has a super simple API for boxing and
        unboxing single-cell values like ints.

        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        (callFunctionByRef): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (makeInt):
        * WebGPUShadingLanguageRI/TypedValue.js:
        (TypedValue):
        (TypedValue.prototype.get type):
        (TypedValue.prototype.get ePtr):
        (TypedValue.box):
        (TypedValue.prototype.get value):
        (TypedValue.prototype.toString):

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL EPtr does not need to carry around the type
        https://bugs.webkit.org/show_bug.cgi?id=176188

        Reviewed by Saam Barati.
        
        To validate that the interpreter is modeling a statically typed execution environment, it's
        really best if values don't know their types at all. A pointer is just a pointer (i.e a buffer
        and offset in our world), and it's the job of the AST node that uses it to figure out what its
        type should be.
        
        I think this makes the code simpler overall.

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunctionByRef):
        (callFunction):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype._createEPtr):
        * WebGPUShadingLanguageRI/EPtr.js:
        (EPtr):
        (EPtr.box):
        (EPtr.prototype.copyFrom):
        (EPtr.prototype.toString):
        * WebGPUShadingLanguageRI/EValue.js: Removed.
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitFunctionLikeBlock):
        (Evaluator.prototype.visitVariableDecl):
        (Evaluator.prototype.visitAssignment):
        (Evaluator.prototype.visitIntLiteral):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitAssignment):
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.instantiate):
        * WebGPUShadingLanguageRI/Test.js:
        (checkInt):

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL doesn't need to wrap primitives like ints and floats in specialized classes like EInt and EFloat
        https://bugs.webkit.org/show_bug.cgi?id=176184

        Reviewed by Saam Barati.
        
        The only use for EInt and EFloat was that users of the interpreter want to be able to reason
        about values that know their type. But for the actual interpreter, it makes most sense for
        EBuffer to hold values directly - for example, ints in the case of values of type int. Then,
        all of the logic of doing math on those things can be implemented in Intrinsics.js.
        
        So, this removes EInt and EFloat but introduces a new TypedValue class that is used only on the
        boundary of the interpreter. You can either use the interpreter by speaking its internal
        language (EPtr to an EBuffer that has the values) or by using the simple API (which uses
        TypedValue as a trade-off between power and convenience).

        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunction):
        * WebGPUShadingLanguageRI/EFloat.js: Removed.
        * WebGPUShadingLanguageRI/EInt.js: Removed.
        * WebGPUShadingLanguageRI/EPtr.js:
        (EPtr.box):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitIntLiteral):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics):
        * WebGPUShadingLanguageRI/Test.js:
        (makeInt):
        (checkInt):
        (TEST_add1):
        (TEST_simpleGeneric):
        (TEST_simpleAssignment):
        (TEST_simpleDefault):
        * WebGPUShadingLanguageRI/TypedValue.js: Added.
        (TypedValue):
        (TypedValue.prototype.toString):

2017-08-31  David Quesada  <david_quesada@apple.com>

        WKNavigationDelegatePrivate client redirect SPI needs to be able to detect redirects scheduled before the document finishes loading
        https://bugs.webkit.org/show_bug.cgi?id=176128
        rdar://problem/34068476

        Reviewed by Brady Eidson.

        Removed API test for the deleted WKNavigationDelegatePrivate method,
        and added two new tests for the two new methods.

        * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
        (-[ClientRedirectNavigationDelegate _webView:willPerformClientRedirectToURL:delay:]):
        (-[ClientRedirectNavigationDelegate _webViewDidCancelClientRedirect:]):
        (-[ClientRedirectNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL should handle variable assignments and variable declarations
        https://bugs.webkit.org/show_bug.cgi?id=176180

        Reviewed by Saam Barati.
        
        Just fills in VariableDecl and Assignment logic so that we can test variables.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype._createEPtrForNode):
        (EBufferBuilder.prototype.visitFuncParameter):
        (EBufferBuilder.prototype.visitVariableDecl):
        (EBufferBuilder):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitVariableDecl):
        (Evaluator.prototype.visitAssignment):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitVariableDecl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFuncParameter):
        (Rewriter.prototype.visitVariableDecl):
        * WebGPUShadingLanguageRI/Test.js:
        (makeInt):
        (TEST_add1):
        (TEST_simpleGeneric):
        (TEST_simpleAssignment):
        (TEST_simpleDefault):
        * WebGPUShadingLanguageRI/Visitor.js:
        (Visitor.prototype.visitVariableDecl):

2017-08-31  Chris Dumez  <cdumez@apple.com>

        getFileMetadata() does not work as expected for symbolic links
        https://bugs.webkit.org/show_bug.cgi?id=176143

        Reviewed by Andreas Kling.

        Add API test coverage.

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

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        WSL parser should pass the token as the origin to the AST
        https://bugs.webkit.org/show_bug.cgi?id=176177

        Reviewed by Keith Miller.
        
        Parse.js was sometimes passing token.origin as the origin, but that's just the filename
        component of the origin. This fixes the problem and adds a test. The test previously failed
        because instead of reporting the origin of the type error as "<test>:1", it reported undefined.

        * WebGPUShadingLanguageRI/Parse.js:
        (parseProtocolRef):
        (consumeEndOfTypeArgs):
        (parseTypeParameters):
        (parseTerm):
        (parseTypeArguments):
        (parseType):
        (parseTypeDef):
        (parseNative):
        (parseLeftOperatorCall):
        (parsePossibleSuffix):
        (parsePossiblePrefix):
        (parsePossibleRelationalEquality):
        (parseLeftLogicalExpression):
        (parsePossibleTernaryConditional):
        (parsePossibleAssignment):
        (genericParseCommaExpression):
        (parseReturn):
        (parseVariableDecls):
        (parseBlock):
        * WebGPUShadingLanguageRI/Test.js:
        (checkFail):
        (TEST_nameResolutionFailure):

2017-08-31  Keith Miller  <keith_miller@apple.com>

        Add a filter argument to WSL test suite.
        https://bugs.webkit.org/show_bug.cgi?id=176176

        Reviewed by Filip Pizlo.

        * WebGPUShadingLanguageRI/Test.js:
        (this.string_appeared_here.i.switch):
        (let.s.in.this.s.startsWith.string_appeared_here.s.match):
        (let.s.in.this.s.startsWith): Deleted.

2017-08-30  Filip Pizlo  <fpizlo@apple.com>

        WSL should be able to run a program that uses generics
        https://bugs.webkit.org/show_bug.cgi?id=176152

        Reviewed by Keith Miller.
        
        This fixes the WSL parser and type checker to the point that we can:
        
        - Parse a function call!
        - Type check a generic function call with an inferred type parameter.
        - Instantiate a generic function.
        - Inline a function call.
        - Evaluate an inlined function call.
        
        This also changes the test suite so that it's a little nicer to add new tests. Functions whose
        names start with "TEST_" are tests.

        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/EBufferBuilder.js:
        (EBufferBuilder.prototype.visitFuncParameter):
        (EBufferBuilder):
        * WebGPUShadingLanguageRI/Evaluator.js:
        (Evaluator.prototype.visitFunctionLikeBlock):
        * WebGPUShadingLanguageRI/FuncDef.js:
        (FuncDef.prototype.toString):
        (FuncDef):
        * WebGPUShadingLanguageRI/FuncInstantiator.js:
        (FuncInstantiator.prototype.getUnique):
        (FuncInstantiator):
        * WebGPUShadingLanguageRI/Inliner.js:
        (Inliner.prototype.visitCallExpression):
        (Inliner):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer):
        * WebGPUShadingLanguageRI/NameContext.js:
        (NameContext):
        (NameContext.prototype.add):
        (NameContext.prototype.get let):
        (NameContext.prototype.defineAll):
        (NameContext.get intrinsics): Deleted.
        (NameContext.set program): Deleted.
        (NameContext.get program): Deleted.
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype.visitProgram):
        * WebGPUShadingLanguageRI/Parse.js:
        (parseTerm):
        (parsePossibleSuffix):
        (genericParseCommaExpression):
        (parseReturn):
        * WebGPUShadingLanguageRI/Program.js:
        (Program.prototype.resolveFuncOverload):
        * WebGPUShadingLanguageRI/ProtocolDecl.js:
        (ProtocolDecl.prototype.inherits):
        * WebGPUShadingLanguageRI/ResolveOverloadImpl.js:
        (resolveOverloadImpl):
        * WebGPUShadingLanguageRI/Rewriter.js:
        (Rewriter.prototype.visitFuncParameter):
        (Rewriter.prototype.visitCallExpression):
        (Rewriter.prototype._map): Deleted.
        * WebGPUShadingLanguageRI/Test.js:
        (checkInt):
        (TEST_add1):
        (TEST_simpleGeneric):
        (let.s.in.this.s.startsWith):
        (load): Deleted.
        * WebGPUShadingLanguageRI/TypeVariable.js:
        (TypeVariable.prototype.typeVariableUnify):
        * WebGPUShadingLanguageRI/UnificationContext.js:
        (UnificationContext.prototype.union):

2017-08-30  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's didClickAutoFillButton
        https://bugs.webkit.org/show_bug.cgi?id=176139
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/ClickAutoFillButton.mm: Added.
        (didClickAutoFillButton):
        (-[ClickAutoFillButton webProcessPlugIn:didCreateBrowserContextController:]):
        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        (-[AutoFillDelegate _webView:didClickAutoFillButtonWithUserInfo:]):
        (-[AutoFillDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Several InputMethodFilter tests are failing and crashing
        https://bugs.webkit.org/show_bug.cgi?id=176158

        Reviewed by Carlos Alberto Lopez Perez.

        This started to happen after the GTK+ upgrade from 3.16 to 3.22 in the internal jhbuild. Now, GtkIMContext
        doesn't emit the preedit signals when using the compose key (GDK_KEY_Multi_key). The composition results are
        committed directly when they are ready. The test InputMethodFilterComposeKey was failing because it expected
        preedit events that no longer happen. Tests InputMethodFilterContextFocusOutDuringOngoingComposition and
        InputMethodFilterContextMouseClickDuringOngoingComposition were crashing because InputMethodFilter::confirmCurrentComposition()
        accessed the WebPageProxy unconditionally, that is not available in testing mode. I wonder how this ever
        worked. Other tests results have also been updated because logHandleKeyboardEventWithCompositionResultsForTesting()
        now uses hexadecimal numbers for the key codes, for consistency with all other event logs.

        * TestWebKitAPI/Tests/WebKit/gtk/InputMethodFilter.cpp:
        (TestWebKitAPI::TestInputMethodFilter::TestInputMethodFilter):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::verifyCanceledComposition): Deleted.

2017-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Wayland] Crash when gdk_keymap_get_entries_for_keyval returns TRUE but n_keys=0
        https://bugs.webkit.org/show_bug.cgi?id=176154

        Reviewed by Carlos Alberto Lopez Perez.

        Also check the n_keys > 0 when using gdk_keymap_get_entries_for_keyval().

        * TestWebKitAPI/Tests/WebKit/gtk/InputMethodFilter.cpp:
        (TestWebKitAPI::TestInputMethodFilter::sendKeyEventToFilter):
        * TestWebKitAPI/Tests/WebKitGtk/TestPrinting.cpp: Remove duplicated code and use WebViewTest::keyStroke instead.
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp:
        (WebViewTest::keyStroke):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::doKeyStroke):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::keyDown):

2017-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitAutomationSession/request-session.

        It fails when comparing the browser version if micro version is 0 (or if both micro and minor are 0 too).

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: Use a helper method to convert major, minor, micro
        numbers into a version string, using the same approach as WebKitAutomationSession.

2017-08-30  Dan Bernstein  <mitz@apple.com>

        [iOS] REGRESSION (r218144) -[WKContentView targetForAction:withSender:] returns the content view for actions implemented only by the WKWebView, causing a crash
        https://bugs.webkit.org/show_bug.cgi?id=176077
        <rdar://problem/34145200>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKitCocoa/WKContentViewTargetForAction.mm: Added.
        (-[TestWKContentViewTargetForActionView testAction:]):
        (TEST):
        * TestWebKitAPI/ios/UIKitSPI.h:

2017-08-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies script should install CUPS headers
        https://bugs.webkit.org/show_bug.cgi?id=176129

        Reviewed by Michael Catanzaro.
        
        When building GTK+ on the JHBuild, it will enable the CUPS print
        backend if the CUPS headers are installed. Having a print backend
        on GTK+ is needed for the print-related API tests.

        * gtk/install-dependencies:

2017-08-30  Filip Pizlo  <fpizlo@apple.com>

        Rename ArrayLang to WebGPU Shading Language, or WSL for short, pronounced "whistle"
        https://bugs.webkit.org/show_bug.cgi?id=176117

        Reviewed by Myles Maxfield.
        
        Renamed ArrayLangRI to WebGPUShadingLanguageRI.
        
        Renamed ALSyntaxError/ALTypeError to WSyntaxError/WTypeError.
        
        Renamed all references to "ArrayLang" in the code to "WSL".

        * ArrayLangRI: Removed.
        * ArrayLangRI/ALSyntaxError.js: Removed.
        * ArrayLangRI/ALTypeError.js: Removed.
        * ArrayLangRI/AddressSpace.js: Removed.
        * ArrayLangRI/All.js: Removed.
        * ArrayLangRI/ArrayRefType.js: Removed.
        * ArrayLangRI/ArrayType.js: Removed.
        * ArrayLangRI/Assignment.js: Removed.
        * ArrayLangRI/Block.js: Removed.
        * ArrayLangRI/CallAssignment.js: Removed.
        * ArrayLangRI/CallExpression.js: Removed.
        * ArrayLangRI/CallFunction.js: Removed.
        * ArrayLangRI/Check.js: Removed.
        * ArrayLangRI/Checker.js: Removed.
        * ArrayLangRI/CommaExpression.js: Removed.
        * ArrayLangRI/ConstexprTypeParameter.js: Removed.
        * ArrayLangRI/EBuffer.js: Removed.
        * ArrayLangRI/EBufferBuilder.js: Removed.
        * ArrayLangRI/EFloat.js: Removed.
        * ArrayLangRI/EInt.js: Removed.
        * ArrayLangRI/EPtr.js: Removed.
        * ArrayLangRI/EValue.js: Removed.
        * ArrayLangRI/EvaluationCommon.js: Removed.
        * ArrayLangRI/Evaluator.js: Removed.
        * ArrayLangRI/Expression.js: Removed.
        * ArrayLangRI/Field.js: Removed.
        * ArrayLangRI/Func.js: Removed.
        * ArrayLangRI/FuncDef.js: Removed.
        * ArrayLangRI/FuncInstantiator.js: Removed.
        * ArrayLangRI/FuncParameter.js: Removed.
        * ArrayLangRI/FunctionLikeBlock.js: Removed.
        * ArrayLangRI/Inline.js: Removed.
        * ArrayLangRI/Inliner.js: Removed.
        * ArrayLangRI/InstantiateImmediates.js: Removed.
        * ArrayLangRI/IntLiteral.js: Removed.
        * ArrayLangRI/Intrinsics.js: Removed.
        * ArrayLangRI/Lexer.js: Removed.
        * ArrayLangRI/LexerToken.js: Removed.
        * ArrayLangRI/NameContext.js: Removed.
        * ArrayLangRI/NameResolver.js: Removed.
        * ArrayLangRI/NativeFunc.js: Removed.
        * ArrayLangRI/NativeType.js: Removed.
        * ArrayLangRI/NativeTypeInstance.js: Removed.
        * ArrayLangRI/Node.js: Removed.
        * ArrayLangRI/NullType.js: Removed.
        * ArrayLangRI/Parse.js: Removed.
        * ArrayLangRI/Prepare.js: Removed.
        * ArrayLangRI/Program.js: Removed.
        * ArrayLangRI/Protocol.js: Removed.
        * ArrayLangRI/ProtocolDecl.js: Removed.
        * ArrayLangRI/ProtocolRef.js: Removed.
        * ArrayLangRI/PtrType.js: Removed.
        * ArrayLangRI/ReferenceType.js: Removed.
        * ArrayLangRI/ResolveNames.js: Removed.
        * ArrayLangRI/ResolveOverloadImpl.js: Removed.
        * ArrayLangRI/ResolveTypeDefs.js: Removed.
        * ArrayLangRI/Return.js: Removed.
        * ArrayLangRI/ReturnException.js: Removed.
        * ArrayLangRI/Rewriter.js: Removed.
        * ArrayLangRI/StandardLibrary.js: Removed.
        * ArrayLangRI/StructType.js: Removed.
        * ArrayLangRI/Substitution.js: Removed.
        * ArrayLangRI/SuffixCallAssignment.js: Removed.
        * ArrayLangRI/Test.js: Removed.
        * ArrayLangRI/Type.js: Removed.
        * ArrayLangRI/TypeDef.js: Removed.
        * ArrayLangRI/TypeDefResolver.js: Removed.
        * ArrayLangRI/TypeOrVariableRef.js: Removed.
        * ArrayLangRI/TypeRef.js: Removed.
        * ArrayLangRI/TypeVariable.js: Removed.
        * ArrayLangRI/UnificationContext.js: Removed.
        * ArrayLangRI/Value.js: Removed.
        * ArrayLangRI/VariableDecl.js: Removed.
        * ArrayLangRI/VariableRef.js: Removed.
        * ArrayLangRI/VisitingSet.js: Removed.
        * ArrayLangRI/Visitor.js: Removed.
        * WebGPUShadingLanguageRI: Copied from Tools/ArrayLangRI.
        * WebGPUShadingLanguageRI/ALSyntaxError.js: Removed.
        * WebGPUShadingLanguageRI/ALTypeError.js: Removed.
        * WebGPUShadingLanguageRI/All.js:
        * WebGPUShadingLanguageRI/CallFunction.js:
        (callFunctionByRef):
        * WebGPUShadingLanguageRI/Checker.js:
        (Checker.prototype.visitProtocolDecl.set throw):
        * WebGPUShadingLanguageRI/Intrinsics.js:
        (Intrinsics.prototype.add):
        (Intrinsics):
        * WebGPUShadingLanguageRI/Lexer.js:
        (Lexer):
        * WebGPUShadingLanguageRI/NameContext.js:
        (NameContext.prototype.add):
        * WebGPUShadingLanguageRI/NameResolver.js:
        (NameResolver.prototype._resolveTypeArguments):
        (NameResolver.prototype.visitTypeRef):
        (NameResolver.prototype.visitVariableRef):
        * WebGPUShadingLanguageRI/Parse.js:
        * WebGPUShadingLanguageRI/StandardLibrary.js:
        * WebGPUShadingLanguageRI/StructType.js:
        (StructType.prototype.add):
        (StructType.prototype.instantiate):
        * WebGPUShadingLanguageRI/TypeDefResolver.js:
        (TypeDefResolver.prototype.visitTypeRef):
        (TypeDefResolver):
        * WebGPUShadingLanguageRI/VisitingSet.js:
        (VisitingSet.prototype.doVisit):
        (VisitingSet):
        * WebGPUShadingLanguageRI/WSyntaxError.js: Copied from Tools/ArrayLangRI/ALSyntaxError.js.
        (ALSyntaxError): Deleted.
        * WebGPUShadingLanguageRI/WTypeError.js: Copied from Tools/ArrayLangRI/ALTypeError.js.
        (ALTypeError): Deleted.

2017-08-30  Eric Carlson  <eric.carlson@apple.com>

        Add Logger observer and helper class
        https://bugs.webkit.org/show_bug.cgi?id=176106

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::LoggingTest::LoggingTest):
        (TestWebKitAPI::LoggingTest::Logger::create):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::LogObserver::log):
        (TestWebKitAPI::LogObserver::channel const):

2017-08-29  Filip Pizlo  <fpizlo@apple.com>

        Initial reference implementation scaffolding for ArrayLang
        https://bugs.webkit.org/show_bug.cgi?id=175925

        Reviewed by Myles Maxfield.
        
        This introduces a very rough scaffolding for an AST walk interpreter and type checker for an
        experimental shader language we are calling ArrayLang for now.
        
        The idea is to have a strong core type system that includes generics and memory-safe pointers
        and array references. Everything has deterministic semantics right up to the limit of what is
        portably possible.
        
        This language will support generics. This will be valid:
        
        protocol Addable { Addable operator+(Addable, Addable); }
        T add<T:Addable>(T a, T b) { return a + b; }
        
        This language will support pointers and array references. This will be valid:
        
        thread int^ foo() { int x; return \x; }
        
        Each variable behaves as if it was declared "static", with one copy per type instantiation.
        Functions cannot recurse and there is no stack.
        
        Currently, this just tests that the following function can be parsed, checked, and called:
        
        int foo(int x) { return x + 1; }

        * ArrayLangRI: Added.
        * ArrayLangRI/ALSyntaxError.js: Added.
        (ALSyntaxError):
        * ArrayLangRI/ALTypeError.js: Added.
        (ALTypeError):
        * ArrayLangRI/AddressSpace.js: Added.
        (isAddressSpace):
        (validateAddressSpace):
        * ArrayLangRI/All.js: Added.
        * ArrayLangRI/ArrayRefType.js: Added.
        (ArrayRefType.prototype.unifyImpl):
        (ArrayRefType.prototype.toString):
        (ArrayRefType):
        * ArrayLangRI/ArrayType.js: Added.
        (ArrayType):
        (ArrayType.prototype.get origin):
        (ArrayType.prototype.get elementType):
        (ArrayType.prototype.get numElements):
        (ArrayType.prototype.get isPrimitive):
        (ArrayType.prototype.toString):
        (ArrayType.prototype.get size):
        (ArrayType.prototype.unifyImpl):
        * ArrayLangRI/Assignment.js: Added.
        (Assignment):
        (Assignment.prototype.get lhs):
        (Assignment.prototype.get rhs):
        (Assignment.prototype.toString):
        * ArrayLangRI/Block.js: Added.
        (Block):
        (Block.prototype.get origin):
        (Block.prototype.add):
        (Block.prototype.get statements):
        (Block.prototype.toString):
        * ArrayLangRI/CallAssignment.js: Added.
        (CallAssignment):
        (CallAssignment.prototype.get name):
        (CallAssignment.prototype.get lhs):
        (CallAssignment.prototype.get rhs):
        (CallAssignment.prototype.toString):
        * ArrayLangRI/CallExpression.js: Added.
        (CallExpression):
        (CallExpression.prototype.get name):
        (CallExpression.prototype.get typeArguments):
        (CallExpression.prototype.get argumentList):
        (CallExpression.prototype.toString):
        * ArrayLangRI/CallFunction.js: Added.
        (callFunctionByRef):
        (callFunction):
        * ArrayLangRI/Check.js: Added.
        (check):
        * ArrayLangRI/Checker.js: Added.
        (Checker):
        (Checker.prototype.visitProgram):
        (Checker.prototype.visitProtocolDecl.NoticeTypeVariable.prototype.visitTypeRef):
        (Checker.prototype.visitProtocolDecl.NoticeTypeVariable.prototype.visitVariableRef):
        (Checker.prototype.visitProtocolDecl.NoticeTypeVariable):
        (Checker.prototype.visitProtocolDecl.set throw):
        * ArrayLangRI/CommaExpression.js: Added.
        (CommaExpression):
        (CommaExpression.prototype.get list):
        (CommaExpression.prototype.toString):
        * ArrayLangRI/ConstexprTypeParameter.js: Added.
        (ConstexprTypeParameter):
        (ConstexprTypeParameter.prototype.get name):
        (ConstexprTypeParameter.prototype.get type):
        (ConstexprTypeParameter.prototype.get isConstexpr):
        (ConstexprTypeParameter.prototype.get isUnifiable):
        (ConstexprTypeParameter.prototype.typeVariableUnify):
        (ConstexprTypeParameter.prototype.unifyImpl):
        (ConstexprTypeParameter.prototype.verifyAsArgument):
        (ConstexprTypeParameter.prototype.verifyAsParameter):
        (ConstexprTypeParameter.prototype.toString):
        * ArrayLangRI/EBuffer.js: Added.
        (EBuffer):
        (EBuffer.get index):
        * ArrayLangRI/EBufferBuilder.js: Added.
        (EBufferBuilder):
        (EBufferBuilder.prototype._createEPtr):
        (EBufferBuilder.prototype.visitFuncParameter):
        * ArrayLangRI/EFloat.js: Added.
        (EFloat):
        (EFloat.prototype.get value):
        (EFloat.prototype.add):
        (EFloat.prototype.toString):
        * ArrayLangRI/EInt.js: Added.
        (EInt):
        (EInt.prototype.get value):
        (EInt.prototype.add):
        (EInt.prototype.toString):
        * ArrayLangRI/EPtr.js: Added.
        (EPtr):
        (EPtr.box):
        (EPtr.prototype.get buffer):
        (EPtr.prototype.get offset):
        (EPtr.prototype.loadValue):
        (EPtr.prototype.copyFrom):
        (EPtr.prototype.toString):
        * ArrayLangRI/EValue.js: Added.
        (EValue):
        (EValue.prototype.get type):
        * ArrayLangRI/EvaluationCommon.js: Added.
        * ArrayLangRI/Evaluator.js: Added.
        (Evaluator):
        (Evaluator.prototype.visitFunctionBody):
        (Evaluator.prototype.visitFunctionLikeBlock):
        (Evaluator.prototype.visitReturn):
        (Evaluator.prototype.visitCommaExpression):
        (Evaluator.prototype.visitVariableRef):
        (Evaluator.prototype.visitIntLiteral):
        (Evaluator.prototype.visitCallExpression):
        * ArrayLangRI/Expression.js: Added.
        (Expression):
        (Expression.prototype.get origin):
        * ArrayLangRI/Field.js: Added.
        (Field):
        (Field.prototype.get origin):
        (Field.prototype.get name):
        (Field.prototype.get type):
        (Field.prototype.toString):
        * ArrayLangRI/Func.js: Added.
        (Func):
        (Func.prototype.get name):
        (Func.prototype.get returnType):
        (Func.prototype.get typeParameters):
        (Func.prototype.get parameters):
        (Func.prototype.get parameterTypes):
        (Func.prototype.get kind):
        (Func.prototype.toString):
        * ArrayLangRI/FuncDef.js: Added.
        (FuncDef):
        (FuncDef.prototype.get origin):
        (FuncDef.prototype.toString):
        * ArrayLangRI/FuncInstantiator.js: Added.
        (FuncInstantiator):
        (FuncInstantiator.prototype.getUnique):
        * ArrayLangRI/FuncParameter.js: Added.
        (FuncParameter):
        (FuncParameter.prototype.get origin):
        (FuncParameter.prototype.get name):
        (FuncParameter.prototype.get type):
        (FuncParameter.prototype.toString):
        * ArrayLangRI/FuncSignature.js: Added.
        * ArrayLangRI/FunctionLikeBlock.js: Added.
        (FunctionLikeBlock):
        (FunctionLikeBlock.prototype.get origin):
        (FunctionLikeBlock.prototype.get argumentList):
        (FunctionLikeBlock.prototype.get parameters):
        (FunctionLikeBlock.prototype.get body):
        (FunctionLikeBlock.prototype.toString):
        * ArrayLangRI/Inline.js: Added.
        (inline):
        (_inlineFunction):
        (resolveInlinedFunction):
        * ArrayLangRI/Inliner.js: Added.
        (Inliner):
        (Inliner.prototype.visitCallExpression):
        * ArrayLangRI/InstantiateImmediates.js: Added.
        (InstantiateImmediates.prototype.visitTypeRef):
        (InstantiateImmediates.prototype.visitReferenceType):
        (InstantiateImmediates.prototype.visitStructType):
        (InstantiateImmediates.prototype.visitNativeType):
        (InstantiateImmediates.prototype.visitTypeVariable):
        (InstantiateImmediates):
        * ArrayLangRI/IntLiteral.js: Added.
        (IntLiteral):
        (IntLiteral.prototype.get value):
        (IntLiteral.prototype.get isConstexpr):
        (IntLiteral.prototype.toString):
        * ArrayLangRI/Intrinsics.js: Added.
        (Intrinsics):
        (Intrinsics.prototype.add):
        * ArrayLangRI/Lexer.js: Added.
        (Lexer):
        (Lexer.prototype.get lineNumber):
        (Lexer.prototype.get origin):
        (Lexer.prototype.get originString):
        (Lexer.prototype.lineNumberForIndex):
        (Lexer.prototype.get state):
        (Lexer.prototype.set state):
        (Lexer.prototype.next):
        * ArrayLangRI/LexerToken.js: Added.
        (LexerToken):
        (LexerToken.prototype.get kind):
        (LexerToken.prototype.get text):
        (LexerToken.prototype.get origin):
        (LexerToken.prototype.get index):
        (LexerToken.prototype.get lineNumber):
        (LexerToken.prototype.get originString):
        (LexerToken.prototype.toString):
        * ArrayLangRI/NameContext.js: Added.
        (isWildcardKind):
        (NameContext):
        (NameContext.prototype.mapFor):
        (NameContext.prototype.add):
        (NameContext.get currentStatement):
        (NameContext.get intrinsics):
        (NameContext.set program):
        (NameContext.get program):
        (NameContext.prototype.get let):
        * ArrayLangRI/NameResolver.js: Added.
        (NameResolver):
        (NameResolver.prototype.visitProgram):
        (NameResolver.prototype._visitTypeParametersAndBuildNameContext):
        (NameResolver.prototype.visitFunc):
        (NameResolver.prototype.visitFuncDef):
        (NameResolver.prototype.visitBlock):
        (NameResolver.prototype.visitProtocolDecl):
        (NameResolver.prototype.visitTypeDef):
        (NameResolver.prototype.visitStructType):
        (NameResolver.prototype._resolveTypeArguments):
        (NameResolver.prototype.visitTypeRef):
        (NameResolver.prototype.visitReferenceType):
        (NameResolver.prototype.visitVariableRef):
        (NameResolver.prototype.visitReturn):
        (NameResolver.prototype.visitCallExpression):
        * ArrayLangRI/NativeFunc.js: Added.
        (NativeFunc):
        (NativeFunc.prototype.get origin):
        (NativeFunc.prototype.get isNative):
        (NativeFunc.prototype.toString):
        * ArrayLangRI/NativeType.js: Added.
        (NativeType):
        (NativeType.prototype.get origin):
        (NativeType.prototype.get name):
        (NativeType.prototype.get isPrimitive):
        (NativeType.prototype.get typeParameters):
        (NativeType.prototype.get isNative):
        (NativeType.prototype.instantiate):
        (NativeType.prototype.toString):
        * ArrayLangRI/NativeTypeInstance.js: Added.
        (NativeTypeInstance):
        (NativeTypeInstance.prototype.get type):
        (NativeTypeInstance.prototype.get typeArguments):
        (NativeTypeInstance.prototype.get isPrimitive):
        (NativeTypeInstance.prototype.get isNative):
        (NativeTypeInstance.prototype.unifyImpl):
        (NativeTypeInstance.prototype.toString):
        * ArrayLangRI/Node.js: Added.
        (Node.prototype.visit):
        (Node.unify):
        (Node.prototype.unifyImpl):
        (Node.prototype.typeVariableUnify):
        (Node.prototype.get unifyNode):
        (Node.prototype.get isUnifiable):
        (Node.prototype.get isNative):
        (Node.prototype.equals):
        (Node.prototype.substitute):
        (Node.prototype.substituteToUnification):
        (Node):
        * ArrayLangRI/NullType.js: Added.
        (NullType):
        * ArrayLangRI/Parse.js: Added.
        (genericConsume):
        (consume):
        (genericTest):
        (test):
        (tryConsumeKind):
        (parseProtocolRef):
        (consumeEndOfTypeArgs):
        (parseTypeParameters):
        (parseTerm):
        (parseConstexpr):
        (parseTypeArguments):
        (parseType.getAddressSpace):
        (parseType):
        (parseTypeDef):
        (parseNative):
        (genericParseLeft):
        (parseLeftOperatorCall):
        (parsePossibleSuffix):
        (parsePossiblePrefix):
        (parsePossibleProduct):
        (parsePossibleSum):
        (parsePossibleShift):
        (parsePossibleRelationalInequality):
        (parsePossibleRelationalEquality):
        (parsePossibleBitwiseXor):
        (parsePossibleBitwiseOr):
        (parseLeftLogicalExpression):
        (parsePossibleLogicalOr):
        (parsePossibleTernaryConditional):
        (parsePossibleAssignment):
        (parseAssignment):
        (parseEffectfulExpression):
        (genericParseCommaExpression):
        (parseCommaExpression):
        (parseExpression):
        (parseEffectfulStatement):
        (parseReturn):
        (parseVariableDecls):
        (parseStatement):
        (parseBlock):
        (parseParameter):
        (parseFuncName):
        (parseFuncDef):
        (parse):
        * ArrayLangRI/Prepare.js: Added.
        (prepare):
        * ArrayLangRI/Program.js: Added.
        (Program):
        (Program.prototype.get topLevelStatements):
        (Program.prototype.get functions):
        (Program.prototype.get types):
        (Program.prototype.get funcInstantiator):
        (Program.prototype.add):
        (Program.prototype.resolveFuncOverload):
        (Program.prototype.get nameContext):
        (Program.prototype.toString):
        * ArrayLangRI/Protocol.js: Added.
        (Protocol):
        (Protocol.prototype.get origin):
        (Protocol.prototype.get name):
        (Protocol.prototype.get kind):
        (Protocol.prototype.toString):
        * ArrayLangRI/ProtocolDecl.js: Added.
        (ProtocolDecl):
        (ProtocolDecl.prototype.addSignature):
        (ProtocolDecl.prototype.get signatures):
        (ProtocolDecl.prototype.signaturesByName):
        (ProtocolDecl.prototype.get typeVariable):
        (ProtocolDecl.prototype.signaturesByNameWithTypeVariable):
        (ProtocolDecl.prototype.inherits):
        (ProtocolDecl.prototype.hasHeir):
        (ProtocolDecl.prototype.toString):
        * ArrayLangRI/ProtocolRef.js: Added.
        (ProtocolRef):
        (ProtocolRef.prototype.inherits):
        (ProtocolRef.prototype.hasHeir):
        * ArrayLangRI/PtrType.js: Added.
        (PtrType.prototype.unifyImpl):
        (PtrType.prototype.toString):
        (PtrType):
        * ArrayLangRI/ReferenceType.js: Added.
        (ReferenceType):
        (ReferenceType.prototype.get origin):
        (ReferenceType.prototype.get addressSpace):
        (ReferenceType.prototype.get elementType):
        (ReferenceType.prototype.get isPrimitive):
        (ReferenceType.prototype.get size):
        * ArrayLangRI/ResolveNames.js: Added.
        (resolveNames):
        * ArrayLangRI/ResolveOverloadImpl.js: Added.
        (resolveOverloadImpl):
        * ArrayLangRI/ResolveTypeDefs.js: Added.
        (resolveTypeDefs):
        * ArrayLangRI/Return.js: Added.
        (Return):
        (Return.prototype.get origin):
        (Return.prototype.get value):
        (Return.prototype.toString):
        * ArrayLangRI/ReturnException.js: Added.
        (ReturnException):
        (ReturnException.prototype.get value):
        * ArrayLangRI/Rewriter.js: Added.
        (Rewriter):
        (Rewriter.prototype._map):
        (Rewriter.prototype._getMapping):
        (Rewriter.prototype.visitFunc):
        (Rewriter.prototype.visitFuncParameter):
        (Rewriter.prototype.visitBlock):
        (Rewriter.prototype.visitCommaExpression):
        (Rewriter.prototype.visitProtocolRef):
        (Rewriter.prototype.visitTypeRef):
        (Rewriter.prototype.visitTypeVariable):
        (Rewriter.prototype.visitConstexprTypeParameter):
        (Rewriter.prototype.visitField):
        (Rewriter.prototype.visitReferenceType):
        (Rewriter.visitPtrType):
        (Rewriter.prototype.visitArrayRefType):
        (Rewriter.prototype.visitArrayType):
        (Rewriter.prototype.visitAssignment):
        (Rewriter.prototype.visitVariableRef):
        (Rewriter.prototype.visitReturn):
        (Rewriter.prototype.visitIntLiteral):
        (Rewriter.prototype.visitCallExpression):
        (Rewriter.prototype.visitFunctionLikeBlock):
        * ArrayLangRI/StandardLibrary.js: Added.
        * ArrayLangRI/StructType.js: Added.
        (StructType):
        (StructType.prototype.add):
        (StructType.prototype.get name):
        (StructType.prototype.get typeParameters):
        (StructType.prototype.get fieldNames):
        (StructType.prototype.fieldByName):
        (StructType.prototype.get fields):
        (StructType.prototype.get fieldMap):
        (StructType.prototype.get isPrimitive):
        (StructType.prototype.instantiate):
        (StructType.prototype.toString):
        * ArrayLangRI/Substitution.js: Added.
        (Substitution):
        (Substitution.mapping):
        (Substitution.prototype.visitTypeRef):
        (Substitution.prototype.visitVariableRef):
        * ArrayLangRI/SuffixCallAssignment.js: Added.
        (SuffixCallAssignment):
        (SuffixCallAssignment.prototype.get name):
        (SuffixCallAssignment.prototype.get lhs):
        (SuffixCallAssignment.prototype.toString):
        * ArrayLangRI/Test.js: Added.
        (load):
        * ArrayLangRI/Type.js: Added.
        (Type.prototype.get typeParameters):
        (Type.prototype.get kind):
        (Type.prototype.inherits):
        (Type.prototype.get instantiatedType):
        (Type):
        * ArrayLangRI/TypeDef.js: Added.
        (TypeDef):
        (TypeDef.prototype.get origin):
        (TypeDef.prototype.get name):
        (TypeDef.prototype.get typeParameters):
        (TypeDef.prototype.get type):
        * ArrayLangRI/TypeDefResolver.js: Added.
        (TypeDefResolver):
        (TypeDefResolver.prototype.visitTypeRef):
        * ArrayLangRI/TypeOrVariableRef.js: Added.
        (TypeOrVariableRef):
        (TypeOrVariableRef.prototype.get origin):
        (TypeOrVariableRef.prototype.get name):
        (TypeOrVariableRef.prototype.toString):
        * ArrayLangRI/TypeRef.js: Added.
        (TypeRef):
        (TypeRef.wrap):
        (TypeRef.prototype.get origin):
        (TypeRef.prototype.get name):
        (TypeRef.prototype.get typeArguments):
        (TypeRef.prototype.get isPrimitive):
        (TypeRef.prototype.get instantiatedType):
        (TypeRef.prototype.get unifyNode):
        (TypeRef.prototype.populateDefaultValue):
        (TypeRef.prototype.get size):
        (TypeRef.prototype.setTypeAndArguments):
        (TypeRef.prototype.unifyImpl):
        (TypeRef.prototype.toString):
        * ArrayLangRI/TypeVariable.js: Added.
        (TypeVariable):
        (TypeVariable.prototype.get name):
        (TypeVariable.prototype.get protocol):
        (TypeVariable.prototype.get isPrimitive):
        (TypeVariable.prototype.get isUnifiable):
        (TypeVariable.prototype.inherits):
        (TypeVariable.prototype.typeVariableUnify):
        (TypeVariable.prototype.unifyImpl):
        (TypeVariable.prototype.verifyAsArgument):
        (TypeVariable.prototype.verifyAsParameter):
        (TypeVariable.prototype.toString):
        * ArrayLangRI/UnificationContext.js: Added.
        (UnificationContext):
        (UnificationContext.prototype.union):
        (UnificationContext.prototype.find):
        (UnificationContext.prototype.get nodes):
        (UnificationContext.prototype.verify):
        (UnificationContext.prototype.isUnunified):
        * ArrayLangRI/Value.js: Added.
        (Value.prototype.get kind):
        (Value.prototype.get isConstexpr):
        (Value):
        * ArrayLangRI/VariableDecl.js: Added.
        (VariableDecl):
        (VariableDecl.prototype.get origin):
        (VariableDecl.prototype.get name):
        (VariableDecl.prototype.get type):
        (VariableDecl.prototype.get initializer):
        (VariableDecl.prototype.toString):
        * ArrayLangRI/VariableRef.js: Added.
        (VariableRef):
        (VariableRef.prototype.get name):
        (VariableRef.prototype.get isConstexpr):
        (VariableRef.prototype.get unifyNode):
        (VariableRef.prototype.toString):
        * ArrayLangRI/VisitingSet.js: Added.
        (VisitingSet):
        (VisitingSet.prototype.doVisit):
        * ArrayLangRI/Visitor.js: Added.
        (Visitor.prototype.visitProgram):
        (Visitor.prototype.visitFunc):
        (Visitor.prototype.visitFuncParameter):
        (Visitor.prototype.visitFuncDef):
        (Visitor.prototype.visitNativeFunc):
        (Visitor.prototype.visitBlock):
        (Visitor.prototype.visitCommaExpression):
        (Visitor.prototype.visitProtocolRef):
        (Visitor.prototype.visitProtocolDecl):
        (Visitor.prototype.visitTypeRef):
        (Visitor.prototype.visitNativeType):
        (Visitor.prototype.visitTypeDef):
        (Visitor.prototype.visitStructType):
        (Visitor.prototype.visitTypeVariable):
        (Visitor.prototype.visitConstexprTypeParameter):
        (Visitor.prototype.visitField):
        (Visitor.prototype.visitElementalType):
        (Visitor.prototype.visitPtrType):
        (Visitor.prototype.visitArrayRefType):
        (Visitor.prototype.visitArrayType):
        (Visitor.prototype.visitAssignment):
        (Visitor.prototype.visitVariableRef):
        (Visitor.prototype.visitReturn):
        (Visitor.prototype.visitIntLiteral):
        (Visitor.prototype.visitCallExpression):
        (Visitor.prototype.visitFunctionLikeBlock):
        (Visitor):

2017-08-30  Stephan Szabo  <stephan.szabo@sony.com>

        [Win][JSCOnly] Support running JSC tests for win-cairo from windows command prompt
        https://bugs.webkit.org/show_bug.cgi?id=174985

        Reviewed by Keith Miller.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb:
        * Scripts/webkitruby/jsc-stress-test-writer-ruby.rb: Added.

2017-08-30  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Do not use autogen whenever possible in JHBuild modules
        https://bugs.webkit.org/show_bug.cgi?id=176098

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/jhbuild.modules: Added autogen-sh="configure" attributes for many Autootools modules.

2017-08-30  Tomas Popela  <tpopela@redhat.com>

        [GTK] Avoid building fontconfig documentation in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=176097

        Reviewed by Carlos Alberto Lopez Perez.

        Disable building fontconfig documentation in jhbuild as it needs the
        docbook-utils-pdf package installed which depends on quite a few
        packages (on Fedora it's 226 packages (mostly textlive) with installed
        size of 274 MB). The documentation is not needed at all in jhbuild, so
        disable it to save some bandwidth and disc space.

        * gtk/install-dependencies: Pass --disable-docs to fontconfig.
        * gtk/jhbuild.modules: Don't install docbook-utils-pdf on Fedora.

2017-08-30  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, remove trailing space

        * gtk/jhbuildrc:

2017-08-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r221064): [GTK] Editor not correctly working after r221064
        https://bugs.webkit.org/show_bug.cgi?id=176052

        Reviewed by Michael Catanzaro.

        Run the test inside a window to ensure display updates happen.

        * TestWebKitAPI/Tests/WebKitGtk/TestWebViewEditor.cpp:
        (testWebViewEditorEditorStateTypingAttributes):

2017-08-29  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use find_package for zlib
        https://bugs.webkit.org/show_bug.cgi?id=176075

        Reviewed by Alex Christensen.

        * TestWebKitAPI/PlatformWin.cmake:

2017-08-29  Brent Fulgham  <bfulgham@apple.com>

        ResourceLoadStatistics logic does not understand custom WebsiteData stores
        https://bugs.webkit.org/show_bug.cgi?id=176037
        <rdar://problem/33338238>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST): Update for ResourceLoadStatistics directories.

2017-08-29  Brady Eidson  <beidson@apple.com>

        Rename "potentionally trustworthy" to "potentially trustworthy"
        https://bugs.webkit.org/show_bug.cgi?id=176081

        Reviewed by Daniel Bates.

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

2017-08-29  Stephan Szabo  <stephan.szabo@sony.com>

        [Win][JSCOnly] Fix call for updating wincairo-libs in build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=176080

        Reviewed by Brent Fulgham.

        * Scripts/build-jsc:

2017-08-29  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Avoid using autogen for JHBuild modules, trying to fix the EWS

        Unreviewed build fix.

        This also makes the JHBuild process faster, because there are less
        modules which will trigger slow, ancient Perl and M4 based tooling.

        * wpe/jhbuild.modules:

2017-08-29  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use find_package for libxml2 and libxstl
        https://bugs.webkit.org/show_bug.cgi?id=176042

        Reviewed by Konstantin Tokarev.

        * TestWebKitAPI/PlatformWin.cmake:

2017-08-29  Per Arne Vollan  <pvollan@apple.com>

        [Win] A WTF test is timing out in run-api-tests.
        https://bugs.webkit.org/show_bug.cgi?id=176056

        Reviewed by Brent Fulgham.

        The test SynchronizedFixedQueue.ProduceOnly relies on that putting a thread to sleep for
        1ms will wake it up before another thread which is put to sleep for 10ms. I believe this
        is not neccessarily true on Windows where the thread scheduling does not have millisecond
        accuracy. Fix the test timeout by adjusting the sleep time slightly.
 
        * TestWebKitAPI/Tests/WTF/SynchronizedFixedQueue.cpp:
        (TestWebKitAPI::ToUpperConverter::startProducing):

2017-08-29  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, update my watchlist filters.

        * Scripts/webkitpy/common/config/watchlist:

2017-08-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. REGRESSION(r221219): Fix unit tests using resources from WebKit directory.

        The WebKit2 directory was renamed as WebKit in r221219, but neither run-gtk-tests script nor
        Test::getResourcesDir() were updated to use the new name.

        * Scripts/run-gtk-tests:
        (TestRunner._setup_testing_environment):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::getResourcesDir):

2017-08-28  Eric Carlson  <eric.carlson@apple.com>

        Logger should use makeString instead of String::format
        https://bugs.webkit.org/show_bug.cgi?id=176035

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::TEST_F): Update test.

2017-08-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GStreamer] The glvideoflip GStreamer element isn't available. Video mirroring and rotation functionalities are thus disabled.
        https://bugs.webkit.org/show_bug.cgi?id=175576

        Reviewed by Carlos Alberto Lopez Perez.

        Build graphene to enable the glvideoflip element.

        * gstreamer/jhbuild.modules:
        * gtk/jhbuild.modules:
        * jhbuild/jhbuild-wrapper:
        * wpe/jhbuild.modules:

2017-08-28  Ms2ger  <Ms2ger@gmail.com>

        Ensure that the alert function is called in TestWebExtensions.
        https://bugs.webkit.org/show_bug.cgi?id=175880

        Reviewed by Carlos Garcia Campos.

        The test relied on a bug in the HTMLDocument JavaScript bindings: when calling
        document.open() with three arguments, it would call any function set as the
        "open" property on the window object, rather than just the real Window::open()
        method. This bug was fixed by the removal of custom bindings for HTMLDocument
        in r218437. As a result, the test no longer called alert(), which caused it to
        fail.

        Instead, call the window.open() function directly.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (testWebExtensionIsolatedWorld):

2017-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Picking an emoji via the emoji dialog (Ctrl+Cmd+Space) fires inconsistent beforeinput events.
        https://bugs.webkit.org/show_bug.cgi?id=170955
        <rdar://problem/31697653>

        Reviewed by Ryosuke Niwa.

        Replace UIScriptController.insertText with UIScriptController.replaceTextAtRange, and implement
        replaceTextAtRange in WebKit1. See corresponding layout tests (input-event-insert-replacement.html and
        before-input-prevent-insert-replacement.html) for more detail.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/AppKitTestSPI.h: Added.

        Introduce an SPI header for private AppKit headers needed to support DumpRenderTree.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::replaceTextAtRange):
        (WTR::UIScriptController::insertText): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::replaceTextAtRange):
        (WTR::UIScriptController::insertText): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::replaceTextAtRange):
        (WTR::UIScriptController::insertText): Deleted.

        Replace UIScriptController.insertText with UIScriptController.replaceTextAtRange, which better describes the
        behavior of this function.

2017-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Web process crashes after changing selection to the end of the document when speaking a selection
        https://bugs.webkit.org/show_bug.cgi?id=176011
        <rdar://problem/32614095>

        Reviewed by Ryosuke Niwa.

        Introduces AccessibilityTests, and adds three new tests that traverse selection-rect-finding codepaths when
        speaking selected content. See WebKit and WebCore ChangeLogs for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm: Added.
        (-[WKWebView rectsAtSelectionOffset:withText:]):
        (checkCGRectValueAtIndex):
        (TestWebKitAPI::TEST):

2017-08-25  Eric Carlson  <eric.carlson@apple.com>

        Add Logger::logAlways
        https://bugs.webkit.org/show_bug.cgi?id=175996

        Reviewed by Jer Noble.

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

2017-08-25  Alex Christensen  <achristensen@webkit.org>

        Disable saveDataToFile API test.
        https://bugs.webkit.org/show_bug.cgi?id=176000

        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
        The test was only working on High Sierra.  It needs investigation on older operating systems.

2017-08-25  Alex Christensen  <achristensen@webkit.org>

        Rename TestWebKitAPI/Tests/WebKit2* to WebKit* following Source directory rename.

        Rubber-stamped by Brady Eidson.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLs.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLsPlugin.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLsProtocol.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AllAhem.svg: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AlwaysRevalidatedURLSchemes.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ApplicationCache.db: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ApplicationCache.db-shm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ApplicationCache.db-wal: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegatePlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegateProtocol.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParameters.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParametersPlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandlePlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandleProtocol.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresource.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresourcePlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CommandBackForward.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieAcceptPolicy.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieMessage.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Copying.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DecidePolicyForNavigationAction.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DoAfterNextPresentationUpdateAfterCrash.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestBlobURL.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURL.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURL2.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURLFrame.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DuplicateCompletionHandlerCalls.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/EditorStateTests.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/EmptyGrandfatheredResourceLoadStatistics.plist: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FixedLayoutSize.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenDelegate.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenDelegate.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenLayoutConstraints.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenLayoutConstraints.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/FullscreenTopContentInset.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Geolocation.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/GeolocationGetCurrentPositionResult.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.sqlite3: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.sqlite3-shm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.sqlite3-wal: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBIndexUpgradeToV2.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBIndexUpgradeToV2.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IconLoadingDelegate.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexUpgrade.blob: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexUpgrade.sqlite3: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill-1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-2.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-3.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence-1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence-2.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-shm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-wal: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibilityRead.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibilityWrite.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/InitialWarmedProcessUsed.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/InteractionDeadlockAfterCrash.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LineBreaking.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadAlternateHTMLString.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadDataWithNilMIMEType.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.localstorage: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.localstorage-shm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageNullEntries.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageQuirkEnabled.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageQuirkTest.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ModalAlerts.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/NSFileManagerExtras.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ObservedRenderingProgressEventsAfterCrash.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/OverrideContentSecurityPolicy.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/PluginLoadClientPolicies.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/PrepareForMoveToWindow.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLNotChange.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistryPlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptions.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptionsPlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptionsProtocol.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ResourceLoadStatistics.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RunOpenPanel.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ShrinkToFit.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobThenDelete.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/StoreBlobToBeDeleted.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentWorld.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentWorldPlugIn.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentWorldProtocol.h: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserInitiatedActionInNavigationAction.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserMediaDisabled.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/VisibleContentRect.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKContentExtensionStore.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKContentViewEditingActions.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKNSNumber.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKObject.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFView.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFViewResizeCrash.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFViewStablePresentationUpdateCallback.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKRequestActivatedElementInfo.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-leaks.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDefaultNavigationDelegate.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDiagnosticLogging.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDoesNotLogDuringInitialization.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewEvaluateJavaScript.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewGetContents.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewSnapshot.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewTextInput.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup-1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup-2.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/apple.gif: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/attachment-element.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/autofocus-contenteditable.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/autofocused-text-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/autoplaying-video-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/background-image-link-and-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/blinking-div.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/change-video-source-on-click.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/change-video-source-on-end.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/compressed-files.zip: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/contenteditable-and-target.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/contenteditable-and-textarea.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/contenteditable-in-iframe.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/disableGetUserMedia.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/div-and-large-image.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/double-click-does-not-select-trailing-space.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/dragstart-change-selection-offscreen.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/dragstart-clear-selection.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/duplicate-completion-handler-calls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/editable-body.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/editor-state-test-harness.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/enormous-video-with-sound.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/enormous.svg: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/file-uploading.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/focus-inputs.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/full-size-autoplaying-video-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/gif-and-file-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-contenteditable.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-textarea.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-in-link-and-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-map.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/input-field-in-scrollable-document.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-input-field-focus-onload.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-red-square.png: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-hides-controls-after-seek-to-end.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-mutes-onplaying.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-offscreen.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-playing-scroll-away.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-after-ending.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-seek-to-beginning-and-play-after-ending.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-test-now-playing.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.mp4: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-without-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-click-to-pause.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-autoplaying-scroll-to-video.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-paused-video-hides-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-muted-video-hides-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-playing-video-keeps-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-target-div.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/offscreen-iframe-of-media-document.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/open-multiple-external-url.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-with-csp-iframe.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-with-csp.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-without-csp-iframe.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/page-without-csp.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/password-protected.pages: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/play-audio-on-click.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/prevent-operation.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/prevent-start.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/rendered-image-excluding-overflow.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/rich-and-plain-text.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/silence-long.m4a: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/skinny-autoplaying-video-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/text-and-password-inputs.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/textarea-to-input.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/two-paragraph-contenteditable.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Cocoa/wide-autoplaying-video-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/AutocleanupsTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMClientRectTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMXPathNSResolverTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/EditorTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/InspectorTestServer.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutocleanups.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMClientRect.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMDOMWindow.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMXPathNSResolver.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestEditor.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestOptionMenu.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitVersion.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm: Removed.
        * TestWebKitAPI/Tests/WebKitCocoa: Copied from TestWebKitAPI/Tests/WebKit2Cocoa.
        * TestWebKitAPI/Tests/WebKitGtk: Copied from TestWebKitAPI/Tests/WebKit2Gtk.
        * TestWebKitAPI/Tests/WebKitObjC: Copied from TestWebKitAPI/Tests/WebKit2ObjC.
        * TestWebKitAPI/glib/PlatformGTK.cmake:

2017-08-25  Alex Christensen  <achristensen@webkit.org>

        Rename TestWebKitAPI/Tests/WebKit2 to WebKit following Source directory rename.

        Rubber-stamped by Brady Eidson.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit: Copied from TestWebKitAPI/Tests/WebKit2.
        * TestWebKitAPI/Tests/WebKit2: Removed.
        * TestWebKitAPI/Tests/WebKit2/18-characters.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/Ahem.ttf: Removed.
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CloseThenTerminate.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DeferredViewInWindowStateChange.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DidRemoveFrameFromHiearchyInPageCache.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/EnumerateMediaDevices.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/EnvironmentUtilitiesTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/EventModifiers.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/Find.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/FrameHandle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/GetUserMediaNavigation.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/LimitTitleSize.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/MediaStreamTrackDetached.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/MenuTypesForMouseEvents.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ModalAlertsSPI.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NavigationClientDefaultCrypto.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NetworkProcessCrashWithPendingConnection.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PageGroup.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ProcessDidTerminate.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ProvisionalURLAfterWillSendRequestCallback.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ProvisionalURLAfterWillSendRequestCallback_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ReloadPageAfterCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ResizeWindowAfterCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimer.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionState.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateWithoutNavigation.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad_bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/TextFieldDidBeginAndEndEditing_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/UserMessage_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/ViewportSizeForViewportUnits.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKBackForwardList.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKBundleFileHandle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKBundleFileHandle_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKImageCreateCGImageCrash.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKPageCopySessionStateWithFiltering.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKPageGetScaleFactorNotZero.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKPageIsPlayingAudio.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKRetainPtr.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKString.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKThumbnailView.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKURL.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WebCoreStatisticsWithNoWebProcess.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/all-content-in-one-iframe.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/associate-form-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/auto-submitting-form.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-check-frame.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-check-in-iframe.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-check.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-inherits-gesture-from-document.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-muted-with-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-no-audio-check.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-with-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/autoplay-zero-volume-check.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/bundle-file.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/chinese-character-with-image.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/close-from-within-create-page.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/closed-shadow-tree-test.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/cocoa: Removed.
        * TestWebKitAPI/Tests/WebKit2/cocoa/WeakObjCPtr.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/custom-protocol-sync-xhr.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/encrypted.pdf: Removed.
        * TestWebKitAPI/Tests/WebKit2/enumerateMediaDevices.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/execCopy.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/file-with-anchor.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/file-with-mse.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/file-with-video.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/find.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/findRanges.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/geolocationGetCurrentPosition.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/geolocationGetCurrentPositionWithHighAccuracy.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/geolocationWatchPosition.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/geolocationWatchPositionWithHighAccuracy.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/getUserMedia.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/gtk: Removed.
        * TestWebKitAPI/Tests/WebKit2/gtk/InputMethodFilter.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/icon.png: Removed.
        * TestWebKitAPI/Tests/WebKit2/input-focus-blur.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/js-autoplay-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/js-play-with-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/large-red-square-image.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/link-with-download-attribute-with-slashes.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/link-with-download-attribute.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/link-with-title.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/lots-of-iframes.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/lots-of-images.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/lots-of-text-vertical-lr.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/lots-of-text.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/AttributedSubstringForProposedRangeWithImage.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/ContextMenuDownload.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor_Bundle.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/InjectedBundleAppleEvent.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/InjectedBundleAppleEvent_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/mac/RestoreStateAfterTermination.mm: Removed.
        * TestWebKitAPI/Tests/WebKit2/many-iframes.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/mediastreamtrack-detached.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/modal-alerts-in-new-about-blank-window.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/mouse-button-listener.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/mouse-move-listener.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/navigation-client-default-crypto.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/no-autoplay-with-controls.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/open-and-close-window.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/push-state.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/set-long-title.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/should-open-external-schemes.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple-accelerated-compositing.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple-form.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple-iframe.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple-tall.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple2.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/simple3.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/spacebar-scrolling.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/test-mse.mp4: Removed.
        * TestWebKitAPI/Tests/WebKit2/test-without-audio-track.mp4: Removed.
        * TestWebKitAPI/Tests/WebKit2/test.mp4: Removed.
        * TestWebKitAPI/Tests/WebKit2/test.pdf: Removed.
        * TestWebKitAPI/Tests/WebKit2/webfont.html: Removed.

2017-08-25  Alex Christensen  <achristensen@webkit.org>

        Rename TestWebKitAPI/Tests/WebKit to WebKitLegacy following Source directory rename.

        Rubber-stamped by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit: Removed.
        * TestWebKitAPI/Tests/WebKit/ios: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/SnapshotViaRenderInContext.mm: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/audio-only.html: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.mp4: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/video-with-muted-audio-and-webaudio.html: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/video-with-muted-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html: Removed.
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.mp4: Removed.
        * TestWebKitAPI/Tests/WebKit/win: Removed.
        * TestWebKitAPI/Tests/WebKit/win/ScaleWebView.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp: Removed.
        * TestWebKitAPI/Tests/WebKitLegacy: Copied from TestWebKitAPI/Tests/WebKit.

2017-08-25  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's saveDataToFileInDownloadsFolder
        https://bugs.webkit.org/show_bug.cgi?id=176000
        <rdar://problem/29270035>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm:
        (-[FocusDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):
        (-[SaveDataToFileDelegate _webView:saveDataToFile:suggestedFilename:mimeType:originatingURL:]):
        (-[SaveDataToFileDelegate webView:didFinishNavigation:]):

2017-08-25  Youenn Fablet  <youenn@apple.com>

        WPT server should not need to copy test harness files
        https://bugs.webkit.org/show_bug.cgi?id=175938

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__): Stopping explicit resource files copy when launching the WPT server.
        Use aliases instead.

2017-08-25  Eric Carlson  <eric.carlson@apple.com>

        Add String::format variant that takes va_args
        https://bugs.webkit.org/show_bug.cgi?id=175988

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::testWithFormatAndArguments):
        (TestWebKitAPI::TEST):

2017-08-25  Jonathan Bedard  <jbedard@apple.com>

        Follow-up Internal build fix for r221187
        https://bugs.webkit.org/show_bug.cgi?id=175960
        <rdar://problem/34069264>

        Unreviewed build fix.

        * TestWebKitAPI/ios/DataInteractionSimulator.h: Move UIItemProvider declaration
        into #if block.

2017-08-25  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Use GitHub releases for WinCairoRequirements
        https://bugs.webkit.org/show_bug.cgi?id=175972

        Reviewed by Brent Fulgham.

        * Scripts/build-webkit:
        (cMakeArgsFromFeatures): Deleted.
        (writeCongrats): Deleted.
        * Scripts/download-latest-github-release.py:
        (Status):
        (parse_args):
        (main):
        * Scripts/update-webkit-wincairo-libs.py: Renamed from Tools/Scripts/update-webkit-wincairo-libs.

2017-08-25  Jonathan Bedard  <jbedard@apple.com>

        Fix build breakage with Public iOS 11 SDK
        https://bugs.webkit.org/show_bug.cgi?id=175960
        <rdar://problem/34069264>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/ios/DataInteractionSimulator.h: Add UIItemProvider declaration.

2017-08-24  Chris Dumez  <cdumez@apple.com>

        [Directory Upload] Add basic support for input.webkitdirectory
        https://bugs.webkit.org/show_bug.cgi?id=175950
        <rdar://problem/33951915>

        Reviewed by Geoffrey Garen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Enable Directory Upload feature for testing, given that it is currently disabled by default.

        (WTR::runOpenPanel):
        Print additional text when directories are allowed to extend testing coverage.

2017-08-24  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate equivalent of WKPageUIClient's handleAutoplayEvent
        https://bugs.webkit.org/show_bug.cgi?id=175965
        <rdar://problem/29270035>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[AutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]):
        (TEST):
        (handleAutoplayEvent): Deleted.

2017-08-24  Alex Christensen  <achristensen@webkit.org>

        didNotHandleWheelEvent test times out
        https://bugs.webkit.org/show_bug.cgi?id=175967

        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm:
        Skip the test until WebCore's wheel event handling is reliable enough to test.

2017-08-24  Jonathan Bedard  <jbedard@apple.com>

        Update configure-xcode-for-ios-development for iOS 11
        https://bugs.webkit.org/show_bug.cgi?id=173937
        <rdar://problem/33038924>

        Reviewed by Daniel Bates.

        Xcode 9 has removed the following headers from the iOS 11 Simulator SDK:
                /usr/include/crt_externs.h
                /usr/include/mach/mach_types.defs
                /usr/include/mach/machine/machine_types.defs
                /usr/include/mach/std_types.defs
                /usr/include/objc/objc-class.h
                /usr/include/objc/objc-runtime.h
                /usr/include/objc/Protocol.h
                /usr/include/readline/history.h
                /usr/include/readline/readline.h
        To solve this problem, configure-xcode-for-ios-development copies these headers
        from the active macOS SDK into the iOS Simulator SDK.

        * Scripts/configure-xcode-for-ios-development:
        (copyMissingHeadersFromSDKToSDKIfNeeded): Copy all missing header from one SDK
        into another if those headers do not exist in the destination SDK.
        (copyMissingHeadersToIPhoneOSSDKIfNeeded): Deleted.

2017-08-24  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate callback corresponding to PageUIClient's didNotHandleWheelEvent
        https://bugs.webkit.org/show_bug.cgi?id=175957
        <rdar://problem/29270035>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm:
        (synthesizeWheelEvents):
        (-[WheelDelegate _webView:didNotHandleWheelEvent:]):
        (-[WheelDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-08-24  Tim Horton  <timothy_horton@apple.com>

        Layout size override changes during in-flight animated resize are dropped on the floor forever
        https://bugs.webkit.org/show_bug.cgi?id=175916
        <rdar://problem/33887295>

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (TEST):
        Add a test ensuring that override layout size changes
        during an animated resize actually take effect.

2017-08-23  Matt Lewis  <jlewis3@apple.com>

        Disabled VideoControlsManagerMultipleVideosSwitchControlledVideoWhenScrolling.
        https://bugs.webkit.org/show_bug.cgi?id=175909

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):

2017-08-24  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use find_package for SQLite
        https://bugs.webkit.org/show_bug.cgi?id=175803

        Reviewed by Konstantin Tokarev.

        * TestWebKitAPI/PlatformWin.cmake:

2017-08-23  Jonathan Bedard  <jbedard@apple.com>

        Leaking CARenderServerBuffer in PlatformWebView::windowSnapshotImage()
        https://bugs.webkit.org/show_bug.cgi?id=175905

        Reviewed by Tim Horton.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Pass CARenderServerBuffer to CGDataProviderCreateWithData
        so that the buffer can be destroyed.

2017-08-23  Alex Christensen  <achristensen@webkit.org>

        Add WKUIDelegatePrivate callbacks corresponding to WKPageUIClient's takeFocus, focus, and unfocus
        https://bugs.webkit.org/show_bug.cgi?id=175896

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm:
        (-[UITestDelegate _showWebView:]):
        (TEST):
        (tabEvent):
        (synthesizeTab):
        (-[FocusDelegate _webView:takeFocus:]):
        (-[FocusDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[UITestDelegate _webViewShow:]): Deleted.

2017-08-23  Eric Carlson  <eric.carlson@apple.com>

        Platform code should be able to safely log in release builds
        https://bugs.webkit.org/show_bug.cgi?id=175854
        <rdar://problem/34022930>

        Reviewed by Jer Noble.

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

2017-08-23  Jonathan Bedard  <jbedard@apple.com>

        Access expectations path through apple_additions
        https://bugs.webkit.org/show_bug.cgi?id=174800
        <rdar://problem/33498899>

        Unreviewed follow-up fix for r221087.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort._apple_additions_path): Use iOS mapping instead of Mac mapping.

2017-08-23  Jonathan Bedard  <jbedard@apple.com>

        Access expectations path through apple_additions
        https://bugs.webkit.org/show_bug.cgi?id=174800
        <rdar://problem/33498899>

        Reviewed by David Kilzer.

        Follow-up fix. Mapping of operating system names was done incorrectly.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort._apple_additions_path): Correctly find the operating system to be replaced.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_layout_test_searchpath_with_apple_additions): Add test for operating
        system name replacement.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_layout_test_searchpath_with_apple_additions): Add test for operating
        system name replacement.
        * Scripts/webkitpy/port/mac.py: Correctly find the operating system to be replaced.
        (MacPort._apple_additions_path):
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_layout_test_searchpath_with_apple_additions): Add test for operating system
        name replacement.
        * Scripts/webkitpy/port/port_testcase.py:
        (bind_mock_apple_additions.MockAppleAdditions.ios_os_name): Change the passed name so that
        operating system name replacement can be tested.
        (bind_mock_apple_additions.MockAppleAdditions.mac_os_name): Ditto.

2017-08-23  Jonathan Bedard  <jbedard@apple.com>

        Access expectations path through apple_additions
        https://bugs.webkit.org/show_bug.cgi?id=174800
        <rdar://problem/33498899>

        Reviewed by Alexey Proskuryakov.

        When external test expectations are imported through additional-platform-directory, they will
        over-write any WebKit expectations. Access some expectations from apple_additions to correct
        these precedence issues.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort._apple_additions_path): Convert test expectation directory to a path
        coming from apple_additions.
        (IOSPort.default_baseline_search_path): Alternate between WebKit path and apple_additions
        path for layout test expectations.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_layout_test_searchpath_with_apple_additions): Added to test layout-test search paths.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_layout_test_searchpath_with_apple_additions): Added to test layout-test search paths.
        * Scripts/webkitpy/port/mac.py:
        (MacPort._apple_additions_path): Convert test expectation directory to a path
        coming from apple_additions.
        (MacPort.default_baseline_search_path): Alternate between WebKit path and apple_additions
        path for layout test expectations.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_layout_test_searchpath_with_apple_additions): Added to test layout-test search paths.
        * Scripts/webkitpy/port/port_testcase.py:
        (bind_mock_apple_additions): Added to create mock apple_additions for a block.
        (bind_mock_apple_additions.MockAppleAdditions): Contains apple_addition stubs for testing.
        * Scripts/webkitpy/port/win.py:
        (WinPort.default_baseline_search_path): Include apple_additions test expectation for Windows.

2017-08-22  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. The WPE port should build TestWebKitAPI with the same
        compiler flags as the GTK+ port, disabling a few flags that are
        sprouting a lot of warning output.

        * TestWebKitAPI/PlatformWPE.cmake:

2017-08-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] WKWebView schedules nonstop layout after pressing cmb+b,i,u inside a contenteditable div
        https://bugs.webkit.org/show_bug.cgi?id=175116
        <rdar://problem/28279301>

        Reviewed by Darin Adler and Ryosuke Niwa.

        Introduces new testing infrastructure and API tests to test EditorState updates in the UI process. The new
        EditorStateTests run on both iOS and Mac.

        * TestWebKitAPI/EditingTestHarness.h: Added.
        * TestWebKitAPI/EditingTestHarness.mm: Added.

        EditingTestHarness is a helper object that API tests may use to apply editing commands and store EditorState
        history. This test harness adds sugaring around various editing commands, and simplifies the process of checking
        the state of the latest observed EditorState.

        (-[EditingTestHarness initWithWebView:]):
        (-[EditingTestHarness dealloc]):
        (-[EditingTestHarness webView]):
        (-[EditingTestHarness latestEditorState]):
        (-[EditingTestHarness editorStateHistory]):
        (-[EditingTestHarness insertText:andExpectEditorStateWith:]):
        (-[EditingTestHarness insertHTML:andExpectEditorStateWith:]):
        (-[EditingTestHarness selectAllAndExpectEditorStateWith:]):
        (-[EditingTestHarness moveBackwardAndExpectEditorStateWith:]):
        (-[EditingTestHarness moveWordBackwardAndExpectEditorStateWith:]):
        (-[EditingTestHarness toggleBold]):
        (-[EditingTestHarness toggleItalic]):
        (-[EditingTestHarness toggleUnderline]):
        (-[EditingTestHarness setForegroundColor:]):
        (-[EditingTestHarness alignJustifiedAndExpectEditorStateWith:]):
        (-[EditingTestHarness alignLeftAndExpectEditorStateWith:]):
        (-[EditingTestHarness alignCenterAndExpectEditorStateWith:]):
        (-[EditingTestHarness alignRightAndExpectEditorStateWith:]):
        (-[EditingTestHarness insertParagraphAndExpectEditorStateWith:]):
        (-[EditingTestHarness deleteBackwardAndExpectEditorStateWith:]):
        (-[EditingTestHarness _execCommand:argument:expectEntries:]):

        Dispatches an editing command to the web process, and blocks until a response is received. If an expected
        entries dictionary is given, this will additionally verify that the latest EditorState contains all the expected
        keys and values.

        (-[EditingTestHarness latestEditorStateContains:]):
        (-[EditingTestHarness _webView:editorStateDidChange:]):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/EditorStateTests.mm: Added.
        (TestWebKitAPI::setUpEditorStateTestHarness):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/editor-state-test-harness.html: Added.

2017-08-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] EditorState updates should be rolled into the layer update lifecycle when possible
        https://bugs.webkit.org/show_bug.cgi?id=175370
        <rdar://problem/33799806>

        Reviewed by Ryosuke Niwa.

        Tweaks API tests that involve editing to wait for a presentation update before checking against UI process-side
        information sent via EditorState updates. This allows any EditorState update scheduled by the test to propagate
        to the UI process.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
        (-[CandidateTestWebView typeString:inputMessage:]):
        (+[CandidateTestWebView setUpWithFrame:testPage:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewTextInput.mm:
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        (TestWebKitAPI::AcceptsFirstMouse::runTest):
        * TestWebKitAPI/Tests/mac/WKWebViewMacEditingTests.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView waitForNextPresentationUpdate]):

        Add a new helper method to spin until the next presentation update.

        * TestWebKitAPI/mac/WebKitAgnosticTest.h:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::waitForNextPresentationUpdate):

2017-08-22  Alex Christensen  <achristensen@webkit.org>

        Add UIDelegatePrivate SPI corresponding to WKPageUIClient.showPage
        https://bugs.webkit.org/show_bug.cgi?id=175797
        <rdar://problem/29270035>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm: Added.
        (-[UITestDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[UITestDelegate _showPage:]):
        (-[UITestDelegate webView:startURLSchemeTask:]):
        (-[UITestDelegate webView:stopURLSchemeTask:]):
        (TEST):

2017-08-22  Devin Rousso  <webkit@devinrousso.com>

        Unreviewed, change my IRC nick.

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

2017-08-22  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221026.

        This caused a consistent API failure on iOS Simulator.

        Reverted changeset:

        "Add UIDelegatePrivate SPI corresponding to
        WKPageUIClient.showPage"
        https://bugs.webkit.org/show_bug.cgi?id=175797
        http://trac.webkit.org/changeset/221026

2017-08-22  Alex Christensen  <achristensen@webkit.org>

        Add UIDelegatePrivate SPI corresponding to WKPageUIClient.showPage
        https://bugs.webkit.org/show_bug.cgi?id=175797
        <rdar://problem/29270035>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm: Added.
        (-[UITestDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[UITestDelegate _showPage:]):
        (-[UITestDelegate webView:startURLSchemeTask:]):
        (-[UITestDelegate webView:stopURLSchemeTask:]):
        (TEST):

2017-08-22  Jonathan Bedard  <jbedard@apple.com>

        Fix leak-checking for iOS Simulators
        https://bugs.webkit.org/show_bug.cgi?id=175735

        Reviewed by David Kilzer.

        Follow-up fix to r220942. _proc may be undefined.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._wait_for_stop): Handle case where _proc is undefined.

2017-08-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] install-dependencies should install the required gstreamer packages needed for production builds.
        https://bugs.webkit.org/show_bug.cgi?id=175822

        Reviewed by Xabier Rodriguez-Calvar.

        * gtk/install-dependencies: Add the bad plugins to the list.
        * wpe/install-dependencies: Add all the gst related packages (copied from GTK listing).

2017-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        DataInteractionTests.ExternalSourceAttributedStringToContentEditable hits a debug assertion
        https://bugs.webkit.org/show_bug.cgi?id=175787
        <rdar://problem/33996612>

        Reviewed by Wenson Hsieh.

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

2017-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Typo in "webkit-patch land"
        https://bugs.webkit.org/show_bug.cgi?id=175788

        Reviewed by Tim Horton.

        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._commit_warning):

2017-08-20  Sam Weinig  <sam@webkit.org>

        StringView could use a function to strip leading/trailing characters without allocation
        https://bugs.webkit.org/show_bug.cgi?id=175757

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringView.cpp:
        Add tests for StringView::stripLeadingAndTrailingMatchedCharacters().

2017-08-21  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [PAL] Move spi/mac directory into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175649

        Reviewed by Myles C. Maxfield.

        * TestWebKitAPI/Tests/mac/MenuTypesForMouseEvents.mm:

2017-08-21  Per Arne Vollan  <pvollan@apple.com>

        [Win] DRT should only allow any https certificate for localhost.
        https://bugs.webkit.org/show_bug.cgi?id=175147

        Reviewed by Brent Fulgham.

        Add check to make sure only localhost requests allow any https certificate.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2017-08-21  Eric Carlson  <eric.carlson@apple.com>

        Add WTFLogChannel level to allow runtime log filtering
        https://bugs.webkit.org/show_bug.cgi?id=175731
        <rdar://problem/33967234>

        Unreviewed build fix.

        * TestWebKitAPI/Tests/WebCore/Logging.cpp:
        (TestWebKitAPI::LoggingTest::output): Disable testing output by default because it 
        fails on some of the bots.

2017-08-21  Eric Carlson  <eric.carlson@apple.com>

        Add WTFLogChannel level to allow runtime log filtering
        https://bugs.webkit.org/show_bug.cgi?id=175731
        <rdar://problem/33967234>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/Logging.cpp: Added.
        (TestWebKitAPI::LoggingTest::output):
        (TestWebKitAPI::TEST_F):

2017-08-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Add a version of DataInteractionTests.ExternalSourceAttributedStringToContentEditable that doesn't hit a debug assertion
        https://bugs.webkit.org/show_bug.cgi?id=175509
        <rdar://problem/33728169>

        Reviewed by Ryosuke Niwa.

        Removes ExternalSourceAttributedStringToContentEditable and adds
        ExternalSourceColoredAttributedStringToContentEditable, which tests dropping an attributed string with colored
        text instead of a bold attributed string of system font. Due to a recent change in behavior in UIKit, the
        original test (which this patch renames to ExternalSourceBoldSystemAttributedStringToContentEditable) hits a
        debug assertion when dropping text of system bold font. Since the original intent of this test was to verify
        that the attributed string UTI can be accepted in richly contenteditable areas, it suffices to check that some
        other style attribute, such as color, carries over from the NSAttributedString to the DOM.

        Also marks ExternalSourceBoldSystemAttributedStringToContentEditable as disabled for the time being.

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

2017-08-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220938.

        The API tests added with this change are failing.

        Reverted changeset:

        "Add WTFLogChannel level to allow runtime log filtering"
        https://bugs.webkit.org/show_bug.cgi?id=175731
        http://trac.webkit.org/changeset/220938

2017-08-18  Devin Rousso  <webkit@devinrousso.com>

        Unreviewed, change my email.

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

2017-08-18  Jonathan Bedard  <jbedard@apple.com>

        Fix leak-checking for iOS Simulators
        https://bugs.webkit.org/show_bug.cgi?id=175735

        Reviewed by Darin Adler.

        If the leak checking currently occurs in ServerProcess, we can’t check leaks on an iOS
        Simulator (or device) because the process will have already been killed by the time we
        check for leaks. Duplicate leak-checking code and share code waiting on a process to stop.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.stop): Move code waiting for the process to close to _wait_for_stop(...).
        (ServerProcess._wait_for_stop): Share code shutting down a process between ServerProcess
        and SimulatorProcess.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop): Before closing the process, check for leaks.

2017-08-18  Eric Carlson  <eric.carlson@apple.com>

        Add WTFLogChannel level to allow runtime log filtering
        https://bugs.webkit.org/show_bug.cgi?id=175731
        <rdar://problem/33967234>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/Logging.cpp: Added.
        (TestWebKitAPI::LoggingTest::output):
        (TestWebKitAPI::TEST_F):

2017-08-18  Alexey Proskuryakov  <ap@apple.com>

        Add Dean Johnson to contributors.json for Bugzilla autocomplete.

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

2017-08-18  Ross Kirsling  <ross.kirsling@sony.com>

        [Tools] Add script to download a GitHub release
        https://bugs.webkit.org/show_bug.cgi?id=175279

        Reviewed by Brent Fulgham.

        * Scripts/download-latest-github-release.py: Added.

2017-08-18  Commit Queue  <commit-queue@webkit.org>

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

        I'm not sure we really need this (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK][WPE] Add NTLM authentication enabled API"
        https://bugs.webkit.org/show_bug.cgi?id=122952
        http://trac.webkit.org/changeset/220854

2017-08-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Make TestContextMenu work on Fedora
        https://bugs.webkit.org/show_bug.cgi?id=175708

        Reviewed by Carlos Garcia Campos.

        TestContextMenu has been broken for as long as I remember, but not on the bots, only for me
        and my student last summer who was trying to work on a context menu API. It's trying to load
        an MPEG-2 video file and confirm that right-clicking on it shows media element context menu
        entries. Doesn't work on Fedora. Dunno why, since Fedora actually can play MPEG-2, but I
        don't care to investigate. Let's switch it to WebM so I can move on.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (prepareContextMenuTestView):
        * TestWebKitAPI/Tests/WebKitGLib/resources/silence.mpg: Removed.
        * TestWebKitAPI/Tests/WebKitGLib/resources/silence.webm: Added.

2017-08-17  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        check-webkit-style shouldn't check spacing in #elif preprocessor lines
        https://bugs.webkit.org/show_bug.cgi?id=175652

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_for_binary_ops):

2017-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix the build on other platforms after r220865
        https://bugs.webkit.org/show_bug.cgi?id=175683

        Reviewed by Tim Horton.

        Check __IPHONE_OS_VERSION_MAX_ALLOWED instead of __IPHONE_OS_VERSION_MIN_REQUIRED in an SPI header. SPI
        availability is determined by SDK version rather than deployment version.

        * TestWebKitAPI/ios/UIKitSPI.h:

2017-08-17  Andreas Kling  <akling@apple.com>

        Disable CSS regions at compile time
        https://bugs.webkit.org/show_bug.cgi?id=175630

        Reviewed by Antti Koivisto.

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

2017-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the internal iOS 10 build after r220865.

        * TestWebKitAPI/ios/UIKitSPI.h:

        On the iOS 10 SDK, UIApplication_Private.h cannot be imported in the simulator. Simply fall back to using the
        extern declaration when building for pre-iOS 11; once the bots stop building for iOS 10, we can safely remove
        this compiler guard.

2017-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Respect type fidelities when copying image elements to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=175638
        <rdar://problem/26556043>

        Reviewed by Ryosuke Niwa.

        Add API tests that simulate copying an image element using the action sheet, and verifying that the pasteboard
        contains UTIs in order of fidelity (image type before URL). Also pulls out UIKit SPI (UIApplicationInitialize)
        used in UIPasteboardTests and ActionSheetTests into a common UIKitSPI header.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm:
        (-[ActionSheetObserver _webView:actionsForElement:defaultActions:]):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::presentActionSheetAndChooseAction):
        (-[ActionSheetObserver waitForActionSheetAfterBlock:]): Deleted.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (checkEstimatedSize):
        (checkSuggestedNameAndEstimatedSize):

        Replace -estimatedDisplayedSize with its non-deprecated counterpart, -preferredPresentationSize.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/UIKitSPI.h: Added.

2017-08-17  Jonathan Bedard  <jbedard@apple.com>

        Recursively create resource load statistics folder for testing
        https://bugs.webkit.org/show_bug.cgi?id=175676

        Reviewed by Brady Eidson.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize): Recursively create resourceLoadStatisticsFolder.

2017-08-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add NTLM authentication enabled API
        https://bugs.webkit.org/show_bug.cgi?id=122952

        Reviewed by Michael Catanzaro.

        Add a test case to check we can enable/disable NTLM.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (testWebViewAuthenticationNTLM):
        (beforeAll):

2017-08-16  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [PAL] Move spi/ios and spi/win directories into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175171

        Reviewed by Antti Koivisto.

        * DumpRenderTree/mac/EventSendingController.mm:

2017-08-16  Andy Estes  <aestes@apple.com>

        [Payment Request] Add an ENABLE flag and an experimental feature preference
        https://bugs.webkit.org/show_bug.cgi?id=175622

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-08-15  Aakash Jain  <aakash_jain@apple.com>

        undefined URL in PopoverTracker for failed step
        https://bugs.webkit.org/show_bug.cgi?id=175593
        <rdar://problem/33898769>

        Reviewed by Daniel Bates.

        This fix is a workaround for Buildbot 0.9 bug <https://github.com/buildbot/buildbot/issues/3529> where it
        does not provide a URL to stdio for a build step. Buildbot 0.8 always included a URL to the stdio of the step.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype._parseData): Pass the URL while instantiating BuildbotTestResults.
        (BuildbotIteration.prototype._urlForStep): Method to get the URL for a step.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults): Accept URL in constructor.

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove Proximity Events and related code
        https://bugs.webkit.org/show_bug.cgi?id=175545

        Reviewed by Daniel Bates.

        No platform enables Proximity Events, so remove code inside ENABLE(PROXIMITY_EVENTS)
        and other related code.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE(REQUEST_AUTOCOMPLETE) code, which was disabled everywhere
        https://bugs.webkit.org/show_bug.cgi?id=175504

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE_VIEW_MODE_CSS_MEDIA and related code
        https://bugs.webkit.org/show_bug.cgi?id=175557

        Reviewed by Jon Lee.
        
        No port cares about the ENABLE(VIEW_MODE_CSS_MEDIA) feature, so remove it.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::staticFunctions):
        (setViewModeMediaFeatureCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setViewModeMediaFeature): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setViewModeMediaFeature): Deleted.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-14  Andy Estes  <aestes@apple.com>

        REGRESSION (r220456): Crash in PreviewLoader::shouldCreateForMIMEType() when a ResourceResponse has a null MIME type
        https://bugs.webkit.org/show_bug.cgi?id=175548
        <rdar://problem/33866206>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ios/PreviewLoader.cpp: Added.
        (TestWebKitAPI::TEST): Added an API test for PreviewLoader::shouldCreateForMIMEType().

2017-08-14  Youenn Fablet  <youenn@apple.com>

        WPT server should be able to do logging even if its output folder is not created at launch time
        https://bugs.webkit.org/show_bug.cgi?id=175543

        Reviewed by Alexey Proskuryakov.

        Removing no longer used stdout/stderr member variables.
        Creating if needed the output folder so that we can create WPT server output log folder at WPT server launch time.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.__init__):
        (WebPlatformTestServer._prepare_config):
        (WebPlatformTestServer._spawn_process):
        (WebPlatformTestServer._stop_running_server):

2017-08-14  Daniel Bates  <dabates@apple.com>

        webkit-patch: Passing --no-review should submit patch to EWS by default
        https://bugs.webkit.org/show_bug.cgi?id=148899

        Reviewed by David Kilzer.

        Make "webkit-patch upload --no-review" and "webkit-patch post-commits --no-review" submit
        the patch(es) for EWS analysis by default. Add a new optional command line argument, --no-ews,
        to these commands to not submit a non-reviewed patch(es) for EWS analysis.

        Frequently I want to post a draft of a patch without review to have the EWS bots process
        it to catch build and test breakage before I clean it up and post it for formal review.
        Currently this requires using "webkit-patch upload --no-review --open-bug" to upload the
        patch and open the bug in Safari so that I can click the Submit for EWS analysis button.
        We should teach "webkit-patch upload" and "webkit-patch post-commits" how to do this.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._parse_attachment_id_from_add_patch_to_bug_response): Add helper function to
        parse the attachment id from the response page after adding an attachment to the bug.
        (Bugzilla.add_patch_to_bug): Modified to parse and return the attachment id from the
        HTTP response after uploading the patch.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla.add_patch_to_bug): Return a dummy attachment id for testing purposes.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test__parse_attachment_id_from_add_patch_to_bug_response): Added.
        * Scripts/webkitpy/tool/commands/upload.py:
        (Upload): Add step SubmitToEWS to the list of steps when uploading a patch. 
        (PostCommits.__init__): Add --no-ews option to the list of applicable option flags for
        this command.
        (PostCommits.execute): Submit the patch to EWS, if applicable.
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_upload): Set options.ews to False as the upload command expects this option
        to be specified.
        (test_upload_with_no_review_and_ews): Added.
        * Scripts/webkitpy/tool/steps/__init__.py: Import module SubmitToEWS.
        * Scripts/webkitpy/tool/steps/options.py:
        (Options): Added command line option --no-ews (defaults: False - submit to EWS).
        * Scripts/webkitpy/tool/steps/postdiff.py:
        (PostDiff.options): Add --no-ews option to the list of applicable option flags for
        this command.
        (PostDiff.run): Submit the patch to EWS, if applicable.
        * Scripts/webkitpy/tool/steps/submittoews.py: Added.
        (SubmitToEWS):
        (SubmitToEWS.options): Return an empty array as we this step does not have any command line options.
        (SubmitToEWS.run): Submit the specified attachment ids for EWS analysis.

2017-08-14  Ryan Haddad  <ryanhaddad@apple.com>

        Disable two flaky VideoControlsManager API tests.

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):

2017-08-14  Tim Horton  <timothy_horton@apple.com>

        Only create directory and sandbox extension handle for storage directories if they are set
        https://bugs.webkit.org/show_bug.cgi?id=175522

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDoesNotLogDuringInitialization.mm: Added.
        (TEST):
        Add a test that making a WKWebView with an ephemeral WKWebsiteDataStore
        doesn't log anything to stderr.

2017-08-14  Jonathan Bedard  <jbedard@apple.com>

        sub-categorize Sandbox violation logs
        https://bugs.webkit.org/show_bug.cgi?id=175536
        <rdar://problem/33834416>

        Reviewed by David Kilzer.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._parse_darwin_crash_log): Add 'Sandbox-' to the log name if the log is
        a Sandbox violation.
        (CrashLogs._find_all_logs_darwin): Update comment.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (make_mock_sandbox_report_darwin): Create a Sandbox violation log for testing. 
        (CrashLogsTest.create_crash_logs_darwin): Add Sandbox violation to list of crashes.
        (CrashLogsTest.test_find_all_log_darwin): 8 logs in testing instead of 7.
        (CrashLogsTest.test_duplicate_log_darwin): Check for Sandbox violation log.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._merge_crash_logs): Handle Sandbox violation case.

2017-08-14  Daniel Bates  <dabates@apple.com>

        Add Automator service to copy permalink to Clipboard
        https://bugs.webkit.org/show_bug.cgi?id=170978

        Reviewed by Joseph Pecoraro.

        It is helpful to reference using a hyperlink a particular line of code when having
        a discussion on IRC or in a bug. You can get such a link by navigating to the file
        in the Trac Browse Source viewer and selecting the line your are interested in.
        I found myself doing this often enough that I wrote an Automator service to do it
        for me.

        This Automator service works with Xcode 8 and Xcode 9 beta 5 (9M202q) or later.

        * CopyPermalink/Copy WebKit Permalink.workflow/Contents/Info.plist: Added.
        * CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow: Added.
        * CopyPermalink/README: Added.

2017-08-14  Chris Dumez  <cdumez@apple.com>

        Address flakiness related to download tests
        https://bugs.webkit.org/show_bug.cgi?id=175338
        <rdar://problem/33865119>

        Unreviewed, forgot in r220626 to reset m_shouldLogDownloadCallbacks to false
        between tests.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2017-08-11  Ryosuke Niwa  <rniwa@webkit.org>

        Replace DATA_TRANSFER_ITEMS by a runtime flag and add a stub implementation
        https://bugs.webkit.org/show_bug.cgi?id=175474
        <rdar://problem/33844628>

        Reviewed by Wenson Hsieh.

        Enable dataTransfer.items by default in DumpRenderTree and WebKitTestRunner for testing purposes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-08-12  Chris Dumez  <cdumez@apple.com>

        Address flakiness related to download tests
        https://bugs.webkit.org/show_bug.cgi?id=175338

        Reviewed by Ryosuke Niwa.

        - Update WKTR so that the flag set by testRunner.waitUntilDownloadFinished()
          is actually queried when a download completes. Previously, this would be
          identical to a call to testRunner.waitUntilDone() because any download
          completion would call testRunner.notifyDone().
        - Disable logging of download callbacks by default and add a
          testRunner.setShouldLogDownloadCallbacks(true) API to allow tests to
          enable such logging.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShouldLogDownloadCallbacks):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::downloadDidStart):
        (WTR::TestController::decideDestinationWithSuggestedFilename):
        (WTR::TestController::downloadDidFinish):
        (WTR::TestController::downloadDidFail):
        (WTR::TestController::downloadDidCancel):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldLogDownloadCallbacks):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2017-08-11  Jonathan Bedard  <jbedard@apple.com>

        Create mock ITP data in testing to prevent grandfathering
        https://bugs.webkit.org/show_bug.cgi?id=174720

        Unreviewed follow-up fix for r220604.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize): Release resourceLogPlist.

2017-08-11  Jonathan Bedard  <jbedard@apple.com>

        Create mock ITP data in testing to prevent grandfathering
        https://bugs.webkit.org/show_bug.cgi?id=174720
        <rdar://problem/33457779>

        Reviewed by Brent Fulgham.

        We don't need to be triggering grandfathering when each test runner starts. On Mac,
        this may launch plugins which can cause layout tests to fail later if the test
        runner does not shut-down before the plugins unload.

        * WebKitTestRunner/TestController.h: Add declaration of cocoaPlatformInitialize.
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::cocoaPlatformInitialize): Write the minimum data required to
        prevent grandfathering from being triggered.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize): Call cocoaPlatformInitialize.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize): Ditto.

2017-08-11  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244
        <rdar://problem/33801582>

        Reviewed by Chris Dumez.

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

2017-08-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Soup] Cannot access HTTPS sites using a HTTP proxy that requires authentication
        https://bugs.webkit.org/show_bug.cgi?id=175378

        Reviewed by Sergio Villar Senin.

        Add two test cases to check proxy authentication.

        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:
        (Tunnel::Tunnel):
        (Tunnel::~Tunnel):
        (Tunnel::connect):
        (Tunnel::connected):
        (serverCallback):
        (ProxyAuthenticationTest::ProxyAuthenticationTest):
        (ProxyAuthenticationTest::~ProxyAuthenticationTest):
        (ProxyAuthenticationTest::proxyServerPortAsString):
        (testWebViewAuthenticationProxy):
        (testWebViewAuthenticationProxyHTTPS):
        (beforeAll):

2017-08-11  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][GTK][WPE] Unify GStreamer JHBuild moduleset for both GTK+ and WPE
        https://bugs.webkit.org/show_bug.cgi?id=175428

        Both ports share the GStreamer code as multimedia backend and till
        not so long they were using different versions. Now they do use
        the same versions and it does not make any sense anymore (and
        neither had sense before) to have differences in the modulesets.

        In this patch I created a GStreamer moduleset and referenced it
        from both GTK+'s and WPE's. GStreamer patches were also moved there.

        Reviewed by Žan Doberšek.

        * gstreamer/jhbuild.modules: Added.
        * gstreamer/patches/gst-plugins-good-0003-rtpbin-receive-bundle-support.patch: Renamed from Tools/gtk/patches/gst-plugins-good-0003-rtpbin-receive-bundle-support.patch.
        * gstreamer/patches/gst-plugins-good-0005-souphttpsrc-cookie-jar-and-context-query-support.patch: Renamed from Tools/gtk/patches/gst-plugins-good-0005-souphttpsrc-cookie-jar-and-context-query-support.patch.
        * gstreamer/patches/gst-plugins-good-0006-qtdemux-add-context-for-a-preferred-protection.patch: Renamed from Tools/gtk/patches/gst-plugins-good-0006-qtdemux-add-context-for-a-preferred-protection.patch.
        * gstreamer/patches/gst-plugins-good-0008-qtdemux-also-push-buffers-without-encryption-info-in.patch: Renamed from Tools/gtk/patches/gst-plugins-good-0008-qtdemux-also-push-buffers-without-encryption-info-in.patch.
        * gstreamer/patches/gstreamer-0001-protection-added-function-to-filter-system-ids.patch: Renamed from Tools/gtk/patches/gstreamer-0001-protection-added-function-to-filter-system-ids.patch.
        * gstreamer/patches/openh264-configure.patch: Renamed from Tools/gtk/patches/openh264-configure.patch.
        * gtk/jhbuild.modules:
        * wpe/jhbuild.modules:
        * wpe/patches/gst-plugins-good-0003-rtpbin-receive-bundle-support.patch: Removed.
        * wpe/patches/gst-plugins-good-0005-souphttpsrc-cookie-jar-and-context-query-support.patch: Removed.
        * wpe/patches/gst-plugins-good-0006-qtdemux-add-context-for-a-preferred-protection.patch: Removed.
        * wpe/patches/gst-plugins-good-0008-qtdemux-also-push-buffers-without-encryption-info-in.patch: Removed.
        * wpe/patches/gstreamer-0001-protection-added-function-to-filter-system-ids.patch: Removed.

2017-08-10  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed, adding Ross Kirsling to contributors.json

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

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix build failure with VC2017

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

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, suppress warnings on GCC

        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::CheckedArithmeticTester::run):

2017-08-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
        https://bugs.webkit.org/show_bug.cgi?id=173223

        Reviewed by Tim Horton.

        The rebuilds were happening due to a difference in the compiler options that the IDE and
        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
        xcodebuild pass that option, too, set INDEX_ENABLE_DATA_STORE to YES and
        INDEX_DATA_STORE_DIR to the Index Datastore path specified in Xcode Locations preferences >
        Advanced when a Custom Absolute path is selected.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Run more WTF tests
        https://bugs.webkit.org/show_bug.cgi?id=174970

        Reviewed by Michael Catanzaro.

        Some of WTF tests are not executed in non Apple ports while they are generic ones.
        This patch adds these tests to non-Apple port TestWebKitAPI.
        Currently, we do not add Signals.cpp since it depends on signal functionality.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/PriorityQueue.cpp:
        (isHigherPriority):
        (TEST):
        * TestWebKitAPI/Tests/WTF/Signals.cpp: Copied from Tools/TestWebKitAPI/Tests/WTF/ThreadMessages.cpp.
        (TEST):
        * TestWebKitAPI/Tests/WTF/ThreadMessages.cpp:
        (TEST):

2017-08-10  obinna obike  <oobike@apple.com>

        Remove obsolete link from webkit-queues status page
        https://bugs.webkit.org/show_bug.cgi?id=175337

        Reviewed by Aakash Jain.

        * QueueStatusServer/templates/recentstatus.html:
        Removed the link to the ews-watcher server.

2017-08-10  Brian Burg  <bburg@apple.com>

        WKPreferences should conform to NSCopying
        https://bugs.webkit.org/show_bug.cgi?id=175303
        <rdar://problem/33764939>

        Reviewed by Dan Bernstein.

        Add unit test to make sure a WKPreference and its copy are
        not aliased to each other or affect each other's properties.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Copying.mm: Added.
        (TEST):

2017-08-10  Tim Horton  <timothy_horton@apple.com>

        Remove some unused lambda captures so that WebKit builds with -Wunused-lambda-capture
        https://bugs.webkit.org/show_bug.cgi?id=175436
        <rdar://problem/33667497>

        Reviewed by Simon Fraser.

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

2017-08-10  Lucas Forschler  <lforschler@apple.com>

        Fix duplicated code in r220534.

        Unreviewed cleanup.

        * Scripts/bisect-builds:

2017-08-08  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Enable SerializedCryptoKeyWrapTest in iOS
        https://bugs.webkit.org/show_bug.cgi?id=175344
        <rdar://problem/28507240>

        Reviewed by Alexey Proskuryakov.

        Add entitlements to TestWebKitAPI project for iOS. Then add Keychain Access entitlement to the project.
        Finally enable the existing tests for iOS.

        * TestWebKitAPI/Configurations/TestWebKitAPI-iOS.entitlements: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/cocoa/SerializedCryptoKeyWrap.mm:

2017-08-10  Lucas Forschler  <lforschler@apple.com>

        Write a tool to bisect WebKit builds
        https://bugs.webkit.org/show_bug.cgi?id=174596

        Reviewed by Dean Johnson and Kocsen Chung.

        * Scripts/bisect-builds: Added.
        (bisect_builds): main bisection algorithm
        (download_archive):download an archive from S3 using existing tools
        (extract_archive):extract an archive using existing tools
        (find_le):Find rightmost value less than or equal to x
        (find_ge):Find leftmost item greater than or equal to x
        (get_api_url):generate url for the rest api/database
        (get_indices_from_revisions):convert revisions to list indexes for bisection
        (get_sorted_revisions):retrieve sorted revision list
        (get_s3_location_for_revision):calculate the S3 archive storage location
        (parse_args):parse command line arguments
        (pick_next_build):compute the next build to bisect
        (prompt_did_reproduce):prompt user for direction for bisection
        (set_webkit_output_dir):set the folder for bisected builds to avoid overwriting engineering build output
        (test_archive):Platform specific logic to test downloaded archive
        (minified_platforms):return a list of minified platforms in the database
        (unminified_platforms):return a list of full platforms in the database
        (is_supported_platform):check if platform is supported
        (validate_options):validate command line options
        (main):

2017-08-10  Lucas Forschler  <lforschler@apple.com>

        Remove bisect-builds script.
        https://bugs.webkit.org/show_bug.cgi?id=175433
        
        Reviewed by Aakash Jain.

        * Scripts/bisect-builds: Removed.

2017-08-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove ENABLE_GAMEPAD_DEPRECATED
        https://bugs.webkit.org/show_bug.cgi?id=175361

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r220515) [GTK][CMake] Build with ENABLE_GEOLOCATION fails on Debian Jessie
        https://bugs.webkit.org/show_bug.cgi?id=175426

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies: libgeoclue-dev packages not really needed on Debian/Ubuntu.

2017-08-10  Ms2ger  <Ms2ger@igalia.com>

        Add Ms2ger as contributor.
        https://bugs.webkit.org/show_bug.cgi?id=175325

        Reviewed by Carlos Alberto Lopez Perez.

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

2017-08-09  Dewei Zhu  <dewei_zhu@apple.com>

        Fix run-benchmark after r220483.
        https://bugs.webkit.org/show_bug.cgi?id=175415
        <rdar://problem/33803003>

        Reviewed by Ryosuke Niwa.

        Update run-benchmark script to adapt new Timeout implementation introduced in r220483.

        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py:
        (WebServerBenchmarkRunner._run_one_test):

2017-08-09  Chris Dumez  <cdumez@apple.com>

        Disable Beacon API on WK1 DRT and WK2 when not using NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=175401

        Reviewed by Brady Eidson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):

2017-08-09  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [PAL] Move spi/cocoa and spi/cg directories into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175175

        Reviewed by Myles C. Maxfield.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/NSFileManagerExtras.mm:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):

        Add path rules specifiers for PassKitSPI.h and DataDetectorsCoreSPI.h

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

        Prevent CF_OPTIONS() from being handled as funtion definition.

2017-08-09  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move TextStream into WTF
        https://bugs.webkit.org/show_bug.cgi?id=175211

        Reviewed by Myles C. Maxfield.

        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:

2017-08-09  Andy Estes  <aestes@apple.com>

        Part 3 of: Rename DatabaseProcess to StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=175034

        Reviewed by Brady Eidson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::databaseProcessName): Updated to return
        "com.apple.WebKit.Storage.Development" on macOS and iOS Simulator.

2017-08-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r220466, r220477, and r220487.
        https://bugs.webkit.org/show_bug.cgi?id=175411

        This change broke existing API tests and follow up fixes did
        not resolve all the issues. (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220466

        "WTF::Function does not allow for reference / non-default
        constructible return types"
        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220477

        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220487

2017-08-09  Sam Weinig  <sam@webkit.org>

        Update for https://bugs.webkit.org/show_bug.cgi?id=175244.

        Remove one addition of null Function test.

2017-08-09  Jonathan Bedard  <jbedard@apple.com>

        Allow nested timeouts in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=175390
        <rdar://problem/33803003>

        Reviewed by David Kilzer.

        We need to be able to nest timeouts in webkitpy. In particular, we have a few cases where functions
        which use timeouts also call the executive. For on-device testing, we need to have timeouts inside
        the executive to detect and recover from any issues connecting with devices.

        * Scripts/webkitpy/benchmark_runner/utils.py:
        (TimeoutError): Deleted.
        (timeout): Deleted.
        * Scripts/webkitpy/common/timeout_context.py: Added.
        (Timeout): A timeout context designed to be nested.
        (Timeout.TimeoutData): The data required to construct an alarm for a given timeout.
        (Timeout.TimeoutData.__init__):
        (Timeout.default_handler): Timeout handler used if none is specified.
        (Timeout.current): Access data about the most urgent timeout.
        (Timeout.__init__): Construct a Timeout object with seconds and an optional handler.
        (Timeout._bind_timeout_data_to_alarm): Given data about a timeout, initialize an alarm for that timeout.
        (Timeout.__enter__): Un-bind all alarms. Add data for this timeout to the ordered list and bind the most
        urgent timeout data.
        (Timeout.__exit__): Un-bind all alarms. Remove data for this timeout from the ordered list and bind the
        most urgent timeout data, if such data exists.
        * Scripts/webkitpy/common/timeout_context_unittest.py: Added.
        (TimeoutContextTests):
        (TimeoutContextTests.test_current_timeout): Test that accessing the nearest timeout works as expected.
        (TimeoutContextTests.test_invalid_timeout): Test a timeout of 0.
        (TimeoutContextTests.test_timeout_data): Confirm that timeouts are constructed correctly.
        (TimeoutContextTests.test_nested_inner_precedence): Check that a more urgent inner timeout takes precedence
        over a less urgent outer timeout.
        (TimeoutContextTests.test_nested_outer_precedence): Check that a more urgent outer timeout takes precedence
        over a less urgent inner timeout.
        (TimeoutContextTests.test_no_timeout): Test a block of code without a timeout.
        (TimeoutContextTests.test_basic_timeout): Test a block of code expected to timeout.
        (TimeoutContextTests.test_exception_constructor_timeout): Test a timeout where the handler is an exception.
        (TimeoutContextTests.test_nested_inner_timeout): Confirm that a more urgent inner timeout is triggered.
        (TimeoutContextTests.test_nested_outer_timeout): Confirm that a more urgent outer timeout is triggered.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Use Timeout class.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.launch_app._log_debug_error): Use Timeout class.
        (SimulatedDevice.launch_app): Ditto.
        (SimulatedDevice.launch_app._install_timeout): Deleted.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.wait_until_device_is_booted):Use Timeout class.
        (Simulator.wait_until_device_is_in_state): Ditto.

2017-08-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] ENABLE_DRAG_SUPPORT should be turned off for iOS 10 and enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=175392
        <rdar://problem/33783207>

        Reviewed by Tim Horton and Megan Gardner.

        Tweak FeatureDefines to enable drag and drop by default, and disable only on unsupported platforms (i.e. iOS 10).

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-09  Sam Weinig  <sam@webkit.org>

        Update for https://bugs.webkit.org/show_bug.cgi?id=175244.

        * TestWebKitAPI/Tests/WTF/Function.cpp:
        Remove tests of null Functions, as they are no longer supported.

2017-08-09  Daniel Bates  <dabates@apple.com>

        REGRESSION (r219013): OAuth flows are broken when redirecting back to application after authentication
        https://bugs.webkit.org/show_bug.cgi?id=175247
        <rdar://problem/33679804>

        Reviewed by Brady Eidson.

        Add tests for redirects.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DecidePolicyForNavigationAction.mm:
        (TEST):
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (createRedirectURL):
        (-[TestProtocol startLoading]):

2017-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r220393.

        This patch regresses the performance of WebPage::editorState.

        Reverted changeset:

        "[iOS WK2] WKWebView schedules nonstop layout after pressing
        cmb+b,i,u inside a contenteditable div"
        https://bugs.webkit.org/show_bug.cgi?id=175116
        http://trac.webkit.org/changeset/220393

2017-08-08  obinna obike  <oobike@apple.com>

        Created Individual EWS Pages
        https://bugs.webkit.org/show_bug.cgi?id=174477

        Reviewed by Aakash Jain.

        Created individual pages for each EWS. Changed the link within each status bubble
        to go directly to the individual EWS page. Also added a link to original status page showing all EWSes.

        * QueueStatusServer/handlers/patch.py:
        (Patch.get): Handles the case for individual ews queue as well as for all EWS queues.
        * QueueStatusServer/handlers/statusbubble.py:
        (StatusBubble._build_bubble): Updated url for specific EWS.
        * QueueStatusServer/main.py: Added a link to the individual ews in the routes dictionary.
        * QueueStatusServer/templates/patch.html: Added a link to go directly to the page with
        all ews queues.
        * QueueStatusServer/templates/statusbubble.html: If you click on a statusbubble it
        takes you directly to the individual ews page.

2017-08-08  Stephan Szabo  <stephan.szabo@sony.com>

        Separate jsc stress test script writer from run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=175216

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:
        * Scripts/webkitruby/jsc-stress-test-writer-default.rb: Added.

2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix Ubuntu LTS build
        https://bugs.webkit.org/show_bug.cgi?id=174490

        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:

2017-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Mac WK2] WebViewImpl should hold a weak pointer to its WKWebView or WKView
        https://bugs.webkit.org/show_bug.cgi?id=175302
        <rdar://problem/33762116>

        Reviewed by Tim Horton.

        Adds a new unit test checking that delayed event processing in text input context does not cause unwanted behaviors.
        See WebKit ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/AppKitSPI.h: Renamed from Tools/TestWebKitAPI/Tests/TestWebKitAPI/mac/NSTextInputClientSPI.h.
        * TestWebKitAPI/Tests/mac/WKWebViewMacEditingTests.mm: Renamed from Tools/TestWebKitAPI/Tests/mac/WKWebViewSelectionTests.mm.
        (-[SlowTextInputContext handleEventByInputMethod:completionHandler:]):
        (-[SlowTextInputContext handleEvent:completionHandler:]):
        (-[SlowInputWebView inputContext]):
        (-[SlowInputWebView _web_superInputContext]):
        (TEST):

2017-08-08  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Clear web processes' state on history removal
        https://bugs.webkit.org/show_bug.cgi?id=175271
        <rdar://problem/33756560>

        Reviewed by Chris Dumez.

        Test infrastructure for asynchronous tests of website data
        removal for _WKWebsiteDataTypeResourceLoadStatistics.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsClearThroughWebsiteDataRemoval):
        (WTR::TestRunner::statisticsCallClearThroughWebsiteDataRemovalCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didClearStatisticsThroughWebsiteDataRemoval):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::statisticsClearThroughWebsiteDataRemoval):

2017-08-08  Alicia Boya García  <aboya@igalia.com>

        Add Alicia Boya García as contributor
        https://bugs.webkit.org/show_bug.cgi?id=175326

        Reviewed by Michael Catanzaro.

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

2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Properly test if compiler supports compiler flags
        https://bugs.webkit.org/show_bug.cgi?id=174490

        Reviewed by Konstantin Tokarev.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * MiniBrowser/gtk/CMakeLists.txt:
        * TestRunnerShared/Bindings/JSWrapper.cpp:
        (WTR::JSWrapper::initialize):
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
        (TestWebKitAPI::CheckedArithmeticTester::run):
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (formControlsAssociatedCallback):
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::getResourcesDir):
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::menuItemClickCallback):
        (WTR::staticConvertMenuItemToType):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUseDashboardCompatibilityMode):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::disconnectAccessibilityCallbacks):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::helpText const):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::releaseTouchPoint):

2017-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] WKWebView schedules nonstop layout after pressing cmb+b,i,u inside a contenteditable div
        https://bugs.webkit.org/show_bug.cgi?id=175116
        <rdar://problem/28279301>

        Reviewed by Darin Adler and Ryosuke Niwa.

        Introduces new testing infrastructure and API tests to test EditorState updates in the UI process. The new
        EditorStateTests run on both iOS and Mac.

        * TestWebKitAPI/EditingTestHarness.h: Added.
        * TestWebKitAPI/EditingTestHarness.mm: Added.

        EditingTestHarness is a helper object that API tests may use to apply editing commands and store EditorState
        history. This test harness adds sugaring around various editing commands, and simplifies the process of checking
        the state of the latest observed EditorState.

        (-[EditingTestHarness initWithWebView:]):
        (-[EditingTestHarness dealloc]):
        (-[EditingTestHarness webView]):
        (-[EditingTestHarness latestEditorState]):
        (-[EditingTestHarness editorStateHistory]):
        (-[EditingTestHarness insertText:andExpectEditorStateWith:]):
        (-[EditingTestHarness insertHTML:andExpectEditorStateWith:]):
        (-[EditingTestHarness selectAllAndExpectEditorStateWith:]):
        (-[EditingTestHarness moveBackwardAndExpectEditorStateWith:]):
        (-[EditingTestHarness moveWordBackwardAndExpectEditorStateWith:]):
        (-[EditingTestHarness toggleBold]):
        (-[EditingTestHarness toggleItalic]):
        (-[EditingTestHarness toggleUnderline]):
        (-[EditingTestHarness setForegroundColor:]):
        (-[EditingTestHarness alignJustifiedAndExpectEditorStateWith:]):
        (-[EditingTestHarness alignLeftAndExpectEditorStateWith:]):
        (-[EditingTestHarness alignCenterAndExpectEditorStateWith:]):
        (-[EditingTestHarness alignRightAndExpectEditorStateWith:]):
        (-[EditingTestHarness insertParagraphAndExpectEditorStateWith:]):
        (-[EditingTestHarness deleteBackwardAndExpectEditorStateWith:]):
        (-[EditingTestHarness _execCommand:argument:expectEntries:]):

        Dispatches an editing command to the web process, and blocks until a response is received. If an expected
        entries dictionary is given, this will additionally verify that the latest EditorState contains all the expected
        keys and values.

        (-[EditingTestHarness latestEditorStateContains:]):
        (-[EditingTestHarness _webView:editorStateDidChange:]):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/EditorStateTests.mm: Added.
        (TestWebKitAPI::setUpEditorStateTestHarness):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/editor-state-test-harness.html: Added.

2017-08-04  Brent Fulgham  <bfulgham@apple.com>

        Prevent domain from being set to a TLD
        https://bugs.webkit.org/show_bug.cgi?id=175226
        <rdar://problem/11079948>

        Reviewed by Chris Dumez.

        Extend the public suffix tests to include cases used by the
        Public Domain 'Public Suffix List'.

        * TestWebKitAPI/Tests/mac/PublicSuffix.cpp: 
        (TestWebKitAPI::TEST):

2017-08-07  Stephan Szabo  <stephan.szabo@sony.com>

        [XCode] webkit-patch should run sort-Xcode-project-file
        https://bugs.webkit.org/show_bug.cgi?id=174036
        <rdar://problem/33732709>

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/sortxcodeprojectfiles.py: Added.

2017-08-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Preview Canvas path when viewing a recording
        https://bugs.webkit.org/show_bug.cgi?id=174967

        Reviewed by Brian Burg.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions const):
        Add plumbing for new InspectorAdditions runtime flag.

2017-08-07  obinna obike  <oobike@apple.com>

        Sorted EWS Queues on Patch page
        https://bugs.webkit.org/show_bug.cgi?id=173667

        Reviewed by Aakash Jain.

        * QueueStatusServer/handlers/patch.py:
        (Patch.get): Sorted queue_status.
        * QueueStatusServer/templates/patch.html:
        Changed queue_status.items to queue_status because it's a list.

2017-08-07  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        check-webkit-style: NS_ERROR_ENUM and NS_OPTIONS should not be handled as function definitions.
        https://bugs.webkit.org/show_bug.cgi?id=175286

        Reviewed by Myles C. Maxfield.

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

2017-08-07  Brian Burg  <bburg@apple.com>

        Remove CANVAS_PATH compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175207

        Reviewed by Sam Weinig.

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

2017-08-07  Per Arne Vollan  <pvollan@apple.com>

        [Win] Use Visual Studio 2017 if installed.
        https://bugs.webkit.org/show_bug.cgi?id=175188

        Reviewed by Sam Weinig.

        If installed, use VS2017 to build WebKit. If not, fall back to VS2015.

        * Scripts/webkitdirs.pm:
        (visualStudioInstallDir):
        (msBuildInstallDir):

2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to provide browser information required by automation
        https://bugs.webkit.org/show_bug.cgi?id=175130

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/main.c:
        (automationStartedCallback): Set browser information when a new automation session is started.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionApplicationInfo):
        (beforeAll):

2017-08-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220295.

        This change introduced 4 errors in webkitpy tests.

        Reverted changeset:

        "[XCode] webkit-patch should run sort-Xcode-project-file"
        https://bugs.webkit.org/show_bug.cgi?id=174036
        http://trac.webkit.org/changeset/220295

2017-08-04  Ryan Haddad  <ryanhaddad@apple.com>

        Disable API test NowPlayingControlsTests.NowPlayingControlsIOS.

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/NowPlayingControlsTests.mm:
        (TestWebKitAPI::TEST):

2017-08-05  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r219895-219897): Number of leaks on Open Source went from 9240 to 235983 and is now at 302372
        https://bugs.webkit.org/show_bug.cgi?id=175083

        Reviewed by Oliver Hunt.
        
        Leaks results are super confusing if leaks runs while some VMs are destructing. This calls a new SPI
        to wait for VM destructions to finish before running the next test. This makes it easier to 
        understand leaks results from workers tests, and leads to fewer reported leaks.

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

2017-08-05  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        check-webkit-style: fix path-specific rules for WebKit2 rename
        https://bugs.webkit.org/show_bug.cgi?id=175182

        Reviewed by David Kilzer.

        * Scripts/webkitpy/style/checker.py:

2017-08-04  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add Cache and CacheStorage IDL definitions
        https://bugs.webkit.org/show_bug.cgi?id=175201

        Reviewed by Brady Eidson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setCacheAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-08-04  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Report user interaction immediately, but only when needed
        https://bugs.webkit.org/show_bug.cgi?id=175090
        <rdar://problem/33685546>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
            Now calls WebCore::ResourceLoadObserver::clearState().

2017-08-04  Tim Horton  <timothy_horton@apple.com>

        Add an API test for r220286
        https://bugs.webkit.org/show_bug.cgi?id=175206

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (-[AnimatedResizeWebView _webView:didChangeSafeAreaShouldAffectObscuredInsets:]):
        (createAnimatedResizeWebView):
        (TEST):
        Add a test to ensure that we don't call
        _webView:didChangeSafeAreaShouldAffectObscuredInsets: during an
        animated resize.

2017-08-04  Stephan Szabo  <stephan.szabo@sony.com>

        [XCode] webkit-patch should run sort-Xcode-project-file
        https://bugs.webkit.org/show_bug.cgi?id=174036

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/common/config/ports.py:
        * Scripts/webkitpy/tool/commands/download.py:
        * Scripts/webkitpy/tool/commands/upload.py:
        * Scripts/webkitpy/tool/steps/__init__.py:
        * Scripts/webkitpy/tool/steps/options.py:
        * Scripts/webkitpy/tool/steps/sortxcodeprojectfiles.py: Added.

2017-08-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r219857): run-benchmark --allplans broken
        https://bugs.webkit.org/show_bug.cgi?id=175186

        Reviewed by Saam Barati.

        r219857 forgot to update also the calls to BenchmarkRunner() that
        is done when the script is run with --allplans.

        To fix this (and avoid future issues like this), let's factorize
        the calls to the benchhmark runner in a run_benchmark_plan()
        function.

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

2017-08-04  Aakash Jain  <aakash_jain@apple.com>

        Dashboard bubbles sometimes show failure count instead of crash count
        https://bugs.webkit.org/show_bug.cgi?id=175157
        <rdar://problem/33709009>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults.prototype.resultSummarizer): Use the regex for the precise match first.

2017-08-04  Joseph Pecoraro  <pecoraro@apple.com>

        Add tests for NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=175146

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        New files and sort.

        * TestWebKitAPI/Tests/WTF/Logger.h:
        * TestWebKitAPI/Tests/WTF/Logger.cpp:
        (TestWebKitAPI::log):
        (TestWebKitAPI::takeLogStr):
        * TestWebKitAPI/Tests/WTF/RefLogger.h:
        * TestWebKitAPI/Tests/WTF/RefLogger.cpp:
        (TestWebKitAPI::log): Deleted.
        (TestWebKitAPI::takeLogStr): Deleted.
        Extract log() / takeLogStr() from RefLogger to a general Logger.h/cpp.

        * TestWebKitAPI/Tests/WTF/LifecycleLogger.h:
        * TestWebKitAPI/Tests/WTF/LifecycleLogger.cpp: Added.
        (TestWebKitAPI::LifecycleLogger::LifecycleLogger):
        (TestWebKitAPI::LifecycleLogger::operator=):
        (TestWebKitAPI::LifecycleLogger::~LifecycleLogger):
        (TestWebKitAPI::LifecycleLogger::setName):
        (TestWebKitAPI::TEST):
        Add a class that logs construction / assignment / modifications.

        * TestWebKitAPI/Tests/WTF/NeverDestroyed.cpp: Added.
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::list):
        Test construction behavior is as expected both directly and using makeNeverDestroyed.

2017-08-04  Lucas Forschler  <lforschler@apple.com>

        minification logic is not implemented for ios builds
        <rdar://problem/33726561>

        Reviewed by Dean Johnson

        * BuildSlaveSupport/built-product-archive:
        (minifyDirectory): refactor minifySource -> minifyDirectory
        (archiveBuiltProduct): add ios minification logic
        (minifySource): Deleted.

2017-08-04  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220271.

        Rolling out due to Layout Test failing on iOS Simulator.

        Reverted changeset:

        "Remove STREAMS_API compilation guard"
        https://bugs.webkit.org/show_bug.cgi?id=175165
        http://trac.webkit.org/changeset/220271

2017-08-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220268.

        This change caused assertion failures on macOS and iOS Debug
        WK2.

        Reverted changeset:

        "Resource Load Statistics: Report user interaction
        immediately, but only when needed"
        https://bugs.webkit.org/show_bug.cgi?id=175090
        http://trac.webkit.org/changeset/220268

2017-08-04  Youenn Fablet  <youenn@apple.com>

        Remove STREAMS_API compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175165

        Reviewed by Darin Adler.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-04  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Report user interaction immediately, but only when needed
        https://bugs.webkit.org/show_bug.cgi?id=175090
        <rdar://problem/33685546>

        Reviewed by Chris Dumez.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
            Now calls WebCore::ResourceLoadObserver::clearState().

2017-08-03  Brian Burg  <bburg@apple.com>

        Remove ENABLE(WEB_SOCKET) guards
        https://bugs.webkit.org/show_bug.cgi?id=167044

        Reviewed by Joseph Pecoraro.

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

2017-08-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r219850): run-benchmark script broken on Linux
        https://bugs.webkit.org/show_bug.cgi?id=175126

        Reviewed by Stephanie Lewis.

        The run-benchmark script dynamically generates the list of supported
        browsers and platforms (currently Linux and OSX) by loading all
        python files from Tools/Scripts/webkitpy/benchmark_runner/browser_driver
        and getting the browser_name and platform variables from the
        classes defined there.

        This means that this classes should not raise an exception when
        loaded on other platforms or otherwise they will broke the whole
        script. Its fine if they raise an exception when executing any of
        the methods they implement, but not when just loading/importing
        the class.

        Move the argument variable definitions that call on the platform
        specific OSXBrowserDriver._screen_size() function from beeing
        variables that are evaluated when loading the file, to be functions
        that are only evaluated when the actual functionality needs to be
        executed.

        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_url):
        (OSXChromeCanaryDriver.launch_url):
        (create_args):
        (create_chrome_options):
        (create_window_size_arg):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_url):
        (OSXFirefoxNightlyDriver.launch_url):
        (OSXFirefoxNightlyDriver.launch_driver):
        (create_args):

2017-08-03  Yoshiaki Jitsukawa  <jitsu@rd.scei.sony.co.jp>

        [PAL] Move spi/cf directory into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175057

        Reviewed by Antti Koivisto.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):

        Ignore "readability/naming/underscores" style errors for sources
        under the WebCore/PAL/pal/spi directory.

        * TestWebKitAPI/Tests/WebKit2Cocoa/CookieAcceptPolicy.mm:

2017-08-03  Youenn Fablet  <youenn@apple.com>

        Remove FETCH_API compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175154

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-08-03  Lucas Forschler  <lforschler@apple.com>

        Enable archive minification on iOS builds
        https://bugs.webkit.org/show_bug.cgi?id=174718
        
        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildFactory.__init__):

2017-08-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WKE] Pass the --memory-limited option on the GTK and WPE buildbots for the JSC tests.
        https://bugs.webkit.org/show_bug.cgi?id=175140

        Reviewed by Alexey Proskuryakov.

        We are having lately issues with JSC tests causing problems on
        the GTK+ and WPE bots due to the high amount of memory some tests
        need to run.

        The best thing we can do now is to workaround this by disabling
        all the tests marked as memoryLimited on the GTK and WPE bots.
        We may revise this on the future.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.start):

2017-08-03  Brady Eidson  <beidson@apple.com>

        Add SW IDLs and stub out basic functionality.
        https://bugs.webkit.org/show_bug.cgi?id=175115

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

        * Scripts/webkitpy/bindings/main.py:

2017-08-03  Per Arne Vollan  <pvollan@apple.com>

        [Win] The test http/tests/security/contentSecurityPolicy/upgrade-insecure-requests/basic-upgrade.https.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=159510

        Reviewed by Daniel Bates.

        Allow any https certificate when running tests.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2017-08-02  Youenn Fablet  <youenn@apple.com>

        HTTP tests with 'https' suffix are only run over HTTPS for WK2, not WK1
        https://bugs.webkit.org/show_bug.cgi?id=175089

        Reviewed by Chris Dumez.

        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions): Using absolutePath if available.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (computeTestURL): Removing http/tests/ specific URL computation.
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_from_driver_input): Making webkitpy passing HTTP urls for HTTP served tests to all test runners, including WK1.

2017-08-02  Lucas Forschler  <lforschler@apple.com>

        download-built-product should allow for a proxy option
        https://bugs.webkit.org/show_bug.cgi?id=174875

        Reviewed by Aakash Jain, Alexey Proskuryakov, Dean Johnson

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadBuiltProduct.start): Teach buildbot to pass along proxy for Apple bots
        

2017-08-02  Jonathan Bedard  <jbedard@apple.com>

        check-webkit-style: deleting lines in a file runs the linter on the whole file
        https://bugs.webkit.org/show_bug.cgi?id=175078

        Reviewed by David Kilzer.

        Deleting lines in a file should not cause linter errors to be blamed on the patch.
        <https://bugs.webkit.org/show_bug.cgi?id=86142> is an example of this happening.

        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker._should_log_linter_warning): Do not log a linter error if the file it is associated with only has deleted lines
        * Scripts/webkitpy/style/main_unittest.py:
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line): Added files should have every line number in the file when processing.
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line_only_deletes): Test case where the file with the linter errors only contained deletes.
        (ExpectationLinterInStyleCheckerTest.test_linter_added_file_with_error): Added files should have every line number in the file when processing.

2017-08-02  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Allow caller to specify response to unicode encode/decode error in filesystem
        https://bugs.webkit.org/show_bug.cgi?id=175075

        Reviewed by David Kilzer.

        We have no way of handling text files with illegal unicode characters. Allow the callers of
        filesystem.read_text_file to specify one of Python 2.7's supported responses ('strict', 'ignore', or
        'replace'). See https://docs.python.org/2/howto/unicode.html for details on these responses.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.read_text_file): Allow caller to specify unicode error handling.
        (FileSystem.write_text_file): Ditto.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.read_text_file): Allow caller to specify unicode error handling.
        (MockFileSystem.write_text_file): Ditto.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_text_file_unicode_decode_error): Test reading a file with illegal unicode content.
        (RealFileSystemTest.test_write_text_file_unicode_encode_error): Test writing illegal unicode content to a file.

2017-08-02  Aakash Jain  <aakash_jain@apple.com>

        Intermittent exception in buildPageURLForIteration for Buildbot 0.9 dashboard
        https://bugs.webkit.org/show_bug.cgi?id=175072

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot): Make sure this._builderNameToIDMap is always defined for Buildbot 0.9.

2017-08-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Remove obsolete code in TestWebKitAPI/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=175019

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:

2017-08-01  Csaba Osztrogonác  <ossy@webkit.org>

        Enabling uploading archives to S3
        https://bugs.webkit.org/show_bug.cgi?id=174198

        Unreviewed unit test fix after r219235.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2017-08-01  Csaba Osztrogonác  <ossy@webkit.org>

        Fix JSCOnly ARM buildbots after r220047
        https://bugs.webkit.org/show_bug.cgi?id=174993

        Unreviewed fix after r220087.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildAndRemoteJSCTestsFactory.__init__):

2017-08-01  Chris Dumez  <cdumez@apple.com>

        Add initial support for navigator.sendBeacon
        https://bugs.webkit.org/show_bug.cgi?id=175007
        <rdar://problem/33547728>

        Reviewed by Sam Weinig.

        Enable the Beacon API at runtime in the context of layout tests since the
        feature is currently disabled by default.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setModernMediaControlsEnabled):
        (WTR::TestRunner::setBeaconAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-08-01  Aakash Jain  <aakash_jain@apple.com>

        Update Bot Watcher's Dashboard for Buildbot 0.9
        https://bugs.webkit.org/show_bug.cgi?id=174777

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot): Check if USE_BUILDBOT_VERSION_LESS_THAN_09 is passed.
        (Buildbot.prototype._computeBuilderNameToIDMap): Fetch the builder name to ID mapping from buidbot and store
        in a dictionary.
        (Buildbot.prototype.buildPageURLForIteration): Updated URL as per Buildbot 0.9 format. Buildbot 0.9 currently does not support
        builder name in the build url. See <https://github.com/buildbot/buildbot/issues/3465>.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (isMultiCodebaseGotRevisionProperty): Adapting to new data format.
        (parseRevisionProperty): Ditto.
        (BuildbotIteration.prototype.failureLogURL): Return the URL to build page if precise failure url is not available. For
        Buildbot 0.9, build page URL would be appropriate in most cases as per the new UI.
        (BuildbotIteration.prototype._parseData): Parsing the data as per new data format. Many variable names and data types
        have changed in Buildbot 0.9.
        (BuildbotIteration.prototype._adjustBuildDataForBuildbot09): Adjust the Buildbot 0.8 data to new format.
        (BuildbotIteration.prototype._updateIfDataAvailable): Update method for Buildbot 0.9 data. We are performing two API calls, 
        one for build information, another for step information of that build. We need to wait until data from both REST API calls are available.
        (BuildbotIteration.prototype._deprecatedUpdateWithData): Renamed from _updateWithData, used for Buildbot 0.8 data.
        (BuildbotIteration.prototype.get buildURL): URL to fetch build information from Buildbot. Also fetches got_revision property.
        (BuildbotIteration.prototype.get buildStepsURL): URL to fetch the steps information from Buildbot.
        (BuildbotIteration.prototype.urlFailedToLoad): Callback method to be used when URL fails to load. Made it a separate function now.
        (BuildbotIteration.prototype.update): Modified to support both Buildbot 0.9 and 0.8 data format.
        (BuildbotIteration.prototype.actualUpdate): Update method for Buildbot 0.9 data.
        (BuildbotIteration.prototype.deprecatedUpdate): Update method for Buildbot 0.8 data.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.get baseURL): Updated URL as per Buildbot 0.9 format.
        (BuildbotQueue.prototype.get allIterationsURL): Ditto.
        (BuildbotQueue.prototype.get overviewURL): Ditto.
        (BuildbotQueue.prototype.get buildsURL): URL to fetch builds data in Buildbot 0.9.
        (BuildbotQueue.prototype.get buildsInfoURL): Returns the appropriate URL to use to fetch builds information from
        Buildbot 0.8 or 0.9.
        (BuildbotQueue.prototype.getBuilds): Method compatible with both Buildbot 0.8 and 0.9 to get build information from data
        fetched from Buildbot. Also, reversing the Buildbot 0.8 data to make it similar to 0.9 data format.
        (BuildbotQueue.prototype.isBuildComplete): Method compatible with both Buildbot 0.8 and 0.9 to check if the build has completed.
        (BuildbotQueue.prototype.getIterationID):  Method compatible with both Buildbot 0.8 and 0.9 to get the Iteration ID.
        (BuildbotQueue.prototype.update): Supports both Buildbot 0.8 and 0.9. Buildbot 0.9 REST API doesn't have cachedBuilds and currentBuilds. 
        Therefore we are fetching information for fixed number of build. 
        Also iterating the loop incrementally since the build data is already reverse sorted.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults.prototype._parseResults): Updated as per Buildbot 0.9 format. Note that we do not
        need to worry about 0.8 or 0.9 data format here, since the data is already converted to 0.9 format.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Pass the USE_BUILDBOT_VERSION_LESS_THAN_09 flag.

2017-08-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: simplify WebInspector with WI
        https://bugs.webkit.org/show_bug.cgi?id=175058

        Reviewed by Joseph Pecoraro.

        * Scripts/check-inspector-strings:
        (extract_ui_strings):
        * Scripts/extract-localizable-js-strings:

2017-08-01  Youenn Fablet  <youenn@apple.com>

        Layout tests with 'https' suffix should be run over HTTPS
        https://bugs.webkit.org/show_bug.cgi?id=174992

        Reviewed by Chris Dumez.

        Updating the test-name <-> uri conversion routines to use https when test names contain ".https." in them.
        This covers WPT tests, WPT WebKit tests and HTTP layout tests.
        Covered by corresponding unit tests.

        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py:
        (run_server):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (base_http_url):
        (base_https_url):
        (base_url): Deleted.
        * Scripts/webkitpy/port/base.py:
        (Port.to.web_platform_test_server_base_http_url):
        (Port.to):
        (Port.to.web_platform_test_server_base_https_url):
        (Port.to.web_platform_test_server_base_url): Deleted.
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__):
        (Driver.wpt_test_path_to_uri):
        (Driver):
        (Driver.http_test_path_to_uri):
        (Driver.test_to_uri):
        (Driver.uri_to_test):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_test_to_uri):
        (DriverTest.test_uri_to_test):

2017-07-26  Jiewen Tan  <jiewen_tan@apple.com>

        Add tests to detect mistakes in backward compatibility when the structured clone algorithm is changed in the future
        https://bugs.webkit.org/show_bug.cgi?id=173998

        Reviewed by Darin Adler.

        Since the structured clone algorithm is used for data stored in persistent databases, we need tests to help us
        detect mistakes in backward compatibility in the future when we change it.

        The way it works is to read from a pre-baked database and see if all the values are matched with the expectations.
        Surprisedly, some of structured clonable objects cannot be stored into the indexedDB. Those are FileList,
        ObjectReference, MessagePortReference, ArrayBufferView, ArrayBufferTransfer, NonMapProperties, NonSetProperties,
        SharedArrayBuffer, WasmModule, DOMPointReadOnly, DOMPoint, DOMRectReadOnly, DOMRect, DOMMatrixReadOnly, DOMMatrix,
        DOMQuad and Error. CryptoKey objects are not included as well as they need new API for encrypting/decrypting the
        internal key data slot.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.mm: Added.
        (-[IndexedDBStructuredCloneBackwardCompatibilityMessageHandler userContentController:didReceiveScriptMessage:]):
        (getNextMessage):
        (TEST):
        Here is the API test that moves the pre-baked database to the location where TestWebKitAPI can read from.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-shm: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibility.sqlite3-wal: Added.
        These are the pre-baked databases.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibilityRead.html: Added.
        This is the actual test that do all the reads and comparisons.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBStructuredCloneBackwardCompatibilityWrite.html: Added.
        This is the page that bakes the database. It never runs automatically. It is for someone who needs to teach
        IndexedDB new stuffs. Then it can be used to bake the database again.

2017-08-01  Brady Eidson  <beidson@apple.com>

        API test URLSchemeHandler.Exceptions is Exiting out early on macOS Debug..
        https://bugs.webkit.org/show_bug.cgi?id=175030

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
        (-[TaskSchemeHandler webView:startURLSchemeTask:]): Stop calling an invalid NSError constructor.

2017-08-01  Brady Eidson  <beidson@apple.com>

        Part 2 of: Rename DatabaseProcess to StorageProcess.
        https://bugs.webkit.org/show_bug.cgi?id=174880

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBIndexUpgradeToV2.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ResourceLoadStatistics.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

2017-07-31  Csaba Osztrogonác  <ossy@webkit.org>

        Fix JSCOnly ARM buildbots after r220047
        https://bugs.webkit.org/show_bug.cgi?id=174993

        Reviewed by Saam Barati.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildAndRemoteJSCTestsFactory.__init__):

2017-07-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Introduce Private Symbols
        https://bugs.webkit.org/show_bug.cgi?id=174935

        Reviewed by Darin Adler.

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

2017-07-30  Darin Adler  <darin@apple.com>

        Remove code in HTMLObjectElement attribute parsing that forces style resolution and layout
        https://bugs.webkit.org/show_bug.cgi?id=130653

        Reviewed by Antti Koivisto.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didFinishLoadForFrame): Omit now-unneeded "shouldDump" argument
        when calling frameDidChangeLocation.
        (WTR::InjectedBundlePage::frameDidChangeLocation): Removed "shouldDump" argument. This was
        causing WebKitTestRunner to not dump anything in cases where DumpRenderTree will dump, and
        thus causing mysterious failures of a couple of tests. There are two remaining issues:
        1) WebKitTestRunner won't run its dump code if there is no "page", and there is no such
        consideration in DumpRenderTree and 2) Both DumpRenderTree and WebKitTestRunner share the
        same logic flaw that causes "top loading frame" to get set to one of the subframes in
        tests where  the following sequence occurs: test calls waitUntilDone, main frame finishes
        loading, subframe starts loading. It would be good to clean that up some day, but for now
        this patch makes the two work identically rather than changing both.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h: Updated for change above.

2017-07-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Replace RetainPtr<> with auto when adopting allocated ObjC objects in DataInteractionTests
        https://bugs.webkit.org/show_bug.cgi?id=174963

        Reviewed by Darin Adler.

        Replaces several uses of RetainPtr<>s with auto. Some test cases in this file use auto, while other test cases declare using
        RetainPtr<>. This patch changes them to all use auto.

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

2017-07-30  Brady Eidson  <beidson@apple.com>

        Add URLSchemeHandler API tests that verify the lack of URLSchemeTask object leaks.
        https://bugs.webkit.org/show_bug.cgi?id=174958

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-leaks.mm: Added.
        (-[LeakSchemeHandler webView:startURLSchemeTask:]):
        (-[LeakSchemeHandler webView:stopURLSchemeTask:]):
        (runUntilTasksInFlight):
        (TEST):

2017-07-28  Commit Queue  <commit-queue@webkit.org>

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

        "broke PLT on iOS (rdar://problem/33602751)" (Requested by
        estes on #webkit).

        Reverted changeset:

        "Part 2 of: Rename DatabaseProcess to StorageProcess."
        https://bugs.webkit.org/show_bug.cgi?id=174880
        http://trac.webkit.org/changeset/219990

2017-07-28  Brady Eidson  <beidson@apple.com>

        API tests that use URLSchemeHandler are failing.
        https://bugs.webkit.org/show_bug.cgi?id=174950

        Reviewed by Alex Christensen.

        Fix the NoMIMEType test to be correct.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
        (-[SchemeHandler initWithData:mimeType:]):
        (-[SchemeHandler webView:startURLSchemeTask:]):
        (TEST):

2017-07-28  Daniel Bates  <dabates@apple.com>

        prepare-ChangeLog should not list added layout tests in PAL ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=174876

        Reviewed by Alex Christensen.

        Do not list added layout tests in the PAL ChangeLog as such tests are unlikely to be related
        to a PAL change. Unit tests are more appropriate for PAL changes than layout tests because
        they provide a more direct way to test the platform abstraction.

        As a side effect of this change we no longer list added layout tests in WebCore/platform/gtk/po/ChangeLog.

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs): Only list added layout tests in the WebCore ChangeLog regardless
        of the current working directory.

2017-07-28  Jonathan Bedard  <jbedard@apple.com>

        Using "auto <function()> -> returnType" breaks prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=174930

        Unreviewed test fix.

        We need to check parentheses before printing 'const' or 'volatile' in the ChangeLog. 

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp):

2017-07-28  JF Bastien  <jfbastien@apple.com>

        Using "auto <function()> -> returnType" breaks prepare-ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=174930

        Reviewed by Daniel Bates.

        Teach prepare-ChangeLog about C++ auto arrow return, and while I'm
        here also teach it about const and volatile overloads. I didn't do
        reference and rvalue reference overloads because we don't really
        use them, and the current parser throws away those characters and
        it doesn't seem worth making it more complex.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp:
        (Foo::Arrow::arrow):
        (Foo::Arrow::otherArrow):
        (Foo::Arrow::otherArrow const):
        (Foo::Arrow::otherArrow volatile):
        (Foo::Arrow::otherArrow const volatile):

2017-07-28  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Building with ENABLE_VIDEO=OFF fails
        https://bugs.webkit.org/show_bug.cgi?id=174940

        Reviewed by Alex Christensen.

        When GStreamer usage is completely disabled at build time, CMake does not query pkg-config for the GStreamer.
        This adds missing USE(GSTREAMER) guards in order to make testing code buildable when GStreamer usage is disabled.

        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (methodCallCallback): Add missing USE(GSTREAMER) guard.

2017-07-28  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Implement EventSenderProxy in WTR
        https://bugs.webkit.org/show_bug.cgi?id=173419

        Reviewed by Žan Doberšek.

        Add the implementation of EventSenderProxy to the WTR. This
        allows us to extend the coverage of the test suite in WKWPE.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/PlatformWPE.cmake: Add dependency on
        libxkbcommon needed to deal with key events.
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::senderButtonToWPEButton):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):
        (WTR::EventSenderProxy::leapForward):
        (WTR::wkEventModifiersToWPE):
        (WTR::getXKBKeySymForKeyRef):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::setTouchPointRadius):
        (WTR::EventSenderProxy::getUpdatedTouchEvents):
        (WTR::EventSenderProxy::removeUpdatedTouchEvents):
        (WTR::EventSenderProxy::prepareAndDispatchTouchEvent):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::touchCancel):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::cancelTouchPoint):

2017-07-27  Brady Eidson  <beidson@apple.com>

        Part 2 of: Rename DatabaseProcess to StorageProcess.
        https://bugs.webkit.org/show_bug.cgi?id=174880

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBDeleteRecovery.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IDBIndexUpgradeToV2.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBDatabaseProcessKill.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ResourceLoadStatistics.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebProcessKillIDBCleanup.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

2017-07-26  Mark Lam  <mark.lam@apple.com>

        Add ability to only run specific tests in run-javascriptcore-tests.
        https://bugs.webkit.org/show_bug.cgi?id=174884

        Reviewed by Saam Barati.

        For example, if we only want to run testapi, we can do so as follows:
            $ run-javascriptcore-tests --testapi

        Previously, specifying --testapi effectively does nothing because we run all tests
        by default.  Only --no-testapi had the effect of disabling the test set.  This
        old behavior for --testapi is not very useful or meaningful.  We're now changing
        it to mean that we will only run that test.

        With this change, we can also run more than one set of tests.  For example, if we
        only want to run testmasm and testair, we can do so as follows:
            $ run-javascriptcore-tests --testmasm --testair

        By default, if no specific test option is specified, run-javascriptcore-tests will
        run all tests.

        Note that the jsc stress tests (--jsc-stress) are a different set of tests than
        the mozilla tests (--mozilla-tests) even though both are run via the lower level
        run-jsc-stress-tests test harness.  Hence, if you only specify one of the tests,
        the other set will not run.  For example, the following only runs the mozilla tests:
            $ run-javascriptcore-tests --mozilla-tests

        Note also that --jit-stress-tests is not for choosing a different set of tests.
        Instead, it is used for determining whether we run JIT'ed test configurations
        on the jsc stress tests and mozilla tests.  As a result, specifying
        --jit-stress-tests will not omit other tests.  For example, the following still
        runs all tests:
            $ run-javascriptcore-tests --jit-stress-tests

        * Scripts/run-javascriptcore-tests:
        (defaultStringForTestState):
        (enableTestOrNot):
        (runJSCStressTests):

2017-07-26  Mark Lam  <mark.lam@apple.com>

        Make run-javascriptcore-test run testair, testb3, and testmasm.
        https://bugs.webkit.org/show_bug.cgi?id=174837
        <rdar://problem/33522927>

        Reviewed by Saam Barati and Filip Pizlo.

        1. Refactors code for running testapi so that we can use it to run other tests.
        2. Added running of testmasm, testair, testb3.

        Note: the existing testapi invocation code does not support remote invocation of
        the tests (e.g. on a ARM device).  Hence, the new additions of testmasm, testair,
        and testb3 also do not support remote invocation.  If we wish to add remote
        invocation support, we should do that in a separate patch.

        * Scripts/run-javascriptcore-tests:
        (testPath):
        (runTest):
        (testapiPath): Deleted.

2017-07-26  Aakash Jain  <aakash_jain@apple.com>

        Remove duplicate code from Buildbot.js in dashboard
        https://bugs.webkit.org/show_bug.cgi?id=174870

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.javaScriptCoreTestFailuresURLForIteration): Remove duplicate code and reuse buildPageURLForIteration() to construct URL.
        (Buildbot.prototype.javaScriptCoreTestStdioUrlForIteration): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js:
        (MockBuildbot.prototype.javaScriptCoreTestStdioUrlForIteration): Ditto for tests.

2017-07-26  Brady Eidson  <beidson@apple.com>

        Add test to verify certain child processes are not launched as a side effect of enabling ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=174851

        Reviewed by Chris Dumez.

        * TestWebKitAPI/Tests/WebKit2Cocoa/ResourceLoadStatistics.mm:
        (TEST):

2017-07-26  Brian Burg  <bburg@apple.com>

        Remove WEB_TIMING feature flag
        https://bugs.webkit.org/show_bug.cgi?id=174795

        Reviewed by Alex Christensen.

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

2017-07-26  Chris Dumez  <cdumez@apple.com>

        Pressing the Escape key should not be a valid user gesture to enter fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=174864
        <rdar://problem/33009088>

        Reviewed by Geoffrey Garen.

        Add support for eventSender.keyDown('escape') in DRT to match the behavior of
        WKTR.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):

2017-07-26  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        Unreviewed, added Romain Bellessort to contributors.json.

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

2017-07-26  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] WebGL2 support
        https://bugs.webkit.org/show_bug.cgi?id=174249

        Reviewed by Alex Christensen.

        * Scripts/webkitperl/FeatureList.pm:
        Enable WebGL2 for WPE when building through build-webkit.

2017-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK distcheck.

        * gtk/make-dist.py:
        (ensure_version_if_possible): Use the right pkg-config filename, it's webkit2gtk not webkitgtk.

2017-07-25  Brady Eidson  <beidson@apple.com>

        ResourceLoadStatistics grandfathering happens much too often.
        <rdar://problem/32655834> and https://bugs.webkit.org/show_bug.cgi?id=174825

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/EmptyGrandfatheredResourceLoadStatistics.plist: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ResourceLoadStatistics.mm: Added.
        (TEST):

2017-07-25  Matthew Stewart  <matthew_r_stewart@apple.com>

        Fix autoinstaller failing on autoinstall_everything
        https://bugs.webkit.org/show_bug.cgi?id=174830

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook.install_chromedriver):
        (AutoinstallImportHook.install_geckodriver):
        (AutoinstallImportHook._install_chromedriver): Deleted.
        (AutoinstallImportHook._install_geckodriver): Deleted.

2017-07-25  Jonathan Bedard  <jbedard@apple.com>

        Replace --runtime with something for both ios-simulator and ios-device
        https://bugs.webkit.org/show_bug.cgi?id=173775
        <rdar://problem/32952164>

        Reviewed by Aakash Jain.

        Add --version flag for both iOS simulator and iOS device.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Add --version flag and move --no-install.
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Move --no-intall to run_webkit_tests.py.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort._is_valid_ios_version): Check that the provided version string is legal.
        (IOSPort.get_option): If accessing the iOS version, check that it is a valid version string.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.ios_version): Consult --version flag before checking connected
        devices for iOS version.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.make_port): Set --version option so that we can generate test
        expectation paths without devices connected.
        (IOSDeviceTest.test_additional_platform_directory): Deleted.
        (IOSDeviceTest.test_baseline_searchpath): Deleted.
        (IOSDeviceTest.test_expectations_ordering): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.simulator_runtime): If no runtime is specified, use the --version
        flag to specify a runtime.
        (IOSSimulatorPort.ios_version): First check the --version flag, then the --runtime
        flag and then use the default runtime.

2017-07-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] TestWebKitAPI tests are no longer built since the WebKit2 rename
        https://bugs.webkit.org/show_bug.cgi?id=174815

        Reviewed by Carlos Alberto Lopez Perez.

        Only WebKitGTK specific tests are built, but not WebKit2, WTF nor WebCore ones. We are still checking
        ENABLE_WEBKIT2 in the makefile, that was renamed to ENABLE_WEBKIT. Also, all WebKit2 test paths were updated to
        use WebKit dir, while the tests are still in WebKit2 directory. This patch also removes
        TestWebKitAPIInjectedBundle_PATH that is unused and now makes the configure to fail (it used to be a warning, I
        think), probably because of a newer CMake version.

        * CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformGTK.cmake:

2017-07-24  Matthew Stewart  <matthew_r_stewart@apple.com>

        Fix BenchmarkRunner to only import selenium when needed
        https://bugs.webkit.org/show_bug.cgi?id=174808

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py:
        (LinuxChromeDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py:
        (LinuxFirefoxDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_driver):
        (OSXChromeCanaryDriver.launch_driver):
        (create_chrome_options):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_driver):
        (OSXFirefoxNightlyDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py:
        (WebDriverBenchmarkRunner._run_one_test):

2017-07-23  Darin Adler  <darin@apple.com>

        More NeverDestroyed and related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=174745

        Reviewed by Alex Christensen.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreadsMutex): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_STATIC_LOCAL.
        (javaScriptThreads): Ditto.

2017-07-24  Matthew Stewart  <matthew_r_stewart@apple.com>

        Subclass Benchmark Runner script for WebDriver support
        https://bugs.webkit.org/show_bug.cgi?id=174390

        Reviewed by Dewei Zhu, Stephanie Lewis.

        Add WebServerBenchmarkRunner and WebDriverBenchmarkRunner subclasses.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder.__init__):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__):
        (BenchmarkRunner._find_plan_file):
        (BenchmarkRunner._run_one_test.and):
        (BenchmarkRunner.execute):
        (BenchmarkRunner._get_result): Deleted.
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (parse_args):
        (start):
        * Scripts/webkitpy/benchmark_runner/webdriver_benchmark_runner.py: Added.
        (WebDriverBenchmarkRunner):
        (WebDriverBenchmarkRunner._get_result):
        (WebDriverBenchmarkRunner._run_one_test):
        * Scripts/webkitpy/benchmark_runner/webserver_benchmark_runner.py: Added.
        (WebServerBenchmarkRunner):
        (WebServerBenchmarkRunner.__init__):
        (WebServerBenchmarkRunner._get_result):
        (WebServerBenchmarkRunner._run_one_test):

2017-07-24  Matthew Stewart  <matthew_r_stewart@apple.com>

        Add BenchmarkRunner patches with WebDriver support for each testing plan
        https://bugs.webkit.org/show_bug.cgi?id=174443

        Reviewed by Dewei Zhu, Stephanie Lewis.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder.__enter__):
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/ARES-6.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/ContentAnimation.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/Dromaeo.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/JSBench.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/JetStream.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/Kraken.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/MotionMark.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/Octane.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/Speedometer.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webdriver/SunSpider.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/ARES-6.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/Animometer.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/ContentAnimation.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/Dromaeo.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/JSBench.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/JetStream.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/Kraken.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/MotionMark.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/Octane.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/Speedometer.patch:
        * Scripts/webkitpy/benchmark_runner/data/patches/webserver/SunSpider.patch:
        * Scripts/webkitpy/benchmark_runner/data/plans/ares6.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-cssquery.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-dom.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/dromaeo-jslib.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/jetstream.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/jsbench.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/kraken.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/motionmark.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/octane.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/speedometer.plan:
        * Scripts/webkitpy/benchmark_runner/data/plans/sunspider.plan:

2017-07-24  Matthew Stewart  <matthew_r_stewart@apple.com>

        Add functions to autoinstaller needed for Benchmark Runner script
        https://bugs.webkit.org/show_bug.cgi?id=174331

        Reviewed by Dean Johnson, Dewei Zhu, Stephanie Lewis.

        Adds autoinstaller functions to install selenium and webdriver binaries
        which will be used by the browser driver part of Benchmark Runner.

        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.restore_env):
        (BrowserDriver):
        (BrowserDriver.get_webdriver_binary_path):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py:
        (LinuxChromeDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py:
        (LinuxFirefoxDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_driver):
        (OSXChromeCanaryDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_driver):
        (OSXFirefoxNightlyDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        * Scripts/webkitpy/benchmark_runner/utils.py:
        (get_driver_binary_path):
        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._unzip):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_selenium):
        (AutoinstallImportHook):
        (AutoinstallImportHook._install_chromedriver):
        (AutoinstallImportHook._install_geckodriver):
        (AutoinstallImportHook.get_latest_pypi_url):
        (AutoinstallImportHook.install_binary):
        (autoinstall_everything):
        (get_driver_filename):
        (get_os_info):

2017-07-24  Matthew Stewart  <matthew_r_stewart@apple.com>

        Add WebDriver support in browser driver part of BenchmarkRunner
        https://bugs.webkit.org/show_bug.cgi?id=174445

        Reviewed by Stephanie Lewis.

        Adds a launch_driver function to each BrowserDriver subclass. This
        function sets up the arguments for the webdriver and launches the
        webdriver specific to that browser.

        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.launch_webdriver):
        (BrowserDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_browser_driver.py:
        (LinuxBrowserDriver.launch_webdriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_chrome_driver.py:
        (LinuxChromeDriver.launch_url):
        (LinuxChromeDriver):
        (LinuxChromeDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_epiphany_driver.py:
        (EpiphanyBrowserDriver.launch_url):
        (EpiphanyBrowserDriver):
        (EpiphanyBrowserDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_firefox_driver.py:
        (LinuxFirefoxDriver):
        (LinuxFirefoxDriver.launch_url):
        (LinuxFirefoxDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/linux_minibrowsergtk_driver.py:
        (GTKMiniBrowserDriver.launch_url):
        (GTKMiniBrowserDriver):
        (GTKMiniBrowserDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver._launch_webdriver):
        (OSXBrowserDriver):
        (OSXBrowserDriver._screen_size):
        (OSXBrowserDriver._insert_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver):
        (OSXChromeDriver.launch_url):
        (OSXChromeDriver.launch_driver):
        (OSXChromeCanaryDriver):
        (OSXChromeCanaryDriver.launch_url):
        (OSXChromeCanaryDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver):
        (OSXFirefoxDriver.launch_url):
        (OSXFirefoxDriver.launch_driver):
        (OSXFirefoxNightlyDriver):
        (OSXFirefoxNightlyDriver.launch_url):
        (OSXFirefoxNightlyDriver.launch_driver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_driver):

2017-07-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Mac WK2] Add an API test to cover r219765 (null dereference in [WKWebView dealloc])
        https://bugs.webkit.org/show_bug.cgi?id=174793

        Reviewed by Tim Horton.

        Adds a new unit test that invokes some asynchronous NSTextInputClient SPI methods as the web view is tearing
        down. Without r219765, this test will dereference null and crash.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/NSTextInputClientSPI.h: Added.
        * TestWebKitAPI/Tests/mac/WKWebViewSelectionTests.mm:
        (TEST):

2017-07-24  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Implement Authentication dialog in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=174662

        Reviewed by Alex Christensen.

        * MiniBrowser/win/Common.cpp:
        (CustomUserAgent):
        (DisplayAuthDialog):
        (AuthDialogProc):
        * MiniBrowser/win/MiniBrowserLib.rc:
        * MiniBrowser/win/MiniBrowserLibResource.h:
        * MiniBrowser/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge):

2017-07-24  Jonathan Bedard  <jbedard@apple.com>

        Handle case where line_numbers is None instead of an array of line numbers
        https://bugs.webkit.org/show_bug.cgi?id=174775

        Reviewed by Aakash Jain.

        Added files set line_numbers to None in process_file.

        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader.process_file): Handle case where line_number is set to None.
        * Scripts/webkitpy/style/main_unittest.py:
        (ExpectationLinterInStyleCheckerTest.test_linter_added_file_with_error): Test case of an added file.

2017-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Add libepoxy to the Jhbuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=174711

        Reviewed by Carlos Alberto Lopez Perez.

        * wpe/jhbuild.modules: Add libepoxy 1.4.3 to WPE's Jhbuild moduleset.

2017-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] libepoxy headers can use EGL_CAST, which might not be defined by eglplatform.h
        https://bugs.webkit.org/show_bug.cgi?id=174780

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/HeadlessViewBackend.cpp:
        Manually define the EGL_CAST macro to the C++ version that uses static_cast<>
        in case the eglplatform.h header doesn't provide that macro. This replicates
        the work in WebCore's EpoxyEGL.h header, but we can't include that header here.

2017-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Remove _WKDraggableElementInfo and fold PositionInformationTests into WKRequestActivatedElementInfo
        https://bugs.webkit.org/show_bug.cgi?id=174758

        Reviewed by Dan Bernstein.

        Migrate position-information-related unit tests from the PositionInformationTests suite to
        WKRequestActivatedElementInfo as 2 new unit tests. See WebKit2 ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKRequestActivatedElementInfo.mm:
        (TestWebKitAPI::checkElementTypeAndBoundingRect):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/ios/PositionInformationTests.mm: Removed.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView activatedElementAtPosition:]):

2017-07-22  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r204565): WKObject is broken
        https://bugs.webkit.org/show_bug.cgi?id=174736
        <rdar://problem/33246169>

        Reviewed by Dan Bernstein.

        Add API test that used to crash.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKObject.mm:
        (TestWebKitAPI::TEST):

2017-07-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Extend ThreadGroup::add results from bool to ThreadGroupAddResult
        https://bugs.webkit.org/show_bug.cgi?id=174705

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/ThreadGroup.cpp:
        (TestWebKitAPI::testThreadGroup):
        (TestWebKitAPI::TEST):

2017-07-21  Jonathan Bedard  <jbedard@apple.com>

        Fail gracefully when xcrun fails in IOSSimulatorPort constructor
        https://bugs.webkit.org/show_bug.cgi?id=174724

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.__init__): Ignore any errors when attempting to find a running
        simulator. Errors here should be treated the same as no simulators found.

2017-07-21  Yousuke Kimoto  <Yousuke.Kimoto@sony.com>

        [CMake] Add an option to stop build after generating project files
        https://bugs.webkit.org/show_bug.cgi?id=174664

        Reviewed by Konstantin Tokarev.

        Add "--generate-project-only" to stop build after generating project files.

        * Scripts/build-webkit: Add '--generate-project-only' option and a checker to stop build.
        * Scripts/webkitdirs.pm: Add a function to check '--generate-project-only' option and the same checker as the above
        (buildCMakeProjectOrExit): Add a cheker to stop build stop build after generating project files.
        (determineIsGenerateProjectOnly): Check if '--generate-project-only' option is specified
        (isGenerateProjectOnly): ditto

2017-07-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Newly added AtomicStringImpl should use BufferInternal static string if StringImpl is static
        https://bugs.webkit.org/show_bug.cgi?id=174501

        Reviewed by Darin Adler.

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

2017-07-20  David Quesada  <david_quesada@apple.com>

        Add SPI to notify WKNavigationDelegate about client redirects
        https://bugs.webkit.org/show_bug.cgi?id=174680
        rdar://problem/33184886

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[DidPerformClientRedirectNavigationDelegate _webView:didPerformClientRedirectForNavigation:]):
        (TEST):
        Add API test for -[id<WKNavigationDelegatePrivate> _webView:didPerformClientRedirectForNavigation:].

2017-07-20  Brady Eidson  <beidson@apple.com>

        Test WebKit2CustomProtocolsTest.ProcessPoolDestroyedDuringLoading added in r219664 fails on El Capitan.
        https://bugs.webkit.org/show_bug.cgi?id=174685

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (TestWebKitAPI::TEST): Use a scoped AutodrainedPool instead of a RetainPtr<NSAutoreleasePool>.

2017-07-20  Brady Eidson  <beidson@apple.com>

        Deprecate WebIconDatabase in WebKitLegacy/mac.
        https://bugs.webkit.org/show_bug.cgi?id=174607

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/TestRunnerMac.mm:

2017-07-20  Jonathan Bedard  <jbedard@apple.com>

        lint-test-expectations should be run during style checking
        https://bugs.webkit.org/show_bug.cgi?id=173559
        <rdar://problem/32854941>

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationsModel._already_seen_better_match): Append returns 'None' when successful,
        prevents identifying errors on specific lines in a file.
        * Scripts/webkitpy/style/main_unittest.py:
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line_edit_in_file): Test for the
        case where a linter error is in the file modified, but the line modified is not related to
        the linter error.

2017-07-20  Brady Eidson  <beidson@apple.com>

        Remove WebIconDatabase from WebKitLegacy/win.
        https://bugs.webkit.org/show_bug.cgi?id=174608

        Reviewed by Alex Christensen.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setIconDatabaseEnabled):

2017-07-20  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Adjust priority of GSource used in WKTR's HeadlessViewBackend
        https://bugs.webkit.org/show_bug.cgi?id=174671

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/wpe/HeadlessViewBackend.cpp:
        (HeadlessViewBackend::HeadlessViewBackend): Use the RunLoopDispatcher
        priority for this source in order to have it dispatched on the same
        priority as the other WebKit-controlled GSource objects.

2017-07-19  Jonathan Bedard  <jbedard@apple.com>

        lint-test-expectations should be run during style checking
        https://bugs.webkit.org/show_bug.cgi?id=173559
        <rdar://problem/32854941>

        Reviewed by Daniel Bates.

        Follow up fix addressing style and a few minor bugs.

        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser.__init__): Use lambda x: x instead of str
        (TestExpectationsModel.__init__): Make lambda x: x the default argument.
        (TestExpectationsModel._already_seen_better_match): Use a temporary variable to
        reduce the calls of _shorten_filename, fix minor bug in appending the current
        expectation's line number instead of the previous ones, clarify treatment of None
        in file-to-line-number mapping.
        (TestExpectations._report_warnings): Collapse call.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.lint_test_expectations):
        * Scripts/webkitpy/style/filereader.py: Re-write comment.
        (TextFileReader.process_file): Add comment explaining treatment of None in
        file-to-line-number mapping.
        (TextFileReader.delete_file): Collapse call.

2017-07-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix API test failure after r219663.

        The test was hard-coding an exception string and the string has changed slightly
        in r219663.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-07-19  Megan Gardner  <megan_gardner@apple.com>

        Don't write file URLs to iOS Pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=174647
        <rdar://problem/33199730>

        Reviewed by Wenson Hsieh.

        Updating tests to reflect the lack of file URLs for images.

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

2017-07-19  Brady Eidson  <beidson@apple.com>

        iBooks sometimes crashes when closing a book.
        <rdar://problem/31180331> and https://bugs.webkit.org/show_bug.cgi?id=174658

        Reviewed by Oliver Hunt.

        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (-[ProcessPoolDestroyedDuringLoadingProtocol startLoading]):
        (-[ProcessPoolDestroyedDuringLoadingProtocol finishTheLoad]):
        (-[ProcessPoolDestroyedDuringLoadingProtocol stopLoading]):
        (TestWebKitAPI::TEST):

        Add a "spin the runloop X number of times" utility:
        * TestWebKitAPI/Utilities.h:
        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        (TestWebKitAPI::Util::spinRunLoop):

2017-07-19  Jonathan Bedard  <jbedard@apple.com>

        lint-test-expectations should be run during style checking
        https://bugs.webkit.org/show_bug.cgi?id=173559
        <rdar://problem/32854941>

        Reviewed by David Kilzer.

        Running the test expectation linter requires reading both files and lines not in the
        patch because, for example, deletion of a test can cause a lint failure even though
        no test expectations where modified. This means that the linter will occasionally warn
        about lines which were not changed in a given patch but whose error is related to a
        change made in that patch.

        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.open_text_file_for_reading): Add 'errors' argument to mimic filesystem.
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationWarning): Added class to pass warnings as an object instead of a string.
        (TestExpectationWarning.__init__): Construct warning with file name, line number, line
        content, description of the error and the name of the associated test.
        (TestExpectationWarning.__str__): Convert to string so that existing printing code works.
        (TestExpectationParser.__init__): Pass shorten_filename function to
        TestExpectationsParser to add a deleted file to the related_files dictionary.
        (TestExpectationParser._check_test_exists): If the test does not exist, add the
        missing path to the related_files dictionary.
        (TestExpectationLine.__init__): Add related_files dictionary, which tracks
        files and line numbers related to this test expectation line. This will allow
        tracking linter errors in the style checker occurring across multiple files.
        (TestExpectationsModel._already_seen_better_match): Add redundant expectation
        lines to related_files dictionary.
        (TestExpectations.__init__): Pass self._shorten_filename to TestExpectationParser.
        (TestExpectations._report_warnings): Construct warning object instead of string
        when adding to warnings list.
        * Scripts/webkitpy/port/win.py: Changed logging level form warning to debug to
        clean-up log.
        * Scripts/webkitpy/style/checker.py:
        (ProcessorBase.do_association_check): Add required function for processor classes.
        (StyleProcessor):
        (StyleProcessor.do_association_check): Run the TestExpectations linter when
        checking for errors between associated files.
        * Scripts/webkitpy/style/checkers/test_expectations.py:
        (TestExpectationsChecker.check_test_expectations): Reflect changed import statements.
        (TestExpectationsChecker):
        (TestExpectationsChecker._should_log_linter_warning): Given a warning, a dictionary
        of modified files, the current working directory and the host, determine if the linter
        warning is associated with the changes.
        (TestExpectationsChecker.lint_test_expectations): Lint test expectations for the
        style checker.
        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader):
        (TextFileReader.__init__): Track modified files in dictionary instead of a counter.
        (TextFileReader.file_count): Use dictionary to determine the number of modified files.
        (TextFileReader.process_file): Track both the number of files changed and which lines
        in those files were changed.
        (TextFileReader.do_association_check): Run the processor's association check on all
        modified or deleted files processed by TextFileReader.
        (TextFileReader.delete_file): Track deleted files in _files dictionary.
        (TextFileReader.count_delete_only_file): Deleted.
        * Scripts/webkitpy/style/filereader_unittest.py:
        (TextFileReaderTest.test_delete_file): Renamed function to reflect new function name.
        (TextFileReaderTest.test_count_delete_only_file): Moved to test_delete_file.
        * Scripts/webkitpy/style/main.py:
        (CheckWebKitStyle.main): When running the style checker on a specific list of files,
        explicitly run the association check on the file reader.
        * Scripts/webkitpy/style/main_unittest.py:
        (ExpectationLinterInStyleCheckerTest): Added to test the TestExpectationLinter now
        embedded in the style checker.
        (ExpectationLinterInStyleCheckerTest.setUp): Set up the style checker configuration.
        (ExpectationLinterInStyleCheckerTest._generate_file_reader): Given a filesystem object,
        construct the TextFileReader object with a StyleProcessor used to run style checks on
        specific files.
        (ExpectationLinterInStyleCheckerTest._generate_testing_host): Generate a host used for
        testing the test expectation linter inside the style checker. This host must contain a
        mock file system with the basic structure of test expectations.
        (ExpectationLinterInStyleCheckerTest.test_no_linter_errors):
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line):
        (ExpectationLinterInStyleCheckerTest.test_linter_duplicate_line_no_edit):
        (ExpectationLinterInStyleCheckerTest.test_linter_deleted_file):
        (ExpectationLinterInStyleCheckerTest.test_linter_deleted_file_no_edit):
        * Scripts/webkitpy/style/patchreader.py:
        (PatchReader.check): Specify which file was deleted, run the association check.
        * Scripts/webkitpy/style/patchreader_unittest.py:
        (PatchReaderTest.MockTextFileReader.delete_file): Renamed count_delete_only_file.
        (PatchReaderTest.MockTextFileReader.do_association_check): Added.
        (PatchReaderTest.MockTextFileReader.count_delete_only_file): Renamed delete_file.

2017-07-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Implement WTF::ThreadGroup
        https://bugs.webkit.org/show_bug.cgi?id=174081

        Reviewed by Mark Lam.

        Add WTF::ThreadGroup tests.

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

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_RANGE_LOOP_ANALYSIS
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Tim Horton.

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

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_OBJC_LITERAL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Sam Weinig.

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

2017-07-18  Daniel Bates  <dabates@apple.com>

        lldb: Add type summary for StringView
        https://bugs.webkit.org/show_bug.cgi?id=174637

        Reviewed by Sam Weinig.

        For debugging convenience, adds a pretty-print type summary for StringView. Evaluating a
        StringView object will print output that has the form:

            (WTF::StringView) $4 = { length = 2, contents = 'li' } {
              m_characters = 0x000000011b57abb5 "eeeeeefjh0n"
              m_length = 2
              m_is8Bit = true
              m_underlyingString = 0x0000614000000a90
            }

        * lldb/lldb_webkit.py:
        (__lldb_init_module): Use WTFStringView_SummaryProvider to format StringView types.
        (WTFStringView_SummaryProvider):
        (WTFStringViewProvider):
        (WTFStringViewProvider.__init__):
        (WTFStringViewProvider.is_8bit): Access field StringView.m_is8Bit.
        (WTFStringViewProvider.get_length): Access field StringView.m_length.
        (WTFStringViewProvider.get_characters): Access field StringView.m_characters.
        (WTFStringViewProvider.to_string): Returns the string represented by the StringView.

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Dan Bernstein.

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

2017-07-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Add memoryCost to Inspector Protocol objects
        https://bugs.webkit.org/show_bug.cgi?id=174478

        Reviewed by Joseph Pecoraro.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/JavaScriptCore/InspectorValue.cpp: Added.
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostNull)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostBoolean)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostDouble)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostInteger)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostString)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostStringEmpty)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostStringNull)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostStringGrowing)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostStringUnicode)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostObject)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostObjectEmpty)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostObjectGrowing)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostArray)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostArrayEmpty)):
        (TestWebKitAPI::TEST(InspectorValue, MemoryCostArrayGrowing)):

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
        https://bugs.webkit.org/show_bug.cgi?id=174631

        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:

2017-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOS build.

        I missed a spot when renaming -synchronouslyLoadHTML: to -synchronouslyLoadHTMLString:.

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

2017-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Web process uses too much memory when beginning a drag on a very large image
        https://bugs.webkit.org/show_bug.cgi?id=174585
        <rdar://problem/33302541>

        Reviewed by Tim Horton.

        Adds a new test verifying that we don't try to allocate any image buffer equal to the true size of the image
        being dragged when initiating a drag.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/enormous.svg: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:

        Add a new -synchronouslyLoadHTMLString: helper that works like -synchronouslyLoadTestPage:, but takes markup.

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

2017-07-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Macros in WebKitMacros.cmake should be prefixed with WEBKIT_ namespace
        https://bugs.webkit.org/show_bug.cgi?id=174547

        Reviewed by Alex Christensen.

        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:

2017-07-17  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Update style checker to deal with "final"
        https://bugs.webkit.org/show_bug.cgi?id=174528

        Reviewed by Alex Christensen.
        
        check-webkit-style shouldn't complain about an open brace to start a
        line after a function definition with "final" or "const final".

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line):

2017-07-17  Alex Christensen  <achristensen@webkit.org>

        Modernize content extension code
        https://bugs.webkit.org/show_bug.cgi?id=174588

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter):
        (TestWebKitAPI::testRequest):
        (TestWebKitAPI::makeBackend):
        (TestWebKitAPI::TEST_F):

2017-07-17  Brady Eidson  <beidson@apple.com>

        WKHTTPCookieStore observing only works on the default cookie store.
        <rdar://problem/33330724> and https://bugs.webkit.org/show_bug.cgi?id=174580

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (runTestWithWebsiteDataStore): Refactor the cookie observing test out so it can be
          called for the default store, a non-persistent store, and a custom store.
        (TEST):

2017-07-16  Sam Weinig  <sam@webkit.org>

        [Scripts] Fix missing variable warnings from svn-create-patch when there are untracked files
        https://bugs.webkit.org/show_bug.cgi?id=174575

        Reviewed by Brady Eidson.

        * Scripts/svn-create-patch:
        (findModificationType):
        Add support for more status codes. C -> conflicted, ? -> untracked, ! -> missing. Give a
        default value of "unknown".

        (generateFileList):
        Handle all the new modification types. Abort on conflicted, missing, and unknown. Log
        for untracked, which matches our old behavior.

2017-07-17  Charlie Turner  <cturner@igalia.com>

        Add some missing build dependencies on Fedora
        https://bugs.webkit.org/show_bug.cgi?id=174578

        Unreviewed dependency update.

        * gtk/install-dependencies:

2017-07-16  Brady Eidson  <beidson@apple.com>

        Crash when a WKHTTPCookieStore outlives its owning WKWebsiteDataStore.
        <rdar://problem/33341730> and https://bugs.webkit.org/show_bug.cgi?id=174574

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (-[CookieNavigationDelegate webView:didFinishNavigation:]):
        (TEST):

2017-07-16  Bernhard M. Wiedemann  <bwiedemann@suse.de>

        [GTK] Sort inspector GResource manifest to ensure reproducible builds
        https://bugs.webkit.org/show_bug.cgi?id=174540

        Reviewed by Michael Catanzaro.

        * gtk/generate-inspector-gresource-manifest.py:
        (get_filenames): sort list of input files

2017-07-15  Brady Eidson  <beidson@apple.com>

        Make sure all CFHTTPCookieStorageRefs we create are scheduled.
        <rdar://problem/33221110> and https://bugs.webkit.org/show_bug.cgi?id=174513

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (TEST): Make this test more reliable by clearing everything beforehand.

2017-07-15  David Kilzer  <ddkilzer@apple.com>

        Make it possible to extend check-webkit-style with Apple-internal checkers
        <https://webkit.org/b/174464>
        <rdar://problem/25564402>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py: Import apple_additions.
        (_all_categories): Add categories from apple_additions() if it
        exists.
        (CheckerDispatcher._create_checker): Create python checker
        from apple_additions() if it exists.

2017-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Presenting an action sheet on an image map prevents selection UI from updating
        https://bugs.webkit.org/show_bug.cgi?id=174539
        <rdar://problem/33307395>

        Reviewed by Darin Adler.

        Adds a new unit test suite to cover action sheet popover presentation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-map.html: Added.
        * TestWebKitAPI/Tests/ios/ActionSheetTests.mm: Added.
        (-[ActionSheetObserver waitForActionSheetAfterBlock:]):

        Runs the given block and waits until the UI process has indicated that it will present an action sheet.

        (-[ActionSheetObserver _webView:actionsForElement:defaultActions:]):
        (TestWebKitAPI::IPadUserInterfaceSwizzler::IPadUserInterfaceSwizzler):

        Helper class to alter the behavior of [[UIDevice currentDevice] userInterfaceIdiom] for testing.

        (TestWebKitAPI::IPadUserInterfaceSwizzler::padUserInterfaceIdiom):
        (TestWebKitAPI::TEST):

2017-07-15  Sam Weinig  <sam@webkit.org>

        [Scripts] Make svn-create-patch work better when called in sub directories
        https://bugs.webkit.org/show_bug.cgi?id=174551

        Reviewed by Darin Adler.

        - Fixes manufacturePatchForAdditionWithHistory to use the correct path
          by ensuring that the prefix is applied as is done in generateDiff.
        - Silence output of explanatory lines from svn stat (" > move to ...")
          that show up in STDERR when running svn-create-patch.
        - Add verbose logging that I found useful while debugging this issue.

        * Scripts/svn-create-patch:
        (findBaseUrl):
        (findMimeType):
        (findSourceFileAndRevision):
        (generateDiff):
        (generateFileList):
        (manufacturePatchForAdditionWithHistory):

2017-07-15  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed build fix after r219537.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:

2017-07-14  Jonathan Bedard  <jbedard@apple.com>

        Add iOS 11 SPI
        https://bugs.webkit.org/show_bug.cgi?id=174430
        <rdar://problem/33269288>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm: Define drag-and-drop API required for testing.
        * TestWebKitAPI/ios/DataInteractionSimulator.h: Ditto.
        * TestWebKitAPI/ios/DataInteractionSimulator.mm: Ditto.

2017-07-14  Jonathan Bedard  <jbedard@apple.com>

        Failing to install on iPad simulators
        https://bugs.webkit.org/show_bug.cgi?id=174532
        <rdar://problem/33328347>

        Reviewed by Stephanie Lewis.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Place install command in retry try-except block.

2017-07-14  Jeff Miller  <jeffm@apple.com>

        Add test for -[WKProcessPool _setObjectsForBundleParametersWithDictionary:].
        https://bugs.webkit.org/show_bug.cgi?id=174524

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParameters.mm:
        (TEST):
        Renamed TestParameter to TestParameter1.
        Add test for -[WKProcessPool _setObjectsForBundleParametersWithDictionary:].

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParametersPlugIn.mm:
        (-[BundleParametersPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        Observe changes for two bundle parameters.

        (-[BundleParametersPlugIn dealloc]):
        Remove observers for two bundle parameters.

2017-07-14  Commit Queue  <commit-queue@webkit.org>

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

        Need to revert length() == 0 check for null string (Requested
        by yusukesuzuki on #webkit).

        Reverted changeset:

        "[WTF] Newly added AtomicStringImpl should use BufferInternal
        static string if StringImpl is static"
        https://bugs.webkit.org/show_bug.cgi?id=174501
        http://trac.webkit.org/changeset/219510

2017-07-14  Jer Noble  <jer.noble@apple.com>

        [MSE] Removing samples when presentation order does not match decode order can cause bad behavior.
        https://bugs.webkit.org/show_bug.cgi?id=174514

        Reviewed by Sam Weinig.

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

2017-07-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Newly added AtomicStringImpl should use BufferInternal static string if StringImpl is static
        https://bugs.webkit.org/show_bug.cgi?id=174501

        Reviewed by Darin Adler.

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

2017-07-14  Jonathan Bedard  <jbedard@apple.com>

        Bring mac expectations in-line with other platforms
        https://bugs.webkit.org/show_bug.cgi?id=174472
        <rdar://problem/33297388>

        Reviewed by David Kilzer.

        The override order for Mac test expectations does not conform to the pattern used by iOS,
        GTK, Windows and WPE. Before this change, El Capitan's baseline search path looks like this:

            platform/mac-wk2
            platform/wk2
            platform/mac-elcapitan
            platform/mac-sierra
            generic

        After this change, El Capitan's baseline search path looks like this:

            platform/mac-sierra-wk2
            platform/mac-sierra
            platform/mac-wk2
            platform/wk2
            generic

        * Scripts/webkitpy/port/mac.py:
        (MacPort.__init__): If a specific version is specified in the port name, use that
        as the os version.
        (MacPort.default_baseline_search_path): Expectation search paths should work the
        same way they do on other ports. Port + version overrides port, port overrides generic
        and wk1/wk2 should override expectations for the two combined.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_tests_for_other_platforms): Deleted.
        (MacTest._assert_search_path): Deleted.
        (MacTest.test_baseline_search_path): Deleted.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory): Adjust expectations for new over-ride order.
        (test_rebaseline_test_and_print_scm_changes): Ditto.
        (test_rebaseline_and_copy_test): Ditto.
        (test_rebaseline_and_copy_test_no_existing_result): Ditto.
        (test_rebaseline_and_copy_test_with_lion_result): Ditto.
        (test_rebaseline_and_copy_no_overwrite_test): Ditto.

2017-07-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix style checker unit test

        Unreviewed WebKit2 => WebKit fixup.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherSkipTest.test_should_skip_with_warning):

2017-07-13  Matthew Hanson  <matthew_hanson@apple.com>

        Use the old WebKit/WebKit2 targets for CMake builds. (v2)

        Unreviewed build fix.

        r219492 missed one hunk from its partial revert of r219489.
        This patch reverts that hunk.

        * TestWebKitAPI/CMakeLists.txt:

2017-07-13  Matthew Hanson  <matthew_hanson@apple.com>

        Use the old WebKit/WebKit2 targets for CMake builds.

        Unreviewed build fix.

        We can update the target names to match the Framework names in a future patch.
        This is a partial revert of r219489.

        * TestWebKitAPI/CMakeLists.txt:
        WebKitLegacy => WebKit
        WebKit => WebKit2

2017-07-13  Matthew Hanson  <matthew_hanson@apple.com>

        Fix TestWebKit API.
        https://bugs.webkit.org/show_bug.cgi?id=174164
        rdar://problem/33137595

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/PlatformGTK.cmake:

2017-07-13  Matthew Hanson  <matthew_hanson@apple.com>

        Update tools and configurations after renaming Source/WebKit2 to Source/WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=174164
        rdar://problem/33137595

        Reviewed by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        (ShouldBuildTest):
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/featuredefines.py:
        * gtk/make-dist.py:
        (ensure_version_if_possible):
        * gtk/manifest.txt.in:

2017-07-05  Matthew Hanson  <matthew_hanson@apple.com>

        Update tools and configurations after renaming Source/WebKit to Source/WebKitLegacy.
        https://bugs.webkit.org/show_bug.cgi?id=174162
        rdar://problem/33137594

        Reviewed by Dan Bernstein.

        Mass rename of Source/WebKit to Source/WebKitLegacy in OpenSource tooling.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        * DumpRenderTree/mac/InternalHeaders/WebKit/WebTypesInternal.h:
        * EWSTools/configure-clang-linux.sh:
        * Scripts/build-webkit:
        * Scripts/do-file-rename:
        * Scripts/do-webcore-rename:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        * Scripts/webkitpy/style/checkers/featuredefines.py:
        * gtk/manifest.txt.in:

2017-07-13  Jonathan Bedard  <jbedard@apple.com>

        Add script to rebase patches during the WebKit2->WebKit/WebKit->WebKitLegacy transition
        https://bugs.webkit.org/show_bug.cgi?id=174438
        <rdar://problem/33277112>

        Reviewed by Aakash Jain.

        Given a patch, this will convert the changes from the path to the new directory structure.

        * Scripts/rebase-patch-after-webkit-move: Added.
        (append_source): Append 'Source' to the provided path.
        (is_editable_line): Return true if a line the script expects to modify.
        (needs_rebase): Return if a line needs to be rebased based on it's content.
        (rebase_line): Rebase the provided line.
        (rebase): Rebase a patch given the lines of that patch and a file to output the rebased patch to.
        (parse_arguments): Parse the command line arguments and return the patches to be rebased, if they
        were provided.

2017-07-12  Nan Wang  <n_wang@apple.com>

        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
        https://bugs.webkit.org/show_bug.cgi?id=174393
        <rdar://problem/33248006>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (textMarkerRangeMatchesTextNearMarkersCallback):
        (AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219409.

        The revision caused the Windows builds to fail.

        Reverted changeset:

        "AX: [iOS] Implement a way to retrieve a text marker range
        with desired text that is closest to a position"
        https://bugs.webkit.org/show_bug.cgi?id=174393
        http://trac.webkit.org/changeset/219409

2017-07-12  Nan Wang  <n_wang@apple.com>

        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
        https://bugs.webkit.org/show_bug.cgi?id=174393
        <rdar://problem/33248006>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (textMarkerRangeMatchesTextNearMarkersCallback):
        (AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeMatchesTextNearMarkers):

2017-07-12  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Make prepare-ChangeLog -g <commit> generate a more standard ChangeLog entry.
        https://bugs.webkit.org/show_bug.cgi?id=174197

        Reviewed by Darin Adler.

        This bit me the first time I tried to submit a patch to WebKit, and still I have
        to manually edit the ChangeLog every time I use the script.

        This generates a more convenient and standard ChangeLog entry.

        * Scripts/prepare-ChangeLog:
        (generateNewChangeLogs):

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219401.

        This revision rolled out the previous patch, but after talking
        with reviewer, a rebaseline is what was needed.Rolling back in
        before rebaseline.

        Reverted changeset:

        "Unreviewed, rolling out r219379."
        https://bugs.webkit.org/show_bug.cgi?id=174400
        http://trac.webkit.org/changeset/219401

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219379.

        This revision caused a consistent failure in the test
        fast/dom/Window/property-access-on-cached-window-after-frame-
        removed.html.

        Reverted changeset:

        "Remove NAVIGATOR_HWCONCURRENCY"
        https://bugs.webkit.org/show_bug.cgi?id=174400
        http://trac.webkit.org/changeset/219379

2017-07-12  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Use libepoxy
        https://bugs.webkit.org/show_bug.cgi?id=172104

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/wpe/HeadlessViewBackend.h:
        Include the <epoxy/egl.h> header, dropping the EGL and GLES2 inclusions.

2017-07-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] Align Jhbuild patches for GStreamer packages
        https://bugs.webkit.org/show_bug.cgi?id=174363

        Reviewed by Michael Catanzaro.

        Align the patches we apply over Jhbuild-managed GStreamer dependency packages
        between the GTK+ and WPE port. There's no reason for the two ports to apply
        different patches over same versions of GStreamer releases.

        This aligns the two ports on this specific issue. Next we'll look into
        creating a single GStreamer-specific Jhbuild moduleset that will allow us
        to keep these patches in a single place, avoiding duplicate files.

        * gtk/jhbuild.modules:
        * gtk/patches/gst-plugins-good-0005-souphttpsrc-cookie-jar-and-context-query-support.patch: Added.
        * gtk/patches/gst-plugins-good-0006-qtdemux-add-context-for-a-preferred-protection.patch: Renamed from Tools/gtk/patches/gst-plugins-good-0004-qtdemux-add-context-for-a-preferred-protection.patch.
        * gtk/patches/gst-plugins-good-0008-qtdemux-also-push-buffers-without-encryption-info-in.patch: Added.
        * wpe/patches/gstreamer-typefind-Only-push-a-CAPS-event-downstream-if-the-.patch: Removed.

2017-07-11  Dean Jackson  <dino@apple.com>

        Remove NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=174400

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-07-11  Ansh Shukla  <ansh_shukla@apple.com>

        WKWindowFeatures needs to expose scrollbar, fullscreen, and dialog configuration properties
        https://bugs.webkit.org/show_bug.cgi?id=174239

        Reviewed by Brady Eidson.

        Create windows with specific features set and make sure those are properly reflected in the
        WKWindowFeatures object.

        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm:
        (resetToConsistentState):
        (-[CheckWindowFeaturesUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2017-07-11  Jonathan Bedard  <jbedard@apple.com>

        Do not duplicate files when deleting directories with svn 1.9
        https://bugs.webkit.org/show_bug.cgi?id=174339
        <rdar://problem/33226781>

        Reviewed by David Kilzer.

        * Scripts/svn-create-patch:
        (diffOptionsForFile): No longer pass -N option, since this does not work in SVN 1.9.4.
        (generateFileList): Determine which files are deleted because they are part of a
        directory being deleted.

2017-07-11  Dean Jackson  <dino@apple.com>

        Rolling out r219372.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-07-11  Dean Jackson  <dino@apple.com>

        Remove NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=174400

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-07-11  Lucas Forschler  <lforschler@apple.com>

        Teach build workers to fetch archives from S3.
        https://bugs.webkit.org/show_bug.cgi?id=174384

        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (DownloadBuiltProduct):

2017-07-11  Lucas Forschler  <lforschler@apple.com>

        Configure buildbot to transfer all archives to S3.
        Previously this was Mac only, but it's time to expand!
        https://bugs.webkit.org/show_bug.cgi?id=174378
        
        Reviewed by Aakash Jain.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildFactory.__init__):

2017-07-11  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Bump GStreamer packages in jhbuild.modules to 1.10.5
        https://bugs.webkit.org/show_bug.cgi?id=174350

        Reviewed by Xabier Rodriguez-Calvar.

        Bump the various GStreamer dependencies listed in WPE's Jhbuild modules file
        to the 1.10.5 version. One gstreamer patch is added. The two gst-plugins-bad
        patches are removed. The patches for gst-plugins-good are updated, removing
        the stale ones and adding the additional changes to qtdemux, souphttpsrc and
        rtpbin elements that will help with the EMEv3 development.

        * wpe/jhbuild.modules:
        * wpe/patches/gst-plugins-bad-0001-dtls-port-to-OpenSSL-1.1.0.patch: Removed.
        * wpe/patches/gst-plugins-bad-0002-dtlscertificate-Fix-error-checking-in-RSA_generate_k.patch: Removed.
        * wpe/patches/gst-plugins-good-0003-rtpbin-receive-bundle-support.patch: Added.
        * wpe/patches/gst-plugins-good-0005-souphttpsrc-cookie-jar-and-context-query-support.patch: Added.
        * wpe/patches/gst-plugins-good-0006-qtdemux-add-context-for-a-preferred-protection.patch: Added.
        * wpe/patches/gst-plugins-good-0008-qtdemux-also-push-buffers-without-encryption-info-in.patch: Added.
        * wpe/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch: Removed.
        * wpe/patches/gst-plugins-good-use-the-tfdt-decode-time.patch: Removed.
        * wpe/patches/gstreamer-0001-protection-added-function-to-filter-system-ids.patch: Added.

2017-07-10  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Prune statistics in orders of importance
        https://bugs.webkit.org/show_bug.cgi?id=174215
        <rdar://problem/33164403>

        Reviewed by Chris Dumez.

        Nest infrastructure. Adds these functions:
        1. testRunner.setStatisticsLastSeen()
        2. setStatisticsMaxStatisticsEntries()
        3. setStatisticsPruneEntriesDownTo()

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsLastSeen):
        (WTR::TestRunner::setStatisticsMaxStatisticsEntries):
        (WTR::TestRunner::setStatisticsPruneEntriesDownTo):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsLastSeen):
        (WTR::TestController::setMaxStatisticsEntries):
        (WTR::TestController::setPruneEntriesDownTo):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::setStatisticsLastSeen):
        (WTR::TestController::setStatisticsMaxStatisticsEntries):
        (WTR::TestController::setStatisticsPruneEntriesDownTo):

2017-07-03  Brian Burg  <bburg@apple.com>

        Web Replay: remove some unused code
        https://bugs.webkit.org/show_bug.cgi?id=173903

        Rubber-stamped by Joseph Pecoraro.

        * Scripts/run-input-generator-tests: Removed.
        * Scripts/webkitpy/replay/__init__.py: Removed.
        * Scripts/webkitpy/replay/main.py: Removed.

2017-07-10  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Fix layout test baseline and TestExpectations hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=174092

        Reviewed by Michael Catanzaro.

        Like for the GTK+ port, override the default_baseline_search_path() and
        _port_specific_expectations_files() methods in the webkitpy.port.WPEPort class.
        Both methods operate on a short list of search paths that defaults to 'wpe' and
        'wk2', along with any other user-specified platform directory.

        The test_expectations_file_position() method is overridden for testing purposes,
        and relevant unit tests are added.

        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._search_paths):
        (WPEPort):
        (WPEPort.default_baseline_search_path):
        (WPEPort._port_specific_expectations_files):
        (WPEPort.test_expectations_file_position):
        * Scripts/webkitpy/port/wpe_unittest.py:
        (WPEPortTest.test_default_baseline_search_path):
        (WPEPortTest):
        (WPEPortTest.test_port_specific_expectations_files):

2017-07-10  Chris Dumez  <cdumez@apple.com>

        Further WebResourceLoadStatisticsStore / ResourceLoadStatisticsStore clean up
        https://bugs.webkit.org/show_bug.cgi?id=174301

        Reviewed by Brent Fulgham.

        Rename some of the testRunner API for clarity and to better match what it calls
        internally.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsUpdateCookiePartitioning):
        (WTR::TestRunner::statisticsSetShouldPartitionCookiesForHost):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsUpdateCookiePartitioning):
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::statisticsUpdateCookiePartitioning):
        (WTR::TestController::statisticsSetShouldPartitionCookiesForHost):

2017-07-10  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Live twitch.tv videos do not play
        https://bugs.webkit.org/show_bug.cgi?id=174222

        Reviewed by Michael Catanzaro.

        Upgrade GStreamer to 1.10.5. It contains a change to typefind that
        fixes videos not playing on twitch.tv.

        * gtk/jhbuild.modules:

2017-07-09  Zan Dobersek  <zdobersek@igalia.com>

        Add WebGL2 configuration option to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=174251

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm: Add the 'webgl2' option, making it possible
        to enable the ENABLE_WEBGL2 flag through the build-webkit script. The feature
        is marked as enabled for the Apple Cocoa ports.

2017-07-08  Chris Dumez  <cdumez@apple.com>

        Simplify WebResourceLoadStatisticsStore / ResourceLoadStatisticsStore
        https://bugs.webkit.org/show_bug.cgi?id=174290

        Reviewed by Brent Fulgham.

        Rename testRunner API to match the new internal API names.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestRunner::statisticsSubmitTelemetry):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestController::statisticsSubmitTelemetry):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::statisticsProcessStatisticsAndDataRecords):
        (WTR::TestController::statisticsSubmitTelemetry):

2017-07-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Drop NOSNIFF compile flag
        https://bugs.webkit.org/show_bug.cgi?id=174289

        Reviewed by Michael Catanzaro.

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

2017-07-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] For cross-app drags, 'drop' event handlers are never invoked if dataTransfer.dropEffect is not set while dragging
        https://bugs.webkit.org/show_bug.cgi?id=174219
        <rdar://problem/32083177>

        Reviewed by Ryosuke Niwa.

        Add plumbing and support to mock the value of -allowsMoveOperation on the simulated UIDragDropSession objects.
        Setting the DataInteractionSimulator's shouldAllowMoveOperation property to NO simulates a drag operation coming
        in from another app out-of-process, for which move operations won't cause a drop to be performed in the first
        place.

        Also tweaks 2 existing unit tests regarding file uploads via JavaScript to simulate items coming in from a
        different application, and adds a new test to check that if a drop area specifically requests a MOVE operation,
        no action is taken when dropping.

        * TestWebKitAPI/Tests/WebKit2Cocoa/file-uploading.html:
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[MockDragDropSession initWithItems:location:window:allowMove:]):
        (-[MockDragDropSession allowsMoveOperation]):
        (-[MockDataOperationSession initWithProviders:location:window:allowMove:]):
        (-[MockDataInteractionSession initWithWindow:allowMove:]):
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[MockDragDropSession initWithItems:location:window:]): Deleted.
        (-[MockDataOperationSession initWithProviders:location:window:]): Deleted.
        (-[MockDataInteractionSession initWithWindow:]): Deleted.

2017-07-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219238, r219239, and r219241.
        https://bugs.webkit.org/show_bug.cgi?id=174265

        "fast/workers/dedicated-worker-lifecycle.html is flaky"
        (Requested by yusukesuzuki on #webkit).

        Reverted changesets:

        "[WTF] Implement WTF::ThreadGroup"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219238

        "Unreviewed, build fix after r219238"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219239

        "Unreviewed, CLoop build fix after r219238"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219241

2017-07-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][WPE] Enable X-Content-Type-Options: nosniff
        https://bugs.webkit.org/show_bug.cgi?id=174250

        Reviewed by Carlos Alberto Lopez Perez.

        * Scripts/webkitperl/FeatureList.pm:

2017-07-07  Charlie Turner  <cturner@igalia.com>
        [GStreamer] vid.me videos do not play
        https://bugs.webkit.org/show_bug.cgi?id=172240

        Reviewed by Xabier Rodriguez-Calvar.

        Build httpsoupsrc again for use in adaptive streaming pipelines, and
        have the existing libsoup build against GNOME to avoid header drift
        against GStreamer's linked Soup library.

        * gtk/jhbuild.modules:

2017-07-06  Lucas Forschler  <lforschler@apple.com>

        Write a support script to enable buildbot to upload to S3
        https://bugs.webkit.org/show_bug.cgi?id=174196
        
        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/build.webkit.org-config/transfer-archive-to-s3: Added.
        (uploadToS3):
        (archiveExists):

2017-07-06  Lucas Forschler  <lforschler@apple.com>

        Enabling uploading archives to S3.
        https://bugs.webkit.org/show_bug.cgi?id=174198
        
        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ArchiveMinifiedBuiltProduct): Create a minified archive from a full archive
        (UploadMinifiedBuiltProduct): Upload minified archive to build master
        (TransferToS3): Transfer full and minified archives to S3

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Implement WTF::ThreadGroup
        https://bugs.webkit.org/show_bug.cgi?id=174081

        Reviewed by Mark Lam.

        Add WTF::ThreadGroup tests.

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

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
        https://bugs.webkit.org/show_bug.cgi?id=174150

        Reviewed by Mark Lam.

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

2017-07-06  Lucas Forschler  <lforschler@apple.com>

        Enabling uploading archives to S3.
        https://bugs.webkit.org/show_bug.cgi?id=174198
        
        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ArchiveMinifiedBuiltProduct): Create a minified archive from a full archive
        (UploadMinifiedBuiltProduct): Upload minified archive to build master
        (TransferToS3): Transfer full and minified archives to S3

2017-07-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] kill-old-process should kill more webkit related process
        https://bugs.webkit.org/show_bug.cgi?id=174220

        Reviewed by Michael Catanzaro.

        Generate list of possible webkit-related process names and add
        them to the list of process to kill.
        Also update the possible system related process for GTK+/WPE.

        * BuildSlaveSupport/kill-old-processes:
        (listAllWebKitPrograms):
        (main):

2017-07-06  Chris Dumez  <cdumez@apple.com>

        FileMonitor should not be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=174166

        Reviewed by Brent Fulgham.

        Update the API tests to reflect the API change.

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

2017-07-06  Commit Queue  <commit-queue@webkit.org>

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

        it broke some layout tests (Requested by clopez on #webkit).

        Reverted changeset:

        "[GStreamer] vid.me videos do not play"
        https://bugs.webkit.org/show_bug.cgi?id=172240
        http://trac.webkit.org/changeset/219194

2017-07-06  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219178.

        This caused a consistent failure with the API test
        StringBuilderTest.ToAtomicStringOnEmpty on all Debug testers.

        Reverted changeset:

        "[WTF] Clean up StringStatics.cpp by using
        LazyNeverDestroyed<> for Atoms"
        https://bugs.webkit.org/show_bug.cgi?id=174150
        http://trac.webkit.org/changeset/219178

2017-07-06  Alicia Boya García  <aboya@igalia.com>

        Add CWD to Perl library path (no longer the default since 5.26.0)
        https://bugs.webkit.org/show_bug.cgi?id=174200

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone._get_username_and_email):

2017-07-06  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed, update my email address.

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

2017-07-06  Charlie Turner  <cturner@igalia.com>
        [GStreamer] vid.me videos do not play
        https://bugs.webkit.org/show_bug.cgi?id=172240

        Reviewed by Xabier Rodriguez-Calvar.

        Build httpsoupsrc again for use in adaptive streaming pipelines, and
        have the existing libsoup build against GNOME to avoid header drift
        against GStreamer's linked Soup library.

        * gtk/jhbuild.modules:

2017-07-05  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move SoftLinking.h into WTF
        https://bugs.webkit.org/show_bug.cgi?id=174000

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (test_primary_header):
        (ErrorCollector.__init__): Deleted.
        (ErrorCollector.__call__): Deleted.
        (ErrorCollector.results): Deleted.
        (ErrorCollector.result_list): Deleted.
        (ErrorCollector.verify_all_categories_are_seen): Deleted.
        (MockIo.open): Deleted.
        (CppFunctionsTest.test_convert_to_lower_with_underscores): Deleted.
        (CppFunctionsTest.test_create_acronym): Deleted.
        (CppFunctionsTest.test_is_c_or_objective_c): Deleted.
        (CppFunctionsTest.test_parameter): Deleted.
        (CppFunctionsTest.test_single_line_view): Deleted.
        (CppFunctionsTest.test_create_skeleton_parameters): Deleted.
        (CppFunctionsTest.test_find_parameter_name_index): Deleted.
        (CppFunctionsTest.test_parameter_list): Deleted.
        (CppFunctionsTest.test_check_parameter_against_text): Deleted.
        (CppStyleTestBase.process_file_data): Deleted.
        (CppStyleTestBase.perform_lint): Deleted.
        (CppStyleTestBase.perform_single_line_lint): Deleted.
        (CppStyleTestBase.perform_multi_line_lint): Deleted.
        (CppStyleTestBase.perform_language_rules_check): Deleted.
        (CppStyleTestBase.perform_function_lengths_check): Deleted.
        (CppStyleTestBase.perform_pass_ptr_check): Deleted.
        (CppStyleTestBase.perform_leaky_pattern_check): Deleted.
        (CppStyleTestBase.perform_include_what_you_use): Deleted.
        (CppStyleTestBase.perform_header_guard_check): Deleted.
        (CppStyleTestBase.assert_lint): Deleted.
        (CppStyleTestBase.assert_lint_one_of_many_errors_re): Deleted.
        (CppStyleTestBase.assert_multi_line_lint): Deleted.
        (CppStyleTestBase.assert_multi_line_lint_re): Deleted.
        (CppStyleTestBase.assert_language_rules_check): Deleted.
        (CppStyleTestBase.assert_include_what_you_use): Deleted.
        (CppStyleTestBase.assert_header_guard): Deleted.
        (CppStyleTestBase.assert_blank_lines_check): Deleted.
        (CppStyleTestBase.assert_positions_equal): Deleted.
        (FunctionDetectionTest.test_basic_function_detection): Deleted.
        (FunctionDetectionTest.test_function_declaration_detection): Deleted.
        (FunctionDetectionTest.test_pure_function_detection): Deleted.
        (FunctionDetectionTest.test_override_and_final_function_detection): Deleted.
        (FunctionDetectionTest.test_ignore_macros): Deleted.
        (FunctionDetectionTest.test_non_functions): Deleted.
        (FunctionDetectionTest.test_non_functions.Stuff): Deleted.
        (FunctionDetectionTest.test_parameter_list): Deleted.
        (Cpp11StyleTest.test_rvaule_reference_in_parameter_pack): Deleted.
        (CppStyleTest.test_asm_lines_ignored): Deleted.
        (CppStyleTest.test_get_line_width): Deleted.
        (CppStyleTest.test_find_next_multi_line_comment_start): Deleted.
        (CppStyleTest.test_find_next_multi_line_comment_end): Deleted.
        (CppStyleTest.test_remove_multi_line_comments_from_range): Deleted.
        (CppStyleTest.test_position): Deleted.
        (CppStyleTest.test_rfind_in_lines): Deleted.
        (CppStyleTest.test_close_expression): Deleted.
        (CppStyleTest.test_spaces_at_end_of_line): Deleted.
        (CppStyleTest.test_cstyle_cast): Deleted.
        (CppStyleTest.test_runtime_casting): Deleted.
        (CppStyleTest.test_runtime_selfinit): Deleted.
        (CppStyleTest.test_runtime_rtti): Deleted.
        (CppStyleTest.test_static_cast_readability): Deleted.
        (CppStyleTest.test_check_for_unnamed_params): Deleted.
        (CppStyleTest.void): Deleted.
        (CppStyleTest.test_deprecated_cast): Deleted.
        (CppStyleTest.test_mock_method): Deleted.
        (CppStyleTest.test_sizeof_type): Deleted.
        (CppStyleTest.cases): Deleted.
        (CppStyleTest.for): Deleted.
        (CppStyleTest.test_typedef_for_pointer_to_function): Deleted.
        (CppStyleTest.test_typedef_for_pointer_to_function.void): Deleted.
        (CppStyleTest.test_include_what_you_use_no_implementation_files): Deleted.
        (CppStyleTest.test_include_what_you_use): Deleted.
        (CppStyleTest.test_files_belong_to_same_module): Deleted.
        (CppStyleTest.test_cleanse_line): Deleted.
        (CppStyleTest.test_multi_line_comments): Deleted.
        (CppStyleTest.test_multi_line_comments.Foo): Deleted.
        (CppStyleTest.test_multiline_strings): Deleted.
        (CppStyleTest.test_platformh_comments): Deleted.
        (CppStyleTest.test_explicit_single_argument_constructors): Deleted.
        (CppStyleTest.test_explicit_single_argument_constructors.Foo): Deleted.
        (CppStyleTest.test_explicit_single_argument_constructors.Qualifier): Deleted.
        (CppStyleTest.test_explicit_single_argument_constructors.definition): Deleted.
        (CppStyleTest.test_slash_star_comment_on_single_line): Deleted.
        (CppStyleTest.test_suspicious_usage_of_if): Deleted.
        (CppStyleTest.test_suspicious_usage_of_memset): Deleted.
        (CppStyleTest.test_check_posix_threading): Deleted.
        (CppStyleTest.test_insecure_string_operations): Deleted.
        (CppStyleTest.test_format_strings): Deleted.
        (CppStyleTest.test_insecure_temp_file): Deleted.
        (CppStyleTest.test_variable_length_array_detection): Deleted.
        (CppStyleTest.test_braces): Deleted.
        (CppStyleTest.test_check_check): Deleted.
        (CppStyleTest.test_brace_at_begin_of_line): Deleted.
        (CppStyleTest.test_mismatching_spaces_in_parens): Deleted.
        (CppStyleTest.test_spacing_for_fncall): Deleted.
        (CppStyleTest.test_spacing_for_fncall.foo): Deleted.
        (CppStyleTest.test_spacing_before_braces): Deleted.
        (CppStyleTest.test_spacing_between_braces): Deleted.
        (CppStyleTest.test_spacing_before_brackets): Deleted.
        (CppStyleTest.test_cpp_lambda_functions): Deleted.
        (CppStyleTest.test_objective_c_block): Deleted.
        (CppStyleTest.test_objective_c_block_as_argument): Deleted.
        (CppStyleTest.test_spacing_around_else): Deleted.
        (CppStyleTest.test_spacing_for_binary_ops): Deleted.
        (CppStyleTest.test_spacing_for_binary_ops.hash_map): Deleted.
        (CppStyleTest.test_operator_methods): Deleted.
        (CppStyleTest.test_spacing_in_objective_c_properties): Deleted.
        (CppStyleTest.test_spacing_before_last_semicolon): Deleted.
        (CppStyleTest.test_static_or_global_stlstrings): Deleted.
        (CppStyleTest.test_no_spaces_in_function_calls): Deleted.
        (CppStyleTest.test_one_spaces_between_code_and_comments): Deleted.
        (CppStyleTest.test_one_spaces_after_punctuation_in_comments): Deleted.
        (CppStyleTest.test_space_after_comment_marker): Deleted.
        (CppStyleTest.test_newline_at_eof): Deleted.
        (CppStyleTest.test_newline_at_eof.do_test): Deleted.
        (CppStyleTest.test_extra_newlines_at_eof): Deleted.
        (CppStyleTest.test_extra_newlines_at_eof.do_test): Deleted.
        (CppStyleTest.test_invalid_utf8): Deleted.
        (CppStyleTest.test_invalid_utf8.do_test): Deleted.
        (CppStyleTest.test_is_blank_line): Deleted.
        (CppStyleTest.test_blank_lines_check): Deleted.
        (CppStyleTest.test_allow_blank_line_before_closing_namespace): Deleted.
        (CppStyleTest.test_allow_blank_line_before_if_else_chain): Deleted.
        (CppStyleTest.test_else_on_same_line_as_closing_braces): Deleted.
        (CppStyleTest.test_else_clause_not_on_same_line_as_else): Deleted.
        (CppStyleTest.test_comma): Deleted.
        (CppStyleTest.test_declaration): Deleted.
        (CppStyleTest.test_pointer_reference_marker_location): Deleted.
        (CppStyleTest.test_indent): Deleted.
        (CppStyleTest.test_indent.Foo): Deleted.
        (CppStyleTest.test_not_alabel): Deleted.
        (CppStyleTest.test_tab): Deleted.
        (CppStyleTest.test_unnamed_namespaces_in_headers): Deleted.
        (CppStyleTest.test_build_class): Deleted.
        (CppStyleTest.test_build_class.definitions): Deleted.
        (CppStyleTest.test_build_class.Foo): Deleted.
        (CppStyleTest.test_build_class.DERIVE_FROM_GOO): Deleted.
        (CppStyleTest.test_build_end_comment): Deleted.
        (CppStyleTest.test_build_forward_decl): Deleted.
        (CppStyleTest.test_build_forward_decl.Foo): Deleted.
        (CppStyleTest.test_build_header_guard): Deleted.
        (CppStyleTest.test_build_header_guard.Foo_h): Deleted.
        (CppStyleTest.test_build_header_guard.Foo_h.for): Deleted.
        (CppStyleTest.test_build_printf_format): Deleted.
        (CppStyleTest.test_runtime_printf_format): Deleted.
        (CppStyleTest.assert_lintLogCodeOnError): Deleted.
        (CppStyleTest.test_build_storage_class): Deleted.
        (CppStyleTest.test_build_storage_class.unsignedLongLong): Deleted.
        (CppStyleTest.test_build_storage_class.declaration): Deleted.
        (CppStyleTest.test_build_storage_class.after): Deleted.
        (CppStyleTest.test_build_storage_class.is): Deleted.
        (CppStyleTest.test_legal_copyright): Deleted.
        (CppStyleTest.test_invalid_increment): Deleted.
        (CppStyleTest.test_enum_bitfields): Deleted.
        (CppStyleTest.test_plain_integral_bitfields): Deleted.
        (CleansedLinesTest.test_init_empty): Deleted.
        (CleansedLinesTest.test_collapse_strings): Deleted.
        (OrderOfIncludesTest.tearDown): Deleted.
        (OrderOfIncludesTest.test_check_next_include_order__no_config): Deleted.
        (OrderOfIncludesTest.test_check_next_include_order__no_self): Deleted.
        (OrderOfIncludesTest.test_check_next_include_order__likely_then_config): Deleted.
        (OrderOfIncludesTest.test_check_next_include_order__other_then_config): Deleted.
        (OrderOfIncludesTest.test_check_next_include_order__config_then_other_then_likely): Deleted.
        (OrderOfIncludesTest.test_check_alphabetical_include_order): Deleted.
        (OrderOfIncludesTest.test_check_alphabetical_include_order_errors_reported_for_both_lines): Deleted.
        (OrderOfIncludesTest.test_check_line_break_after_own_header): Deleted.
        (OrderOfIncludesTest.test_check_line_break_before_own_header): Deleted.
        (OrderOfIncludesTest.test_check_preprocessor_in_include_section): Deleted.
        (OrderOfIncludesTest.test_check_preprocessor_in_include_section.BAZ): Deleted.
        (OrderOfIncludesTest.test_check_preprocessor_in_include_section.FOOBAR): Deleted.
        (OrderOfIncludesTest.test_primary_header): Deleted.
        (OrderOfIncludesTest.test_public_primary_header): Deleted.
        (OrderOfIncludesTest.test_check_wtf_includes): Deleted.
        (OrderOfIncludesTest.test_classify_include): Deleted.
        (OrderOfIncludesTest.test_try_drop_common_suffixes): Deleted.
        (CheckForFunctionLengthsTest.tearDown): Deleted.
        (CheckForFunctionLengthsTest.set_min_confidence): Deleted.
        (CheckForFunctionLengthsTest.assert_function_lengths_check): Deleted.
        (CheckForFunctionLengthsTest.trigger_lines): Deleted.
        (CheckForFunctionLengthsTest.trigger_test_lines): Deleted.
        (CheckForFunctionLengthsTest.assert_function_length_check_definition): Deleted.
        (CheckForFunctionLengthsTest.assert_function_length_check_definition_ok): Deleted.
        (CheckForFunctionLengthsTest.assert_function_length_check_at_error_level): Deleted.
        (CheckForFunctionLengthsTest.assert_function_length_check_below_error_level): Deleted.
        (CheckForFunctionLengthsTest.assert_function_length_check_above_error_level): Deleted.
        (CheckForFunctionLengthsTest.function_body): Deleted.
        (CheckForFunctionLengthsTest.function_body_with_blank_lines): Deleted.
        (CheckForFunctionLengthsTest.function_body_with_no_lints): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_declaration): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_declaration_with_block_following): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_class_definition): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_class_definition.Test): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_trivial): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_empty): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity0): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_at_severity0): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_above_severity0): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity1v0): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_at_severity1v0): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity1): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_at_severity1): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_above_severity1): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_plus_indented): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_plus_blanks): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_complex_definition_severity1): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_for_test): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_for_split_line_test): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_for_bad_test_doesnt_break): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_with_embedded_no_lints): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity1_with_no_lint): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity2): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity2): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_above_severity2): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity3): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity3): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_above_severity3): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity4): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_severity4): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_above_severity4): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_below_severity5): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_at_severity5): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_above_severity5): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_check_definition_huge_lines): Deleted.
        (CheckForFunctionLengthsTest.test_function_length_not_determinable): Deleted.
        (NoNonVirtualDestructorsTest.test_no_error): Deleted.
        (NoNonVirtualDestructorsTest.test_no_error.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_no_error.MyClass): Deleted.
        (NoNonVirtualDestructorsTest.test_no_error.Qualified): Deleted.
        (NoNonVirtualDestructorsTest.test_no_destructor_when_virtual_needed): Deleted.
        (NoNonVirtualDestructorsTest.test_no_destructor_when_virtual_needed.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_enum_casing): Deleted.
        (NoNonVirtualDestructorsTest.test_enum_casing.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_enum_casing.Enum123): Deleted.
        (NoNonVirtualDestructorsTest.test_enum_trailing_semicolon): Deleted.
        (NoNonVirtualDestructorsTest.test_enum_trailing_semicolon.CPP11EnumClass): Deleted.
        (NoNonVirtualDestructorsTest.test_enum_trailing_semicolon.MyEnum): Deleted.
        (NoNonVirtualDestructorsTest.test_destructor_non_virtual_when_virtual_needed): Deleted.
        (NoNonVirtualDestructorsTest.test_destructor_non_virtual_when_virtual_needed.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_no_warn_when_derived): Deleted.
        (NoNonVirtualDestructorsTest.test_no_warn_when_derived.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_internal_braces): Deleted.
        (NoNonVirtualDestructorsTest.test_internal_braces.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor): Deleted.
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor.Foo.Goo): Deleted.
        (NoNonVirtualDestructorsTest.test_inner_class_needs_virtual_destructor.Goo): Deleted.
        (NoNonVirtualDestructorsTest.test_outer_class_needs_virtual_destructor): Deleted.
        (NoNonVirtualDestructorsTest.test_outer_class_needs_virtual_destructor.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_outer_class_needs_virtual_destructor.Foo.Goo): Deleted.
        (NoNonVirtualDestructorsTest.test_qualified_class_needs_virtual_destructor): Deleted.
        (NoNonVirtualDestructorsTest.test_qualified_class_needs_virtual_destructor.Qualified): Deleted.
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_no_error): Deleted.
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_no_error.Foo): Deleted.
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_with_error): Deleted.
        (NoNonVirtualDestructorsTest.test_multi_line_declaration_with_error.Foo): Deleted.
        (LeakyPatternTest.assert_leaky_pattern_check): Deleted.
        (LeakyPatternTest.test_get_dc): Deleted.
        (LeakyPatternTest.test_get_dc.HWndDC): Deleted.
        (LeakyPatternTest.test_own_get_dc): Deleted.
        (LeakyPatternTest.test_create_dc): Deleted.
        (LeakyPatternTest.test_create_compatible_dc): Deleted.
        (WebKitStyleTest.test_indentation): Deleted.
        (WebKitStyleTest.test_indentation.Foo): Deleted.
        (WebKitStyleTest.test_indentation.Document): Deleted.
        (WebKitStyleTest.test_spacing): Deleted.
        (WebKitStyleTest.test_line_breaking): Deleted.
        (WebKitStyleTest.test_braces): Deleted.
        (WebKitStyleTest.test_braces.MyClass): Deleted.
        (WebKitStyleTest.test_braces.NS_ENUM): Deleted.
        (WebKitStyleTest.test_braces.CPP11EnumClass): Deleted.
        (WebKitStyleTest.test_braces.SOMETHING): Deleted.
        (WebKitStyleTest.test_null_false_zero): Deleted.
        (WebKitStyleTest.test_directive_indentation): Deleted.
        (WebKitStyleTest.test_using_std): Deleted.
        (WebKitStyleTest.test_using_namespace): Deleted.
        (WebKitStyleTest.test_max_macro): Deleted.
        (WebKitStyleTest.test_min_macro): Deleted.
        (WebKitStyleTest.test_wtf_move): Deleted.
        (WebKitStyleTest.test_ctype_fucntion): Deleted.
        (WebKitStyleTest.test_names): Deleted.
        (WebKitStyleTest.test_names.HTMLDocument): Deleted.
        (WebKitStyleTest.test_names.WebWindowFadeAnimation): Deleted.
        (WebKitStyleTest.test_names.declarations): Deleted.
        (WebKitStyleTest.test_names.struct): Deleted.
        (WebKitStyleTest.test_names.VectorType): Deleted.
        (WebKitStyleTest.test_parameter_names): Deleted.
        (WebKitStyleTest.test_comments): Deleted.
        (WebKitStyleTest.test_webkit_export_check): Deleted.
        (WebKitStyleTest.test_member_initialization_list): Deleted.
        (WebKitStyleTest.test_member_initialization_list.MyClass): Deleted.
        (WebKitStyleTest.test_other): Deleted.
        (CppCheckerTest.mock_handle_style_error): Deleted.
        (CppCheckerTest._checker): Deleted.
        (CppCheckerTest.test_init): Deleted.
        (CppCheckerTest.test_eq): Deleted.
        (CppCheckerTest.test_eq.mock_handle_style_error2): Deleted.
        (CppCheckerTest.test_ne): Deleted.
        * TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm:
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:

2017-07-05  Saam Barati  <sbarati@apple.com>

        NewArray in FTLLowerDFGToB3 does not handle speculating on doubles when having a bad time
        https://bugs.webkit.org/show_bug.cgi?id=174188
        <rdar://problem/30581423>

        Reviewed by Mark Lam.

        * Scripts/run-jsc-stress-tests:

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
        https://bugs.webkit.org/show_bug.cgi?id=174150

        Reviewed by Mark Lam.

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

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove copy of ICU headers from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116407

        Reviewed by Alex Christensen.

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

2017-07-05  Chris Dumez  <cdumez@apple.com>

        Regression(r218821): Bad cast to WebKit::DiagnosticLoggingClient in WKWebView's _setDiagnosticLoggingDelegate
        https://bugs.webkit.org/show_bug.cgi?id=174163
        <rdar://problem/33067518>

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewDiagnosticLogging.mm: Added.
        (TEST):

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

        When dragging a selection, clearing the selection in dragstart should not crash the web process
        https://bugs.webkit.org/show_bug.cgi?id=174142
        <rdar://problem/33067501>

        Reviewed by Tim Horton.

        Adds a unit test checking that the web process does not crash when the selection is cleared while a selection
        drag is starting up.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/dragstart-clear-selection.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-07-05  Daniel Bates  <dabates@apple.com>

        Do not pass API::FrameInfo for source frame or clear out page of target frame on
        API navigation
        https://bugs.webkit.org/show_bug.cgi?id=174170
        <rdar://problem/33140328>

        Reviewed by Brady Eidson.

        Update tests as needed for the behavior change.

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

2017-07-05  Jonathan Bedard  <jbedard@apple.com>

        Add WebKitPrivateFrameworkStubs for iOS 11
        https://bugs.webkit.org/show_bug.cgi?id=173988

        Reviewed by David Kilzer.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: iphoneos and iphonesimulator
        should use the same directory for private framework stubs.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

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

        [MediaStream] Protect request and web view during gUM client callback
        https://bugs.webkit.org/show_bug.cgi?id=174096
        <rdar://problem/32833102>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/GetUserMediaNavigation.mm: New test.

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

        Unreviewed, guard iOS 11-dependent UIPasteboardTests to be iOS 11+ only

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:

2017-07-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219128.

        Spoke with engineer who originally submitted, Patch for APi
        test to follow.

        Reverted changeset:

        "Unreviewed, rolling out r219070."
        https://bugs.webkit.org/show_bug.cgi?id=174082
        http://trac.webkit.org/changeset/219128

2017-07-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219070.

        This revision caused consistent failures of the API test
        UIPasteboardTests.DoNotPastePlainTextAsURL on iOS.

        Reverted changeset:

        "Pasting single words copied to UIPasteboard inserts URLs in
        editable areas"
        https://bugs.webkit.org/show_bug.cgi?id=174082
        http://trac.webkit.org/changeset/219070

2017-07-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove unused EFL logo from bot watcher dashboard
        https://bugs.webkit.org/show_bug.cgi?id=174136

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/EFL.png: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/EFL@2x.png: Removed.

2017-07-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add more GTK bots to dashboard
        https://bugs.webkit.org/show_bug.cgi?id=174129

        Reviewed by Carlos Alberto Lopez Perez.

        We have a bunch of GTK bots that I never look at because they're not on the dashboard. Add
        them.

        This also changes the sort order to put WPE above GTK so that it's not buried under all the
        less-essential GTK bots.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):

2017-07-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Add WPE to bot watcher dashboard
        https://bugs.webkit.org/show_bug.cgi?id=174119

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/CREDIT: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WPE@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.linux-wpe img.logo):

2017-07-03  Lucas Forschler  <lforschler@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=174105
        
        Reviewed by Stephanie Lewis.

        * BuildSlaveSupport/built-product-archive:
        (main): Add a -minify parser option
        (createZip): Pass along the optional Minify argument if requested
        (minifySource): This will trim down archives, logic limited to Mac platform.

2017-07-03  Matt Rajca  <mrajca@apple.com>

        Add/remove appropriate media element behavior restrictions when updateWebsitePolicies is called
        https://bugs.webkit.org/show_bug.cgi?id=174103

        Reviewed by Alex Christensen.

        Added an API test.

        * TestWebKitAPI/Tests/WebKit2/autoplay-check.html: Expose a pause method.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST): Added test.
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView stringByEvaluatingJavaScript:]): Don't simulate a user gesture when invoking the script.

2017-07-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219103.

        Caused multiple build failures.

        Reverted changeset:

        "Remove copy of ICU headers from WebKit"
        https://bugs.webkit.org/show_bug.cgi?id=116407
        http://trac.webkit.org/changeset/219103

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove copy of ICU headers from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116407

        Reviewed by Alex Christensen.

        Use WTF's copy of ICU headers.

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

2017-07-03  Brady Eidson  <beidson@apple.com>

        Switch all WebKit API related to favicons from WebIconDatabase over to new WebCore::IconLoader mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=174073

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setIconDatabaseEnabled): Call new SPI for this setting instead of WebIconDatabase stuff.

        * TestWebKitAPI/Tests/mac/WebViewIconLoading.mm:
        (-[MainFrameIconKVO observeValueForKeyPath:ofObject:change:context:]):

2017-07-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219083.

        The revision caused an API failure on all testing platforms.

        Reverted changeset:

        "[MediaStream] Protect request and web view during gUM client
        callback"
        https://bugs.webkit.org/show_bug.cgi?id=174096
        http://trac.webkit.org/changeset/219083

2017-07-03  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Properly number duplicated crashlogs
        https://bugs.webkit.org/show_bug.cgi?id=172002

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_all_logs_darwin): Number multiple crash logs for a single process with
        an increasing integer.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.create_crash_logs_darwin): Create duplicated crashlog for testing.
        (CrashLogsTest.test_find_all_log_darwin): Now 7 Darwin logs instead of 5.
        (CrashLogsTest.test_duplicate_log_darwin): Test that duplicated logs are correctly numbered.

2017-07-03  Ryosuke Niwa  <rniwa@webkit.org>

        WebContent processes crash when the network process crashes with pending connection requests
        https://bugs.webkit.org/show_bug.cgi?id=174065
        <rdar://problem/30359835>

        Reviewed by Tim Horton.

        Add a API to ensure UI process tries to relaunch a new network process when the network process
        crashes with pending network connection requests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NetworkProcessCrashWithPendingConnection.mm: Added.
        * TestWebKitAPI/cocoa/TestNavigationDelegate.h:
        * TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
        (-[TestNavigationDelegate webViewWebContentProcessDidTerminate:]): Added.

2017-07-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Protect request and web view during gUM client callback
        https://bugs.webkit.org/show_bug.cgi?id=174096
        <rdar://problem/32833102>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/GetUserMediaNavigation.mm: New test.

2017-07-03  Andy Estes  <aestes@apple.com>

        [Xcode] Add an experimental setting to build with ccache
        https://bugs.webkit.org/show_bug.cgi?id=173875

        Reviewed by Tim Horton.

        On systems that already have ccache(1) installed, this patch adds experimental support for
        it to Xcode builds. It can be enabled with the WK_USE_CCACHE build setting.

        When ccache is enabled, CC is overridden to invoke Tools/ccache/ccache-clang. This script
        finds the "-isysroot" argument to determine the active SDK, uses xcrun(1) and the SDK to
        find the toolchain from which to run clang, and then invokes ccache with the required
        arguments.

        ccache is invoked with CCACHE_SLOPPINESS="pch_defines,time_macros", which is required for
        precompiled headers to work properly [1].

        LDPLUSPLUS is overridden to invoke Tools/ccache/ccache-clang++. It behaves the same as
        ccache-clang, except it tells ccache to execute clang++ instead of clang. This is important
        during linking.
        
        [1] https://ccache.samba.org/manual.html#_precompiled_headers

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig: Included ccache.xcconfig.
        * MiniBrowser/Configurations/DebugRelease.xcconfig: Ditto.
        * MobileMiniBrowser/Configurations/DebugRelease.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig: Ditto.
        * ccache/README.md: Added.
        * ccache/ccache-clang: Added.
        * ccache/ccache-clang++: Added.
        * ccache/ccache.xcconfig: Added. Overrides CC and LDPLUSPLUS when WK_USE_CACHE=YES.

2017-07-03  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r215096) Queries of URLs with non-special schemes should not percent-encode single quotes
        https://bugs.webkit.org/show_bug.cgi?id=174051

        Reviewed by Tim Horton.

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

2017-07-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219024.

        This patch cause 3 didferent test to fail.

        Reverted changeset:

        "REGRESSION(r215096) Queries of URLs with non-special schemes
        should not percent-encode single quotes"
        https://bugs.webkit.org/show_bug.cgi?id=174051
        http://trac.webkit.org/changeset/219024

2017-07-03  Chris Dumez  <cdumez@apple.com>

        Drop ResourceLoadStatisticsStore's statisticsLock
        https://bugs.webkit.org/show_bug.cgi?id=174080

        Reviewed by Brent Fulgham.

        Port WebKitTestRunner to new Asynchronous Cocoa SPI.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::isStatisticsPrevalentResource):
        (WTR::TestController::isStatisticsHasHadUserInteraction):
        (WTR::TestController::isStatisticsGrandfathered):

2017-07-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pasting single words copied to UIPasteboard inserts URLs in editable areas
        https://bugs.webkit.org/show_bug.cgi?id=174082
        <rdar://problem/33046992>

        Reviewed by Tim Horton.

        Adds 3 new unit tests to UIPasteboardTests to test cases of pasting plain text and URLs.

        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm:
        (TestWebKitAPI::setUpWebViewForPasteboardTests):
        (TestWebKitAPI::TEST):

2017-07-02  Brady Eidson  <beidson@apple.com>

        Add API test for all parts of WebKit1 API related to favicons.
        https://bugs.webkit.org/show_bug.cgi?id=174069

        Reviewed by Andy Estes.

        These two API tests cover all WebKit1 API related to icons.
        
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WebViewIconLoading.mm: Added.
        (mainResourceData):
        (defaultFaviconData):
        (customFaviconData):
        (imageFromData):
        (+[IconLoadingProtocol canInitWithRequest:]):
        (+[IconLoadingProtocol canonicalRequestForRequest:]):
        (-[IconLoadingProtocol startLoading]):
        (-[IconLoadingProtocol stopLoading]):
        (-[IconLoadingFrameLoadDelegate webView:didReceiveIcon:forFrame:]):
        (-[MainFrameIconKVO observeValueForKeyPath:ofObject:change:context:]):
        (TestWebKitAPI::TEST):

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove code only needed when building for iOS 9.x
        https://bugs.webkit.org/show_bug.cgi?id=174068

        Reviewed by Tim Horton.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator _createIOHIDEventType:]):

2017-07-01  Brady Eidson  <beidson@apple.com>

        When setting a custom cookie storage location on a WKWebsiteDataStore, cookies aren't actually removed.
        <rdar://problem/32410662> and https://bugs.webkit.org/show_bug.cgi?id=174035

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [macOS] Remove code only needed when building for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=174067

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo resetSpringLoading]):
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
        * TestWebKitAPI/Tests/mac/DragAndDropPasteboardTests.mm:
        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/mac/StringTruncator.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.mm:
        (-[WebKitTestRunnerDraggingInfo resetSpringLoading]):

2017-07-01  Chris Dumez  <cdumez@apple.com>

        Replace ResourceLoadStatisticsStore C API with Cocoa SPI
        https://bugs.webkit.org/show_bug.cgi?id=174060

        Reviewed by Brent Fulgham.

        Port WebKitTestRunner over to the new Cocoa SPI.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsNotifyPagesWhenDataRecordsWereScanned):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        Drop calls to the WKResourceLoadStatisticsStore C API here. Those were
        no-ops since this code runs in the WebContent process, not the
        UIProcess.

        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:

2017-06-30  Megan Gardner  <megan_gardner@apple.com>

        Unreviewed mac build fix.

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

2017-06-30  Megan Gardner  <megan_gardner@apple.com>

        Add API to get WKActivatedElementInfo
        https://bugs.webkit.org/show_bug.cgi?id=174001
        <rdar://problem/29165518>
        
        Tests for now SPI to get activatedElementInfo.

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKRequestActivatedElementInfo.mm: Added.
        (TestWebKitAPI::TEST):

2017-06-30  Chris Dumez  <cdumez@apple.com>

        Move store logic from WebResourceLoadStatisticsManager to WebResourceLoadStatisticsStore
        https://bugs.webkit.org/show_bug.cgi?id=174038

        Reviewed by Brent Fulgham.

        Fix typo in API name.

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

2017-06-30  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r215096) Queries of URLs with non-special schemes should not percent-encode single quotes
        https://bugs.webkit.org/show_bug.cgi?id=174051
        <rdar://problem/33002846>

        Reviewed by Tim Horton.

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

2017-06-30  Daniel Bates  <dabates@apple.com>

        API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo
        https://bugs.webkit.org/show_bug.cgi?id=165160
        <rdar://problem/29451999>

        Reviewed by Brady Eidson.

        Add tests to ensure that -[WKFrameInfo webView] is computed correctly for the source and target frame
        for navigations and window creation.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/DecidePolicyForNavigationAction.mm: Added. Derived from file ShouldOpenExternalURLsInNewWindowActions.mm.
        (-[DecidePolicyForNavigationActionController webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[DecidePolicyForNavigationActionController webView:didFinishNavigation:]):
        (-[DecidePolicyForNavigationActionController webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):

2017-06-29  Jer Noble  <jer.noble@apple.com>

        Make Legacy EME API controlled by RuntimeEnabled setting.
        https://bugs.webkit.org/show_bug.cgi?id=173994

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-06-30  Jonathan Bedard  <jbedard@apple.com>

        Follow-up fix for r218996

        Unreviewed infrastructure fix.

        Repeated calls to 'ios_version' make the log noisy, memoize the function.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Memoize ios_version().

2017-06-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Drag caret rect is incorrectly computed when dropping in editable content in iframes
        https://bugs.webkit.org/show_bug.cgi?id=174017
        <rdar://problem/32959782>

        Reviewed by Simon Fraser.

        Add a new test verifying that the drag caret is visually contained within the bounds of an iframe. Before these
        changes, the caret would appear outside of the iframe.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/contenteditable-in-iframe.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (checkDragCaretRectIsContainedInRect):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator _concludeDataInteractionAndPerformOperationIfNecessary]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator lastKnownDragCaretRect]):

2017-06-30  Jonathan Bedard  <jbedard@apple.com>

        Add support for different versions of iOS when loading test expectations
        https://bugs.webkit.org/show_bug.cgi?id=173774
        <rdar://problem/32951132>

        Rubber-stamped by Aakash Jain.

        When running layout tests, we should support multiple version of iOS the same way we do Mac.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.default_baseline_search_path): Add ios-<major version> test expectation.
        (IOSPort.test_expectations_file_position): Added new file expectations, increment expected file position.
        (IOSPort.ios_version): iOS ports must define a function to retrieve the iOS version.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.ios_version): Ask connected devices for implementation.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_additional_platform_directory): Skip test until bug 173775 is finished.
        (IOSDeviceTest.test_baseline_searchpath): Ditto.
        (IOSDeviceTest.test_expectations_ordering): Ditto.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.ios_version): If a runtime is specified, ask the runtime for the iOS version. Otherwise,
        ask the platform.

2017-06-30  Jacobo Aragunde Pérez  <jaragunde@igalia.com>

        Fontconfig build breaks with glibc 2.15+
        https://bugs.webkit.org/show_bug.cgi?id=174019

        Reviewed by Carlos Alberto Lopez Perez.

        Apply patch by Khem Raj adapted to fontconfig 2.11.1.

        * wpe/jhbuild.modules:
        * wpe/patches/fontconfig-avoid-conflicts-with-integer-width-macros-from-TS-18.patch: Added.

2017-06-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Web content process crashes when the selection is moved far offscreen in dragstart
        https://bugs.webkit.org/show_bug.cgi?id=174010
        <rdar://problem/32597802>

        Reviewed by Tim Horton.

        Adds a new API test to ensure that we don't crash trying to dereference a null RefPtr when the TextIndicator
        snapshot fails for any reason.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/dragstart-change-selection-offscreen.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-06-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Cannot call setValue() on contenteditable or ARIA text controls
        https://bugs.webkit.org/show_bug.cgi?id=173520

        Reviewed by Ryosuke Niwa.

        Add setValue() method to WKTR (already existed in DRT).

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setValue):

2017-06-28  Simon Fraser  <simon.fraser@apple.com>

        getBoundingClientRect returns wrong value for combination of page zoom and scroll
        https://bugs.webkit.org/show_bug.cgi?id=173841
        rdar://problem/32983841

        Reviewed by Dean Jackson.

        Make "Zoom In" and "Zoom Out" work correctly in the WebKit1 window. Previously they
        always did text zooming.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController zoomIn:]):
        (-[WK1BrowserWindowController zoomOut:]):
        (-[WK1BrowserWindowController canResetZoom]):
        (-[WK1BrowserWindowController resetZoom:]):

2017-06-29  John Wilander  <wilander@apple.com>

        Fix for intermittent Layout Test fail http/tests/loading/resourceLoadStatistics/telemetry-generation.html
        https://bugs.webkit.org/show_bug.cgi?id=173940
        <rdar://problem/33018125>

        Reviewed by Brent Fulgham.

        This change allows the TestController to turn off
        regular resource load statistics telemetry submission
        and to manually control when telemetry is calculated
        and submitted.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
            Turns off automatic resource load statistics telemetry submission.

2017-06-29  Commit Queue  <commit-queue@webkit.org>

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

        "It changes the behavior of the JS API's JSEvaluateScript
        which breaks TurboTax" (Requested by saamyjoon on #webkit).

        Reverted changeset:

        "test262: Completion values for control flow do not match the
        spec"
        https://bugs.webkit.org/show_bug.cgi?id=171265
        http://trac.webkit.org/changeset/218512

2017-06-29  Jonathan Bedard  <jbedard@apple.com>

        Add WebKitSystemInterface for iOS 11
        https://bugs.webkit.org/show_bug.cgi?id=173936

        Reviewed by Lucas Forschler.

        * Scripts/copy-webkitlibraries-to-product-directory: Copy iOS 11 WebKitSystemInterface libraries. 

2017-06-28  Keith Miller  <keith_miller@apple.com>

        VMTraps has some races
        https://bugs.webkit.org/show_bug.cgi?id=173941

        Reviewed by Michael Saboff.

        Add new testing mode for testing the Watchdog with our stress
        tests.

        * Scripts/run-jsc-stress-tests:

2017-06-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Implement API::IconLoadingClient and rework WebKitFaviconDatabase to use IconDatabase directly
        https://bugs.webkit.org/show_bug.cgi?id=173877

        Reviewed by Brady Eidson.

        Update favicons unit test to ensure we wait until the database is updated in testGetFavicon() before starting
        the next tests.

        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testGetFavicon):

2017-06-28  Tim Horton  <timothy_horton@apple.com>

        MobileSafari was constantly using 10-15% CPU viewing a PDF
        https://bugs.webkit.org/show_bug.cgi?id=173944
        <rdar://problem/33039910>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFViewStablePresentationUpdateCallback.mm:
        Add a test that we ever call the stable presentation update callback
        when we have a WKPDFView up, instead of infinitely looping.

2017-06-28  Alex Christensen  <achristensen@webkit.org>

        Prevent displaying URLs with small capital letters
        https://bugs.webkit.org/show_bug.cgi?id=173949
        <rdar://problem/32952058>

        Reviewed by Brent Fulgham.

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

2017-06-28  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix.

        Disable the file monitor tests on iOS because the 'system' API is unavailable on that platform.

        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp: 

2017-06-28  Brent Fulgham  <bfulgham@apple.com>

        Teach ResourceLoadStatistics to recognize changes in the file system
        https://bugs.webkit.org/show_bug.cgi?id=173800
        <rdar://problem/32937842>

        Reviewed by Chris Dumez.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/FileMonitor.cpp: Added.
        (TestWebKitAPI::FileMonitorTest::tempFilePath):
        (TestWebKitAPI::handleFileModification):
        (TestWebKitAPI::handleFileDeletion):
        (TestWebKitAPI::resetTestState):
        (TestWebKitAPI::TEST_F):

2017-06-28  Brady Eidson  <beidson@apple.com>

        DocumentLoader should always notify the client if there are pending icon loads when the load is stopped.
        https://bugs.webkit.org/show_bug.cgi?id=173874

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IconLoadingDelegate.mm:

2017-06-28  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed, adding Don Olmstead to contributors.json

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

2017-06-28  Alex Christensen  <achristensen@webkit.org>

        WebsitePolicies given with navigation policy for redirects should apply to the provisional document
        https://bugs.webkit.org/show_bug.cgi?id=173886
        <rdar://problem/32543191>

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (ParsedRange::ParsedRange):
        (-[TestSchemeHandler initWithVideoData:]):
        (-[TestSchemeHandler webView:startURLSchemeTask:]):
        (-[TestSchemeHandler webView:stopURLSchemeTask:]):
        (TEST):

2017-06-27  JF Bastien  <jfbastien@apple.com>

        WebAssembly: running out of executable memory should throw OoM
        https://bugs.webkit.org/show_bug.cgi?id=171537
        <rdar://problem/32963338>

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests: add a configuration which runs the
        tests under limited executable memory and avoids non-WebAssembly
        code generation so that we more reliably run out of executable
        memory in WebAssembly.

2017-06-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support dragging out of contenteditable areas without a prior selection
        https://bugs.webkit.org/show_bug.cgi?id=173854
        <rdar://problem/32236827>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Adds a new test to check that an image can be dragged out of a contenteditable and dropped.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/contenteditable-and-target.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-06-27  Don Olmstead  <don.olmstead@sony.com>

        [PAL] Add symbol export macros for PAL
        https://bugs.webkit.org/show_bug.cgi?id=171519

        Reviewed by Konstantin Tokarev.

        * DumpRenderTree/config.h:
        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/config.h:
        * WebKitTestRunner/config.h:

2017-06-27  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add telemetry
        https://bugs.webkit.org/show_bug.cgi?id=173499
        <rdar://problem/32826094>

        Reviewed by Brent Fulgham.

        Adds three new testRunner functions:
        - installStatisticsDidRunTelemetryCallback()
        - statisticsFireTelemetryHandler()
        - setStatisticsNotifyPagesWhenTelemetryWasCaptured()

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::installStatisticsDidRunTelemetryCallback):
        (WTR::TestRunner::statisticsDidRunTelemetryCallback):
        (WTR::TestRunner::statisticsFireTelemetryHandler):
        (WTR::TestRunner::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::statisticsFireTelemetryHandler):
        (WTR::TestController::setStatisticsNotifyPagesWhenTelemetryWasCaptured):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2017-06-27  Ting-Wei Lan  <lantw44@gmail.com>

        Add missing includes to fix compilation error on FreeBSD
        https://bugs.webkit.org/show_bug.cgi?id=172919

        Reviewed by Mark Lam.

        * ImageDiff/cairo/PlatformImageCairo.cpp:

2017-06-26  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r218783.

        Causing accessibility/mac/setting-attributes-is-
        asynchronous.html to crash consistently on mac-wk2 Debug

        Reverted changeset:

        "AX: Cannot call setValue() on contenteditable or ARIA text
        controls"
        https://bugs.webkit.org/show_bug.cgi?id=173520
        http://trac.webkit.org/changeset/218783

2017-06-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop Thread::create(obsolete things) API since we can use lambda
        https://bugs.webkit.org/show_bug.cgi?id=173825

        Reviewed by Saam Barati.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (runJavaScriptThread):
        (startJavaScriptThreads):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runThread):
        (runPthread):
        (testThreadIdentifierMap):

2017-06-26  David Kilzer  <ddkilzer@apple.com>

        [TestWebKitAPI] Fix false-positive bad release warnings found by clang static analyzer
        <https://webkit.org/b/173837>

        Reviewed by Geoffrey Garen.

        The clang static analyzer can't reason about objects that are
        assigned to a delegate as +1 retained, and then released
        later in a different method when the delegate is cleared.

        Instead, use a common idiom where the object setting the
        delegate retains it as an instance variable on initialization.
        Then the same object clears the delegate and releases its
        instance variable during teardown.

        Also add EXPECT_TRUE() tests to make sure the delegate objects
        match before teardown.

        * TestWebKitAPI/Tests/mac/FullscreenZoomInitialFrame.mm:
        (TestWebKitAPI::FullscreenZoomInitialFrame::initializeView):
        (TestWebKitAPI::FullscreenZoomInitialFrame::teardownView):
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::initializeView):
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::teardownView):

2017-06-26  David Kilzer  <ddkilzer@apple.com>

        [TestWebKitAPI] REGRESSION (r218750): Fix leak of NSURLResponse in WKURLSchemeHandler-1.mm
        <https://webkit.org/b/173836>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
        (-[RedirectSchemeHandler webView:startURLSchemeTask:]): Use
        adoptNS() to fix the leak.  Also use auto/adoptNS() for other
        objects in this test.

2017-06-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Add support for aria-details and aria-errormessage
        https://bugs.webkit.org/show_bug.cgi?id=172588

        Reviewed by Chris Fleizach.

        Add additional methods to test ARIA properties which are exposed via
        AtkRelation. Also bump minimum versions of at-spi2-core and at-spi2-atk
        to versions which support the details and error-message relation types.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::AccessibilityUIElement::ariaDetailsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDetailsReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageReferencingElementAtIndex):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::ariaDetailsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDetailsReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageElementAtIndex):
        (WTR::AccessibilityUIElement::ariaErrorMessageReferencingElementAtIndex):
        * gtk/jhbuild.modules:

2017-06-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add libfii to GTK+ install dependencies script.

        * gtk/install-dependencies:

2017-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r215190.

        Broke product select element on GNOME Bugzilla

        Reverted changeset:

        "[GTK] Misplaced right click menu on web page due to
        deprecated gtk_menu_popup()"
        https://bugs.webkit.org/show_bug.cgi?id=170553
        http://trac.webkit.org/changeset/215190

2017-06-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove Reflect.enumerate
        https://bugs.webkit.org/show_bug.cgi?id=173806

        Reviewed by Yusuke Suzuki.

        * Scripts/run-jsc-stress-tests:

2017-06-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Cannot call setValue() on contenteditable or ARIA text controls
        https://bugs.webkit.org/show_bug.cgi?id=173520

        Reviewed by Ryosuke Niwa.

        Add setValue() method to WKTR (already existed in DRT).

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setValue):

2017-06-23  Keith Miller  <keith_miller@apple.com>

        Switch VMTraps to use halt instructions rather than breakpoint instructions
        https://bugs.webkit.org/show_bug.cgi?id=173677

        Reviewed by JF Bastien.

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

2017-06-23  Youenn Fablet  <youenn@apple.com>

        Set getUserMedia permission to true by default on WTR
        https://bugs.webkit.org/show_bug.cgi?id=173610

        Reviewed by Alex Christensen.

        Adding a way to reset the getUserMedia permission to pending.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPermissionAsUnset):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPermissionAsUnset):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::setUserMediaPermissionAsUnset):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2017-06-23  Alex Christensen  <achristensen@webkit.org>

        Add SPI to WKURLSchemeTask for redirection
        https://bugs.webkit.org/show_bug.cgi?id=173730

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
        (-[SchemeHandler webView:startURLSchemeTask:]):
        (-[SchemeHandler webView:stopURLSchemeTask:]):
        (TEST):
        (-[RedirectSchemeHandler webView:startURLSchemeTask:]):
        (-[RedirectSchemeHandler webView:stopURLSchemeTask:]):
        (-[RedirectSchemeHandler webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[RedirectSchemeHandler webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[RedirectSchemeHandler userContentController:didReceiveScriptMessage:]):

2017-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use JSC API to send script messages from web extension in tests
        https://bugs.webkit.org/show_bug.cgi?id=173757

        Reviewed by Žan Doberšek.

        The GTK+ uses DOM bindings to send the messages. We can just build the message string and use JSEvaluateScript
        to run postMessage().

        Fixes: /wpe/WebKitSecurityManager/file-xhr
               /wpe/WebKitConsoleMessage/console-api
               /wpe/WebKitConsoleMessage/js-exception
               /wpe/WebKitConsoleMessage/network-error
               /wpe/WebKitConsoleMessage/security-error

        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
        (testWebKitConsoleMessageSecurityError): Remove ifdefs.
        (beforeAll): Ditto.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextSecurityFileXHR): Ditto.
        (beforeAll): Ditto.
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (consoleMessageSentCallback): Use JSEvaluateScript in WPE. We need to escape the '"' in the message string.
        (pageCreatedCallback): Remove ifdefs.

2017-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WPE /wpe/WebKitWebView/javascript-dialogs and /wpe/WebKitWebView/window-properties

        Skip onbeforeunload dialog tests for now in WPE since we don't have a implemention for
        simulateUserInteraction(). And do not expect changes in "geometry" property of WebKitWindowProperties that
        doesn't exist yet in WPE.

        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):
        (testWebViewWindowProperties):

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Upgrade pixman and cairo in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=173710

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/jhbuild.modules:

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r218686): [GTK] Several unit tests are failing after r218686 in the bots
        https://bugs.webkit.org/show_bug.cgi?id=173711

        Reviewed by Carlos Alberto Lopez Perez.

        I can't reproduce it locally, but it's complaining about a g_setenv() and I only added one in r218686 to recover
        the XDG_RUNTIME_DIR, because it's required by Wayland to work. So, I guess that env var is not set in the bots.

        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run): Ensure value is not nullptr before calling g_setenv().

2017-06-22  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r218419): 7 leaks in PluginLoadClientPolicies.mm
        <https://webkit.org/b/173721>

        Reviewed by Joseph Pecoraro.

        Use RetainPtr<> to create NSMutableDictionary and NSNumber
        objects to fix leaks and to avoid the autoreleasepool.

        * TestWebKitAPI/Tests/WebKit2Cocoa/PluginLoadClientPolicies.mm:
        (TEST):

2017-06-22  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218633.

        The test is failing frequently on Sierra Debug and Windows

        Reverted changeset:

        "AX: Cannot call setValue() on contenteditable or ARIA text
        controls"
        https://bugs.webkit.org/show_bug.cgi?id=173520
        http://trac.webkit.org/changeset/218633

2017-06-22  David Kilzer  <ddkilzer@apple.com>

        [TestWebKitAPI] Fix misuse of -[NSData dataWithBytesNoCopy:length:] with global variables
        <https://webkit.org/b/173690>

        Reviewed by Chris Dumez.

        Per documentation, -[NSData dataWithBytesNoCopy:length:] takes
        ownership of malloc()-ed memory, then frees it when it's
        released.  These tests were passing global variables into the
        method, which is not malloc()-ed memory, which violates the API
        contract.

        The fix is to switch to use
        -[NSData dataWithBytesNoCopy:length:freeWhenDone:] and to pass
        NO for the last argument.

        Caught by the clang static analyzer.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IconLoadingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
        (TEST):

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Upgrade Harfbuzz to version 1.4.2
        https://bugs.webkit.org/show_bug.cgi?id=173592

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/jhbuild.modules:

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Update WPEBackend-mesa
        https://bugs.webkit.org/show_bug.cgi?id=173705

        Reviewed by Carlos Alberto Lopez Perez.

        A crash has been fixed, needed for unit tests to work.

        * wpe/jhbuild.modules:

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove unused coordinated graphics C API
        https://bugs.webkit.org/show_bug.cgi?id=173706

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewRestoreZoomAndScrollBackForward.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/backforward1.html: Removed.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/backforward2.html: Removed.

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Build glib API tests
        https://bugs.webkit.org/show_bug.cgi?id=173702

        Reviewed by Žan Doberšek.

        Many of the tests pass without problems, others need to be investigated, and some others are known issues. The
        main difference between the GTK+ and WPE WebKitWebView is that in GTK+ it's a GtkWidget, so initially
        unowned. The tests assume that webkit_web_view_new methods return a floating reference. This patch adds
        Test::adoptView() method that returns a GRefPtr<WebKitWebView> with a different implementation in GTK+ and
        WPE. In the case of GTK+, it sinks the floating reference, while in WPE it simply adopts the reference. Another
        difference is that in GTK+ the web view is initially hidden and needs to be added to a window to make it
        visible. Also, some tests need the web view to be realized to work, and others need that the view is added to a
        toplevel window, instead of a popup window. All those things are not needed at all in WPE. I've added several
        #ifdefs with FIXME comments for the things that we know don't work in WPE yet, for example, because we haven't
        implemented the methods to send events to the web view. Those will be removed eventually when we fix the issues
        and implement the missing features.

        * CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/EditorTest.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        (testWebKitWebViewNavigationAfterSessionRestore):
        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
        (testCookieManagerEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
        (testBlobDownload):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
        (testProcessPerWebView):
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
        (testWebViewCreateNavigationData):
        (testWebViewJavaScriptDialogs):
        (testWebViewWindowProperties):
        (testWebViewMouseTarget):
        (testWebViewGeolocationPermissionRequests):
        (testWebViewUserMediaPermissionRequests):
        (testWebViewAudioOnlyUserMediaPermissionRequests):
        (testWebViewFileChooserRequest):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp:
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp:
        (testPrivateBrowsing):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp:
        (testFindControllerHide):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp:
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp:
        (testWebKitSettings):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
        (testWebViewNewWithUserContentManager):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
        (testWebContextEphemeral):
        (testWebContextProxySettings):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
        (testWebViewWebContext):
        (testWebViewWebContextLifetime):
        (testWebViewEphemeral):
        (testWebViewSettings):
        (testWebViewCanShowMIMEType):
        (testWebViewPageVisibility):
        (testWebViewIsPlayingAudio):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
        (testWebsiteDataEphemeral):
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
        (documentLoadedCallback):
        (pageCreatedCallback):
        (methodCallCallback):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.h:
        * TestWebKitAPI/glib/CMakeLists.txt:
        * TestWebKitAPI/glib/PlatformGTK.cmake:
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp:
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp:
        (main):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
        (Test::adoptView):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp:
        (WebViewTest::~WebViewTest):
        (WebViewTest::initializeWebView):
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
        * TestWebKitAPI/glib/WebKitGLib/gtk/WebViewTestGtk.cpp: Added.
        (WebViewTest::platformDestroy):
        (WebViewTest::platformInitializeWebView):
        (WebViewTest::quitMainLoopAfterProcessingPendingEvents):
        (WebViewTest::resizeView):
        (WebViewTest::hideView):
        (parentWindowMapped):
        (WebViewTest::showInWindow):
        (WebViewTest::showInWindowAndWaitUntilMapped):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::clickMouseButton):
        (WebViewTest::emitPopupMenuSignal):
        (WebViewTest::keyStroke):
        (WebViewTest::doMouseButtonEvent):
        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp: Copied from Tools/TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.h.
        (WebViewTest::platformDestroy):
        (WebViewTest::platformInitializeWebView):
        (WebViewTest::quitMainLoopAfterProcessingPendingEvents):
        (WebViewTest::resizeView):
        (WebViewTest::hideView):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::clickMouseButton):
        (WebViewTest::keyStroke):

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move WebKit2 GLib API tests to glib directories
        https://bugs.webkit.org/show_bug.cgi?id=173642

        Reviewed by Žan Doberšek.

        * CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Removed.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml: Removed.
        * TestWebKitAPI/Tests/WebKitGLib/FrameTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAutomationSession.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp.
        (testWebKitConsoleMessageNetworkError):
        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestFrame.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp.
        (testLoadFromGResource):
        * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestSSL.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFaviconDatabase.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitFindController.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFindController.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSecurityOrigin.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSecurityOrigin.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp.
        (testWebViewRunJavaScript):
        * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp.
        (registerGResource):
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp.
        * TestWebKitAPI/Tests/WebKitGLib/WebProcessTest.h: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h.
        * TestWebKitAPI/Tests/WebKitGLib/resources/blank.ico: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/blank.ico.
        * TestWebKitAPI/Tests/WebKitGLib/resources/boring.html: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/boring.html.
        * TestWebKitAPI/Tests/WebKitGLib/resources/link-title.js: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/link-title.js.
        * TestWebKitAPI/Tests/WebKitGLib/resources/silence.mpg: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/silence.mpg.
        * TestWebKitAPI/Tests/WebKitGLib/resources/simple.json: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/simple.json.
        * TestWebKitAPI/Tests/WebKitGLib/resources/test-cert.pem: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test-cert.pem.
        * TestWebKitAPI/Tests/WebKitGLib/resources/test-key.pem: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test-key.pem.
        * TestWebKitAPI/Tests/WebKitGLib/resources/test.pdf: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test.pdf.
        * TestWebKitAPI/Tests/WebKitGLib/resources/track.ogg: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/track.ogg.
        * TestWebKitAPI/Tests/WebKitGLib/resources/webkitglib-tests.gresource.xml: Added.
        * TestWebKitAPI/glib/CMakeLists.txt: Added.
        * TestWebKitAPI/glib/PlatformGTK.cmake: Added.
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp.
        * TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.h: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h.
        * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.cpp.
        (registerGResource):
        * TestWebKitAPI/glib/WebKitGLib/TestMain.h: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h.
        (Test::getResourcesDir):
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp.
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.h: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.h.
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp.
        * TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.h: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp.
        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h: Renamed from Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h.

2017-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add initial web extensions API
        https://bugs.webkit.org/show_bug.cgi?id=173640

        Reviewed by Žan Doberšek.

        Add style checker exceptions for WPE web extensions API files.

        * Scripts/webkitpy/style/checker.py:

2017-06-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] [WK2] Cancelling a drag interaction using the ObjC SPI causes subsequent dragging to fail
        https://bugs.webkit.org/show_bug.cgi?id=173659
        <rdar://problem/32879788>

        Reviewed by Tim Horton.

        Adds a new test to verify that a lift cancelled within the UI process does not cause subsequent dragging to fail.

        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-target-div.html:

        Augment this test page to log dragend and dragstart events on the drag source as well.

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

2017-06-21  Antoine Quint  <graouts@apple.com>

        Ensure DRT always logs rAF suspension debugging code
        https://bugs.webkit.org/show_bug.cgi?id=173681

        Reviewed by Tim "Mr. T" Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2017-06-21  Chris Dumez  <cdumez@apple.com>

        Allow constructing a WTF:Function from a function pointer
        https://bugs.webkit.org/show_bug.cgi?id=173660

        Reviewed by Alex Christensen.

        Add API test coverage.

        * TestWebKitAPI/Tests/WTF/Function.cpp:
        (TestWebKitAPI::returnThree):
        (TestWebKitAPI::returnFour):
        (TestWebKitAPI::returnPassedValue):
        (TestWebKitAPI::TEST):

2017-06-21  Antoine Quint  <graouts@apple.com>

        Add logging to identify when the Page suspends scripted animations
        https://bugs.webkit.org/show_bug.cgi?id=173626

        Reviewed by Tim Horton.

        Turn the new logging on for WK1/DRT since the issue we're trying to pinpoint only occurs on WK1 bots.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2017-06-21  Chris Fleizach  <cfleizach@apple.com>

        AX: Cannot call setValue() on contenteditable or ARIA text controls
        https://bugs.webkit.org/show_bug.cgi?id=173520

        Reviewed by Ryosuke Niwa.

        Add setValue() method to WKTR (already existed in DRT).

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::setValue):

2017-06-21  Zan Dobersek  <zdobersek@igalia.com>

        List libtasn1 packages in GTK+ and WPE install-dependencies scripts
        as one of the dependencies required to build the product.

        Rubber-stamped by Carlos Garcia Campos.

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

2017-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Disable font variations on macOS Sierra and iOS 10
        https://bugs.webkit.org/show_bug.cgi?id=173618
        <rdar://problem/32879164>

        Reviewed by Jon Lee.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] [WK2] Remove custom logic for disambiguating long press action sheet gestures and drag lift
        https://bugs.webkit.org/show_bug.cgi?id=173578
        <rdar://problem/32825028>

        Reviewed by Tim Horton.

        Slight tweak to ensure that DataInteractionTests.CustomActionSheetPopover still passes and verifies that showing
        a custom popover does not cause dragging to fail when the popover is presented.

        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _advanceProgress]):

2017-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Add initial implementation of glib API
        https://bugs.webkit.org/show_bug.cgi?id=173546

        Reviewed by Žan Doberšek.

        Disable geolocation because WPE doesn't implement any provider and update the style checker exceptions to
        include WPE glib API files.

        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2017-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Upgrade to ICU to version 57.1
        https://bugs.webkit.org/show_bug.cgi?id=173538

        Reviewed by Žan Doberšek.

        * gtk/jhbuild.modules:

2017-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unneeded modules from the jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=170540

        Reviewed by Michael Catanzaro.

        We are building libxslt and libffi that we don't really need to build from sources.

        * gtk/jhbuild.modules:

2017-06-19  Frederic Wang  <fwang@igalia.com>

        [Mac] Add an experimental feature setting for async frame scrolling
        https://bugs.webkit.org/show_bug.cgi?id=173359

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures): Do not enable async frame scrolling for now.
        (resetWebPreferencesToConsistentValues): Disable async frame scrolling by default.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting): Initalize to async frame scrolling to false.

2017-06-19  Guillaume Emont  <guijemont@igalia.com>

        Unreviewed, adding myself to contributors.json

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

2017-06-19  Joseph Pecoraro  <pecoraro@apple.com>

        test262: Completion values for control flow do not match the spec
        https://bugs.webkit.org/show_bug.cgi?id=171265

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:
        Include a :failDueToOutdatedOrBadTest to mark failures with justification.

2017-06-19  Zalan Bujtas  <zalan@apple.com>

        Opening certain mails brings up a mail that grows indefinitely.
        https://bugs.webkit.org/show_bug.cgi?id=173562
        <rdar://problem/32766579>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (TEST):

2017-06-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support .zip archives for file uploads via drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=173511
        <rdar://problem/32521025>

        Reviewed by Tim Horton.

        Adds tests for dropping .zip archives into a JavaScript-based file upload area, as well as into a file input.
        Also verifies that URLs are not handled as file drops. See WebCore ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/compressed-files.zip: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (testZIPArchive):
        (TestWebKitAPI::TEST):

2017-06-18  Darin Adler  <darin@apple.com>

        Fix Ref to deref before assignment, add tests for this to RefPtr, Ref, Function
        https://bugs.webkit.org/show_bug.cgi?id=173526

        Reviewed by Sam Weinig.

        * TestWebKitAPI/CMakeLists.txt: Added Function.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.

        * TestWebKitAPI/Tests/WTF/Function.cpp: Added. Contains basic tests and some
        tests for assignment before destruction ones.

        * TestWebKitAPI/Tests/WTF/MoveOnly.h: Added a () operator so this can be used
        as a function, so it can be used in WTF::Function tests.

        * TestWebKitAPI/Tests/WTF/Ref.cpp: Use EXPECT macros insead of ASSERT.
        Added tests for swap and for assignment before deref.

        * TestWebKitAPI/Tests/WTF/RefLogger.cpp: Stopped using inlining; no good reason
        to inline everything. Also removed the unnecessary clearing of the log every time
        the DerivedRefLogger constructor is called.
        * TestWebKitAPI/Tests/WTF/RefLogger.h: Ditto.

        * TestWebKitAPI/Tests/WTF/RefPtr.cpp: Use EXPECT macros instead of ASSERT.
        Added tests for assignment before deref and similar for releaseNonNull.

2017-06-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Properly model buffer source / typed arrays as their own IDL types
        https://bugs.webkit.org/show_bug.cgi?id=173513

        Reviewed by Alex Christensen.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        Replace IsNonPointerType subroutine with IsPrimitiveType so we can remove IsNonPointerType.

2017-06-19  Per Arne Vollan  <pvollan@apple.com>

        [Win] fast/dom/assign-to-window-status.html is flaky.
        https://bugs.webkit.org/show_bug.cgi?id=173512

        Reviewed by Alex Christensen.

        We should not dump status callbacks when test is done.

        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::setStatusText):

2017-06-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][JHBuild] Update WPEBackend-mesa
        https://bugs.webkit.org/show_bug.cgi?id=173433

        Unreviewed.

        Update WPEBackend-mesa back (like it was done originally in r218344)
        after fixing the issue with the DISPLAY environment variables that
        caused the crashes.

        * wpe/jhbuild.modules:

2017-06-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Rename unit test file after r218482
        https://bugs.webkit.org/show_bug.cgi?id=173483

        Unreviewed.

        * Scripts/webkitpy/port/waylanddriver_unittest.py: Renamed from Tools/Scripts/webkitpy/port/wayland_unittest.py.

2017-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix wrong style checker condition added in r218487.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2017-06-19  Adrian Perez de Castro  <aperez@igalia.com>

        Missing <functional> includes make builds fail with GCC 7.x
        https://bugs.webkit.org/show_bug.cgi?id=173544

        Unreviewed gardening.

        Fix compilation with GCC 7.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h:

2017-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GTK+ API files that could be shared to glib dirs
        https://bugs.webkit.org/show_bug.cgi?id=173545

        Reviewed by Žan Doberšek.

        Update paths of GTK+ API in watchlist and style checker.

        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):

2017-06-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Port setup_environ_for_server should not set environment variables related with the driver.
        https://bugs.webkit.org/show_bug.cgi?id=173483

        Reviewed by Carlos Garcia Campos.

        The port setup_environ_for_server() should not set environment variables
        that depend on the type of driver (like DISPLAY or GDK_BACKEND).
        This varibles should be only set on the driver setup_environ_for_test().

        This causes that (for example) the variable DISPLAY or XAUTHORITY leaks
        into the test environment even when running the tests with a driver
        that is not the Xorg or Xvfb one.

        * Scripts/webkitpy/port/base.py: Stop setting XAUTHORITY and DISPLAY here.
        (Port.to.setup_environ_for_server):
        * Scripts/webkitpy/port/driver.py: Remove unneded WEBKIT_OUTPUTDIR that is already set on base.py
        (Driver._setup_environ_for_driver):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_setup_environ_for_test):
        (DriverTest):
        (DriverTest.test_setup_environ_base_vars):
        * Scripts/webkitpy/port/gtk.py: Stop setting GDK_BACKEND here and do that on the driver (Xvfb).
        (GtkPort.setup_environ_for_server):
        * Scripts/webkitpy/port/wayland_unittest.py: Added.
        (WaylandDriverTest):
        (WaylandDriverTest.make_driver):
        (WaylandDriverTest.make_environment):
        (WaylandDriverTest.test_checkdriver):
        (WaylandDriverTest.test_environment_needed_variables):
        (WaylandDriverTest.test_environment_forbidden_variables):
        (WaylandDriverTest.test_environment_optional_variables):
        * Scripts/webkitpy/port/waylanddriver.py: Allow the driver to run also with WAYLAND_SOCKET.
        (WaylandDriver.check_driver):
        (WaylandDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xorgdriver.py:
        (XorgDriver.check_driver):
        (XorgDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xorgdriver_unittest.py: Added.
        (XorgDriverTest):
        (XorgDriverTest.make_driver):
        (XorgDriverTest.make_environment):
        (XorgDriverTest.test_checkdriver):
        (XorgDriverTest.test_environment_needed_variables):
        (XorgDriverTest.test_environment_forbidden_variables):
        (XorgDriverTest.test_environment_optional_variables):
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._setup_environ_for_test):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.assertDriverStartSuccessful):


2017-05-14 Frederic Wang  <fwang@igalia.com>

        Add heuristic to avoid flattening "fullscreen" iframes
        https://bugs.webkit.org/show_bug.cgi?id=171914

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Use WebKitFrameFlatteningDisabled.

2017-06-18  Chris Dumez  <cdumez@apple.com>

        Crash when re-entering MediaDevicesEnumerationRequest::cancel()
        https://bugs.webkit.org/show_bug.cgi?id=173522
        <rdar://problem/31185739>

        Reviewed by Darin Adler.

        Add API test for re-entering Function's assignment operators.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Function.cpp: Added.
        (TestWebKitAPI::TestObject::TestObject):
        (TestWebKitAPI::TestObject::~TestObject):
        (TestWebKitAPI::TestObject::operator()):
        (TestWebKitAPI::TEST):

2017-06-16  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Some declarations have missing or incorrect availability attributes
        https://bugs.webkit.org/show_bug.cgi?id=173508

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/ios/PositionInformationTests.mm:
        (TestWebKitAPI::TEST): Updated for renames.

2017-06-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Upstream iOS drag and drop implementation into OpenSource WebKit
        https://bugs.webkit.org/show_bug.cgi?id=173366
        <rdar://problem/32767014>

        Reviewed by Tim Horton.

        Move test pages and pieces of DataInteractionSimulator hidden behind WebKitAdditions into TestWebKitAPI. No
        change in behavior.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/autofocus-contenteditable.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/background-image-link-and-input.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/contenteditable-and-textarea.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/div-and-large-image.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/file-uploading.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-contenteditable.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-and-textarea.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-input.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/link-and-target-div.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/prevent-operation.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/prevent-start.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/textarea-to-input.html: Added.
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[MockDragDropSession initWithItems:location:window:]):
        (-[MockDragDropSession allowsMoveOperation]):
        (-[MockDragDropSession isRestrictedToDraggingApplication]):
        (-[MockDragDropSession hasItemsConformingToTypeIdentifiers:]):
        (-[MockDragDropSession canLoadObjectsOfClass:]):
        (-[MockDragDropSession canLoadObjectsOfClasses:]):
        (-[MockDragDropSession items]):
        (-[MockDragDropSession setItems:]):
        (-[MockDragDropSession locationInView:]):
        (-[MockDataOperationSession initWithProviders:location:window:]):
        (-[MockDataOperationSession session]):
        (-[MockDataOperationSession isLocal]):
        (-[MockDataOperationSession progress]):
        (-[MockDataOperationSession setProgressIndicatorStyle:]):
        (-[MockDataOperationSession progressIndicatorStyle]):
        (-[MockDataOperationSession operationMask]):
        (-[MockDataOperationSession localDragSession]):
        (-[MockDataOperationSession hasItemsConformingToTypeIdentifier:]):
        (-[MockDataOperationSession canCreateItemsOfClass:]):
        (-[MockDataOperationSession loadObjectsOfClass:completion:]):
        (-[MockDataInteractionSession initWithWindow:]):
        (-[MockDataInteractionSession localOperationMask]):
        (-[MockDataInteractionSession externalOperationMask]):
        (-[MockDataInteractionSession session]):
        (-[DataInteractionSimulator _advanceProgress]):

2017-06-16  Alex Christensen  <achristensen@webkit.org>

        Show punycode to user if a URL has dotless i or j followed by diacritic dot
        https://bugs.webkit.org/show_bug.cgi?id=173431

        Reviewed by Darin Adler.

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

2017-06-16  Chris Dumez  <cdumez@apple.com>

        [WK2] Add WKProcessPool SPI to efficiently reset all plugin load client policies
        https://bugs.webkit.org/show_bug.cgi?id=173472
        <rdar://problem/28858817>

        Reviewed by Brady Eidson.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/PluginLoadClientPolicies.mm: Added.
        (TEST):

2017-06-16  Brady Eidson  <beidson@apple.com>

        REGRESSION (r218015) IconLoaders for already-cached resources expect to be asynchronous, no longer are.
        <rdar://problem/32817519> and https://bugs.webkit.org/show_bug.cgi?id=173478

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IconLoadingDelegate.mm:

2017-06-16  Chris Dumez  <cdumez@apple.com>

        DRT fails to reset page visibility between tests
        https://bugs.webkit.org/show_bug.cgi?id=173485

        Reviewed by Alexey Proskuryakov.

        DRT fails to reset page visibility between tests and relies on tests calling testRunner.resetPageVisibility().
        Fix this to address flakiness.

        I confirmed this by commenting out the call to testRunner.resetPageVisibility() in
        fast/events/page-visibility-onvisibilitychange.html and running the test in a loop.
        The test became flaky without the DRT change and was no longer flaky with the DRT
        change.

        WebKitTestRunner already does this.

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

2017-06-16  Alex Christensen  <achristensen@webkit.org>

        Implement basic authentication in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=173443

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:didReceiveAuthenticationChallenge:completionHandler:]):

2017-06-16  Jer Noble  <jer.noble@apple.com>

        [WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=173398
        <rdar://problem/32592961>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/MediaStreamTrackDetached.mm: Added.
        (-[MediaStreamTrackDetachedUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[MediaStreamTrackDetachedUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mediastreamtrack-detached.html: Added.

2017-06-16  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218375.

        The API test MediaStreamTrackDetached is still timing out
        after the patch

        Reverted changeset:

        "[WebRTC] Removing a MediaStreamTrack from a MediaStream
        reports no recording to WebKit clients"
        https://bugs.webkit.org/show_bug.cgi?id=173398
        http://trac.webkit.org/changeset/218375

2017-06-15  Jer Noble  <jer.noble@apple.com>

        [WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=173398
        <rdar://problem/32592961>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/MediaStreamTrackDetached.mm: Added.
        (-[MediaStreamTrackDetachedUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[MediaStreamTrackDetachedUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mediastreamtrack-detached.html: Added.

2017-06-15  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218365.

        The revision caused API timeouts on all builds.

        Reverted changeset:

        "[WebRTC] Removing a MediaStreamTrack from a MediaStream
        reports no recording to WebKit clients"
        https://bugs.webkit.org/show_bug.cgi?id=173398
        http://trac.webkit.org/changeset/218365

2017-06-15  Jer Noble  <jer.noble@apple.com>

        [WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=173398
        <rdar://problem/32592961>

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/MediaStreamTrackDetached.mm: Added.
        (-[MediaStreamTrackDetachedUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[MediaStreamTrackDetachedUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mediastreamtrack-detached.html: Added.

2017-06-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r218344): [WPE] Thousands of layout test crashes
        https://bugs.webkit.org/show_bug.cgi?id=173433

        Unreviewed.

        * wpe/jhbuild.modules: Revert the update of WPEBackend-mesa.

2017-06-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] The run-minibrowser script should allow to execute also a WPE launcher
        https://bugs.webkit.org/show_bug.cgi?id=173061

        Reviewed by Žan Doberšek.

        Launch dyz <https://github.com/Igalia/dyz> with the script
        run-minibrowser for the wpe port. It is now built as part of the
        WPE dependencies with JHBuild.

        * Scripts/run-minibrowser:
        * Scripts/webkitdirs.pm:
        (launcherPath):
        (launcherName):
        * wpe/install-dependencies: Luajit is needed for building dyz.
        * wpe/jhbuild.modules: Add dyz and update the revision for WPEBackend-mesa.

2017-06-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Using -[WebItemProviderPasteboard setItemProviders:] to swap out item providers before a drop breaks item provider loading
        https://bugs.webkit.org/show_bug.cgi?id=173338
        <rdar://problem/32777720>

        Reviewed by Tim Horton.

        Adds new unit tests to ensure that -_webView:willPerformDropWithSession: can be used to filter out drag items
        used by WebKit when handling a drop. These tests ensure that WebItemProviderPasteboard is still able to handle
        these remaining items on drop.

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

        Add -overridePerformDropBlock, which can be set to provide custom handling of dropped items.

        (-[DataInteractionSimulator _webView:willPerformDropWithSession:]):

2017-06-15  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash in accessibility layout test.
        https://bugs.webkit.org/show_bug.cgi?id=173401

        Reviewed by Brent Fulgham.

        We should not manually release the punkVal IUnknown member in a _variant_t object, since the punkVal
        member will be automatically released when the _variant_t object goes out of scope if the vt member
        does not equal VT_UNKNOWN | VT_BYREF.
        See https://msdn.microsoft.com/en-us/library/windows/desktop/ms221165(v=vs.85).aspx. 

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::titleUIElement):

2017-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to allow overriding popup menus
        https://bugs.webkit.org/show_bug.cgi?id=172905

        Reviewed by Michael Catanzaro.

        Add a unit test to check the new API.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestOptionMenu.cpp: Added.
        (OptionMenuTest::OptionMenuTest):
        (OptionMenuTest::~OptionMenuTest):
        (OptionMenuTest::destroyMenu):
        (OptionMenuTest::showOptionMenuCallback):
        (OptionMenuTest::menuCloseCallback):
        (OptionMenuTest::showOptionMenu):
        (OptionMenuTest::clickAtPositionAndWaitUntilOptionMenuShown):
        (OptionMenuTest::close):
        (OptionMenuTest::activateItem):
        (OptionMenuTest::selectItem):
        (testOptionMenuSimple):
        (testOptionMenuGroups):
        (testOptionMenuActivate):
        (testOptionMenuSelect):
        (beforeAll):
        (afterAll):

2017-06-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] DumpRenderTree.cpp: error C3861: 'CFURLCacheCreate': identifier not found
        https://bugs.webkit.org/show_bug.cgi?id=173399

        Reviewed by Per Arne Vollan.

        OpenCFLite doesn't have CFURLCacheCreate and CFURLCacheSetSharedURLCache.
        Curl port needs to do nothing because libcurl doesn't have disk cache.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (prepareConsistentTestingEnvironment): Call CFURLCacheCreate() and
        CFURLCacheSetSharedURLCache() only if USE(CFURLCONNECTION).

2017-06-14  Tomas Popela  <tpopela@redhat.com>

        [GTK] integer expression expected if running Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=173356

        Reviewed by Michael Catanzaro.

        Use the correct operator to compare the strings.

        * gtk/install-dependencies:

2017-06-14  Commit Queue  <commit-queue@webkit.org>

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

        API test fails on iOS (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "Add SPI for immediate injection of user scripts"
        https://bugs.webkit.org/show_bug.cgi?id=173342
        http://trac.webkit.org/changeset/218285

2017-06-14  Chris Dumez  <cdumez@apple.com>

        WebKit falsely reports that a web process is unresponsive if you close a page shortly after stopping a load
        https://bugs.webkit.org/show_bug.cgi?id=173384
        <rdar://problem/32723779>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimer.cpp: Added.
        Add API test coverage.

        * TestWebKitAPI/cocoa/UtilitiesCocoa.mm:
        (TestWebKitAPI::Util::sleep):
        Update implementation of Util::sleep() so that we actually run the run loop.
        Otherwise, we don't process events while sleeping.

2017-06-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI for immediate injection of user scripts
        https://bugs.webkit.org/show_bug.cgi?id=173342
        <rdar://problem/29202285>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (waitForMessage):
        (TEST):

2017-06-14  Claudio Saavedra  <csaavedra@igalia.com>

        Add WPE to the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=173365

        Reviewed by Carlos Alberto Lopez Perez.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        * TestResultServer/static-dashboards/loader_unittests.js:

2017-06-14  Brady Eidson  <beidson@apple.com>

        WKIconLoadingDelegate never gets asked about the default favicon if touch/touch-precomposed icons are in the <head>
        <rdar://problem/32614328> and https://bugs.webkit.org/show_bug.cgi?id=173376

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IconLoadingDelegate.mm: Added.
        (-[IconLoadingDelegate webView:shouldLoadIconWithParameters:completionHandler:]):
        (-[IconLoadingSchemeHandler initWithData:mimeType:]):
        (-[IconLoadingSchemeHandler webView:startURLSchemeTask:]):
        (-[IconLoadingSchemeHandler webView:stopURLSchemeTask:]):
        (TEST):

2017-06-14  Tim Horton  <timothy_horton@apple.com>

        WKContentViewEditingActions API test always fails
        https://bugs.webkit.org/show_bug.cgi?id=173374

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKContentViewEditingActions.mm:
        (TEST):
        selectAll isn't working, because canPerformAction for selectAll returns NO
        if selectionIsNone (which is true in the non-contenteditable case).
        Instead, make use of r218180's test page, which knows how to select itself.
        Also, reset the pasteboard at the beginning of the test to reduce confusion
        (I landed the test broken because my simulator had the correct text
        stuck in its pasteboard).

2017-06-14  Jonathan Bedard  <jbedard@apple.com>

        Configure screen scale for running layout tests on plus devices
        https://bugs.webkit.org/show_bug.cgi?id=173319

        Reviewed by Tim Horton.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Include UIKitTestSPI.h in project.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Set screen scale to 2.0.
        * TestRunnerShared/spi/UIKitTestSPI.h: Copied from Tools/WebKitTestRunner/ios/UIKitSPI.h,
        add _setScale for UIScreen.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Include UIKitTestSPI.h in project.
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm: Import UIKitTestSPI.h instead of UIKitSPI.h.
        * WebKitTestRunner/ios/HIDEventGenerator.h: Ditto.
        * WebKitTestRunner/ios/HIDEventGenerator.mm: Ditto.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm: Ditto.
        * WebKitTestRunner/ios/TestControllerIOS.mm: Ditto.
        (WTR::TestController::platformInitialize): Set screen scale to 2.0.
        * WebKitTestRunner/ios/UIKitSPI.h: Moved to TestRunnerShared/spi/UIKitTestSPI.h.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm: Import UIKitTestSPI.h instead of UIKitSPI.h.
        * WebKitTestRunner/ios/mainIOS.mm: Ditto.

2017-06-14  Alexey Proskuryakov  <ap@apple.com>

        Add iOS 11 support to the bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=173369

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/IOS11Simulator@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:

2017-06-14  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] Raise the timeout values for layout tests
        https://bugs.webkit.org/show_bug.cgi?id=173368

        Reviewed by Carlos Garcia Campos.

        Raise the values to 15 seconds in Release builds and 30 seconds (2x) in Debug builds.
        When running under valgrind a 10x multiplier is applied.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.default_timeout_ms):
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_default_timeout_ms):
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort.default_timeout_ms):
        * Scripts/webkitpy/port/wpe_unittest.py: Copied from Tools/Scripts/webkitpy/port/gtk_unittest.py.
        (WPEPortTest):
        (WPEPortTest.make_port):
        (WPEPortTest.test_default_timeout_ms):
        (WPEPortTest.test_get_crash_log):

2017-06-14  Alex Christensen  <achristensen@webkit.org>

        Test persistent WKHTTPCookieStorages on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=173284

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (TEST):
        Make the bots green again for now. There's still a problem, and I'll investigate and fix.

2017-06-14  Per Arne Vollan  <pvollan@apple.com>

        [Win] DRT should not use disk cache.
        https://bugs.webkit.org/show_bug.cgi?id=173361

        Reviewed by Darin Adler.

        Like on macOS/iOS, DRT on Windows should only use memory cache.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (setDefaultsToConsistentValuesForTesting):
        (prepareConsistentTestingEnvironment):

2017-06-14  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        MediaSource duration attribute should not be equal to Infinity when set to a value greater than 2^64
        https://bugs.webkit.org/show_bug.cgi?id=171668

        Reviewed by Jer Noble.

        MediaSource duration attribute is a double represented in MediaSource by a MediaTime instance created with
        MediaTime::CreateWithDouble(). This method implements an overflow control mechanism which sets MediaTime to
        Infinity when the double value passed as argument is greater than 2^64.

        This patch removes the overflow control mechanism when time value is represented as a double. This patch also
        modifies the behavior of mathematical operations between a double MediaTime and rational MediaTime: the rational
        MediaTime is converted to a double before applying the operation. Double MediaTime precision is the same as for
        double. Overflow mechanisms still apply to the conversion of a double MediaTime to rational with setTimescale()
        method. No behavior change for rational MediaTime.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp: Add tests to check operation results between double and rational MediaTime.
        (TestWebKitAPI::TEST):

2017-06-13  Alex Christensen  <achristensen@webkit.org>

        Test persistent WKHTTPCookieStorages on iOS
        https://bugs.webkit.org/show_bug.cgi?id=173284
        <rdar://problem/32260156>

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

2017-06-13  Matt Rajca  <mrajca@apple.com>

        WebsitePolicies: let clients select specific autoplay quirks
        https://bugs.webkit.org/show_bug.cgi?id=173343

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST): Updated tests.

2017-06-13  Daniel Bates  <dabates@apple.com>

        Implement W3C Secure Contexts Draft Specification
        https://bugs.webkit.org/show_bug.cgi?id=158121
        <rdar://problem/26012994>

        Reviewed by Brent Fulgham.

        Part 4

        Expose the isSecureContext attribute by default in DumpRenderTree and WebKitTestRunner.
        Teach DumpRenderTree for Mac and WebKitTestRunner to parse the test option enableIsSecureContextAttribute
        to toggle the runtime enabled feature flag isSecureContextAttributeEnabled.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setWebPreferencesForTestOptions):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions):

2017-06-13  Alex Christensen  <achristensen@webkit.org>

        Test persistent WKHTTPCookieStorages on iOS
        https://bugs.webkit.org/show_bug.cgi?id=173284
        <rdar://problem/32260156>

        Reviewed by Alexey Proskuryakov.

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

2017-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Blob download doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=172442

        Reviewed by Carlos Alberto Lopez Perez.

        Add a unit test to check blob downloads.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testBlobDownload):
        (beforeAll):

2017-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not include WTR, DumpRendererTree and ImageDiff in tarballs
        https://bugs.webkit.org/show_bug.cgi?id=173316

        Reviewed by Alex Christensen.

        It's not really possible to run layout tests from the tarball, so it's better not to include those files.

        * gtk/manifest.txt.in:

2017-06-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WTR] Crash in WebGeolocationManagerProxy::~WebGeolocationManagerProxy() when running several tests
        https://bugs.webkit.org/show_bug.cgi?id=173315

        Reviewed by Darin Adler.

        This has started to happen after r218165, but I don't think it's a regression, but that r218165 revealed the bug
        somehow in WTR. The problem is that GeolocationProviderMock keeps a pointer to the WKGeolocationManagerRef
        returned by WKContextGetGeolocationManager. But in TestController::generatePageConfiguration() the context is
        freed before the GeolocationProviderMock. When the GeolocationProviderMock is then destroyed, it calls
        WKGeolocationManagerSetProvider(m_geolocationManager, 0); but the WKGeolocationManagerRef has already been
        destroyed. GeolocationProviderMock should keep a reference to the WKContext to ensure the
        WKGeolocationManagerRef is not destroyed.

        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::GeolocationProviderMock):
        * WebKitTestRunner/GeolocationProviderMock.h:

2017-06-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to paste text that was copied from a page into the universal search field
        https://bugs.webkit.org/show_bug.cgi?id=173293
        <rdar://problem/32440918>

        Reviewed by Ryosuke Niwa.

        Adds 2 new unit tests for copying plain and rich selected web content.
        See WebCore and WebKit ChangeLogs for more detail.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/rich-and-plain-text.html: Added.
        * TestWebKitAPI/Tests/ios/UIPasteboardTests.mm: Added.
        (TestWebKitAPI::dataForPasteboardType):
        (TestWebKitAPI::setUpWebViewForPasteboardTests):
        (TestWebKitAPI::TEST):

2017-06-13  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Implement missing AtkRelation types
        https://bugs.webkit.org/show_bug.cgi?id=155494

        Reviewed by Darin Adler.

        Add additional methods to test ARIA properties which are exposed via
        AtkRelation. Implement ATK support for ariaOwnsElementAtIndex().

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (WTR::AccessibilityUIElement::ariaLabelledByElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDescribedByElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaLabelledByReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDescribedByReferencingElementAtIndex):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaLabelledByElementAtIndex):
        (WTR::AccessibilityUIElement::ariaLabelledByReferencingElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDescribedByElementAtIndex):
        (WTR::AccessibilityUIElement::ariaDescribedByReferencingElementAtIndex):

2017-06-12  Daniel Bates  <dabates@apple.com>

        Add unit tests for SecurityOrigin::IsPotentiallyTrustworthy()
        https://bugs.webkit.org/show_bug.cgi?id=173286
        <rdar://problem/32726102>

        Reviewed by Brent Fulgham.

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

2017-06-12  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/32683422>
        Teach copy-webkitlibraries-to-product-directory script about updated libraries.

        Reviewed by Conrad Schultz.

        * Scripts/copy-webkitlibraries-to-product-directory:

2017-06-12  Tim Horton  <timothy_horton@apple.com>

        [iOS] Cmd-C doesn't copy text from WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=173277
        <rdar://problem/32396742>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * Tests/WebKit2Cocoa/WKContentViewEditingActions.mm:
        Add a test ensuring that -copy on WKContentView will cause text to be copied.

2017-06-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Remove experimental feature flag of SubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=173197
        <rdar://problem/32688148>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setSubtleCryptoEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Allow the injected bundle to add client data when writing an image to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=173238
        <rdar://problem/31943370>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Add a new unit test to verify that data inserted by the injected bundle when beginning a drag on an image
        element is plumbed across to the UI delegate. Also refactors injected bundle unit tests to use the new version
        of adjustedDataInteractionItemProvidersForItemProvider: that takes representing objects and additional data.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:]):
        (-[DataInteractionSimulator _webView:adjustedDataInteractionItemProviders:]): Deleted.

2017-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebItemProviderPasteboard should call its completion block immediately after a synchronous load
        https://bugs.webkit.org/show_bug.cgi?id=173225
        <rdar://problem/32713144>

        Reviewed by Tim Horton.

        Adds a new unit test to verify whether the completion block is called synchronously or asynchronously, in both
        cases where the synchronous timeout is very large, and the synchronous timeout is not used (0).

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

2017-06-12  Jonathan Bedard  <jbedard@apple.com>

        Return correct process names for iOS on-device testing
        https://bugs.webkit.org/show_bug.cgi?id=173263

        Reviewed by Alex Christensen.

        When running tests on iOS devices, process names do not end with '.Development'
        as they do on Mac and iOS simulator.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::webProcessName): Return correct process name without '.Development'
        for iOS on-device testing.
        (WTR::TestController::networkProcessName): Ditto.
        (WTR::TestController::databaseProcessName): Ditto.

2017-06-12  Chris Dumez  <cdumez@apple.com>

        Regression(r217867): Legacy SessionHistoryEntryData format should not change
        https://bugs.webkit.org/show_bug.cgi?id=173267
        <rdar://problem/32701257>

        Reviewed by Simon Fraser.

        Restrict test to stop covering saving / restore of scrollRestoration via the legacy
        SessionHistoryEntryData. Maintain coverage for the default value of scrollRestoration
        though as this covers the crash that r217867 was fixing.

        * TestWebKitAPI/Tests/WebKit2/RestoreSessionState.cpp:
        (TestWebKitAPI::createSessionStateData):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::createSessionStateDataContainingScrollRestoration): Deleted.

2017-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Stop dismissing menus attached to the web view for every injected event
        https://bugs.webkit.org/show_bug.cgi?id=172708

        Reviewed by Alex Christensen.

        It's a workaround we added in r184015 that has worked so far for the context menu, but doesn't really work now
        that we also attach popup menus to the web view. We really need to be able to show a popup menu, and then send
        events while the menu is open.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick): Use WKBundlePageCopyContextMenuAtPointInWindow() also in GTK+ port.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::dispatchEvent): Stop calling PlatformWebView::dismissAllPopupMenus().

2017-06-12  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Enable GStreamer GL on development builds
        https://bugs.webkit.org/show_bug.cgi?id=173248

        Enable GStreamer GL for GTK and WPE.

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitperl/FeatureList.pm:

2017-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/notification after r216641.

        Notifications are no longer cleared on page navigation.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification):

2017-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitAutomationSession/request-session after r217831.

        DBus interface and object path names were updated in r217831.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutomationSession.cpp:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        Reverted r218056 because it made the IDE reindex constantly.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * MobileMiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
        https://bugs.webkit.org/show_bug.cgi?id=173223

        Reviewed by Sam Weinig.

        The rebuilds were happening due to a difference in the compiler options that the IDE and
        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
        xcodebuild pass that option, too, set CLANG_INDEX_STORE_ENABLE to YES if it is unset, and
        specify an appropriate path in CLANG_INDEX_STORE_PATH.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * MobileMiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2017-06-10  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Reduce polling in ServerProcess
        https://bugs.webkit.org/show_bug.cgi?id=173116

        Reviewed by Ryosuke Niwa.

        We should be smarter about polling. We do not need to poll every time a line is read from
        stdout and stderr since lines are usually read from cached data. We should only poll
        when extracting that cached data from stdout and stderr.

        * Scripts/webkitpy/port/driver.py:
        (Driver._read_block): Rely on output of the ServerProcess to detect a crash or a timeout
        and on ServerProcess to poll the process if not data is available in stdout and stderr.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_read_block_crashed_process): Test that the Driver will handle a crashing
        ServerProcess.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._read): Allow for data to be read from _output even if the process has
        crashed. Only poll the process if data needs to be extracted from stdout or stderr. 
        * Scripts/webkitpy/port/server_process_mock.py:
        (MockServerProcess): Add number_of_times_polled.
        (MockServerProcess.poll): Increment number_of_times_polled.
        (MockServerProcess.has_crashed): Poll before returning crash state.
        (MockServerProcess.read_stdout_line): MockServerProcess should return None if it has crashed,
        just like a ServerProcess would.
        (MockServerProcess.read_stdout): Ditto.
        * Scripts/webkitpy/port/server_process_unittest.py:
        (TestServerProcess.test_basic): Use stdin.readline() instead of time.sleep() to prevent the
        process from ending before stdout and stderr are read. This is the reason this test was flakey.
        (TestServerProcess):
        (TestServerProcess.test_process_crashing): Test that when a process crashes, data can be read until
        the processes is polled.
        (TestServerProcess.test_process_crashing_no_data): Test that when a process which has not output any
        data to stdout and stderr crashes, ServerProcess._read(...) polls the process to detect the crash.

2017-06-10  Andy Estes  <aestes@apple.com>

        [QuickLook] PreviewLoader needs to check if its ResourceLoader has reached the terminal state before calling didReceiveResponse() and friends
        https://bugs.webkit.org/show_bug.cgi?id=173190
        <rdar://problem/31360659>

        Reviewed by Brady Eidson.
        
        Added a release assert that tries to create a proper test failure if the web process crashes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/QuickLook.mm:
        (-[QuickLookDecidePolicyDelegate _webViewWebProcessDidCrash:]):

2017-06-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Add a hook to perform two-step drops in editable content
        https://bugs.webkit.org/show_bug.cgi?id=172992
        <rdar://problem/32590174>

        Reviewed by Tim Horton.

        Adds 2 new API tests to cover using the injected editing bundle to override performTwoStepDrop.
        Tests:  DataInteractionTests.InjectedBundleOverridePerformTwoStepDrop
                DataInteractionTests.InjectedBundleAllowPerformTwoStepDrop

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegatePlugIn.mm:
        (-[BundleEditingDelegatePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[BundleEditingDelegatePlugIn _webProcessPlugInBrowserContextController:performTwoStepDrop:atDestination:isMove:]):

        Allow the BundleOverridePerformTwoStepDrop bundle parameter to determine whether or not two-step drops should
        be overridden. Currently, this is overridden to just return true.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2017-06-09  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Enable ENCRYPTED_MEDIA for build-webkit builds
        https://bugs.webkit.org/show_bug.cgi?id=173103

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitperl/FeatureList.pm: Enable ENCRYPTED_MEDIA flag
        when building the WPE port through build-webkit.

2017-06-09  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Enable MEDIA_SOURCE for build-webkit builds
        https://bugs.webkit.org/show_bug.cgi?id=173136

        Reviewed by Xabier Rodriguez-Calvar.

        * Scripts/webkitperl/FeatureList.pm: Enable the MEDIA_SOURCE feature for WPE.

2017-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use API::FormClient instead of the C API in WebKitFormClient
        https://bugs.webkit.org/show_bug.cgi?id=173098

        Reviewed by Žan Doberšek.

        Fix memory leak and runtime warning when running /webkit2/WebKitWebView/submit-form. The web extension is
        assuming that all tests containing forms define ids for the form elements like
        /webkit2/WebKitWebExtension/form-controls-associated-signal does.

        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (formControlsAssociatedCallback):

2017-06-08  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Run sample/spindump on iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=171881
        <rdar://problem/32084602>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Only add sudo prefix if the platform is Mac, which
        requires sudo to run spindump.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.look_for_new_samples): Deleted.
        (IOSDevicePort.sample_process): Deleted.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest): iOS devices use 'ios' and their os_name.
        (IOSDeviceTest.test_spindump):
        (IOSDeviceTest.test_sample_process):
        (IOSDeviceTest.test_sample_process_exception):
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest): iOS Simulators run on Mac and use 'mac' as their os_name.

2017-06-08  Keith Miller  <keith_miller@apple.com>

        WebAssembly: We should only create wrappers for functions that can be exported
        https://bugs.webkit.org/show_bug.cgi?id=173088

        Reviewed by Saam Barati.

        Add quick mode for wasm tests.

        * Scripts/run-jsc-stress-tests:

2017-06-08  Darin Adler  <darin@apple.com>

        WTF tests have incorrect RefLogger lifetimes making it impossible to test with Address Sanitizer
        https://bugs.webkit.org/show_bug.cgi?id=173106

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp: Define RefLogger objects first, so they are
        destroyed last.
        * TestWebKitAPI/Tests/WTF/HashMap.cpp: Ditto.
        * TestWebKitAPI/Tests/WTF/HashSet.cpp: Ditto.

2017-06-07  Dan Bernstein  <mitz@apple.com>

        [Cocoa] additionalReadAccessAllowedURLs doesn’t preserve non-Latin1 paths
        https://bugs.webkit.org/show_bug.cgi?id=173086

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLs.mm:
        (TEST):

2017-06-07  Alexey Proskuryakov  <ap@apple.com>

        Add High Sierra support to WebKit tools
        https://bugs.webkit.org/show_bug.cgi?id=173080

        Rubber-stamped by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/HighSierra@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        Added dashboard support.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        * BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
        Trigger the right build queues on check-in.

        * Scripts/webkitpy/common/system/platforminfo.py:
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        * Scripts/webkitpy/port/mac.py:
        * Scripts/webkitpy/port/mac_unittest.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        Added cases for Sierra, and updated tests for new baseline search paths.

2017-06-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r217902.

        This change appears to have caused imported/w3c/web-platform-
        tests/fetch/api/cors tests to fail on El Capitan.

        Reverted changeset:

        "Teach run-webkit-tests how to run HTTPS Web Platform Tests"
        https://bugs.webkit.org/show_bug.cgi?id=172930
        http://trac.webkit.org/changeset/217902

2017-06-07  Daniel Bates  <dabates@apple.com>

        Teach run-webkit-tests how to run HTTPS Web Platform Tests
        https://bugs.webkit.org/show_bug.cgi?id=172930
        <rdar://problem/32570201>

        Reviewed by Youenn Fablet.

        Some web platform tests need to be run from an HTTPS server in order to exercise functionality
        that is conditioned on the page being delivered over a secure protocol. One example of such
        a test is LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/secure_context/crypto-subtle-secure-context-available.https.sub.html.

        Ideally we should look to use wptrunner to run Web Platform Tests. For now, modify run-webkit-tests
        to access web platform tests from an HTTPS server when the filename of the test contains ".https.".
        This makes run-webkit-test match the behavior of wptrunner: <https://github.com/w3c/web-platform-tests/blob/7ce469d1c46dd45aacfe1b408bf2ad36a630e089/tools/manifest/item.py#L42>.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (https_base_url): Parses the Web Platform Tests JSON configuration and returns the base URL
        to the Web Platform Tests HTTPS server.
        * Scripts/webkitpy/port/base.py:
        (Port.to.web_platform_test_server_https_base_url): Turns around and calls https_base_url().
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Caches the base URL to the Web Platform Tests HTTPS server. Also rename
        instance variables web_platform_test_server_doc_root, web_platform_test_server_base_url to
        _web_platform_test_server_doc_root and _web_platform_test_server_base_url, respectively to
        indicate that they should be considered private instance variables.
        (Driver.is_web_platform_test): Update code for renamed instance variables.
        (Driver):
        (Driver._web_platform_test_base_url_for_test): Returns the URL to access the specified test.
        (Driver.test_to_uri): Modified to use Driver._web_platform_test_base_url_for_test() to
        determine the base URL to use to access the test.
        (Driver.uri_to_test): Added logic to compute the filesystem local test name from a Web
        Platform Tests HTTPS URL. Also updated code for renamed instance variables.

2017-06-07  Per Arne Vollan  <pvollan@apple.com>

        Support removal of authentication data through the Website data store API.
        https://bugs.webkit.org/show_bug.cgi?id=171217

        Reviewed by Brady Eidson.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::removeAllSessionCredentials):
        (WTR::TestRunner::callDidRemoveAllSessionCredentialsCallback):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        (WTR::TestInvocation::didRemoveAllSessionCredentials):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::removeAllSessionCredentials):

2017-06-07  Charlie Turner  <cturner@igalia.com>

        Add Charlie Turner as contributor
        https://bugs.webkit.org/show_bug.cgi?id=173055

        Reviewed by Carlos Alberto Lopez Perez.

        I also ran the Tools/Scripts/validate-committer-lists --canonicalize command at the suggestion
        of webkit-patch upload, which reordered some fields and removed a newline.

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

2017-06-06  Chris Dumez  <cdumez@apple.com>

        RELEASE_ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values)) hit in convertEnumerationToJS<WebCore::History::ScrollRestoration>()
        https://bugs.webkit.org/show_bug.cgi?id=173033
        <rdar://problem/32591099>

        Reviewed by Simon Fraser.

        Add API test coverage to make sure History's scrollRestoration is properly saved / restored via the
        WKPageCopySessionState() / WKPageRestoreFromSessionState() C API.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionState.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::createSessionStateDataContainingScrollRestoration):
        (TestWebKitAPI::TEST):

2017-06-06  Andy Estes  <aestes@apple.com>

        REGRESSION (r199558): WKWebView upload file which name contains Chinese character results in garbled code
        https://bugs.webkit.org/show_bug.cgi?id=172849
        <rdar://problem/32567454>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RunOpenPanel.mm: Added.
        (-[RunOpenPanelUIDelegate webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):

2017-06-06  Yoav Weiss  <yoav@yoav.ws>

        [preload] Conditional support for media preloading and align media `as` values.
        https://bugs.webkit.org/show_bug.cgi?id=172501

        Reviewed by Dean Jackson.

        Turn on media preloading preference for tests.

        * DumpRenderTree/mac/DumpRenderTree.mm: Turn on media preloading preference.
        * DumpRenderTree/win/DumpRenderTree.cpp: Turn on media preloading preference.
        * WebKitTestRunner/TestController.cpp: Turn on media preloading preference.

2017-06-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Return correct process names from SimulatorProcess
        https://bugs.webkit.org/show_bug.cgi?id=172940

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.plist_data_from_bundle): Share plist access code for accessing different plist entries.
        (DarwinPort.app_identifier_from_bundle): Use plist_data_from_bundle.
        (DarwinPort.app_executable_from_bundle): Access name of app executable from provided app bundle.
        * Scripts/webkitpy/port/driver.py:
        (Driver.has_crashed): Use _server_process.process_name() instead of _server_process.name() since
        _server_process.name() will not return the correct process name for iOS.
        (Driver._check_for_driver_crash_or_unresponsiveness): Ditto.
        (Driver._read_block): Ditto.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_check_for_driver_crash.FakeServerProcess.process_name): Update since Driver uses
        process_name() instead of name().
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._start): Use process_name() instead of name().
        (ServerProcess.stop): Ditto.
        (ServerProcess.name): Deleted.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.process_name): Check the provided bundle for the process name.

2017-06-06  Dean Johnson  <dean_johnson@apple.com>

        test-webkitpy: stop forking unsafely from within a spawned process
        https://bugs.webkit.org/show_bug.cgi?id=172774

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/net/buildbot/buildbot.py:
        (Builder.__init__): We don't use mechanize.Browser() as part of testing, so only initialize it when
        it's going to be used.
        (Builder.force_build):

2017-06-06  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Process crash-logs for iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=171976
        <rdar://problem/32134551>

        Reviewed by David Kilzer.

        When running layout tests on an iOS device, crash logs should be processed.
        Implement crash log searching and parsing for iOS devices.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs): Moved process regular expression for Darwin to class variable.
        (CrashLogs.__init__): Accept optional list of crash logs to ignore.
        (CrashLogs.find_newest_log): Add iOS as a potential platform.
        (CrashLogs.find_all_logs): Ditto.
        (CrashLogs._parse_darwin_crash_log): Share code for parsing of Darwin crash logs.
        Do not assume that a Darwin crash log starts with the process.
        (CrashLogs._find_newest_log_darwin): Remove .app in process name for iOS, use
        shared code for parsing Darwin crash logs.
        (CrashLogs._find_newest_log_darwin.is_crash_log): Skip crash logs passed into this
        object so that crash logs already on the system before testing are not parsed.
        (CrashLogs._find_newest_log_win.is_crash_log): Ditto.
        (CrashLogs._find_all_logs_darwin.is_crash_log): Ditto.
        (CrashLogs._find_all_logs_darwin): Use shared code for parsing Darwin crash logs.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (make_mock_crash_report_darwin): Crash logs may not have their process on the first line.
        * Scripts/webkitpy/common/system/systemhost.py:
        (SystemHost.symbolicate_crash_log_if_needed): The symbolicated crash log for most
        systems is just the crashlog, use this behavior by default.
        * Scripts/webkitpy/common/system/systemhost_mock.py:
        (MockSystemHost.symbolicate_crash_log_if_needed): The symbolicated crash log for most
        systems is just the crashlog, use this behavior by default.
        * Scripts/webkitpy/port/apple.py:
        (ApplePort): Add a dictionary mapping hosts to a list of crash logs to be skipped.
        (ApplePort.setup_test_run): Set the list of crash logs to be skipped to the crash logs on
        the system before testing begins
        * Scripts/webkitpy/port/base.py:
        (Port._get_crash_log): Pass optional target host when getting crash logs.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._look_for_all_crash_logs_in_log_dir): Pass list of crash logs to be skipped to
        CrashLogs object.
        (DarwinPort._get_crash_log): Pass optional target host when getting crash logs, pass list of crash
        logs to be skipped to CrashLogs object.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_get_crash_log): Removed unused local function.
        (DarwinTest.test_get_crash_log.fake_time_cb): Deleted.
        * Scripts/webkitpy/port/device.py:
        (Device.symbolicate_crash_log_if_needed): If the platform device has a function with this
        name, call it. Otherwise, assume the default behavior and read the file at the provided path.
        * Scripts/webkitpy/port/driver.py:
        (Driver._get_crash_log): Pass optional target host when getting crash logs.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._get_crash_log): Pass optional target host when getting crash logs.
        * Scripts/webkitpy/port/ios.py: Ditto.
        (IOSPort.setup_test_run): Each device is treated as an independent host. Set the list of crash logs
        to be skipped for each host.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.path_to_crash_logs): Consult apple_additions for the path to crash logs.
        (IOSDevicePort._look_for_all_crash_logs_in_log_dir): Search every connected device for
        crash logs and pass list of crash logs to ignore to each instance of CrashLogs.
        (IOSDevicePort._get_crash_log): Search the specified target host for a crash log if a target
        host is specified. Else, search all connected devices for the specified crash-log.
        (IOSDevicePort.look_for_new_crash_logs): Deleted.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_crashlog_path): Without apple_additions, an exception should be raised.
        (IOSDeviceTest.test_get_crash_log): Ditto.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.process_name): Check the provided bundle for the process name.
        * Scripts/webkitpy/port/win.py:
        (WinPort._get_crash_log): Pass optional target host when getting crash logs, pass list of crash
        logs to be skipped to CrashLogs object.
        * Scripts/webkitpy/port/wpe.py:
        (WPEPort._get_crash_log): Pass optional target host when getting crash logs.

2017-06-06  David Kilzer  <ddkilzer@apple.com>

        Move WTF_ATTRIBUTE_PRINTF() from implementation to declaration
        <https://webkit.org/b/172804>

        Reviewed by Darin Adler.

        WTF_ATTRIBUTE_PRINTF() only works outside the current
        compilation unit if it's on the declaration, not the
        implementation, of a function or class method.

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        - Move WTF_ATTRIBUTE_PRINTF() macro to declaration.
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        - Remove redundant CRASH() macro definition.  Use the one from
          <wtf/Assertions.h> instead.

2017-06-06  Joseph Pecoraro  <pecoraro@apple.com>

        Move Resource Timing / User Timing from experimental features into main preferences
        https://bugs.webkit.org/show_bug.cgi?id=172950

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):
        Move out no longer experimental features to the main list.

2017-06-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Add an install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=172948

        Reviewed by Žan Doberšek.

        It is based on the gtk/install-dependencies script.
        Includes support for Debian based distrubutions, Fedora and Arch.
        It has been tested on a minimal Debian 9 chroot.

        * wpe/install-dependencies: Added.

2017-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor -[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:] to check readable types
        https://bugs.webkit.org/show_bug.cgi?id=172891
        <rdar://problem/32204540>

        Reviewed by Darin Adler.

        Adds 2 new API tests to exercise data interaction of HTML data and an attributed string into a rich
        contenteditable. See WebCore ChangeLog for more details.

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

2017-06-05  Daniel Bates  <dabates@apple.com>

        webkitpy: Abstract Executive class
        https://bugs.webkit.org/show_bug.cgi?id=172928
        <rdar://problem/32569531>

        Reviewed by Ryosuke Niwa.

        Adds an AbstractExecutive class and makes Executive extend AbstractExecutive.
        This will make it straightforward to create additional derived classes that
        adhere to the same interface, say for iOS on-device testing.

        * Scripts/webkitpy/common/system/abstractexecutive.py: Added.
        (AbstractExecutive):
        (AbstractExecutive.run_and_throw_if_fail):
        (AbstractExecutive.cpu_count):
        (AbstractExecutive.interpreter_for_script):
        (AbstractExecutive.shell_command_for_script):
        (AbstractExecutive.kill_process):
        (AbstractExecutive.check_running_pid):
        (AbstractExecutive.running_pids):
        (AbstractExecutive.wait_newest):
        (AbstractExecutive.wait_limited):
        (AbstractExecutive.interrupt):
        (AbstractExecutive.default_error_handler):
        (AbstractExecutive.ignore_error):
        (AbstractExecutive._stringify_args):
        (AbstractExecutive.command_for_printing):
        (AbstractExecutive.run_command):
        (AbstractExecutive.popen):
        (AbstractExecutive.run_in_parallel):
        * Scripts/webkitpy/common/system/executive.py:
        (Executive):
        (Executive.cpu_count):
        (Executive.running_pids):
        (Executive.kill_all):
        (Executive._compute_stdin):
        (Executive.interpreter_for_script): Deleted.
        (Executive.shell_command_for_script): Deleted.
        (Executive.wait_newest): Deleted.
        (Executive.wait_limited): Deleted.
        (Executive.default_error_handler): Deleted.
        (Executive.ignore_error): Deleted.
        (Executive.command_for_printing): Deleted.

2017-06-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add iOS to platform
        https://bugs.webkit.org/show_bug.cgi?id=172931

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/common/system/platforminfo.py:
        PlatformInfo.__init__): Use platform_module.release() as the os_version for iOS device.
        (PlatformInfo.is_ios): Added.
        (PlatformInfo._determine_os_name): A platform name of 'ios' means that the os name is 'ios'.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.is_ios): Added.

2017-06-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][JHBuild] Switch github repository from git:// to https://
        https://bugs.webkit.org/show_bug.cgi?id=172921

        Reviewed by Alex Christensen.

        * wpe/jhbuild.modules:

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

        ASSERTION FAILED: m_currentScriptCallbackID in UIScriptContext::requestUIScriptCompletion(JSStringRef) running fast/events/ios/autocorrect-with-range-selection.html
        https://bugs.webkit.org/show_bug.cgi?id=172887
        <rdar://problem/32546061>

        Reviewed by Sam Weinig.

        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::applyAutocorrection):
        applyAutocorrection can call its completion handler synchronously,
        which makes UIScriptController unhappy (see bug 172884).

2017-06-03  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add contextmanager to disable logging for a block
        https://bugs.webkit.org/show_bug.cgi?id=172876

        Reviewed by Daniel Bates.

        Add a context manager which will use an OutputCapture object to capture logging
        in a block and hold it in a variable.

        * Scripts/webkitpy/common/system/outputcapture.py:
        (OutputCaptureScope):
        (OutputCaptureScope.__init__): Construct with OutputCapture object.
        (OutputCaptureScope.__enter__): Begin capturing output. 
        (OutputCaptureScope.__exit__): Restore output and save captured output to a variable.
        output and retain the resulting log.
        * Scripts/webkitpy/common/system/outputcapture_unittest.py:
        (OutputCaptureTest.test_output_capture_scope): Added.

2017-06-02  Zalan Bujtas  <zalan@apple.com>

        Cleanup FrameView::autoSizeIfEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=172889
        <rdar://problem/32550783>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm:
        (-[AutoLayoutWKWebView load:withWidth:expectingContentSize:resettingWidth:]): progression.
        (TEST):

2017-06-02  Chris Dumez  <cdumez@apple.com>

        ResourceLoadStatistics are not using unique paths during test runs
        https://bugs.webkit.org/show_bug.cgi?id=172861
        <rdar://problem/32442251>

        Reviewed by Darin Adler.

        Make sure WebKitTestRunner sets a temporary path for saving resource
        load statistics.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generateContextConfiguration):

2017-06-02  Brady Eidson  <beidson@apple.com>

        Prevent scheme handlers from handling all built-in URL schemes.
        <rdar://problem/32404790> and https://bugs.webkit.org/show_bug.cgi?id=172869

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:

2017-06-02  Stephan Szabo  <stephan.szabo@am.sony.com>

        [JSCOnly] Build static jsc.exe on Windows
        https://bugs.webkit.org/show_bug.cgi?id=172833

        Reviewed by Konstantin Tokarev.

        * CMakeLists.txt:
        * Scripts/build-jsc:

2017-06-02  Zalan Bujtas  <zalan@apple.com>

        Disable ViewportSizeForViewportUnits tests on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=172872

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/ViewportSizeForViewportUnits.mm:

2017-06-02  Zalan Bujtas  <zalan@apple.com>

        Allow clients to override viewport size for CSS viewport units.
        https://bugs.webkit.org/show_bug.cgi?id=172838
        <rdar://problem/32523441>

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ViewportSizeForViewportUnits.mm: Added.
        (TEST):

2017-06-02  Simon Fraser  <simon.fraser@apple.com>

        Get <chrono> out of StdLibExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=172744

        Reviewed by Zalan Bujtas.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:

2017-06-02  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Enable SUBTLE_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=172756

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm: Set ENABLE_SUBTLE_CRYPTO to 1 for WPE.
        * wpe/jhbuild.modules: Add libgpg-error and libgcrypt dependencies.
        * wpe/patches/libgcrypt-use-only-dev-urandom-for-testing.patch: Added. Prevents
        exhausting entropy when running the crypto layout tests.

2017-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump GTK+ and its dependencies in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=171918

        Reviewed by Carlos Alberto Lopez Perez.

        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeGtkSettings):
        * gtk/jhbuild.modules:
        * gtk/patches/gtk+-configure-fix-detecting-CUPS-2.x.patch: Removed.
        * gtk/patches/librsvg-2.36.1-bump-up-config.guess-to-support-aarch64.patch: Removed.

2017-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump wayland and weston in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=171921

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/jhbuild.modules:
        * gtk/patches/weston-libweston-include-weston-egl-ext.h-in-drm-x11-and-wa.patch: Added.

2017-06-01  Andy Estes  <aestes@apple.com>

        REGRESSION (r217626): ENABLE_APPLE_PAY_SESSION_V3 was disabled by mistake
        https://bugs.webkit.org/show_bug.cgi?id=172828

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-06-01  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove unneeded simulator teardown
        https://bugs.webkit.org/show_bug.cgi?id=171891

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.clean_up_test_run): Remove FIFO deletion since TCP is used
        for communication between Python and WebKitTestRunner/DumpRenderTree.

2017-06-01  Keith Miller  <keith_miller@apple.com>

        Undo rollout in r217638 with bug fix
        https://bugs.webkit.org/show_bug.cgi?id=172824

        Unreviewed, reland patch with unused set_state code removed.

        * TestWebKitAPI/Tests/WTF/ThreadMessages.cpp:
        (runThreadMessageTest):
        (TEST):

2017-06-01  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Do not send 0 or -1 as a pid to kill_process
        https://bugs.webkit.org/show_bug.cgi?id=172818

        Reviewed by Darin Adler.

        Sending a signal to process 0 will result in all processes in the group receiving 
        the signal. Sending a signal to process -1 will result in all non-system processes
        receiving the signal. Both Executive.kill_process and Executive.check_running_pid
        should consider these cases

        * Scripts/webkitpy/common/system/executive.py:
        (Executive.kill_process): Throw exception if pid is undefined, 0 or negative.
        (Executive.check_running_pid): An undefined pid, pid 0 or a negative pid will
        never be running, although os.kill may succeed.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.stop): Do not kill process if it is undefined.

2017-05-31  Alexey Proskuryakov  <ap@apple.com>

        JSC EWS bot does not run on WTF only patches
        https://bugs.webkit.org/show_bug.cgi?id=172777
        rdar://problem/32495975

        Reviewed by Aakash Jain.

        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance): Add a missing comma.

2017-05-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r217611 and r217631.
        https://bugs.webkit.org/show_bug.cgi?id=172785

        "caused wasm-hashset-many.html to become flaky." (Requested by
        keith_miller on #webkit).

        Reverted changesets:

        "Reland r216808, underlying lldb bug has been fixed."
        https://bugs.webkit.org/show_bug.cgi?id=172759
        http://trac.webkit.org/changeset/217611

        "Use dispatch queues for mach exceptions"
        https://bugs.webkit.org/show_bug.cgi?id=172775
        http://trac.webkit.org/changeset/217631

2017-05-31  Ryan Haddad  <ryanhaddad@apple.com>

        EWS bots should reboot themselves more frequently
        https://bugs.webkit.org/show_bug.cgi?id=172402

        Reviewed by Alexey Proskuryakov.

        Instead of rebooting once a day, EWS bots will reboot after running 10 iterations.

        * EWSTools/start-queue-mac.sh: Remove the restriction placed on the time that the bot will perform a reboot.

2017-05-31  Ryan Haddad  <ryanhaddad@apple.com>

        Reallocate hardware for iOS bots.
        https://bugs.webkit.org/show_bug.cgi?id=172657

        Reviewed by Alexey Proskuryakov.

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

2017-05-31  Andy Estes  <aestes@apple.com>

        Rename ENABLE_APPLE_PAY_DELEGATE to ENABLE_APPLE_PAY_SESSION_V3 and bump the supported version number
        https://bugs.webkit.org/show_bug.cgi?id=172366

        Reviewed by Daniel Bates.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-05-31  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, add Jiewen Tan as a reviewer

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

2017-05-31  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] MiniBrowser's browser_window_get_or_create_web_view_for_automation never creates new windows
        https://bugs.webkit.org/show_bug.cgi?id=172770

        Reviewed by Michael Catanzaro.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_get_or_create_web_view_for_automation): Removed stray semicolon
        which caused the body of the if-clause to be accidentally empty.

2017-05-31  Keith Miller  <keith_miller@apple.com>

        Reland r216808, underlying lldb bug has been fixed.
        https://bugs.webkit.org/show_bug.cgi?id=172759

        Unreviewed, relanding old patch. See: rdar://problem/31183352

        * TestWebKitAPI/Tests/WTF/ThreadMessages.cpp:
        (runThreadMessageTest):
        (TEST):

2017-05-31  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r217603.

        This patch broke the internal builds.

        Reverted changeset:

        "Get <chrono> out of StdLibExtras.h"
        https://bugs.webkit.org/show_bug.cgi?id=172744
        http://trac.webkit.org/changeset/217603

2017-05-31  Brent Fulgham  <bfulgham@apple.com>

        Make ResourceLoadStatistics testing more reliable
        https://bugs.webkit.org/show_bug.cgi?id=172730
        <rdar://problem/32028373>

        Reviewed by Andy Estes.

        When we tell the UIProcess (WebKitTestRunner) to notify the system about statistics update notifications,
        we also need to tell the WebProcess to do so, too, or else the test system doesn't get messages.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsNotifyPagesWhenDataRecordsWereScanned):

2017-05-31  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][WPE] run-javascriptcore-tests should use the jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=172757

        Reviewed by Xabier Rodriguez-Calvar.

        When needed, add the jhbuild wrapper at the beginning of the array
        that will be invoked to execute the run-jsc-stress-test or testapi
        commands.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        * Scripts/webkitdirs.pm:
        (shouldUseJhbuild):

2017-05-31  Simon Fraser  <simon.fraser@apple.com>

        Get <chrono> out of StdLibExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=172744

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:

2017-05-30  Tim Horton  <timothy_horton@apple.com>

        Keyboard autocorrections do not apply with an active selection (but keyboard acts like they did)
        https://bugs.webkit.org/show_bug.cgi?id=172735
        <rdar://problem/32015977>

        Reviewed by Enrica Casucci.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::applyAutocorrection):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::applyAutocorrection):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::applyAutocorrection):
        Expose applyAutocorrection to UIScriptController. Use a WKTesting method
        because I don't know how to tap the button in the autocorrection bar from a test.

2017-05-30  Daniel Bates  <dabates@apple.com>

        Add unit test for WebKit2 C SPI runBeforeUnloadConfirmPanel()
        https://bugs.webkit.org/show_bug.cgi?id=172671

        Reviewed by Alex Christensen.

        We should add a unit test to ensure we do not regress the WKPageUIClient runBeforeUnloadConfirmPanel() callback.
        For completeness, the callback runBeforeUnloadConfirmPanel() existed since inception of WKPageUIClient (WKPageUIClientV0).

        * TestWebKitAPI/Tests/WebKit2/ModalAlertsSPI.cpp:
        (TestWebKitAPI::analyzeDialogArguments): Test the runBeforeUnloadConfirmPanel() callback last as we need
        to trigger a navigation to test it.
        (TestWebKitAPI::runBeforeUnloadConfirmPanel): Added.
        (TestWebKitAPI::createNewPage): Wire up the runBeforeUnloadConfirmPanel callback.

2017-05-30  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Start servers before setting-up for testing
        https://bugs.webkit.org/show_bug.cgi?id=172176
        <rdar://problem/32225538>

        Reviewed by Alexey Proskuryakov.

        On-device testing requires that servers are started before ports set-up their
        test environments.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__): Start servers when initializing LayoutTestRunner.
        Servers are unconditionally stopped on exit.
        (LayoutTestRunner.run_tests): Move the starting of servers to the initializer. The
        Manager now stops servers.
        (LayoutTestRunner.start_servers): Set flag to indicate servers are running.
        (LayoutTestRunner.stop_servers): Check flag, only shutdown servers if they are shutdown.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Delay construction of the test runner until we can determine
        if servers need to be started.
        (Manager.run): Determine if servers need to be started and construct the test runner.
        Shut servers down when the test run is finished.
        (Manager._run_tests): Move the determination of servers to run into Manager.run.
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (is_wpt_server_running): Server is not running if no config is found.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket.is_running): Check if this WebSocket server is running.
        * Scripts/webkitpy/port/base.py:
        (Port.__init__): Define secure WebSocket server.
        (Port.to.is_websocket_server_running): Check if WebSocket servers are defined.

2017-05-30  Daniel Bates  <dabates@apple.com>

        [WK2] Add runBeforeUnloadConfirmPanel WKUIDelegate SPI; support onbeforeunload confirm panel in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=172603
        <rdar://problem/32471306>

        Reviewed by Brady Eidson.

        Implement the -_webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler: delegate
        method in MiniBrowser to show a confirm panel as to whether to allow the unloading of the page when
        unloading is initiated for a page that registered a onbeforeunload handler.

        Modify TestWebKitAPI/Tests/WebKit2Cocoa/ModalAlerts.mm to test that the -_webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:
        is called. Also fix style nit; pass YES instead of true to avoid implicit conversion from bool to BOOL
        when invoking the completion handler in -_webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:.

        Until we fix <https://bugs.webkit.org/show_bug.cgi?id=172614> the unit test in TestWebKitAPI/Tests/WebKit2Cocoa/ModalAlerts.mm
        for -_webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler: is only run on Mac
        as we do not have the infrastructure to simulate a click/tap on iOS and a click/tap on the page that
        registered an onbeforeunload handler is required to show a confirm panel when the page will be unloaded.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        * TestWebKitAPI/Tests/WebKit2/modal-alerts-in-new-about-blank-window.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ModalAlerts.mm:
        (sawDialog):
        (-[ModalAlertsUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[ModalAlertsUIDelegate webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ModalAlertsUIDelegate _webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):

2017-05-30  Alex Christensen  <achristensen@webkit.org>

        Update libwebrtc configuration
        https://bugs.webkit.org/show_bug.cgi?id=172727

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-05-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] TestWebKitAPI: ASSERTION FAILED: m_eglDisplay == EGL_NO_DISPLAY
        https://bugs.webkit.org/show_bug.cgi?id=172702

        Reviewed by Alex Christensen.

        EGL PlatformDisplay needs to be shut down before existing a
        program on Windows.

        * TestWebKitAPI/Tests/WebKit/win/ScaleWebView.cpp:
        (TestWebKitAPI::ScaleWebView::TearDown): Call shutDownWebKit().
        * TestWebKitAPI/Tests/WebKit/win/WebViewDestruction.cpp:
        (TestWebKitAPI::WebViewDestruction::TearDown): Ditto.

2017-05-30  Per Arne Vollan  <pvollan@apple.com>

        [Win] fast/shadow-dom/fullscreen-in-slot-fullscreenElement.html is flaky.
        https://bugs.webkit.org/show_bug.cgi?id=172709

        Reviewed by Brent Fulgham.

        Exit fullscreen mode after a fullscreen test.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebViewToConsistentStateBeforeTesting):

2017-05-30  Antti Koivisto  <antti@apple.com>

        ASSERTION FAILED: !needsLayout() in com.apple.WebCore: WebCore::FrameView::paintContents in fast/events/tabindex-focus-blur-all.html on WK1
        https://bugs.webkit.org/show_bug.cgi?id=172713

        Reviewed by Zalan Bujtas.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:plugInFailedWithError:dataSource:]):

            Remove forced display from plugin resource load delegate. It is testing some long-obsolete
            Safari WK1 behavior. Forcing display from this resource load delegate will hit the assertion
            because on Mac WK1 it may get invoked from middle of a layout.

            Painting code skips out after the assert so it doesn't indicate unsafe access of any sort.

2017-05-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Add a WPE EWS queue
        https://bugs.webkit.org/show_bug.cgi?id=172693

        Reviewed by Carlos Garcia Campos.

        * QueueStatusServer/config/queues.py:
        * QueueStatusServer/model/queues.py: Capitalize the name of the
        port on the tooltip of the bubbles. Do the same for the GTK port.
        (Queue.display_name):
        * Scripts/webkitpy/common/config/ews.json: Update the watcher mail
        for the GTK+ EWS also. Set for both ports as watcher the alias
        bugs-noreply@webkitgtk.org that maintainers of both ports follow.
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (WpePort):
        (WpePort.build_webkit_command):
        (WpePort.run_webkit_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest):
        (DeprecatedPortTest.test_wpe_port):
        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
        (test_ews_name):

2017-05-29  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Bumping the WPEBackend-mesa dependency version.

        * wpe/jhbuild.modules: Use the latest version that uses proper GLib
        priorities for IPC communication.

2017-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Map and Set constructors should have fast path for cloning
        https://bugs.webkit.org/show_bug.cgi?id=172413

        Reviewed by Saam Barati.

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

2017-05-27  Zalan Bujtas  <zalan@apple.com>

        enclosingIntRect returns a rect with -1 width/height when the input FloatRect overflows integer.
        https://bugs.webkit.org/show_bug.cgi?id=172676

        Reviewed by Simon Fraser.

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

2017-05-26  Zalan Bujtas  <zalan@apple.com>

        TestWebKitAPI: EnclosingIntRect and RoundedIntRect should use EXPECT_EQ.
        https://bugs.webkit.org/show_bug.cgi?id=172674

        Reviewed by Simon Fraser.

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

2017-05-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add test resources back into TestWebKitAPI Copy Resources phase

        Rubber-stamped by Beth Dakin.

        Add two files back into the Copy Resources phase after they were unintentionally
        removed in r217447 and r217496.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

2017-05-26  Beth Dakin  <bdakin@apple.com>

        Media documents inside iframes should not get controls in the TouchBar unless the 
        video is playing
        https://bugs.webkit.org/show_bug.cgi?id=172620
        -and corresponding-
        rdar://problem/32165477

        Reviewed by Jon Lee.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/offscreen-iframe-of-media-document.html: Added.

2017-05-25  Joseph Pecoraro  <pecoraro@apple.com>

        _WKUserStyleSheet and WKUserScript leak string data
        https://bugs.webkit.org/show_bug.cgi?id=172583
        <rdar://problem/32395209>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        We should not have been adopting an autoreleased object.

2017-05-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [WK1] iframes in layer-backed NSViews are not cleared between successive draws
        https://bugs.webkit.org/show_bug.cgi?id=172554
        <rdar://problem/31247133>

        Reviewed by Simon Fraser.

        Previously, there was no way to make DumpRenderTree's views layer-backed. Unfortunately,
        simply setting [WebView setWantsLayer:] is insufficient; turning it on and then off again
        leaves some state around inside the NSWindow which isn't easily cleaned up. Instead,
        we should just tear down and rebuild the window whenever we need a layer-backed WebView.
        We can also use the "webkit-test-runner" header comment to trigger this new layer-backed
        codepath.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        (TestOptions::webViewIsCompatibleWithOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (shouldIgnoreWebCoreNodeLeaks):
        (allowedFontFamilySet):
        (-[DRTMockScroller rectForPart:]):
        (-[DRTMockScroller drawKnob]):
        (-[DRTMockScroller drawRect:]):
        (createWebViewAndOffscreenWindow):
        (initializeGlobalsFromCommandLineOptions):
        (prepareConsistentTestingEnvironment):
        (dumpRenderTree):
        (dumpAudio):
        (dumpHistoryItem):
        (dumpBackForwardListForWebView):
        (resetWebViewToConsistentStateBeforeTesting):
        (WebThreadLockAfterDelegateCallbacksHaveCompleted):
        (runTest):

2017-05-25  Sam Weinig  <sam@webkit.org>

        [WebIDL] Use the term 'operation' more consistently
        https://bugs.webkit.org/show_bug.cgi?id=172601

        Reviewed by Chris Dumez.

        We were using the term 'operation', a WebIDL term for function-like
        constructs, inconsistently in the code generator. Now, when we use
        'operation' when referring to the IDL concept (usually the object the
        parser produces) and 'function' when referring to code being generated.

        * DumpRenderTree/Bindings/CodeGeneratorDumpRenderTree.pm:
        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:

2017-05-25  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r217447; only run test where JSC's ObjC API is available.

        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.mm:

2017-05-25  Jer Noble  <jer.noble@apple.com>

        System sleeps while playing to wireless target, ending stream.
        https://bugs.webkit.org/show_bug.cgi?id=172541

        Reviewed by Eric Carlson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.html: Added.
        * TestWebKitAPI/Tests/mac/MediaPlaybackSleepAssertion.mm: Added.
        (-[MediaPlaybackSleepAssertionLoadDelegate webView:didCreateJavaScriptContext:forFrame:]):
        (-[MediaPlaybackSleepAssertionPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (TestWebKitAPI::simulateKeyDown):
        (TestWebKitAPI::hasAssertionType):
        (TestWebKitAPI::TEST):

2017-05-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r217423 and r217424.
        https://bugs.webkit.org/show_bug.cgi?id=172607

        These caused an api failure on all testers. (Requested by
        mlewis13 on #webkit).

        Reverted changesets:

        "REGRESSION (r216977): 4 leaks introduced in new
        WebKit2_WKHTTPCookieStoreWithoutProcessPool_Test"
        https://bugs.webkit.org/show_bug.cgi?id=172558
        http://trac.webkit.org/changeset/217423

        "REGRESSION (r217423): Fix last-second typo in 'auto'"
        http://trac.webkit.org/changeset/217424

2017-05-25  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Expose doc-footnote ARIA role with ATK_ROLE_FOOTNOTE
        https://bugs.webkit.org/show_bug.cgi?id=172355

        Reviewed by Chris Fleizach.

        Add map ATK_ROLE_FOOTNOTE to "AXFootnote" and bump jhbuild minimum
        versions of atk, at-spi2-core, and at-spi2-atk to 2.25.2 (the earliest
        releases which support the new platform footnote accessibility role.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * gtk/jhbuild.modules:

2017-05-25  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r217423): Fix last-second typo in 'auto'

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (WebKit2_WKHTTPCookieStoreWithoutProcessPool_Test): Fix typo.

2017-05-24  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r216977): 4 leaks introduced in new WebKit2_WKHTTPCookieStoreWithoutProcessPool_Test
        <https://webkit.org/b/172558>

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (WebKit2_WKHTTPCookieStoreWithoutProcessPool_Test): Fix the leaks.

2017-05-24  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Consolidate CMake code related to Cairo
        https://bugs.webkit.org/show_bug.cgi?id=172568

        Reviewed by Alex Christensen.

        * DumpRenderTree/config.h:
        * TestWebKitAPI/config.h:

2017-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Plumb additional image metadata to item providers when beginning data interaction on an image
        https://bugs.webkit.org/show_bug.cgi?id=172536
        <rdar://problem/32371300>

        Reviewed by Beth Dakin.

        Tweak existing image data interaction tests to check for suggested name and estimated size on the generated
        source item providers.

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

2017-05-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] Create unique network storage session for each DRT.
        https://bugs.webkit.org/show_bug.cgi?id=172540

        Reviewed by Brent Fulgham.

        During layout testing, each DRT instance should have its own network storage session.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (prepareConsistentTestingEnvironment):

2017-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Respect image UTIs when writing to item providers when beginning data interaction on an image
        https://bugs.webkit.org/show_bug.cgi?id=172436
        <rdar://problem/31786569>

        Reviewed by Beth Dakin.

        Tweaks existing unit tests and adds a new test for image data interaction. See WebCore ChangeLog for more
        details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/apple.gif: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/gif-and-file-input.html: Added.

        Create a new test page containing a GIF and a file input.

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

2017-05-23  Per Arne Vollan  <pvollan@apple.com>

        [Win] Increase test timeout for slow tests.
        https://bugs.webkit.org/show_bug.cgi?id=172449

        Reviewed by Alexey Proskuryakov.

        Instead of using a fixed timeout of 30 seconds for all tests, we should use the
        timeout member in the TestRunner class.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setWaitToDump):

2017-05-15  Matt Rajca  <mrajca@apple.com>

        Replace autoplay events that fire at navigation with a DidAutoplayMediaPastThreshold event.
        https://bugs.webkit.org/show_bug.cgi?id=172138

        Reviewed by Alex Christensen.

        Added API tests.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/js-autoplay-audio.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/silence-long.m4a: Added.

2017-05-23  Simon Fraser  <simon.fraser@apple.com>

        Stop consulting -viewsNeedDisplay when doing layer flushing in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=172522
        rdar://problem/31071812

        Reviewed by Sam Weinig.

        Remove NSWindowStyleMaskFullSizeContentView which is no longer referenced in code.
        We set this in the .xib file now.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2017-05-22  Simon Fraser  <simon.fraser@apple.com>

        Snapshotting via -renderInContext: should do synchronous image decodes
        https://bugs.webkit.org/show_bug.cgi?id=172485
        rdar://problem/32276146

        Reviewed by Tim Horton.

        New API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/SnapshotViaRenderInContext.mm: Added.
        (-[RenderInContextWebViewDelegate webViewDidFinishLoad:]):
        (-[RenderInContextWebViewDelegate webView:didFailLoadWithError:]):
        (TestWebKitAPI::getPixelIndex):
        (TestWebKitAPI::TEST):

2017-05-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove dead ENABLE(FONT_LOAD_EVENTS) code
        https://bugs.webkit.org/show_bug.cgi?id=172517

        Rubber-stamped by Simon Fraser.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-05-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Multiple links should be inserted separately when performing data interaction
        https://bugs.webkit.org/show_bug.cgi?id=172489
        <rdar://problem/31510832>

        Reviewed by Dan Bernstein.

        Adds a new test that performs data interaction in a contenteditable with multiple items containing URLs.

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

2017-05-23  Tim Horton  <timothy_horton@apple.com>

        REGRESSION: API test WebKit2.WKObject is failing
        https://bugs.webkit.org/show_bug.cgi?id=172497
        <rdar://problem/31694641>

        Reviewed by Geoff Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKObject.mm:
        (TestWebKitAPI::TEST):
        Add a test that ensures that we pretend to at least be *some* kind of
        NSString, which my first fix would not have passed.

2017-05-23  youenn fablet  <youenn@apple.com>

        There should be an easy way to run HTTP/WPT served tests on a browser
        https://bugs.webkit.org/show_bug.cgi?id=172068

        Reviewed by Sam Weinig.

        Adding a new script open-layout-test to open a layout-test in a
        browser and making sure it is served as done through run-webkit-tests.
        In case tests should be run using a server, detecting whether the
        server are running. If not, calling run-webkit-httpd to run the
        servers and open the URL in a browser.
        Otherwise, open directly the URL.

        Adding an option in run-webkit-httpd to open an URL after having
        started the servers.

        Adding the --no-http-servers option in run-webkit-tests to not start any HTTP server.
        This allows running run-webkit-httpd once and not having to restart
        servers everytime a test should be served.

        Moving most of run-webkit-httpd logic in its own python file to reuse
        it in open-layout-test script.

        Adding routines to check whether HTTP and WPT servers are running.

        * Scripts/open-layout-test: Added.
        (parse_args):
        (main):
        * Scripts/run-webkit-httpd:
        (main):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_tests):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._is_server_running_on_all_ports):
        (HttpServerBase):
        (HttpServerBase._is_running_on_port):
        (HttpServerBase._check_that_all_ports_are_available):
        (is_http_server_running):
        * Scripts/webkitpy/layout_tests/servers/run_webkit_httpd.py: Copied from Tools/Scripts/run-webkit-httpd.
        (parse_args):
        (main):
        (run_server):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (is_wpt_server_running):
        * Scripts/webkitpy/port/base.py:
        (Port.to.is_http_server_running):
        (Port.to):
        (Port.to.is_wpt_server_running):
        (Port.to.start_web_platform_test_server):
        * Scripts/webkitpy/port/driver.py:
        (DriverProxy.is_web_platform_test):
        (DriverProxy):
        (DriverProxy.is_webkit_specific_web_platform_test):

2017-05-23  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Add a RuntimeEnabledFeature for display: contents, defaulted to false.
        https://bugs.webkit.org/show_bug.cgi?id=171984

        Reviewed by Antti Koivisto.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-05-20  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r215686): O(n^2) algorithm in CachedRawResource::addDataBuffer
        https://bugs.webkit.org/show_bug.cgi?id=172406
        <rdar://32109532>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
        (TestWebKitAPI::checkBuffer):
        (TestWebKitAPI::TEST_F):

2017-05-22  Jason Marcell  <jmarcell@apple.com>

        Do not enter Subversion-specific logic when parsing Git-based Trac data.
        https://bugs.webkit.org/show_bug.cgi?id=172433
        <rdar://problem/32234188>

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._convertCommitInfoElementToObject):

2017-05-22  Tim Horton  <timothy_horton@apple.com>

        ExplicitSnapshotsChangeUponNavigation API test often fails
        https://bugs.webkit.org/show_bug.cgi?id=172475
        <rdar://problem/31688322>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView _setUpTestWindow:]):
        Make TestWKWebView's window layer-backed. This is now the default,
        and it's also easy to accidentally write a test that depends on it
        (for example, ExplicitSnapshotsChangeUponNavigation adds an NSBox,
        which becomes layer backed, just like the WKWebView, but with no
        common layer-backed ancestor).

2017-05-22  youenn fablet  <youenn@apple.com>

        Resync web-platform-tests up to 8df7c9c215678328212f232ce0b5270c505a8563
        https://bugs.webkit.org/show_bug.cgi?id=172426

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.remove_deleted_files): Outputting warning when trying to delete a file that no longer exists.

2017-05-22  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, change my status to reviewer and fill "expertise" field

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

2017-05-22  Tomas Popela  <tpopela@redhat.com>

        Remove some of the EFL port leftovers
        https://bugs.webkit.org/show_bug.cgi?id=172440

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):
        * ImageDiff/PlatformEfl.cmake: Removed.
        * Scripts/run-efl-tests: Removed.
        * Scripts/webkit-build-directory:
        * Scripts/webkitpy/common/config/contributionareas.py:
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (_set_up_derived_options):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__):
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):
        * gtk/manifest.txt.in:
        * jhbuild/jhbuild-wrapper:

2017-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Do not include WPE files in GTK+ tarballs.

        * gtk/manifest.txt.in:

2017-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_context_menu_item_new_from_gaction
        https://bugs.webkit.org/show_bug.cgi?id=159631

        Reviewed by Michael Catanzaro.

        Update context menu tests to check the new GAction API.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuPopulateMenu):

2017-05-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Remove Firefox user agent quirk for Google domains
        https://bugs.webkit.org/show_bug.cgi?id=171941

        Reviewed by Carlos Garcia Campos.

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

2017-05-20  Ting-Wei Lan  <lantw44@gmail.com>

        [GTK] gtkdoc-fixxref needs --module argument to work
        https://bugs.webkit.org/show_bug.cgi?id=172415

        Reviewed by Michael Catanzaro.

        * gtk/gtkdoc.py:
        (GTKDoc._run_gtkdoc_fixxref):

2017-05-20  Alexey Proskuryakov  <ap@apple.com>

        make-new-script-test should create tests that use js-test.js, not js-test-pre.js
        https://bugs.webkit.org/show_bug.cgi?id=172416

        Reviewed by Daniel Bates.

        * Scripts/make-new-script-test:

2017-05-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] error LNK2005: WebCore::JSNode::checkSubClassPatchpoint() already defined in WebKit.lib
        https://bugs.webkit.org/show_bug.cgi?id=172267

        Reviewed by Per Arne Vollan.

        TestWebCoreLib and TestWebKitLib have linked both WebCore and WebKit.
        TestWebCoreLib should link only with WebCore. And, TestWebKitLib
        should link only with WebKit.

        Unfortunately, there is a layer violation at the moment.
        WebCore::Image::loadPlatformResource needs loadResourceIntoBuffer
        in WebKit. This change contains a stub of loadResourceIntoBuffer
        in TestWebCoreLib for the workaround.

        * TestWebKitAPI/PlatformWin.cmake: Do not link WebKit to
        TestWebCoreLib. Do not link WebCore to TestWebKitLib.
        * TestWebKitAPI/win/TestWebCoreStubs.cpp: Added.
        (loadResourceIntoBuffer): Added a stub.

2017-05-19  Simon Fraser  <simon.fraser@apple.com>

        Fix dump-class-layout to handle different file architectures
        https://bugs.webkit.org/show_bug.cgi?id=172392

        Reviewed by Zalan Bujtas.

        Instead of using lldb.LLDB_ARCH_DEFAULT by default, run 'file' on the binary
        and use the first architecture reported. Also add a "--architecture" argument
        to allow the user to specify an architecture.

        * Scripts/dump-class-layout:
        (import_lldb):
        (verify_type_recursive):
        (get_first_file_architecture):
        (dump_class):
        (main):
        (find_build_directory): Deleted.

2017-05-19  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Ignore failure to open Simulator.app.

2017-05-19  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use simctl boot to run multiple simulators at once
        https://bugs.webkit.org/show_bug.cgi?id=172374

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.xcode_version): Return the current version of Xcode.
        * Scripts/webkitpy/common/system/platforminfo_mock.py:
        (MockPlatformInfo.xcode_version): Return version 8.0 for testing.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.use_multiple_simulator_apps): Return true if we need to
        run multiple Simulator.app instances.
        (IOSSimulatorPort._create_simulators): Only copy the simulator app for older
        versions of Xcode.
        (IOSSimulatorPort._create_devices): Use 'simctl boot' directly unless using
        an older version of Xcode.

2017-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the build on the latest internal SDK.

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

2017-05-19  Filip Pizlo  <fpizlo@apple.com>

        arrayProtoPrivateFuncConcatMemcpy needs to be down with firstArray being undecided
        https://bugs.webkit.org/show_bug.cgi?id=172369

        Reviewed by Mark Lam.
        
        Because I wrote a test that relies on the NoCJIT config scribbling free cells, I thought it
        would be a good idea to write this down.

        * Scripts/run-jsc-stress-tests:

2017-05-19  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Layout tests which have no output will succeed
        https://bugs.webkit.org/show_bug.cgi?id=172322
        <rdar://problem/32258350>

        Reviewed by David Kilzer.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._compare_text): Add FailreNotTested to failures if test has no output.
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (determine_result_type): FailureNotTested means that the test could not be loaded. This
        is classified as a MISSING failure.
        (FailureNotTested): Added.
        (FailureNotTested.message):

2017-05-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add SixSpeed benchmark to PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=172326

        Reviewed by Sam Weinig.

        * Scripts/run-jsc-benchmarks:

2017-05-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK1] MiniBrowser should navigate when handling a dropped URL
        https://bugs.webkit.org/show_bug.cgi?id=172350

        Reviewed by Tim Horton.

        Allow all drop actions, including URL navigation, for WebKit1 MiniBrowser.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:dragDestinationActionMaskForDraggingInfo:]):

2017-05-18  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r216694 - 216712): Performance test Speedometer/Full.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=172077

        Reviewed by Chris Dumez.

        Fixed perftest.py by updating the lines to ignore in Speedometer.

        Also start report the results as "Speedometer" instead of "DoYouEvenBench/Full.html" to perf.webkit.org.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._lines_to_ignore_in_parser_result): Updated for Speedometer 2.0.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests): Use "Speedometer" instead of "Speedometer/index.html" as the test name.
        (_generate_results_dict): Removed the workaround to keep reporting Speedometer as DoYouEvenBench.
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_collect_tests_with_index_html_and_resources): Added.

2017-05-18  Andy Estes  <aestes@apple.com>

        ENABLE(APPLE_PAY_DELEGATE) should be NO on macOS Sierra and earlier
        https://bugs.webkit.org/show_bug.cgi?id=172305

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Selection around attachment elements should not persist when beginning a drag
        https://bugs.webkit.org/show_bug.cgi?id=172319
        <rdar://problem/32283008>

        Reviewed by Tim Horton.

        Tests that temporary selection around an attachment does not persist longer than it needs to.

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

2017-05-18  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Grandfather domains for existing data records
        https://bugs.webkit.org/show_bug.cgi?id=172155
        <rdar://problem/24913532>

        Reviewed by Alex Christensen.

        Adds test infrastructure needed for the added functionality.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsGrandfathered):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback):
        (WTR::TestRunner::statisticsDidScanDataRecordsCallback):
        (WTR::TestRunner::setStatisticsGrandfatheringTime):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsGrandfathered):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::setStatisticsGrandfatheringTime):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2017-05-18  Saam Barati  <sbarati@apple.com>

        WebAssembly: perform stack checks
        https://bugs.webkit.org/show_bug.cgi?id=165546
        <rdar://problem/29760307>

        Reviewed by Filip Pizlo.

        Add some new testing modes for using and not using fast TLS wasm contexts.

        * Scripts/run-jsc-stress-tests:

2017-05-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r209608): Cross-origin plugin document opened in child window blocked by parent
        window CSP when object-src 'none' is set
        https://bugs.webkit.org/show_bug.cgi?id=172038
        <rdar://problem/32258262>

        Reviewed by Andy Estes.

        Teach the test Netscape plugin to look for a URL that contains plugin-document-alert-and-notify-done.pl.
        When it sees this URL it will show a JavaScript alert and call testRunner.notifyDone().

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_New):

2017-05-18  Per Arne Vollan  <pvollan@apple.com>

        [Win] Many layout tests are failing.
        https://bugs.webkit.org/show_bug.cgi?id=172286

        Reviewed by Brent Fulgham.

        Add a FIXME comment about unimplemented functions, instead of writing this to the test result file.
 
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        (TestRunner::removeAllWebNotificationPermissions):
        (TestRunner::simulateWebNotificationClick):

2017-05-18  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Remove usage of _snprintf
        https://bugs.webkit.org/show_bug.cgi?id=172251

        Reviewed by Per Arne Vollan.

        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * MiniBrowser/win/PageLoadTestClient.cpp:
        (PageLoadTestClient::dumpRunStatistics):

2017-05-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r217014.

        This change caused mac-wk2 LayoutTests to exit early due to
        crashes.

        Reverted changeset:

        "Resource Load Statistics: Grandfather domains for existing
        data records"
        https://bugs.webkit.org/show_bug.cgi?id=172155
        http://trac.webkit.org/changeset/217014

2017-05-17  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Grandfather domains for existing data records
        https://bugs.webkit.org/show_bug.cgi?id=172155
        <rdar://problem/24913532>

        Reviewed by Alex Christensen.

        Adds test infrastructure needed for the added functionality.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setStatisticsGrandfathered):
        (WTR::TestRunner::isStatisticsGrandfathered):
        (WTR::TestRunner::installStatisticsDidScanDataRecordsCallback):
        (WTR::TestRunner::statisticsDidScanDataRecordsCallback):
        (WTR::TestRunner::setStatisticsGrandfatheringTime):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setStatisticsGrandfathered):
        (WTR::TestController::isStatisticsGrandfathered):
        (WTR::TestController::setStatisticsGrandfatheringTime):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

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

        Fix ios-simulator API test after r216977
        https://bugs.webkit.org/show_bug.cgi?id=171987

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (TEST):
        <rdar://problem/32260156> covers the investigation of this, but fixing it is 
        not as urgent as having the rest of this working. Notably the ephemeral part of the
        test works, so something is just wrong with the persistent part.

2017-05-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216955.

        This change caused strange behavior with web-platform-tests
        locally and on EWS.

        Reverted changeset:

        "webkitpy: Start servers before setting-up for testing"
        https://bugs.webkit.org/show_bug.cgi?id=172176
        http://trac.webkit.org/changeset/216955

2017-05-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        A URL type is vended for a non-URL plain text string when starting data interaction
        https://bugs.webkit.org/show_bug.cgi?id=172228
        <rdar://problem/32166729>

        Reviewed by Andy Estes.

        Adds two new data interaction tests, SinglePlainTextWordTypeIdentifiers and SinglePlainTextURLTypeIdentifiers,
        to verify that a URL UTI is not vended when beginning a data interaction on a single word, but that a URL is
        still vended when beginning data interaction on something that resembles a link.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:

2017-05-17  David Kilzer  <ddkilzer@apple.com>

        BlobDataFileReference::generateReplacementFile() should use mkstemp()
        <https://webkit.org/b/172192>

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Add check for mktemp.
        (CppChecker): Add 'security/temp_file' category.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_insecure_temp_file): Add test.

2017-05-17  Devin Rousso  <drousso@apple.com>

        Unreviewed, change my email.

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

2017-05-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r216974.

        Revision caused consistent timeouts on all platforms.

        Reverted changeset:

        "Add a RuntimeEnabledFeature for display: contents, defaulted
        to false."
        https://bugs.webkit.org/show_bug.cgi?id=171984
        http://trac.webkit.org/changeset/216974

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

        Interacting with WKHTTPCookieStores before creating WKWebViews and WKProcessPools should affect cookies used
        https://bugs.webkit.org/show_bug.cgi?id=171987

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (-[CookieUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST):

2017-05-17  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Add a RuntimeEnabledFeature for display: contents, defaulted to false.
        https://bugs.webkit.org/show_bug.cgi?id=171984

        Reviewed by Antti Koivisto.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-05-16  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):

2017-05-16  Tim Horton  <timothy_horton@apple.com>

        PageVisibilityStateWithWindowChanges tests sometimes time out
        https://bugs.webkit.org/show_bug.cgi?id=172202
        <rdar://problem/29653266>

        Reviewed by Dean Jackson.

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        Make sure the window is miniaturizable, otherwise, in some cases, miniaturize: will not work.

2017-05-16  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Start servers before setting-up for testing
        https://bugs.webkit.org/show_bug.cgi?id=172176
        <rdar://problem/32225538>

        Reviewed by Alexey Proskuryakov.

        On-device testing requires that servers are started before ports set-up their
        test environments.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.__init__): Start servers when initializing LayoutTestRunner.
        (LayoutTestRunner.run_tests): Move the starting of servers to the initializer.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__): Delay construction of the test runner until we can determine
        if servers need to be started.
        (Manager.run): Determine if servers need to be started and construct the test runner.
        (Manager._run_tests): Move the determination of servers to run into Manager.run.

2017-05-16  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed, adding myself to contributors.json

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

2017-05-16  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Tests that always pass when run alone, but fail in the bots
        https://bugs.webkit.org/show_bug.cgi?id=168572

        Reviewed by Michael Catanzaro.

        PlatformWebView::viewSupportsOptions() is basically a comparison
        that checks that the passed options are the ones supported by the
        web view. There is no reason for them to be implemented for each
        platform differently. In fact doing so causes issues each time a
        new option is added, if the corresponding platform implementation
        is not updated accordingly.

        A consequence of not updating the viewSupportOptions()
        implementations when new options are added is that tests that need
        these options might fail if they are executed after a test that
        didn't need the option, as the webview will be reused even if the
        option is not supported. This cannot be spotted when running the
        tests individually. See bug #165133 for other example of the same
        problem.

        Remove the platform implementations and make the comparison a
        method of the TestOptions structure, so that the check is in one
        place. For the time being, only include in the comparison the
        options that were checked in the mac platform, which seem to be
        the only ones relevant this far (unless newer ones have also been
        forgotten).

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::viewSupportsOptions): Use the method
        defined below.
        * WebKitTestRunner/TestOptions.h:
        (WTR::TestOptions::hasSameInitializationOptions): Added.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::viewSupportsOptions): Deleted.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::viewSupportsOptions): Deleted.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions): Deleted.
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
        (WTR::PlatformWebView::viewSupportsOptions): Deleted.

2017-05-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Build testapi in non Apple ports
        https://bugs.webkit.org/show_bug.cgi?id=172103

        Reviewed by Filip Pizlo.

        Now testapi is drived in JSCOnly, GTK and WPE ports too.

        * Scripts/build-jsc:
        * Scripts/run-javascriptcore-tests:

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

        WPT test importer should not account for slow manual tests
        https://bugs.webkit.org/show_bug.cgi?id=172127

        Reviewed by Ryosuke Niwa.

        Making sure manual tests are not triggering updating tests-options.json file.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.find_importable_tests):
        (TestImporter._already_identified_as_resource_file):
        (TestImporter.update_tests_options):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (test_manual_slow_test):

2017-05-15  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Some versions of simctl do not place parenthesis around runtime identifiers
        https://bugs.webkit.org/show_bug.cgi?id=172142

        Reviewed by Tim Horton.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator._parse_runtimes): Newer versions of simctl output do not put parenthesis
        around runtime identifiers.
        * Scripts/webkitpy/xcode/simulator_unittest.py: Add tests for new simctl output.

2017-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Update ARES-6 plan file to use the latest version
        https://bugs.webkit.org/show_bug.cgi?id=172139

        Reviewed by Keith Miller.

        Include r216538.

        * Scripts/webkitpy/benchmark_runner/data/plans/ares6.plan:

2017-05-15  Jeremy Jones  <jeremyj@apple.com>

        Disable Picture In Picture API tests on unsupported platforms.
        https://bugs.webkit.org/show_bug.cgi?id=172125
        rdar://problem/32199477

        Reviewed by Simon Fraser.

        The callbacks and allowing picture-in-picture require new SPI.

        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.mm:

2017-05-15  Brady Eidson  <beidson@apple.com>

        [ios-simulator] API test WKWebView.ClearAppCache is failing.
        https://bugs.webkit.org/show_bug.cgi?id=172120

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (TEST): ios-sim needs explicit deleting of the app cache paths that I'd removed in 216805.
          Restoring that code fixes this.

2017-05-15  Timothy Horton  <timothy_horton@apple.com>

        Null deref under WebContentReader::readURL when interacting with a file URL
        https://bugs.webkit.org/show_bug.cgi?id=172045
        <rdar://problem/25880647>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        The text of the file URL is pasted because a textual version of it gets
        onto the pasteboard. However, this test would have crashed before. Also
        tests that we don't make an <a>.

2017-05-14  Per Arne Vollan  <pvollan@apple.com>

        [Win] fast/cookies/local-file-can-set-cookies.html is flaky.
        https://bugs.webkit.org/show_bug.cgi?id=172071

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetWebPreferencesToConsistentValues):

2017-05-14  Chris Dumez  <cdumez@apple.com>

        Drop PassRefPtr class from WTF
        https://bugs.webkit.org/show_bug.cgi?id=172091

        Reviewed by Alex Christensen.

        Drop API test coverage.

        * TestWebKitAPI/Tests/WTF/Ref.cpp:
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::passWithPassRefPtr): Deleted.

2017-05-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] deviceId constraint doesn't work with getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=171877
        <rdar://problem/31899730>

        Reviewed by Jer Noble.

        The device ID hash salt is now required for getUserMedia to check deviceId constraint, so
        implement the "checkUserMediaPermission" callback.
        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack):
        (TestWebKitAPI::checkUserMediaPermissionCallback):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserMediaDisabled.mm:
        (-[UserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):

2017-05-13  Chris Dumez  <cdumez@apple.com>

        Stop using RefPtr::release()
        https://bugs.webkit.org/show_bug.cgi?id=172074

        Reviewed by Geoffrey Garen.

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

2017-05-13  Commit Queue  <commit-queue@webkit.org>

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

        caused lldb to hang when debugging (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Use Mach exceptions instead of signals where possible"
        https://bugs.webkit.org/show_bug.cgi?id=171865
        http://trac.webkit.org/changeset/216808

2017-05-12  Alex Christensen  <achristensen@webkit.org>

        Rename WKContentExtension to WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=172053
        <rdar://problem/32141005>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKContentExtensionStore.mm:
        (WKContentRuleListStoreTest::SetUp):
        (TEST_F):
        (-[ContentRuleListDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (WKContentExtensionStoreTest::SetUp): Deleted.
        (-[ContentExtensionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]): Deleted.

2017-05-12  Keith Miller  <keith_miller@apple.com>

        Use Mach exceptions instead of signals where possible
        https://bugs.webkit.org/show_bug.cgi?id=171865

        Reviewed by Mark Lam.

        * TestWebKitAPI/Tests/WTF/ThreadMessages.cpp:
        (runThreadMessageTest):
        (TEST):

2017-05-12  Jeremy Jones  <jeremyj@apple.com>

        Add objc version of WK2 UIPageClient setHasVideoInPictureInPicture and rename it to hasVideoInPictureInPictureDidChange.
        https://bugs.webkit.org/show_bug.cgi?id=172048
        rdar://problem/32163054

        Reviewed by Simon Fraser.

        Add a WKWebView test for hasVideoInPictureInPictureDidChange UIDelegate callback.

        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.mm:
        (hasVideoInPictureInPictureDidChange):
        (-[PictureInPictureUIDelegate _webView:hasVideoInPictureInPictureDidChange:]):
        (-[PictureInPictureUIDelegate userContentController:didReceiveScriptMessage:]):
        (TestWebKitAPI::TEST):

2017-05-12  Brady Eidson  <beidson@apple.com>

        REGRESSION (r216711): API test WKWebView.ClearAppCache is failing.
        https://bugs.webkit.org/show_bug.cgi?id=172030

        Unreviewed - Test gardening

        Try to resolve this once and for all by using the WebsiteDataStore API to nuke everything
        before the test starts.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (defaultWebsiteCacheDirectory):
        (defaultApplicationCacheDirectory):
        (TEST):
        (defaultWebsiteDataDirectory): Deleted.

2017-05-12  David Quesada  <david_quesada@apple.com>

        Add SPI for overriding WKWebView's clipping behavior for _visibleContentRect
        https://bugs.webkit.org/show_bug.cgi?id=172000
        rdar://problem/32144756

        Reviewed by Simon Fraser.

        Added API tests to verify that WKWebView provides the expected value for
        _visibleContentRect in various configurations. (i.e. not inside a scrollview,
        inside a scrollview but not clipped, clipped by an ancestor scrollview,
        clipped by the webview's _enclosingViewForExposedRectComputation)

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/VisibleContentRect.mm: Added.
        (-[TestWKWebViewWithEnclosingView _enclosingViewForExposedRectComputation]):
        (TestWebKitAPI::TEST):

2017-05-12  Brady Eidson  <beidson@apple.com>

        REGRESSION (r216711): API test WKWebView.ClearAppCache is failing.
        https://bugs.webkit.org/show_bug.cgi?id=172030

        Unreviewed - Test gardening, in effect...

        More exploration as to why this continues to fail on the bots.
        
        This change should give us a smoking gun.
        
        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (TEST):

2017-05-12  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [GTK] Fix compile warnings in PlatformImageCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=171850

        Reviewed by Michael Catanzaro.

        * ImageDiff/cairo/PlatformImageCairo.cpp:
        (ImageDiff::PlatformImage::createFromStdin):
        (ImageDiff::PlatformImage::writeAsPNGToStdout):

2017-05-12  Jeremy Jones  <jeremyj@apple.com>

        Add UIClient callback for when picture-in-picture is activated.
        https://bugs.webkit.org/show_bug.cgi?id=172023

        Reviewed by Simon Fraser.

        Added a test for WKPageUIClientV10 setHasVideoInPictureInPicture.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/PictureInPictureDelegate.mm: Added.
        (onLoadedCompletedCallback):
        (waitUntilOnLoadIsCompleted):
        (didFinishLoadForFrame):
        (setHasVideoInPictureInPicture):
        (TestWebKitAPI::TEST):

2017-05-12  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed follow-up to r216776.

        * Scripts/webkitpy/port/base.py:
        (Port.path_to_crash_logs): Raise not implemented.
        * Scripts/webkitpy/port/test.py:
        (TestPort.path_to_crash_logs): Return results directory as the location of crash logs.
        * Scripts/webkitpy/port/win.py:
        (WinPort.path_to_crash_logs): Ditto.

2017-05-12  Alexey Proskuryakov  <ap@apple.com>

        Bot watcher's dashboard shows results links twice sometimes
        https://bugs.webkit.org/show_bug.cgi?id=172043

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._presentPopoverForGenericTestFailures):

2017-05-12  Brady Eidson  <beidson@apple.com>

        REGRESSION (r216711): API test WKWebView.ClearAppCache is failing.
        https://bugs.webkit.org/show_bug.cgi?id=172030

        Unreviewed - Test gardening, in effect...

        This failure is only being seen by the bots.
        
        I believe this test is utterly broken in the first place; when it checks the .wal file's
        size that is not actually an indicator that the records were deleted.
        
        But that isn't what's coming up as failure on the bots.
        
        This patch is an attempt to:
        1 - More forcefully clear the Website data directory of leftovers before the test starts.
        2 - Give an earlier indication of the failure that the bots are seeing, to possibly reveal more.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LocalStorageClear.mm:
        (defaultWebsiteDataDirectory):
        (defaultApplicationCacheDirectory):
        (TEST):

2017-05-12  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Pass directory with crash logs into CrashLogs
        https://bugs.webkit.org/show_bug.cgi?id=172033
        <rdar://problem/32157616>

        Reviewed by Daniel Bates.

        Refactor CrashLogs and the callers of CrashLogs so that the port object owns
        the location of crash logs.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.__init__): Pass mandatory crash_log_directory when constructing.
        (CrashLogs._find_newest_log_darwin): Use self._crash_log_directory instead of
        generating one.
        (CrashLogs._find_newest_log_win): Use self._crash_log_directory instead of
        self._results_directory.
        (CrashLogs._find_all_logs_darwin): Use self._crash_log_directory instead of
        generating one.
        (CrashLogs._log_directory_darwin): Moved to port.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py: Update tests since the path
        to the crash log is no longer owned by CrashLogs.
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py: Use the general
        directory for uploading crash logs. Note that crash logs are only supported on Mac
        and Windows.
        * Scripts/webkitpy/port/apple.py: Remove unneeded CrashLogs import.
        * Scripts/webkitpy/port/base.py:
        (Port.path_to_crash_logs): Unless ports declare otherwise, crash logs are assumed
        to be in the results directory.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.path_to_crash_logs): Moved from CrashLogs._log_directory_darwin.
        (DarwinPort._look_for_all_crash_logs_in_log_dir): Use port specific crash log path.
        (DarwinPort._get_crash_log): Ditto.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_crashlog_path): Test that the Darwin ports are correctly calculating
        the path to crash logs.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort.path_to_crash_logs): Currently, crash log retrieval is undefined for iOS.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_crashlog_path): Currently, crash log retrieval is undefined for iOS.
        * Scripts/webkitpy/port/ios_simulator.py: Remove unneeded CrashLogs import.
        * Scripts/webkitpy/port/mac.py: Ditto.
        * Scripts/webkitpy/port/test.py:
        (TestDriver.run_test): Use port specific crash log path when retrieving crash logs.
        * Scripts/webkitpy/port/win.py:
        (WinPort._get_crash_log): Ditto.
        * Scripts/webkitpy/tool/commands/queries.py:
        (execute): Construct a port object since this is the object which owns the path to crash logs.

2017-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/create-navigation-data after r216615.

        In r216615 the custom code for window.open() was removed. The generated code now correctly handles the optional
        URL parameter using the default value "about:blank" when not provided.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewCreateNavigationData):

2017-05-11  Youenn Fablet  <youenn@apple.com>

        Allow WPT server to serve specific WebKit test
        https://bugs.webkit.org/show_bug.cgi?id=171479

        Reviewed by Ryosuke Niwa.

        Adding a new mount point to WPT server.
        It points to LayoutTests/http/wpt folder and is triggered on "/WebKit" urls.

        Updating the webkitpy infrastructure to launch WPT server and do test url mapping for LayoutTests/wpt tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.__init__):
        (Manager._is_http_test):
        (Manager._needs_web_platform_test):
        (Manager._run_tests):
        (Manager._is_web_platform_test): Deleted.
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (build_routes):
        (main):
        * Scripts/webkitpy/port/driver.py:
        (Driver):
        (Driver.is_webkit_specific_web_platform_test):
        (Driver.test_to_uri):
        (Driver._command_from_driver_input):

2017-05-11  Brady Eidson  <beidson@apple.com>

        [WKWebsiteDataStore removeDataOfTypes:...] doesn't work for IndexedDB if the data store has a custom IDB path.
        <rdar://problem/30612463> and https://bugs.webkit.org/show_bug.cgi?id=171994

        Reviewed by Andy Estes.
        Informal review by Maureen Daum.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-05-11  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r216217): lldb_webkit.py no longer prints out a WTFString, StringImpl needs to handle StringImplShape change
        https://bugs.webkit.org/show_bug.cgi?id=171989

        Reviewed by Brian Burg.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.get_data8):
        (WTFStringImplProvider.get_data16):
        m_data8 and m_data16 are now part of the superclass StringImplShape
        instead of directly in StringImpl. So first get the shape by getting
        index 0, and the data properties are the same offset within that.

2017-05-11  Joseph Pecoraro  <pecoraro@apple.com>

        Remove Vibration API
        https://bugs.webkit.org/show_bug.cgi?id=171766

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/webkitperl/FeatureList.pm:

2017-05-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Add WPE release bots
        https://bugs.webkit.org/show_bug.cgi?id=171973

        Reviewed by Žan Doberšek.

        This adds a WPE Release Build bot (64-bit) and a WPE Release Test bot.
        It also adds a new WPE buildbot category.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (InstallWpeDependencies):
        (appendCustomBuildFlags):
        (Factory.__init__):
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2017-05-09  Sam Weinig  <sam@webkit.org>

        Remove support for legacy Notifications
        https://bugs.webkit.org/show_bug.cgi?id=171487

        Reviewed by Jon Lee.

        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::checkNotificationPermission):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Remove use and definition of ENABLE_LEGACY_NOTIFICATIONS.

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

        Remove user agent quirk for Slack
        https://bugs.webkit.org/show_bug.cgi?id=171869

        Reviewed by Carlos Garcia Campos.

        Remove the corresponding test.

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

2017-05-10  Commit Queue  <commit-queue@webkit.org>

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

        Broke the GTK+ build with Wayland enabled (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK] Bump GTK+ and its dependencies in jhbuild"
        https://bugs.webkit.org/show_bug.cgi?id=171918
        http://trac.webkit.org/changeset/216578

2017-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump GTK+ and its dependencies in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=171918

        Reviewed by Carlos Alberto Lopez Perez.

        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeGtkSettings):
        * gtk/jhbuild.modules:
        * gtk/patches/gtk+-configure-fix-detecting-CUPS-2.x.patch: Removed.
        * gtk/patches/librsvg-2.36.1-bump-up-config.guess-to-support-aarch64.patch: Removed.

2017-05-10  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Set CMake args in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=171436

        Reviewed by Per Arne Vollan.

        * Scripts/build-webkit:

2017-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        ImageDiff: Add CG implementation for new ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=170608

        Reviewed Alex Christensen.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/win/ImageDiffCairo.cpp: Removed.
        * DumpRenderTree/win/ImageDiffWin.cpp: Removed.
        * ImageDiff/CMakeLists.txt:
        * ImageDiff/Cairo.cmake:
        * ImageDiff/ImageDiff.cpp:
        (main):
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj:
        * ImageDiff/PlatformImage.cpp:
        * ImageDiff/PlatformImage.h:
        * ImageDiff/cairo/PlatformImageCairo.cpp:
        * ImageDiff/cg/ImageDiff.cpp: Removed.
        * ImageDiff/cg/PlatformImageCG.cpp: Added.
        (ImageDiff::PlatformImage::createFromStdin):
        (ImageDiff::PlatformImage::createFromDiffData):
        (ImageDiff::PlatformImage::PlatformImage):
        (ImageDiff::PlatformImage::~PlatformImage):
        (ImageDiff::PlatformImage::width):
        (ImageDiff::PlatformImage::height):
        (ImageDiff::PlatformImage::rowBytes):
        (ImageDiff::PlatformImage::hasAlpha):
        (ImageDiff::PlatformImage::pixels):
        (ImageDiff::PlatformImage::writeAsPNGToStdout):

2017-05-10  Zan Dobersek  <zdobersek@igalia.com>

        Enable FTL JIT by default on AArch64
        https://bugs.webkit.org/show_bug.cgi?id=144039

        Reviewed by Yusuke Suzuki.

        * Scripts/build-jsc: Enable the FTL JIT option by default on ARM64.
        * Scripts/run-jsc-stress-tests: Unmark the ARM64 and Linux combination
        as an unsupported FTL platform.
        * Scripts/webkitdirs.pm:
        (isARM64): Returns 1 if the determined architecture is 'arm64'.
        * Scripts/webkitperl/FeatureList.pm: Enable FTL_JIT and WEBASSEMBLY on ARM64.

2017-05-09  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Remove unneeded crash log retrieval, refactor Darwin crash retrieval
        https://bugs.webkit.org/show_bug.cgi?id=170857
        <rdar://problem/31635373>

        Reviewed by Aakash Jain.

        Since LayoutTestRelay has been removed, iOS Simulators and Macs can use the same
        code to search for crash logs.

        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort._get_crash_log): Moved from MacPort.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_get_crash_log): Moved from MacTest.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort._get_crash_log): Implement pass-through for iOS device, since iOS
        devices must search for crash-logs remotely.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._get_crash_log): Deleted.
        * Scripts/webkitpy/port/ios_simulator_unittest.py:
        (IOSSimulatorTest.test_get_crash_log): Deleted.
        * Scripts/webkitpy/port/mac.py:
        (MacPort._get_crash_log): Moved to DarwinPort
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_get_crash_log): Moved to DarwinTest.

2017-05-09  Jonathan Bedard  <jbedard@apple.com>

        build ImageDiff with host SDK from Make
        https://bugs.webkit.org/show_bug.cgi?id=171835

        Reviewed by Alexey Proskuryakov.

        ImageDiff should be built for the default SDK and default architecture when
        the SDKROOT is set to either iOS device or iOS simulator. Check the
        DO_NOT_BUILD_IMAGE_DIFF flag to skip the ImageDiff build.

        * ImageDiff/Makefile: Use Mac SDK when building for iOS Simulator or iOS device.
        * Makefile: Do not build ImageDiff if the DO_NOT_BUILD_IMAGE_DIFF flag is set.

2017-05-09  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, adding myself to contributors.json

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

2017-05-09  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: ImageDiff not building with make
        https://bugs.webkit.org/show_bug.cgi?id=171788

        Reviewed by Alex Christensen.

        * Makefile: Build ImageDiff for all platforms.

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

        [Win] ImageDiff isn't built since Bug 168945
        https://bugs.webkit.org/show_bug.cgi?id=171847

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Add 'ImageDiff' sub-directory to build if WIN32.
        * ImageDiff/ImageDiff.cpp: Include some header files to fix compilation errors.
        * ImageDiff/PlatformWin.cmake: Define USE_CAIRO if WinCairo port.

2017-05-09  Zan Dobersek  <zdobersek@igalia.com>

        Upstream the WPE port
        https://bugs.webkit.org/show_bug.cgi?id=171110

        Reviewed by Alex Christensen.

        webkit-dev thread:
        https://lists.webkit.org/pipermail/webkit-dev/2017-April/028923.html

        Add WPE support to various tooling scripts, TestWebKitAPI and WebKitTestRunner.
        In-file changes removed from this ChangeLog entry for brevity.

        * BuildSlaveSupport/built-product-archive:
        * BuildSlaveSupport/test-result-archive:
        * CMakeLists.txt:
        * ImageDiff/PlatformWPE.cmake: Added.
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/update-webkit-libs-jhbuild:
        * Scripts/update-webkitwpe-libs: Added.
        * Scripts/webkitdirs.pm:
        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        * Scripts/webkitpy/port/factory.py:
        * Scripts/webkitpy/port/wpe.py: Added.
        * TestWebKitAPI/PlatformWPE.cmake: Added.
        * TestWebKitAPI/wpe/InjectedBundleControllerWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * TestWebKitAPI/wpe/PlatformUtilitiesWPE.cpp: Added.
        * TestWebKitAPI/wpe/main.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityControllerWPE.cpp: Added.
        * WebKitTestRunner/InjectedBundle/wpe/AccessibilityUIElementWPE.cpp: Added.
        * WebKitTestRunner/InjectedBundle/wpe/ActivateFontsWPE.cpp: Added.
        * WebKitTestRunner/InjectedBundle/wpe/InjectedBundleWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * WebKitTestRunner/InjectedBundle/wpe/TestRunnerWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * WebKitTestRunner/PlatformWPE.cmake: Added.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp: Added.
        * WebKitTestRunner/wpe/HeadlessViewBackend.cpp: Added.
        * WebKitTestRunner/wpe/HeadlessViewBackend.h: Copied from Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h.
        * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp: Added.
        * WebKitTestRunner/wpe/TestControllerWPE.cpp: Added.
        * WebKitTestRunner/wpe/main.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * jhbuild/jhbuild-wrapper:
        * wpe/generate-inspector-gresource-manifest.py: Added.
        * wpe/jhbuild.modules: Added.
        * wpe/jhbuildrc: Added.
        * wpe/patches/cairo-egl-device-create-for-egl-surface.patch: Added.
        * wpe/patches/fontconfig-C-11-requires-a-space-between-literal-and-identifier.patch: Added.
        * wpe/patches/freetype6-2.4.11-truetype-font-height-fix.patch: Added.
        * wpe/patches/gdate-suppress-string-format-literal-warning.patch: Added.
        * wpe/patches/glib-warning-fix.patch: Added.
        * wpe/patches/gst-plugins-bad-0001-dtls-port-to-OpenSSL-1.1.0.patch: Added.
        * wpe/patches/gst-plugins-bad-0002-dtlscertificate-Fix-error-checking-in-RSA_generate_k.patch: Added.
        * wpe/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch: Added.
        * wpe/patches/gst-plugins-good-use-the-tfdt-decode-time.patch: Added.
        * wpe/patches/gstreamer-typefind-Only-push-a-CAPS-event-downstream-if-the-.patch: Added.

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

        Implement PlatformWebView::windowSnapshotImage and createBitmapContextFromWebView for iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=169421
        <rdar://problem/30950171>

        Reviewed by Tim Horton.

        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        (createBitmapContextFromWebView): Implement for IOSurface.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Use snapshot API for device.

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

        buildbot: Cleanup simulators after running tests
        https://bugs.webkit.org/show_bug.cgi?id=171679

        Reviewed by Aakash Jain.

        simctl is partitioned for each user. Since kill-old-processes
        is run as root, we need to specify the buildbot user when tearing
        down simulators between steps.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (KillOldProcesses): Pass buildbot user to kill-old-processes.
        * BuildSlaveSupport/kill-old-processes:
        (main): Specify the user for simctl if one has been provided.

2017-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r216179): [GTK] Script install-dependencies misses liborc
        https://bugs.webkit.org/show_bug.cgi?id=171681

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies:

2017-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitConsoleMessage/network-error after r215556.

        Glib uses now Unicode quotes in error messages.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp:
        (testWebKitConsoleMessageNetworkError):

2017-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/javascript-dialogs after r215404.

        Sending down+up keys is no longer enough to simulate a real user interaction after r215404, the key events now
        should be handled by the web process to be considered a user interaction. So, add an input to the HTML and send
        characters to the input. Also fix typo in the function name.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):

2017-05-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Cannot sign in with new Google sign-in page
        https://bugs.webkit.org/show_bug.cgi?id=171770

        Unreviewed. This just adds a test.

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

2017-05-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make rotation tests more reliable
        https://bugs.webkit.org/show_bug.cgi?id=171778

        Reviewed by Tim Horton.

        Switching between "safari-style" rotation and normal rotation left state on the WKWebView
        that would cause later viewport-sensitive tests to fail. The WKWebView would be left
        with override layout parameters, and an override orientation, and these caused viewport
        size to leak into later tests, and WebCore orientation to not get reset correctly.

        Also, WKWebView was unregistering for UIWindowDidRotateNotification notifications when
        an override orientation was set, and would never re-register, causing lost orientationchanged
        events.

        Fix by exposing WKWebView SPI to clear the various bits of overide state. Also don't unregister
        from the UIWindowDidRotateNotification notification; it's already ignored anyway if it fires.

        Also wait for a visible content rect update after resizing the WKWebVeiw between tests, to make sure
        the WebProcess is caught up before proceeding with the test.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[PlatformWebViewController viewWillTransitionToSize:withTransitionCoordinator:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        (WTR::TestController::platformConfigureViewForTest):

2017-05-06  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Buildfix after r216047
        https://bugs.webkit.org/show_bug.cgi?id=171769

        Unreviewed buildfix.

        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:

2017-05-05  Brady Eidson  <beidson@apple.com>

        API test WebKit2.WebsiteDataStoreCustomPaths is failing on ios-simulator.
        <rdar://problem/31977294> and https://bugs.webkit.org/show_bug.cgi?id=171513

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-05-05  Brian Burg  <bburg@apple.com>

        [Cocoa] Converting from WebCore::Cookie to NSHTTPCookie always marks cookies as session cookies
        https://bugs.webkit.org/show_bug.cgi?id=171748
        <rdar://problem/32027327>

        Reviewed by Michael Catanzaro.

        Remove temporary workaround now that the assertion failure is fixed.

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

2017-05-05  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test rotation in iOS WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=171755

        Reviewed by Tim Horton.

        Add to UIScriptController:
            void simulateRotation(DeviceOrientation orientation, object callback);
            void simulateRotationLikeSafari(DeviceOrientation orientation, object callback);

        The former just does a view resize, as a simple WKWebView app would do. The second does
        animation more like MobileSafari, using _begin/_endAnimatedResize. and associated override
        layout size and interface orientation. The two behaviors produce different resize and
        orientationchange events and sizes, and both need to be tested.

        Rotation is initiated by a call on UIDevice, and responded to by the root view controller,
        which is now a custom subclass (PlatformWebViewController).

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::simulateRotation):
        (WTR::UIScriptController::simulateRotationLikeSafari):
        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::simulateRotation):
        (WTR::UIScriptController::simulateRotationLikeSafari):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::toDeviceOrientation):
        (WTR::UIScriptController::simulateRotation):
        (WTR::UIScriptController::simulateRotationLikeSafari):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView dealloc]):
        (-[TestRunnerWKWebView _didEndRotation]):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[PlatformWebViewController viewWillTransitionToSize:withTransitionCoordinator:]):
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::toUIDeviceOrientation):
        (WTR::UIScriptController::simulateRotation):
        (WTR::UIScriptController::simulateRotationLikeSafari):
        (WTR::UIScriptController::platformClearAllCallbacks):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::simulateRotation):
        (WTR::UIScriptController::simulateRotationLikeSafari):

2017-05-05  Jonathan Bedard  <jbedard@apple.com>

        Use ImageDiff built by host SDK and remove ImageDiff from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=168945
        <rdar://problem/30745695>

        Reviewed by David Kilzer.

        Use ImageDiff built with the host machine's SDK and stop building ImageDiff with the
        target SDK. These two changes must happen simultaneously because some archives will
        clobber the ImageDiff from the host SDK with the ImageDiff from the target SDK.

        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig: Remove ImageDiff from project.
        * DumpRenderTree/PlatformWin.cmake: Remove ImageDiff. Note that the CMakeLists.txt in the
        tools directory still includes ImageDiff.
        * DumpRenderTree/cg/ImageDiffCG.cpp: Removed.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Removed.
        * Scripts/webkitpy/port/darwin.py: 
        (DarwinPort._path_to_image_diff): Return the correct path to ImageDiff when building
        locally or when running archives.
        * Scripts/webkitpy/port/image_diff.py:
        (IOSSimulatorImageDiffer): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.diff_image): Deleted.

2017-05-05  Brian Burg  <bburg@apple.com>

        API test WebKit2.WKHTTPCookieStore fails due to possible issue with handling non-session cookies
        https://bugs.webkit.org/show_bug.cgi?id=171748

        Unreviewed test gardening.

        The assertion failure will be investigated separately in order to avoid rolling out
        the fix for "secure" cookies. This assertion fails even without r216258 applied.

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

2017-05-05  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r216260.

        Breaks internal iOS testers

        Reverted changeset:

        "Use ImageDiff built by host SDK and remove ImageDiff from
        DumpRenderTree"
        https://bugs.webkit.org/show_bug.cgi?id=168945
        http://trac.webkit.org/changeset/216260

2017-05-05  Jonathan Bedard  <jbedard@apple.com>

        Use ImageDiff built by host SDK and remove ImageDiff from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=168945
        <rdar://problem/30745695>

        Reviewed by David Kilzer.

        Use ImageDiff built with the host machine's SDK and stop building ImageDiff with the
        target SDK. These two changes must happen simultaneously because some archives will
        clobber the ImageDiff from the host SDK with the ImageDiff from the target SDK.

        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig: Remove ImageDiff from project.
        * DumpRenderTree/PlatformWin.cmake: Remove ImageDiff. Note that the CMakeLists.txt in the
        tools directory still includes ImageDiff.
        * DumpRenderTree/cg/ImageDiffCG.cpp: Removed.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Removed.
        * Scripts/webkitpy/port/darwin.py: 
        (DarwinPort._path_to_image_diff): Return the correct path to ImageDiff when building
        locally or when running archives.
        * Scripts/webkitpy/port/image_diff.py:
        (IOSSimulatorImageDiffer): Deleted.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.diff_image): Deleted.

2017-05-05  Brian Burg  <bburg@apple.com>

        [Cocoa] Converting from WebCore::Cookie to NSHTTPCookie always marks cookies as secure
        https://bugs.webkit.org/show_bug.cgi?id=171700
        <rdar://problem/32017975>

        Reviewed by Brady Eidson.

        Fix a mistake in the test that should have caught this bug.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKHTTPCookieStore.mm:
        (TEST):
        The assertions that were meant to check round-tripping were actually checking
        the properties of the original cookie objects, not the round-tripped ones.
        This test now fails without the bugfix and passes when it is applied.

2017-05-05  Daniel Bates  <dabates@apple.com>

        Use EXPECT_EQ() when comparing strings in TestWebKitAPI tests
        https://bugs.webkit.org/show_bug.cgi?id=171698

        Reviewed by Darin Adler.

        We should use EXPECT_EQ() instead of EXPECT_TRUE() to compare WTF::String() objects
        so that we get pretty diff output when the actual string differs from the expected
        string as opposed to seeing a boolean result. The former makes makes it straightforward
        to diagnose a regression without reading the code for the test or instrumenting it to
        determine the actual string that was compared.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:
        (TestWebKitAPI::TEST_F):

2017-05-05  Chris Dumez  <cdumez@apple.com>

        Rename webProcessDidCrashWithReason callback to webProcessDidTerminate and stop calling webProcessDidCrash for client terminations
        https://bugs.webkit.org/show_bug.cgi?id=171624

        Reviewed by Dan Bernstein.

        Extend API test coverage to cover crashes in addition to terminations requested by the client.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ProcessDidTerminate.cpp: Renamed from Tools/TestWebKitAPI/Tests/WebKit2/ProcessDidCrashWithReason.cpp.
        (TestWebKitAPI::webProcessWasTerminatedByClient):
        (TestWebKitAPI::webProcessCrashed):
        (TestWebKitAPI::TEST):

2017-05-04  Mark Lam  <mark.lam@apple.com>

        DRT's setAudioResultCallback() and IDBRequest::setResult() need to acquire the JSLock.
        https://bugs.webkit.org/show_bug.cgi?id=171716
        <rdar://problem/30878027>

        Reviewed by Saam Barati.

        setAudioResultCallback() needs to acquire the JSLock before calling toJS() (which
        does JS conversion and therefore, potentially JS allocations) and accessing
        methods of internal JS data structures (which may do JS invocation, etc).

        * DumpRenderTree/TestRunner.cpp:
        (setAudioResultCallback):

2017-05-05  Jonathan Bedard  <jbedard@apple.com>

        buildbot: Cleanup simulators after running tests
        https://bugs.webkit.org/show_bug.cgi?id=171679
        <rdar://problem/31994361>

        Reviewed by Aakash Jain.

        We shutdown the simulator process between tests, but in some cases, this is not
        sufficient. Explicitly shutdown every booted simulator.

        * BuildSlaveSupport/kill-old-processes:
        (main): Shutdown all booted simulators.

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

        [GTK] Assertion failure in Inspector::RemoteInspector::setRemoteInspectorClient when disposing WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=171644

        Reviewed by Michael Catanzaro.

        Check that only one WebKitWebContext can have automation enabled.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutomationSession.cpp:
        (testAutomationSessionRequestSession):

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

        [GTK] TestController timeout source callback should return G_SOURCE_REMOVE
        https://bugs.webkit.org/show_bug.cgi?id=171724

        Reviewed by Michael Catanzaro.

        It's currently returning CONTINUE which causes it to be called again even if the run loop has been stopped.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::timeoutSource):

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

        Unreviewed. Fix wrong assert after r215176.

        Cairo surface received by computeMD5HashStringForCairoSurface() doesn't need to be ARGB32 since r215176, it
        could also be RGB24 when created from a web view snapshot.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::computeMD5HashStringForCairoSurface):

2017-05-04  Brian Burg  <bburg@apple.com>

        lldb_webkit.py should provide a type summary for WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=171670

        Reviewed by Jer Noble.

        Just print out the underlying string using the WTFString provider.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WebCoreURL_SummaryProvider):
        (WebCoreURLProvider):
        (WebCoreURLProvider.__init__):
        (WebCoreURLProvider.to_string):

2017-05-04  Commit Queue  <commit-queue@webkit.org>

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

        Multiple LayoutTests crashing in Document::page() (Requested
        by ap on #webkit).

        Reverted changeset:

        "Remove support for legacy Notifications"
        https://bugs.webkit.org/show_bug.cgi?id=171487
        http://trac.webkit.org/changeset/216206

2017-05-04  Mark Lam  <mark.lam@apple.com>

        API test WTF.StaticStringImpl crashing in TestWebKitAPI::WTF_StaticStringImpl_Test::TestBody() + 3188
        https://bugs.webkit.org/show_bug.cgi?id=171702

        Reviewed by Filip Pizlo.

        The test was supposed to use the MAKE_STATIC_STRING_IMPL macro.  I had previously
        changed it to instantiate an automatic StaticStringImpl (i.e. stack allocated) to
        confirm that the test will detect a regression.  Unfortunately, I forgot to
        change it back to using MAKE_STATIC_STRING_IMPL before I landed the test.
        This patch fixes that.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::neverDestroyedString):

2017-05-04  Ryan Haddad  <ryanhaddad@apple.com>

        Disable failing API test WebKit2.ResizeWithHiddenContentDoesNotHang.
        https://bugs.webkit.org/show_bug.cgi?id=170195

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (TEST):

2017-05-04  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Remove redundant macros that are set in the CMake config
        https://bugs.webkit.org/show_bug.cgi?id=171571

        Reviewed by Brent Fulgham.

        * DumpRenderTree/config.h:
        * MiniBrowser/win/stdafx.h:
        * TestWebKitAPI/config.h:

2017-05-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add testRunner.display() to force displaying the web page for testing
        https://bugs.webkit.org/show_bug.cgi?id=171694

        Reviewed by Simon Fraser.

        Unlike testRunner.displayAndTrackRepaints(), this new function forces 
        drawing the web page but without track repaints.

        * DumpRenderTree/TestRunner.cpp:
        (displayCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::display):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::display):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::display):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-05-04  Mark Lam  <mark.lam@apple.com>

        NeverDestroyed<String>(ASCIILiteral(...)) is not thread safe.
        https://bugs.webkit.org/show_bug.cgi?id=171586
        <rdar://problem/31873190>

        Reviewed by Yusuke Suzuki.

        API test for exercising StaticStringImpl and the MAKE_STATIC_STRING_IMPL macro.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::neverDestroyedString):
        (TestWebKitAPI::getNeverDestroyedStringAtStackDepth):
        (TestWebKitAPI::TEST):

2017-05-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add support for keeping the selection in a focused editable element when dragging begins
        https://bugs.webkit.org/show_bug.cgi?id=171585
        <rdar://problem/31544320>

        Reviewed by Beth Dakin and Zalan Bujtas.

        Adds 1 new unit test and tweaks existing tests to check that when first responder status is lost after beginning
        a drag while editing, content is still moved (and not copied) when performing data interaction on a different
        element. ContentEditableMoveParagraphs checks that content can be shifted within a single element via a move
        operation rather than a copy.

        See WebCore ChangeLog for more details.

        Tests:  DataInteractionSimulator.ContentEditableToContentEditable
                DataInteractionSimulator.ContentEditableToTextarea
                DataInteractionSimulator.ContentEditableMoveParagraphs
                DataInteractionSimulator.TextAreaToInput

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/two-paragraph-contenteditable.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator dealloc]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator waitForInputSession]):
        (-[DataInteractionSimulator _webView:focusShouldStartInputSession:]):
        (-[DataInteractionSimulator _webView:didStartInputSession:]):

2017-05-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rename TestRunner.display() to TestRunner::displayAndTrackRepaints()
        https://bugs.webkit.org/show_bug.cgi?id=171641

        Reviewed by Simon Fraser.

        The plan is to add back the TestRunner.display() which does the display
        only without track repaints.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/TestRunner.cpp:
        (displayAndTrackRepaintsCallback):
        (TestRunner::staticFunctions):
        (displayCallback): Deleted.
        (displayInvalidatedRegionCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (displayWebView):
        (displayAndTrackRepaintsWebView):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::displayAndTrackRepaints):
        (TestRunner::display): Deleted.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::displayAndTrackRepaints):
        (TestRunner::display): Deleted.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::displayAndTrackRepaints):
        (WTR::TestRunner::display): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        [ios-simulator] API test WebKit2.WebsiteDataStoreCustomPaths is failing.
        https://bugs.webkit.org/show_bug.cgi?id=171513

        Unreviewed gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST): Skip the failing parts of the test on iOS for now.

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

        Make ImageDiff stand-alone
        https://bugs.webkit.org/show_bug.cgi?id=168939

        Reviewed by David Kilzer.

        Create ImageDiff without dependencies on bmalloc and WTF so that it exists as a
        stand-alone project. Note that this change does not eliminate the ImageDiff inside
        the DumpRenderTree project.

        * ImageDiff/ImageDiff.xcodeproj: Added.
        * ImageDiff/ImageDiff.xcodeproj/project.pbxproj: Added.
        * ImageDiff/Makefile: Use ImageDiff project.
        * ImageDiff/PlatformMac.cmake: Added.
        * ImageDiff/PlatformWin.cmake: Added.
        * ImageDiff/cg: Added.
        * ImageDiff/cg/Configurations: Added.
        * ImageDiff/cg/Configurations/Base.xcconfig: Copied from Tools/DumpRenderTree/mac/Configurations/Base.xcconfig.
        * ImageDiff/cg/Configurations/DebugRelease.xcconfig: Copied from Tools/DumpRenderTree/mac/Configurations/DebugRelease.xcconfig.
        * ImageDiff/cg/Configurations/ImageDiff.xcconfig: Copied from Tools/DumpRenderTree/mac/Configurations/ImageDiff.xcconfig.
        * ImageDiff/cg/ImageDiff.cpp: Copied from Tools/DumpRenderTree/cg/ImageDiffCG.cpp.
        (createImageFromStdin): Stop using RetainPtr.
        (createDifferenceImage): Ditto.
        (main): Ditto.
        * Scripts/build-imagediff: Stop building WTF and bmalloc.

2017-05-04  Sam Weinig  <sam@webkit.org>

        Remove support for legacy Notifications
        https://bugs.webkit.org/show_bug.cgi?id=171487

        Reviewed by Jon Lee.

        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::checkNotificationPermission):
        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        Remove use and definition of ENABLE_LEGACY_NOTIFICATIONS.

2017-05-04  Andy Estes  <aestes@apple.com>

        Give +testwebkitapi_configurationWithTestPlugInClassName: a shorter name
        https://bugs.webkit.org/show_bug.cgi?id=171673

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLs.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleEditingDelegate.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleParameters.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresource.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        (configurationWithContentFilterSettings):
        (-[LazilyLoadPlatformFrameworksController init]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RemoteObjectRegistry.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptions.mm:
        (runTestWithWidth):
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentWorld.mm:
        (TEST):
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/WKWebViewConfigurationExtras.h:
        * TestWebKitAPI/WKWebViewConfigurationExtras.mm:
        (+[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:]):
        (+[WKWebViewConfiguration testwebkitapi_configurationWithTestPlugInClassName:]): Renamed to
        +_test_configurationWithTestPlugInClassName:

2017-05-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow host application to enable/disable media capture
        https://bugs.webkit.org/show_bug.cgi?id=171292
        <rdar://problem/31821492>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserMediaDisabled.mm: Added.
        (-[UserMediaMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[UserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (MediaCaptureDisabledTest::SetUp):
        (MediaCaptureDisabledTest::loadTestAndWaitForMessage):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/disableGetUserMedia.html: Added.

2017-05-04  Caio Lima  <ticaiolima@gmail.com>

        Unreviewed, Adding self to contributors.json

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

2017-05-04  Konstantin Tokarev  <annulen@yandex.ru>

        Fix compilation with ICU 59.1
        https://bugs.webkit.org/show_bug.cgi?id=171612

        Reviewed by Mark Lam.

        ICU 59.1 has broken source compatibility. Now it defines UChar as
        char16_t, which does not allow automatic type conversion from unsigned
        short in C++ code.

        * TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::tryToCompleteUIScriptForCurrentParentCallback):

2017-05-04  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an optional width parameter to -[WKWebProcessPlugInNodeHandle renderedImageWithOptions:]
        https://bugs.webkit.org/show_bug.cgi?id=171646
        <rdar://problem/30306321>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptions.mm:
        (runTestWithWidth):
        (TEST):
        (-[RenderedImageWithOptionsObject didRenderImageWithSize:]): Deleted.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptionsPlugIn.mm:
        (-[RenderedImageWithOptionsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[RenderedImageWithOptionsPlugIn webProcessPlugInBrowserContextController:didFinishLoadForFrame:]):
        (-[RenderedImageWithOptionsPlugIn renderImageWithWidth:completionHandler:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/RenderedImageWithOptionsProtocol.h:

2017-05-04  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Fontconfig 2.11.2 in JHBuild does not build with glibc 2.25+ or gperf 3.1+
        https://bugs.webkit.org/show_bug.cgi?id=171649

        Reviewed by Carlos Garcia Campos.

        Add two patches picked from the upstream repository to fix building of
        the Fontconfig module in JHBuild. Additionally, this needed a patch to
        add "autogen.sh" as it is not included in release tarballs. Also:
        building the module with srcdir!=builddir prevents "fcobjshash.gperf"
        being regenerated (which is needed) so this is disabled for the
        Fontconfig module.

        * gtk/jhbuild.modules:
        * gtk/patches/fontconfig-2.11.1-add-autogen.patch: Added.
        * gtk/patches/fontconfig-Avoid-conflicts-with-integer-width-macros-from-TS-18661-1-2014.patch: Added.
        * gtk/patches/fontconfig-Fix-the-build-issue-with-gperf-3.1.patch: Added.

2017-05-04  Commit Queue  <commit-queue@webkit.org>

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

        FTBFS for iOS due to missing WebPageProxy::stopMediaCapture()
        implementation. (Requested by ddkilzer on #webkit).

        Reverted changeset:

        "[MediaStream] Allow host application to enable/disable media
        capture"
        https://bugs.webkit.org/show_bug.cgi?id=171292
        http://trac.webkit.org/changeset/216172

2017-05-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump GStreamer version to 1.10.4 in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=171595

        Reviewed by Xabier Rodriguez-Calvar.

        * gtk/jhbuild.modules:
        * gtk/patches/gst-plugins-bad-0001-dtls-port-to-OpenSSL-1.1.0.patch: Removed.
        * gtk/patches/gst-plugins-bad-0002-dtlscertificate-Fix-error-checking-in-RSA_generate_k.patch: Removed.
        * gtk/patches/gst-plugins-good-0001-rtpbin-pipeline-gets-an-EOS-when-any-rtpsources-byes.patch: Removed.
        * gtk/patches/gst-plugins-good-0002-rtpbin-avoid-generating-errors-when-rtcp-messages-ar.patch: Removed.
        * gtk/patches/gst-plugins-good-0004-qtdemux-add-context-for-a-preferred-protection.patch:
        * gtk/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch: Removed.
        * gtk/patches/gst-plugins-good-use-the-tfdt-decode-time.patch: Removed.

2017-05-03  Saam Barati  <sbarati@apple.com>

        How we build polymorphic cases is wrong when making a call from Wasm
        https://bugs.webkit.org/show_bug.cgi?id=171527

        Reviewed by JF Bastien.

        * Scripts/run-jsc-stress-tests:

2017-05-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow host application to enable/disable media capture
        https://bugs.webkit.org/show_bug.cgi?id=171292
        <rdar://problem/31821492>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserMediaDisabled.mm: Added.
        (-[UserMediaMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[UserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (MediaCaptureDisabledTest::SetUp):
        (MediaCaptureDisabledTest::loadTestAndWaitForMessage):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/disableGetUserMedia.html: Added.

2017-05-03  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove all statistics for modifiedSince website data removals
        https://bugs.webkit.org/show_bug.cgi?id=171584
        <rdar://problem/24702576>

        Reviewed by Brent Fulgham.

        New function to call the clear function that takes a modifiedSince parameter.

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

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

        Unreviewed, rolling out r216160 and r216161.
        https://bugs.webkit.org/show_bug.cgi?id=171640

        These changes broke the iOS build. (Requested by mlewis13 on
        #webkit).

        Reverted changesets:

        "[MediaStream] Allow host application to enable/disable media
        capture"
        https://bugs.webkit.org/show_bug.cgi?id=171292
        http://trac.webkit.org/changeset/216160

        "[MediaStream] Allow host application to enable/disable media
        capture"
        https://bugs.webkit.org/show_bug.cgi?id=171292
        http://trac.webkit.org/changeset/216161

2017-05-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow host application to enable/disable media capture
        https://bugs.webkit.org/show_bug.cgi?id=171292
        <rdar://problem/31821492>

        Reviewed by Jer Noble.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/UserMediaDisabled.mm: Added.
        (-[UserMediaMessageHandler userContentController:didReceiveScriptMessage:]):
        (-[UserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]):
        (-[UserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]):
        (MediaCaptureDisabledTest::SetUp):
        (MediaCaptureDisabledTest::loadTestAndWaitForMessage):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/disableGetUserMedia.html: Added.

2017-04-26  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Add an api test for testing wrapping/unwrapping serialized crypto keys
        https://bugs.webkit.org/show_bug.cgi?id=171350
        <rdar://problem/28600836>

        Patched by Brady Eidson.

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/NavigationClientDefaultCrypto.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (TestWebKitAPI::decidePolicyForNavigationResponse):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/navigation-client-default-crypto.html: Added.

2017-05-03  Simon Fraser  <simon.fraser@apple.com>

        Have WKWebView call _updateVisibleContentRects for the current transaction if possible, rather than always delaying
        https://bugs.webkit.org/show_bug.cgi?id=171619
        https://bugs.webkit.org/show_bug.cgi?id=170195

        Reviewed by Tim Horton.

        Re-enable WebKit2.ResizeWithHiddenContentDoesNotHang.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:
        (TEST):

2017-05-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        YouTube user agent quirk breaks new YouTube
        https://bugs.webkit.org/show_bug.cgi?id=171603

        Reviewed by Carlos Garcia Campos.

        Remove the YouTube quirk test.

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

2017-05-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Async image decoding should be disabled for snapshots, printing and preview
        https://bugs.webkit.org/show_bug.cgi?id=171467

        Reviewed by Simon Fraser.

        Add a API test for snapshotting with large images. Ensure the images are
        drawn correctly which implies they should have been synchronously decoded.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/large-red-square-image.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewSnapshot.mm:
        (TEST):

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

        [WK2] Extend processDidCrash delegate to let the client know the reason for the crash
        https://bugs.webkit.org/show_bug.cgi?id=171565
        <rdar://problem/31204417>

        Reviewed by Sam Weinig.

        Add API test coverage.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ProcessDidCrashWithReason.cpp: Added.
        (TestWebKitAPI::didFinishNavigation):
        (TestWebKitAPI::didCrashWithReason):
        (TestWebKitAPI::TEST):

2017-05-02  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should also keep js-test-post[-async].js in sync
        <https://webkit.org/b/171568>

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/style/checker.py:
        (_NEVER_SKIPPED_JS_FILES): Add new list that just contains
        JavaScript files not to be skipped.
        (_NEVER_SKIPPED_FILES): Update to use _NEVER_SKIPPED_JS_FILES.
        (CheckerDispatcher._create_checker): Update to use
        _NEVER_SKIPPED_JS_FILES.

        * Scripts/webkitpy/style/checkers/jstest.py:
        (ALL_JS_TEST_FUNCTION_FILES): Rename from ALL_JS_TEST_FILES.
        This is the list of files containing functions that need to be
        kept in sync.
        (KEEP_JS_TEST_FILES_IN_SYNC): Change to list-of-lists format so
        we can keep more sets of files in sync between
        LayoutTests/resources and LayoutTests/http/tests/resources.
        (JSTestChecker.check): Update to use KEEP_JS_TEST_FILES_IN_SYNC
        as list of lists.  Update for ALL_JS_TEST_FUNCTION_FILES rename.
        (JSTestChecker.check_js_test_files): Add 'file_group' argument
        for list of files to check instead of using
        KEEP_JS_TEST_FILES_IN_SYNC.
        (JSTestChecker.check_js_test_functions): Update for
        ALL_JS_TEST_FUNCTION_FILES rename.

        * Scripts/webkitpy/style/checkers/jstest_unittest.py:
        (JSTestCheckerTestCase):
        (JSTestCheckerTestCase.test_map_functions_to_dict):
        - Add test case for map_functions_to_dict() in jstest.py.

2017-05-02  Aakash Jain  <aakash_jain@apple.com>

        ews should indicate in logs when it fails to fetch the attachment
        https://bugs.webkit.org/show_bug.cgi?id=171583

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla.fetch_attachment): Added log statement.

2017-05-02  David Kilzer  <ddkilzer@apple.com>

        Rolling out jstest_unittest.py so it can be reviewed

        Follow-up fix for:
        check-webkit-style should keep JavaScript test functions in sync
        <https://webkit.org/b/171424>

        * Scripts/webkitpy/style/checkers/jstest_unittest.py: Remove.

2017-05-02  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style should keep JavaScript test functions in sync
        <https://webkit.org/b/171424>

        Reviewed by Joseph Pecoraro.

        Add a new JSTestChecker for check-webkit-style that keeps these
        two files in sync:

            LayoutTests/http/tests/resources/js-test-pre.js
            LayoutTests/resources/js-test-pre.js

        And keeps implementations of shouldBe(), shouldNotBe(),
        shouldNotThrow(), and shouldThrow() in sync across multiple
        files (with the ability to add more functions later):

            JSTests/stress/resources/standalone-pre.js
            LayoutTests/http/tests/resources/js-test-pre.js
            LayoutTests/resources/js-test-pre.js
            LayoutTests/resources/js-test.js
            LayoutTests/resources/standalone-pre.js

        * Scripts/webkitpy/style/checker.py: Remove unused import.  Add
        import for JSTestChecker.
        (_NEVER_SKIPPED_FILES): Add array of file names that are never
        skipped regardless of other rules.
        (_all_categories): Add JSTestChecker categories.
        (CheckerDispatcher.should_skip_without_warning): Use
        _NEVER_SKIPPED_FILES.
        (CheckerDispatcher._create_checker): Return JSTestChecker for
        the files to check.

        * Scripts/webkitpy/style/checkers/jstest.py: Add.
        (map_functions_to_dict): Parse JavaScript source by splitting on
        /^function\s+/ regex.  This is good enough for the sanity checks
        to keep function implementations in sync.
        (strip_blank_lines_and_comments): Strips blank lines and lines
        with comments from the end of a chunk of text representing a
        function.
        (JSTestChecker): New checker.
        (JSTestChecker.__init__):
        (JSTestChecker.check):
        (JSTestChecker.check_js_test_files): Keeps whole files in sync.
        (JSTestChecker.check_js_test_functions): Keeps individual
        functions in sync.

        * Scripts/webkitpy/style/checkers/jstest_unittest.py: Add test
        case.
        (JSTestTestCase):
        (JSTestTestCase.test_map_functions_to_dict):

2017-05-02  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Update implementation of aria-orientation
        https://bugs.webkit.org/show_bug.cgi?id=171166

        Reviewed by Chris Fleizach.

        Return "AXUnknownOrientation" when ATK_STATE_VERTICAL and ATK_STATE_HORIZONTAL
        are both absent from the state set. Before we were returning an empty string
        which was not consistent with what the Mac port does, thus making shared tests
        harder.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::orientation):

2017-05-01  David Kilzer  <ddkilzer@apple.com>

        Stop using sprintf() in JavaScriptCore debugger
        <https://webkit.org/b/171512>

        Reviewed by Keith Miller.

        * Scripts/webkitpy/style/checker.py:
        (_PATH_RULES_SPECIFIER): Ignore some formatting checkers since
        Source/JavaScriptCore/disassembler/udis86/ is generated code.

2017-05-01  Timothy Horton  <timothy_horton@apple.com>

        Expose viewport-fit instead of clip-to-safe-area
        https://bugs.webkit.org/show_bug.cgi?id=171503
        <rdar://problem/31918249>

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setSafeAreaInsets):
        (WTR::UIScriptController::setObscuredInsets): Deleted.
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setSafeAreaInsets):
        (WTR::UIScriptController::setObscuredInsets): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
        * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
        (-[TestRunnerWKWebView setOverrideSafeAreaInsets:]):
        (-[TestRunnerWKWebView _safeAreaInsetsForFrame:inSuperview:]):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIKitSPI.h:
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setSafeAreaInsets):
        (WTR::UIScriptController::setObscuredInsets): Deleted.
        Expose a safe area inset setter instead of obscured insets.

2017-05-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the build on a new internal SDK

        Replace usages of NSItemProviderRepresentationVisibilityAll with
        UIItemProviderRepresentationOptionsVisibilityAll.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (-[UIItemProvider registerDataRepresentationForTypeIdentifier:withData:]):
        (TestWebKitAPI::TEST):

2017-05-01  David Kilzer  <ddkilzer@apple.com>

        [Cocoa] Replace uses of [get…Class() alloc] in TestWebKitAPI
        <https://webkit.org/b/171493>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm:
        Remove UIKit soft-link since TestWebKitAPI links to
        UIKit.framework.
        (TestWebKitAPI::WebKit1_AudioSessionCategoryIOS_Test): Use
        UIWindow and UIWebView classes directly.
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        Remove UIKit soft-link since TestWebKitAPI links to
        UIKit.framework.
        (RequiresUserActionForPlaybackTest::createWebView): Use UIWindow
        class directly.

2017-05-01  Brady Eidson  <beidson@apple.com>

        Update names in WKURLSchemeHandler/WKURLSchemeHandlerTask APIs.
        <rdar://problem/31824838> and https://bugs.webkit.org/show_bug.cgi?id=171508

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
        (-[SchemeHandler webView:startURLSchemeTask:]):
        (-[SchemeHandler webView:stopURLSchemeTask:]):
        (-[SchemeHandler webView:startTask:]): Deleted.
        (-[SchemeHandler webView:stopTask:]): Deleted.

2017-05-01  Jason Marcell  <jmarcell@apple.com>

        Add a new function for getting the Git hash for a pure git directory.
        https://bugs.webkit.org/show_bug.cgi?id=171450

        Reviewed by David Kilzer.

        * Scripts/VCSUtils.pm:
        (gitHashForDirectory):

2017-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Expose values of aria-rowcount, aria-colcount, aria-rowindex, aria-colindex, aria-rowspan, and aria-colspan as object attributes
        https://bugs.webkit.org/show_bug.cgi?id=171496

        Reviewed by Chris Fleizach.

        Add new attribute names so that the values of the object attributes can be tested.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::numberAttributeValue):

2017-05-01  Beth Dakin  <bdakin@apple.com>

        On-screen panel for candidate bar is in the wrong place when the caret is at the 
        start of a paragraph
        https://bugs.webkit.org/show_bug.cgi?id=171453
        -and corresponding-
        rdar://problem/29779764

        Reviewed by Tim Horton.

        This test hard-codes the y-coordinate for the expected candidateRect. 
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKWebViewCandidateTests.mm:
        (TEST):

2017-05-01  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: Enable sprintf(), strcat(), strcpy() and printf() format checks
        <https://webkit.org/b/171494>

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_language): Change categories for certain checkers from
        'runtime/printf' to 'security/printf' so they are no longer
        filtered.
        (CppChecker.categories): Add 'security/printf'.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_insecure_string_operations): Add new test for
        sprintf(), strcat() and strcpy().
        (CppStyleTest.test_format_strings): Update test results for new
        'security/printf' category use.

2017-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [GTK] Add support to query for aria-current
        https://bugs.webkit.org/show_bug.cgi?id=149016

        Reviewed by Chris Fleizach.

        Implement support for "AXARIACurrent" string attribute value.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2017-05-01  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r216000): test-webkitpy fails after adding new soft-linked class checker

        Unreviewed.

        Follow-up fix for:
        [Cocoa] Have check-webkit-style advise against use of [get…Class() alloc]
        https://bugs.webkit.org/show_bug.cgi?id=171486

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_soft_link_class_alloc): Use (\w+) instead of ([^\s]+) to
        match and capture the function name.  The latter also mistakenly
        matches C-preprocessor directives.
        (CppChecker.categories): Add 'runtime/soft-linked-alloc', which
        is a requirement for the CppChecker class.

2017-05-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add automation session API
        https://bugs.webkit.org/show_bug.cgi?id=171428

        Reviewed by Carlos Alberto Lopez Perez.

        Add an automation mode to MiniBrowser using the new API and add a unit test too.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewTitleChanged):
        (webViewDecidePolicy):
        (newTabCallback):
        (openPrivateWindow):
        (browserWindowFinalize):
        (browser_window_init):
        (browser_window_get_or_create_web_view_for_automation):
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserTab):
        (createWebViewForAutomationCallback):
        (automationStartedCallback):
        (main):
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutomationSession.cpp: Added.
        (testAutomationSessionRequestSession):
        (beforeAll):
        (afterAll):

2017-04-30  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Have check-webkit-style advise against use of [get…Class() alloc]
        https://bugs.webkit.org/show_bug.cgi?id=171486

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_soft_link_class_alloc): Added. Looks for [get…Class() alloc] and suggests
          alloc…Instance() instead.
        (check_style): Invoke new check.

2017-04-30  Brady Eidson  <beidson@apple.com>

        More fixing after r215991
        https://bugs.webkit.org/show_bug.cgi?id=171483

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-04-30  Brady Eidson  <beidson@apple.com>

        Updates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
        <rdar://problem/31906397> and https://bugs.webkit.org/show_bug.cgi?id=171483

        Reviewed by Geoff Garen (and kind of Andy Estes).

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-04-30  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Implement support for aria-autocomplete
        https://bugs.webkit.org/show_bug.cgi?id=171167

        Reviewed by Chris Fleizach.

        Add "AXSupportsAutoCompletion" attribute so the presence of
        ATK_STATE_SUPPORTS_AUTOCOMPLETION can be tested.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::boolAttributeValue):

2017-04-30  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] ARIA treegrid role should be exposed as ATK_ROLE_TREE_TABLE; not ATK_ROLE_TABLE
        https://bugs.webkit.org/show_bug.cgi?id=171170

        Reviewed by Chris Fleizach.

        Add "AXInterfaceTable" attribute to test which elements implement AtkTable.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::boolAttributeValue):

2017-04-30  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Emit object:state-changed:busy event when aria-busy value changes
        https://bugs.webkit.org/show_bug.cgi?id=171181

        Reviewed by Chris Fleizach.

        Add handler for AXElementBusyChanged notifications.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:

2017-04-29  Aakash Jain  <aakash_jain@apple.com>

        Use PEP8 style guide for raising exceptions in webkitpy.
        https://bugs.webkit.org/show_bug.cgi?id=171439

        Reviewed by Daniel Bates.

        As per https://www.python.org/dev/peps/pep-0008/
        "When raising an exception in Python 2, use raise ValueError('message') 
        instead of the older form raise ValueError, 'message'"

        * Scripts/webkitpy/common/net/irc/ircbot.py: Using new style for raising exceptions.
        * Scripts/webkitpy/common/thread/messagepump.py: Same.
        * Scripts/webkitpy/tool/bot/queueengine.py: Same.
        * Scripts/webkitpy/tool/commands/queues.py: Same.
        * Scripts/webkitpy/tool/commands/stepsequence.py: Same.
        * Scripts/webkitpy/tool/multicommandtool.py: Same.
        * Scripts/webkitpy/tool/steps/abstractstep.py: Same.

2017-04-28  Simon Fraser  <simon.fraser@apple.com>

        Add system trace points for Document::updateTouchEventRegions()
        https://bugs.webkit.org/show_bug.cgi?id=171470
        rdar://problem/31901239

        Reviewed by Tim Horton.

        Add trace markers for updateTouchEventRegions.

        * Tracing/SystemTracePoints.plist:

2017-04-28  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add apple_additions to webkitpy to insert Internal tools
        https://bugs.webkit.org/show_bug.cgi?id=170461
        <rdar://problem/31433077>

        Reviewed by Daniel Bates.

        Allow a package to be pulled in by run-webkit-tests which provides an interface to
        run layout tests on an iOS device.  If this package is not available, throw an
        exception when attempting to run layout tests on an iOS device.

        * Scripts/webkitpy/port/config.py:
        (apple_additions): Import apple_additions package.
        * Scripts/webkitpy/port/device.py:
        (Device.install_dylibs): Pass a directory with all the frameworks and dylibs to be
        installed on a device.
        (Device.prepare_for_testing): Pass a list of ports to forward from the device to the
        host, the bundle id of the app to be used for testing and a path to the layout test
        directory to be mounted on the device.
        (Device.finished_testing):
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add apple_additions platform options if apple_additions exists.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.setup_test_run): Install dylibs and frameworks on the device, pass ports
        to forward, the bundle ID of the testing app and the layout tests directory to
        each device.
        * Scripts/webkitpy/port/ios_device.py:
        (IOSDevicePort):
        (IOSDevicePort.default_child_processes): Query apple_additions for the number of child
        processes to be run.
        (IOSDevicePort.using_multiple_devices): Always assume multiple devices are used. When
        a single device is used, it is still accessed through an array.
        (IOSDevicePort._device_for_worker_number_map): Query apple_additions for the device
        for worker number map.
        (IOSDevicePort._driver_class): Query apple_additions for the test driver.
        (IOSDevicePort.determine_full_port_name): Use class variable over hard-coded string.
        (IOSDevicePort.check_for_leaks): No implementation for iOSDevicePort.
        (IOSDevicePort.look_for_new_crash_logs): Ditto.
        (IOSDevicePort.look_for_new_samples): Ditto.
        (IOSDevicePort.sample_process): Ditto.
        (IOSDevicePort._build_driver_flags): Use class variable over hard-coded string.
        (IOSDevicePort._create_devices): Check that devices are available for testing and check
        that we have enough devices for each child process.
        (IOSDevicePort.clean_up_test_run): Have apple_additions preform any needed clean up.
        * Scripts/webkitpy/port/ios_device_unittest.py:
        (IOSDeviceTest.test_operating_system):
        (IOSDeviceTest.test_spindump): Override method from DarwinTest.
        (IOSDeviceTest.test_sample_process): Ditto.
        (IOSDeviceTest.test_sample_process_exception): Ditto.

2017-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix and re-enable data interaction unit tests
        https://bugs.webkit.org/show_bug.cgi?id=171446
        <rdar://problem/31820646>

        Reviewed by Tim Horton.

        Enables all DataInteractionTests, and adjusts file upload tests to no longer write to a temporary file before
        registering with the UIItemProvider, and instead just register data directly via
        -registerDataRepresentationForTypeIdentifier:visibility:loadHandler:.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        (temporaryURLForDataInteractionFileLoad): Deleted.
        (cleanUpDataInteractionTemporaryPath): Deleted.
        (-[UIItemProvider registerFileRepresentationForTypeIdentifier:withData:filename:]): Deleted.
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:

2017-04-28  Brady Eidson  <beidson@apple.com>

        Teach the DatabaseProcess to be fully SessionID aware
        https://bugs.webkit.org/show_bug.cgi?id=171451

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

2017-04-28  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed follow-up to r214705.

        shut.copytree will fail if given a file as an argument instead of a directory.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.copy_to_base_host): Use copytree when source is a directory and copyfile
        when source is a file.
        (FileSystem.copy_from_base_host): Ditto.

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Update DOMTokenList.replace() to match the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=171388

        Reviewed by Alex Christensen.

        Add API test coverage for new Vector API.

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

2017-04-28  Jonathan Bedard  <jbedard@apple.com>

        WebKitTestRunner/DumpRenderTree prevent device from sleeping
        https://bugs.webkit.org/show_bug.cgi?id=170731

        Reviewed by Alex Christensen.

        While running layout tests on a device, the device should not be put asleep.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Disable idle timer.
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize): Ditto.

2017-04-28  Brady Eidson  <beidson@apple.com>

        Start of support for multiple WebsiteDataStore/SessionIDs per process
        https://bugs.webkit.org/show_bug.cgi?id=171422

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-04-28  Youenn Fablet  <youenn@apple.com>

        Adding a runtime flag specific to MediaDevices
        https://bugs.webkit.org/show_bug.cgi?id=171433

        Reviewed by Geoffrey Garen.

        Updating WTR and DRT as peer connection and media stream runtime flags are enabled by default.
        Setting media devices runtime flag to true for WTR and DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/Tests/WebKit2/EnumerateMediaDevices.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setMediaDevicesEnabled):
        (WTR::TestRunner::setMediaStreamEnabled): Deleted.
        (WTR::TestRunner::setPeerConnectionEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues):

2017-04-28  Dean Jackson  <dino@apple.com>

        [WebGPU] Label MTLCommandQueues with a prefix for internal telemetry
        https://bugs.webkit.org/show_bug.cgi?id=171441
        <rdar://problem/31826915>

        Reviewed by Tim Horton.

        Add an API test for GPUCommandQueue, exercising creation
        and setting the label.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm: Added.
        (TestWebKitAPI::TEST_F):

2017-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] aria-modal="true" should be exposed via ATK_STATE_MODAL
        https://bugs.webkit.org/show_bug.cgi?id=171188

        Reviewed by Chris Fleizach.

        Add "AXModal" attribute string so that we can test the state's exposure.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::boolAttributeValue):

2017-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] GridCellRole should implement AtkTableCell (regression?)
        https://bugs.webkit.org/show_bug.cgi?id=171179

        Reviewed by Chris Fleizach.

        Add new "AXInterfaceTableCell" attribute so that we can test whether or
        not there is an implementation of AtkTableCell (i.e. without risking false
        negatives from bugs in the interface's implementation).

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::boolAttributeValue):

2017-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move UUID from WebCore/platform to WTF
        https://bugs.webkit.org/show_bug.cgi?id=171372

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/TestController.cpp:

2017-04-27  Alex Christensen  <achristensen@webkit.org>

        Add stub SPI for setting cookie storage path on _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=171399

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
        (TEST):

2017-04-27  Ryan Haddad  <ryanhaddad@apple.com>

        Disable flaky API test WKWebView.SetOverrideContentSecurityPolicyWithEmptyStringForPageWithCSP.
        https://bugs.webkit.org/show_bug.cgi?id=167914

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/OverrideContentSecurityPolicy.mm:
        (TEST):

2017-04-26  Saam Barati  <sbarati@apple.com>

        Add some more testing modes for Wasm tests now that we have tier up
        https://bugs.webkit.org/show_bug.cgi?id=171360

        Reviewed by Keith Miller.

        Lets enable the FTL on all Wasm tests. Let's also run each
        test with and without CJIT.

        * Scripts/run-jsc-stress-tests:

2017-04-26  Aakash Jain  <aakash_jain@apple.com>

        JSC EWS Patch Relevance skips few JSC scripts
        https://bugs.webkit.org/show_bug.cgi?id=171351

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/tool/steps/checkpatchrelevance.py:
        (CheckPatchRelevance): Added few jsc related scripts.

2017-04-26  Youenn Fablet  <youenn@apple.com>

        Test importer should delete obsolete files based on w3c-import.log
        https://bugs.webkit.org/show_bug.cgi?id=171348

        Reviewed by Chris Dumez.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.do_import): Removing dangling -expected.txt files in regular import mode.
        (TestImporter.remove_deleted_files): Fixing according w3c-import.log current format.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (test_remove_obsolete_content):

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

        REGRESSION (r213926): We're sometimes trying to start WebKitTestRunner without proper DYLD variables
        <rdar://problem/31816459>

        Unreviewed infrastructure fix.

        Some of our iOS Simulator bots are slow and will register crashes due to an incorrect
        DYLD_FRAMEWORK_PATH when installing an app.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.setup_test_run): Pass DYLD_FRAMEWORK_PATH to app on install.

2017-04-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Elements with a defined, non-false value for aria-current should expose ATK_STATE_ACTIVE
        https://bugs.webkit.org/show_bug.cgi?id=171163

        Reviewed by Chris Fleizach.

        Add support for state-change notifications for ATK_STATE_ACTIVE.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:

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

        webkitpy: Teardown iOS Simulators on exit if managed Simulators are still running
        https://bugs.webkit.org/show_bug.cgi?id=171293

        Reviewed by Aakash Jain.

        We should make an effort to teardown simulators which we booted even when an exception is
        thrown while booting. Make some IOSSimulatorPort functions into static methods and register
        one of these functions to be run at exit to ensure any devices webkitpy is managing gets
        torn down.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Rely on exit handlers to teardown, not exceptions.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._teardown_managed_simulators): Function run on exit which will kill all
        iOS simulators and teardown and managed devices.
        (IOSSimulatorPort._create_simulators): Register teardown function.
        (IOSSimulatorPort.clean_up_test_run): Move device teardown to _teardown_managed_simulators.
        (IOSSimulatorPort._remove_device): Deleted.

2017-04-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Implement support for new ARIA 1.1 values of aria-haspopup
        https://bugs.webkit.org/show_bug.cgi?id=171164

        Reviewed by Chris Fleizach.

        hasPopup() should return whether or not ATK_STATE_HAS_POPUP is in the
        AtkStateSet; not what is found in the AtkObject's attributes.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::hasPopup):

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

        Encoded filename should be decoded for WKContentExtension.identifier
        https://bugs.webkit.org/show_bug.cgi?id=171316

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKContentExtensionStore.mm: Copied from Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm.
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm: Removed.

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

        REGRESSION(206450): WebKit2PlatformMouseEvent m_modifierFlags not set
        https://bugs.webkit.org/show_bug.cgi?id=171297
        <rdar://problem/31530719>

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/EventModifiers.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::mouseDidMoveOverElement):
        (TestWebKitAPI::setClients):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        (TestWebKitAPI::PlatformWebView::simulateRightClick):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):

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

        Unreviewed, temporarily disable the data interaction unit tests.

        The API around data interaction will change significantly in the near future, and
        these tests will begin to fail. These will be reenabled once the bots are on an SDK
        that supports the updated data interaction API.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:

2017-04-25  Brent Fulgham  <bfulgham@apple.com>

        Limit allowed size of document.title to avoid locking WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=165113
        <rdar://problem/28324389>

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/Tests/WebKit2/LimitTitleSize.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2/set-long-title.html: Added.
        * TestWebKitAPI/Tests/mac/LimitTitleSize.mm: Added.

2017-04-25  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Introduce shorter time-to-live for cookie partition whitelisting
        https://bugs.webkit.org/show_bug.cgi?id=171295
        <rdar://problem/31823818>

        Reviewed by Brent Fulgham.

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

2017-04-25  Tim Horton  <timothy_horton@apple.com>

        Try to fix the WKTR build after r215758

        * Scripts/build-webkittestrunner:

2017-04-25  Daniel Bates  <dabates@apple.com>

        Remove more EFL code
        https://bugs.webkit.org/show_bug.cgi?id=171288

        Rubber-stamped by Simon Fraser.

        The EFL port is no longer in the WebKit OpenSource Project repository. Remove more code
        that was part of the EFL port.

        * CMakeLists.txt:
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:
        * ImageDiff/efl/ImageDiff.cpp: Removed.
        * MiniBrowser/efl/CMakeLists.txt: Removed.
        * MiniBrowser/efl/main.c: Removed.
        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/run-minibrowser:
        * Scripts/update-webkit-libs-jhbuild:
        * Scripts/update-webkitefl-libs: Removed.
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (extractNonMacOSHostConfiguration):
        (executableProductDir):
        (builtDylibPathForName):
        (determinePortName):
        (launcherPath):
        (launcherName):
        (getJhbuildPath):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeProjectOrExit):
        (isEfl): Deleted.
        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitperl/webkitdirs_unittest/extractNonMacOSHostConfiguration.pl:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (GtkWK2Port.run_webkit_tests_command):
        (EflWK2Port): Deleted.
        (EflWK2Port.build_webkit_command): Deleted.
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/port/efl.py: Removed.
        * Scripts/webkitpy/port/efl_unittest.py: Removed.
        * Scripts/webkitpy/port/factory.py:
        (platform_options):
        (PortFactory):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):
        (TestRebaselineExpectations.test_rebaseline_expectations):
        * TestWebKitAPI/PlatformEfl.cmake: Removed.
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks_Bundle.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewScrollTo.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/efl/scrollTo.html: Removed.
        * TestWebKitAPI/efl/InjectedBundleController.cpp: Removed.
        * TestWebKitAPI/efl/PlatformUtilities.cpp: Removed.
        * TestWebKitAPI/efl/PlatformWebView.cpp: Removed.
        * TestWebKitAPI/efl/main.cpp: Removed.
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::setNotificationFunctionCallback):
        (WTR::AccessibilityNotificationHandler::removeAccessibilityNotificationHandler):
        * WebKitTestRunner/InjectedBundle/efl/ActivateFontsEfl.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.h: Removed.
        * WebKitTestRunner/InjectedBundle/efl/InjectedBundleEfl.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp: Removed.
        * WebKitTestRunner/PlatformEfl.cmake: Removed.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp: Removed.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp: Removed.
        * WebKitTestRunner/efl/TestControllerEfl.cpp: Removed.
        * WebKitTestRunner/efl/main.cpp: Removed.
        * efl/install-dependencies: Removed.
        * efl/jhbuild-optional.modules: Removed.
        * efl/jhbuild.modules: Removed.
        * efl/jhbuildrc: Removed.
        * efl/patches/evas-fix-build-with-giflib5.patch: Removed.
        * efl/patches/fontconfig-C-11-requires-a-space-between-literal-and-identifier.patch: Removed.
        * efl/patches/gst-libav.patch: Removed.
        * efl/patches/gst-plugins-base-rtp-rtcpbuffer-fix-typo-in-enum.patch: Removed.
        * efl/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch: Removed.
        * efl/patches/gst-plugins-good-use-the-tfdt-decode-time.patch: Removed.
        * efl/patches/openwebrtc-gst-plugins-clang-warning-fix.patch: Removed.
        * gtk/manifest.txt.in:

2017-04-25  Daniel Bates  <dabates@apple.com>

        [Cocoa][Win] Enable of X-Content-Type-Options: nosniff header
        https://bugs.webkit.org/show_bug.cgi?id=136452
        <rdar://problem/23412620>

        Reviewed by Brent Fulgham.

        Enable X-Content-Type-Options: nosniff on Mac, iOS and Windows platforms.

        * Scripts/webkitperl/FeatureList.pm: Also do not enable nosniff on EFL
        as the EFL port is no longer in the WebKit OpenSource repository.
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-04-25  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r215739 and r215740.

        * gtk/jhbuild.modules: List the libgcrypt patch that has to be applied.
        This (and r215740) was supposed to land in r215739, but I managed to
        specify the previous version of the patch.

2017-04-25  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r215739.

        * gtk/patches/libgcrypt-use-only-dev-urandom-for-testing.patch: Add the missing
        libgcrypt patch that enforces the use of /dev/urandom.

2017-04-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add libgpg-error, libgcrypt libraries to JHBuild
        https://bugs.webkit.org/show_bug.cgi?id=171270

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Add the latest stable versions of libgpg-error and libgcrypt
        libraries to the webkitgtk-testing-dependencies metamodule. This will help people
        that use systems that don't yet provide libgcrypt >= 1.7.0.

2017-04-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Improve an unit test for the JHBuild wrapper.
        https://bugs.webkit.org/show_bug.cgi?id=168036

        Unreviewed follow-up patch after r215727

        * Scripts/webkitpy/port/base_unittest.py:
        (test_jhbuild_wrapper): Improve the unit test by ensuring the directory
        wasn't there before calling MockFileSystem.maybe_make_directory(), and
        also that it exists after calling it.

2017-04-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] ImageDiff should be run by jhbuild-wrapper in case of using jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=168036

        Reviewed by Michael Catanzaro.

        Call ImageDiff with the JHBuild wrapper if we should use it.
        Also add some unit tests for the JHBuild wrapper feature.

        * Scripts/webkitpy/port/base.py:
        (Port._should_use_jhbuild): Use self._filesystem instead of os.path to allow mock testing.
        * Scripts/webkitpy/port/base_unittest.py:
        (test_jhbuild_wrapper): Add a test for port._should_use_jhbuild()
        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._start): The actual fix, use the wrapper if we should.
        * Scripts/webkitpy/port/image_diff_unittest.py: Removed. This two tests are now integrated in port_testcase
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase):
        (PortTestCase.test_diff_image): Test the command with wrapper and without it.
        (PortTestCase.test_diff_image_passed): Moved from image_diff_unittest.py
        (PortTestCase.test_diff_image_failed): Moved from image_diff_unittest.py

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

        Support reading NSURL titles from the pasteboard when performing data interaction
        https://bugs.webkit.org/show_bug.cgi?id=171156
        <rdar://problem/31356937>

        Reviewed by Tim Horton.

        Adds a new unit test, DataInteractionTests.ExternalSourceTitledNSURL.

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

2017-04-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Respect fidelity order when reading web content from item providers
        https://bugs.webkit.org/show_bug.cgi?id=171155
        <rdar://problem/31356937>

        Reviewed by Tim Horton.

        Adds a new unit test (DataInteractionTests.RespectsExternalSourceFidelityRankings). See WebCore ChangeLog for
        more details.

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

2017-04-24  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        SyntaxError fix after r215702.
        https://bugs.webkit.org/show_bug.cgi?id=168944

        Unreviewed "build" fix.

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

2017-04-24  Jonathan Bedard  <jbedard@apple.com>

        Package ImageDiff built with host SDK
        https://bugs.webkit.org/show_bug.cgi?id=168944
        <rdar://problem/30745642>

        Reviewed by David Kilzer.

        iOS Simulator and iOS device should archive the ImageDiff built for the host
        machine.

        * BuildSlaveSupport/built-product-archive:
        (determineWebKitBuildDirectories): Add _hostBuildDirectory for iOS.
        (archiveBuiltProduct): Archive Mac products for iOS so that ImageDiff is included.

2017-04-24  Keith Miller  <keith_miller@apple.com>

        ThreadMessage API tests failing on release bots
        https://bugs.webkit.org/show_bug.cgi?id=171246

        Reviewed by Saam Barati.

        Need to make sure that C++ doesn't optimize away our spin loop.

        * TestWebKitAPI/Tests/WTF/ThreadMessages.cpp:
        (runThreadMessageTest):
        (TEST):

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

        Reduce copies and allocations in SharedBuffer::append
        https://bugs.webkit.org/show_bug.cgi?id=170956

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        (TestWebKitAPI::TEST_F):

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

        [GTK] Switch to use ENABLE_REMOTE_INSPECTOR instead of ENABLE_INSPECTOR_SERVER for the remote inspector
        https://bugs.webkit.org/show_bug.cgi?id=166680

        Reviewed by Michael Catanzaro.

        Update remote inspector unit tests.

        * TestWebKitAPI/Tests/WebKit2Gtk/InspectorTestServer.cpp:
        (main):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (connectToInspectorServer):
        (waitUntilInspectorServerIsReady):
        (startTestServer):
        (testInspectorServerPageList):
        (beforeAll):

2017-04-23  Youenn Fablet  <youenn@apple.com>

        Add a tool to update expected.txt files from EWS bot results
        https://bugs.webkit.org/show_bug.cgi?id=169538

        Reviewed by Ryosuke Niwa.

        This script updates expected-txt files from bugzilla posted EWS results.
        It uses mac-wk2 as the generic baseline and adds platform-specific results if other ports
        have results different from the generic baseline.

        * Scripts/update-test-expectations-from-bugzilla: Added.
        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater.py: Added.
        * Scripts/webkitpy/common/net/bugzilla/test_expectation_updater_unittest.py: Added.
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py: Adding helper routines.

2017-04-22  Youenn Fablet  <youenn@apple.com>

        Add an option to import tip-of-tree WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=171152

        Reviewed by Joseph Pecoraro.

        Adding a '-t' option to import tip of tree WPT tests.
        Updating importer based on the fact that csswg-test is no longer a thing. 

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.download_tests):
        * Scripts/webkitpy/w3c/test_importer.py:
        (configure_logging):
        (TestImporter.do_import):
        (TestImporter.write_import_log):

2017-04-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        File inputs only accept UTI types that can be inserted into contenteditable areas when dropping
        https://bugs.webkit.org/show_bug.cgi?id=171177
        <rdar://problem/31765379>

        Reviewed by Andy Estes.

        Tests uploading a JSON file to a file input.

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

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

        Support writing link titles to the pasteboard when beginning data interaction on a link
        https://bugs.webkit.org/show_bug.cgi?id=171154
        <rdar://problem/31356937>

        Reviewed by Andy Estes.

        Augments an existing unit test, DataInteractionTests.LinkToInput, to also check that the fetching the NSURL from
        the source UIItemProvider generated by performing data interaction results in an NSURL with the _title attribute
        matching the title of the link.

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

2017-04-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r215608.

        Hundreds of test failures on GTK bot

        Reverted changeset:

        "Reduce copies and allocations in SharedBuffer::append"
        https://bugs.webkit.org/show_bug.cgi?id=170956
        http://trac.webkit.org/changeset/215608

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

        [WK2] Add delegate hooks for overriding unhanded data interaction operations
        https://bugs.webkit.org/show_bug.cgi?id=171005
        <rdar://problem/31669646>

        Reviewed by Tim Horton.

        Adds a new API test checking that normal WebKit behavior when vending updated data interaction operations may
        be overridden, resulting in a data interaction operation being performed when it otherwise would not have. Also
        adjusts for some changes in WebKit2 (See WebKit2 ChangeLog for more details).

        New API test:
        DataInteractionTests.OverrideDataInteractionOperation

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (-[UIItemProvider registerDataRepresentationForTypeIdentifier:withData:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator dealloc]):
        (-[DataInteractionSimulator _webView:dataInteractionOperationWasHandled:forSession:itemProviders:]):
        (-[DataInteractionSimulator _webView:willUpdateDataInteractionOperationToOperation:forSession:]):
        (-[DataInteractionSimulator webViewDidPerformDataInteractionControllerOperation:]): Deleted.

2017-04-21  Ryan Haddad  <ryanhaddad@apple.com>

        Temporarily disable two flaky API tests.

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (TEST):

2017-04-21  Keith Miller  <keith_miller@apple.com>

        Unreviewed, rolling out r215634.

        underlying build issues should have been fixed

        Reverted changeset:

        "Unreviewed, rolling out r215620 and r215623."
        https://bugs.webkit.org/show_bug.cgi?id=171139
        http://trac.webkit.org/changeset/215634

2017-04-21  Aakash Jain  <aakash_jain@apple.com>

        Bubbles on dashboard doesn't turn red for test262 failures
        https://bugs.webkit.org/show_bug.cgi?id=171129

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js: Added test262-test.

2017-04-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r215620 and r215623.
        https://bugs.webkit.org/show_bug.cgi?id=171139

        broke arm64 build (Requested by keith_miller on #webkit).

        Reverted changesets:

        "Add signaling API"
        https://bugs.webkit.org/show_bug.cgi?id=170976
        http://trac.webkit.org/changeset/215620

        "Unreviewed, fix Cloop build."
        http://trac.webkit.org/changeset/215623

2017-04-20  Keith Miller  <keith_miller@apple.com>

        Add signaling API
        https://bugs.webkit.org/show_bug.cgi?id=170976

        Reviewed by Filip Pizlo.

        Add tests for ThreadMessages.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/ThreadMessages.cpp: Added.
        (runThreadMessageTest):
        (TEST):

2017-04-20  Conrad Shultz  <conrad_shultz@apple.com>

        commit-log-editor should respect the git editor if one is set
        https://bugs.webkit.org/show_bug.cgi?id=171085
        <rdar://problem/31745506>

        Reviewed by Daniel Bates.

        * Scripts/commit-log-editor:
        If Git is available, consider GIT_LOG_EDITOR and any global Git editor preference when
        deciding which editor to present. We examine the global editor preference since that may be
        set automatically by installers or third-party tools.

2017-04-21  Alex Christensen  <achristensen@webkit.org>

        Reduce copies and allocations in SharedBuffer::append
        https://bugs.webkit.org/show_bug.cgi?id=170956

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        (TestWebKitAPI::TEST_F):

2017-04-20  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Define FORWARDING_HEADERS_DIR in WebKitFS and use it everywhere
        https://bugs.webkit.org/show_bug.cgi?id=171071

        Reviewed by Michael Catanzaro.

        "${DERIVED_SOURCES_DIR}/ForwardingHeaders" path occurs very often in the
        build system files. GTK-specifc FORWARDING_HEADERS_DIR variable should
        be available for all ports.

        * DumpRenderTree/PlatformMac.cmake:
        * MiniBrowser/mac/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        * TestWebKitAPI/PlatformJSCOnly.cmake:
        * TestWebKitAPI/PlatformMac.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * WebKitTestRunner/PlatformMac.cmake:

2017-04-20  Joseph Pecoraro  <pecoraro@apple.com>

        Test262 bot does not go red with failures
        https://bugs.webkit.org/show_bug.cgi?id=171044

        Reviewed by Aakash Jain.

        The piped output of run-jsc-stress-tests is different from
        its non-piped output. Switch to parsing the correct output.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunTest262Tests.countFailures):
        Just count the number of lines that start with "FAIL:".

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunTest262TestsTest.test_no_regressions_output):
        (test_failure_output):
        (test_failures_output):
        Updated tests with new sample output produced partially from bots and
        locally. In cases of failure the return code of run-jsc-stress-tests
        is still 0 so update the expected return code in the tests.

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

        WebContent process becomes unresponsive after returning nil from async version of -webView:createWebViewWithConfiguration:...
        <rdar://problem/31739023> and https://bugs.webkit.org/show_bug.cgi?id=171090

        Reviewed by Andy Estes.

        * TestWebKitAPI/Tests/WebKit2/open-and-close-window.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm:
        (resetToConsistentState):
        (-[OpenAndCloseWindowUIDelegate webViewDidClose:]):
        (-[OpenAndCloseWindowUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (TEST):
        (-[OpenAndCloseWindowUIDelegateAsync _webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:completionHandler:]):

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

        [ios-simulator] PositionInformationTests API tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=171089

        Rubber-stamped by Tim Horton.

        Addresses failures observed in the new position information tests added in r215573 by only running them if the
        DATA_INTERACTION feature flag is enabled.

        * TestWebKitAPI/Tests/ios/PositionInformationTests.mm:

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

        Skip WebKit2.OpenAndCloseWindowAsyncCallbackException for now.
        https://bugs.webkit.org/show_bug.cgi?id=171083

        Unreviewed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm:

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

        Add CompletionHandlerCallChecker to SPI added in r215545.
        https://bugs.webkit.org/show_bug.cgi?id=171067

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm:
        (TEST):
        (-[OpenAndCloseWindowUIDelegateAsync _webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:completionHandler:]):

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

        [WK2] -[WKContentView doAfterPositionInformationUpdate:atPosition:] should be robust against synchronous reentrancy
        https://bugs.webkit.org/show_bug.cgi?id=170922
        <rdar://problem/31634990>

        Reviewed by Tim Horton.

        Adds six new unit tests for retrieving interaction information at a given position in the UI process. See
        WebKit2 ChangeLog for more details.

        * TestWebKitAPI/Tests/ios/PositionInformationTests.mm:
        (-[_WKDraggableElementInfo expectToBeLink:image:atPoint:]):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::expectCGPointsToBeEqual): Deleted.

2017-04-20  Xan Lopez  <xlopez@igalia.com>

        [GTK][jhbuild] Update glib and glib-networking to the latest stable versions
        https://bugs.webkit.org/show_bug.cgi?id=170942

        Reviewed by Carlos Garcia Campos.

        Update glib and glib-networking to the last stable releases. This
        is needed to get working TLS certificate verification at all at
        least in Fedora.

        * gtk/install-dependencies: add libmount, needed for newer glib.
        * gtk/jhbuild.modules: update glib and glib-networking to last
        stable releases.

2017-04-20  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Implement support for DPub ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=170679

        Reviewed by Chris Fleizach.

        Add DPub ARIA landmark roles to roleToString().

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2017-04-19  Joseph Pecoraro  <pecoraro@apple.com>

        Remove WebKitTestRunner code for enabling features that are already enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=171033

        Reviewed by Ryosuke Niwa.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShadowDOMEnabled): Deleted.
        (WTR::TestRunner::setCustomElementsEnabled): Deleted.
        (WTR::TestRunner::setFetchAPIEnabled): Deleted.
        (WTR::TestRunner::setDownloadAttributeEnabled): Deleted.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2017-04-19  Youenn Fablet  <youenn@apple.com>

        [Mac] Allow customizing H264 encoder
        https://bugs.webkit.org/show_bug.cgi?id=170829

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Add asynchronous equivalent of -[<WKUIDelegate> webView:createWebViewWithConfiguration:...].
        <rdar://problem/30699851> and https://bugs.webkit.org/show_bug.cgi?id=171018

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm:
        (TEST):
        (-[OpenAndCloseWindowUIDelegateAsync webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
        (-[OpenAndCloseWindowUIDelegateAsync _webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:completionHandler:]):

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

        REGRESSION (r213168): An extra Web Content process is spun up on launch and is never closed.
        <rdar://problem/30774839> and https://bugs.webkit.org/show_bug.cgi?id=171002

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/InitialWarmedProcessUsed.mm: Added.

2017-04-19  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Run tests with ResourceLoadStatistics enabled
        https://bugs.webkit.org/show_bug.cgi?id=170952

        Reviewed by Andy Estes.

        Excercise the load statistics code during tests.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2017-04-19  Bill Ming  <mbbill@gmail.com>

        close_fds should be set to False on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=170838

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._should_close_fds):

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

        Stop using strcpy() in WebKit::EnvironmentUtilities::stripValuesEndingWithString()
        <https://webkit.org/b/170994>
        <rdar://problem/29889932>

        Reviewed by Brent Fulgham.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        (EnvironmentUtilitiesTest.cpp): Add to TestWebKitAPILibrary
        target.
        * TestWebKitAPI/Tests/WebKit2/EnvironmentUtilitiesTest.cpp: Add.
        (TestWebKitAPI::strip): Helper method to set/get environment
        variable for testing.
        (TestWebKitAPI::WebKit2_StripValuesEndingWithString_Test): Add
        tests.

2017-04-19  JF Bastien  <jfbastien@apple.com>

        WebAssembly: add script which can import GCC torture tests
        https://bugs.webkit.org/show_bug.cgi?id=170740

        Reviewed by Saam Barati.

        Add a script which can import the GCC torture tests and create a
        yaml file to run them as part of jsc's WebAssembly regression
        tests.

        This patch doesn't commit the tests themselves because they're
        licensed differently.

        * Scripts/run-jsc-stress-tests: learn how to run
        Emscripten-generated .js+.wasm files, and do a bit of cleanup on
        the options because WebAssembly is enabled by default.
        * Scripts/update-wasm-gcc-torture.py: Added.
        (parse_args):
        (update_lkgr):
        (untar_torture):
        (list_js_files):
        (waterfall_known_failures):
        (create_yaml):
        (main):

2017-04-19  Youenn Fablet  <youenn@apple.com>

        Import web-platform-tests/tools
        https://bugs.webkit.org/show_bug.cgi?id=170718

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_launcher.py:
        (main):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer.ports_to_forward):
        (WebPlatformTestServer._prepare_config):
        (WebPlatformTestServer._install_modules): Deleted.
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_html_files_for_templated_js_tests):

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

        [WK2] Add infrastructure and unit tests for file uploads using data interaction
        https://bugs.webkit.org/show_bug.cgi?id=170903
        <rdar://problem/31314689>

        Reviewed by Tim Horton.

        Adds 5 new unit tests covering different cases of uploading files through data interaction, as well as
        infrastructure for simulating UIItemProviders that load file data. Makes a few adjustments to the
        DataInteractionSimulator along the way, detailed in the per-method annotations below. See
        <https://bugs.webkit.org/show_bug.cgi?id=170880> for more details about the change this patch is testing.

        New tests:
        DataInteractionTests.ExternalSourceImageToFileInput
        DataInteractionTests.ExternalSourceHTMLToUploadArea
        DataInteractionTests.ExternalSourceImageAndHTMLToSingleFileInput
        DataInteractionTests.ExternalSourceImageAndHTMLToMultipleFileInput
        DataInteractionTests.ExternalSourceImageAndHTMLToUploadArea

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (testIconImage):
        (temporaryURLForDataInteractionFileLoad):
        (cleanUpDataInteractionTemporaryPath):

        Creates and tears down temporary file directories for testing data interaction.

        (-[UIItemProvider registerFileRepresentationForTypeIdentifier:withData:filename:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:

        Make necessary changes to be able to test what happens when data interaction ends over an element with no
        operation. Previously, we would always simulate performing a data interaction operation when ending the
        simulation, but this causes us to wait indefinitely for a data operation response to arrive in the UI process.
        Instead, we need to note whether or not the content view is allowing data interaction, and only perform an
        operation and wait for the -didPerform call if the operation was allowed. Otherwise, we immediately transition
        the phase to Cancelled and end the run.

        (-[DataInteractionSimulator _resetSimulatedState]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator _concludeDataInteractionAndPerformOperationIfNecessary]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator externalItemProviders]):
        (-[DataInteractionSimulator setExternalItemProviders:]):

        Previously, we hard-coded DataInteractionSimulator to only support a single external item provider. In order to
        test the scenario where multiple files are being "data interacted" into a file-type input, we generalize this to
        take multiple item providers.

        (-[DataInteractionSimulator externalItemProvider]): Deleted.
        (-[DataInteractionSimulator setExternalItemProvider:]): Deleted.

2017-04-18  John Wilander  <wilander@apple.com>

        Make WebCore::topPrivatelyControlledDomain() return "localhost" for localhost
        https://bugs.webkit.org/show_bug.cgi?id=170798
        <rdar://problem/31595108>

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/mac/PublicSuffix.mm:
        (TestWebKitAPI::TEST_F):
            Added two negative test cases for WebCore::isPublicSuffix().
            Added test cases with mixed case domains, localhost, and
            non-ASCII for WebCore::topPrivatelyControlledDomain().

2017-04-18  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r215346 and 215361.

        The problem these changes were fixing was addressed in
        <https://trac.webkit.org/changeset/215416/webkit>.

        Reverted changesets:

        "webkitpy: Ignore previously launched pid when system is under
        stress"
        https://bugs.webkit.org/show_bug.cgi?id=170741
        http://trac.webkit.org/changeset/215346
        http://trac.webkit.org/changeset/215361

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

        Allow Variants of RetainPtrs
        https://bugs.webkit.org/show_bug.cgi?id=170923

        Reviewed by Tim Horton and Sam Weinig.

        * TestWebKitAPI/Tests/WTF/Variant.cpp:
        (TestWebKitAPI::TEST):
        Add tests for RetainPtr and for another class with overloaded operator& to verify such classes can
        work in Variants.

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

        Make WKHTTPCookieStore public.
        <rdar://problem/31024691> and https://bugs.webkit.org/show_bug.cgi?id=170920

        Reviewed by Geoffrey Garen.

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

2017-04-17  Youenn Fablet  <youenn@apple.com>

        Disable outdated WritableStream API
        https://bugs.webkit.org/show_bug.cgi?id=170749
        <rdar://problem/31446233>

        Reviewed by Alex Christensen.

        Replacing READABLE_STREAM_API, READABLE_BYTE_STREAM_API and WRITABLE_STREAM_API compilation flag by:
        - A STREAMS_API compilation flag.
        - A ReadableByteStreamAPI and WritableStreamAPI runtime flags, turned off except for RWT and DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (enableExperimentalFeatures):
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setFetchAPIEnabled):
        (WTR::TestRunner::setWritableStreamAPIEnabled):
        (WTR::TestRunner::setReadableByteStreamAPIEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

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

        Provide a viewport parameter to disable clipping to the safe area
        https://bugs.webkit.org/show_bug.cgi?id=170766
        <rdar://problem/31564634>

        Reviewed by Beth Dakin.

        * DumpRenderTree/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setObscuredInsets):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::setObscuredInsets):
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformResetStateToConsistentValues):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::setObscuredInsets):
        Add a UIScriptController mechanism to install obscured insets
        on the web view.

2017-04-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Move isNullFunctionPointer down into WTF
        https://bugs.webkit.org/show_bug.cgi?id=170892

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Configurations/TestWTF.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-iOS-v2.tbd: Added.
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-iOS.tbd: Added.
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-macOS-v2.tbd: Added.
        * TestWebKitAPI/Tests/WTF/darwin/libTestWTFAlwaysMissing-macOS.tbd: Added.

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

        webkitpy: Correct poll when killing ServerProcess

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._kill): A polled process equaling 'None' means the process is running.

2017-04-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Enable getUserMedia API test
        https://bugs.webkit.org/show_bug.cgi?id=170901
        <rdar://problem/31656594>

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add test.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack):
        (TestWebKitAPI::TEST): Enable capture with mock devices.
        * TestWebKitAPI/Tests/WebKit2/getUserMedia.html: Update to mediaDevices.getUserMedia

2017-04-17  Xan Lopez  <xan@igalia.com>

        [GTK] Update the Fedora dependencies for WebKitGTK+
        https://bugs.webkit.org/show_bug.cgi?id=170590

        Reviewed by Carlos Alberto Lopez Perez.

        * gtk/install-dependencies: add a bunch of modules necessary to
        get a proper set of GStreamer codecs for WebRTC.

2017-04-16  Sam Weinig  <sam@webkit.org>

        [WebIDL] Switch IDLAttributes.txt over to a more structured format so that more information can be added for each attribute
        https://bugs.webkit.org/show_bug.cgi?id=170843

        Reviewed by Chris Dumez.

        * DumpRenderTree/DerivedSources.make:
        * WebKitTestRunner/DerivedSources.make:
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_from_idl):
        Pass IDLAttributes.json, as it is now mandatory to have one.

2017-04-14  Mark Lam  <mark.lam@apple.com>

        Update architectures in xcconfig files.
        https://bugs.webkit.org/show_bug.cgi?id=170867
        <rdar://problem/31628104>

        Reviewed by Joseph Pecoraro.

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

2017-04-14  Brady Eidson  <beidson@apple.com>

        Fix basic WKURLSchemeHandler bugs.
        <rdar://problem/30647559> and https://bugs.webkit.org/show_bug.cgi?id=170862

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm: Added.
        (-[SchemeHandler initWithData:mimeType:]):
        (-[SchemeHandler dealloc]):
        (-[SchemeHandler webView:startTask:]):
        (-[SchemeHandler webView:stopTask:]):
        (TEST):

2017-04-14  Bill Ming  <mbbill@gmail.com>

        webkit-patch failed to detect git repository
        https://bugs.webkit.org/show_bug.cgi?id=170859

        Reviewed by Daniel Bates.

        Windows cmd does not accept single quoted path. So, using
        double quotes here will provide better platform compatibility.

        * Scripts/VCSUtils.pm:
        (isGitDirectory):
        (isGitSVNDirectory):
        (svnRevisionForDirectory):
        (svnInfoForPath):

2017-04-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215374.

        This change causes LayoutTests to exit early with crashes on
        Sierra.

        Reverted changeset:

        "webkitpy: Ignore previously launched pid when system is under
        stress"
        https://bugs.webkit.org/show_bug.cgi?id=170741
        http://trac.webkit.org/changeset/215374

2017-04-14  Dan Bernstein  <mitz@apple.com>

        [ios-simulator] API test WebKit2.AdditionalReadAccessAllowedURLs is failing
        https://bugs.webkit.org/show_bug.cgi?id=170856

        Disabled the newly-added test in the Simulator, which doesn’t enforce sandboxing.

        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLs.mm:

2017-04-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore previously launched pid when system is under stress
        https://bugs.webkit.org/show_bug.cgi?id=170741

        Unreviewed infrastructure fix.

        Drivers are destroyed between failing layout tests, which is not necessary and
        prevents the work-around implemented in https://bugs.webkit.org/show_bug.cgi?id=170741.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._kill_driver): Do not destroy drivers when they are stopped.
        * Scripts/webkitpy/port/driver.py:
        (Driver.stop): Reset driver values set in initializer.

2017-04-14  Andy Estes  <aestes@apple.com>

        [ios-simulator] API test WebKit2.WKWebProcessPlugInRangeHandle timing out
        https://bugs.webkit.org/show_bug.cgi?id=167594

        Re-enabled this API test now that webkit.org/b/161967 is fixed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm:
        (TEST):

2017-04-14  Andy Estes  <aestes@apple.com>

        [ios-simulator] API test WebKit2.DataDetectionReferenceDate timing out
        https://bugs.webkit.org/show_bug.cgi?id=161967

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (TEST): Re-enabled WebKit2.DataDetectionReferenceDate.

2017-04-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215363.

        This change causes LayoutTests to exit early with crashes.

        Reverted changeset:

        "webkitpy: Ignore previously launched pid when system is under
        stress"
        https://bugs.webkit.org/show_bug.cgi?id=170741
        http://trac.webkit.org/changeset/215363

2017-04-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore previously launched pid when system is under stress
        https://bugs.webkit.org/show_bug.cgi?id=170741

        Unreviewed infrastructure fix.

        Drivers are destroyed between failing layout tests, which is not necessary and
        prevents the work-around implemented in https://bugs.webkit.org/show_bug.cgi?id=170741.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._kill_driver): Do not destroy drivers when they are stopped.

2017-04-14  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Ignore previously launched pid when system is under stress
        https://bugs.webkit.org/show_bug.cgi?id=170741

        Unreviewed infrastructure fix.

        Server processes are destroyed in the driver, which is not necessary and prevents
        the work-around implemented in https://bugs.webkit.org/show_bug.cgi?id=170741.

        * Scripts/webkitpy/port/driver.py:
        (Driver.run_test): Do not destroy server process.
        (Driver._start): Only create the server process if it is None.
        (Driver.stop): Do not destroy server process.

2017-04-13  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Allow clients to specify in _WKProcessPoolConfiguration additional directory sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=170387

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLs.mm: Added.
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLsPlugin.mm: Added.
        (-[AdditionalReadAccessAllowedURLsPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[AdditionalReadAccessAllowedURLsPlugIn dealloc]):
        (-[AdditionalReadAccessAllowedURLsPlugIn readStringFromURL:completionHandler:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/AdditionalReadAccessAllowedURLsProtocol.h: Added.

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

        webkitpy: Ignore previously launched pid when system is under stress
        https://bugs.webkit.org/show_bug.cgi?id=170741

        Reviewed by David Kilzer.

        We have seen cases where xcrun simctl launch will return a pid of a previous
        process and the process will appear to be running even though it is crashing.
        Ensure that the PID that simulator_process is receiving is not the pid of the
        previously run process.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Check to make sure we aren't receiving an old PID.

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

        Build ImageDiff with host SDK
        https://bugs.webkit.org/show_bug.cgi?id=168531

        Reviewed by David Kilzer.

        ImageDiff should be built and run with the host SDK, not the target SDK.
        Build ImageDiff twice, once for the target SDK and once for the host
        as an intermediate step towards building for only the host SDK.

        * ImageDiff/Makefile: Added.
        * Makefile: Add ImageDiff to list of targets.
        * Scripts/build-imagediff: Build bmalloc and WTF for the host.
        * Scripts/build-webkit: Build ImageDiff for host.
        * Scripts/webkitdirs.pm: Export extractNonMacOSHostConfiguration.
        (extractNonMacOSHostConfiguration): Remove non-host configuration data from the array.
        * Scripts/webkitperl/webkitdirs_unittest/extractNonMacOSHostConfiguration.pl: Added.
        * Scripts/webkitpy/port/base.py:
        (Port.check_build): Attempt to build image diff if not found.
        (Port.check_image_diff): Enable logging flag.
        (Port._build_image_diff): Allow webkitpy to build image-diff during testing.

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Clean up SharedBuffer public functions
        https://bugs.webkit.org/show_bug.cgi?id=170795

        Reviewed by Andreas Kling.

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

2017-04-12  Dan Bernstein  <mitz@apple.com>

        [Mac] Future-proof .xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=170802

        Reviewed by Tim Horton.

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

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Remove unused SharedBuffer::wrapCFDataArray
        https://bugs.webkit.org/show_bug.cgi?id=170794

        Reviewed by Brady Eidson.

        * TestWebKitAPI/Tests/WebCore/cocoa/SharedBuffer.mm:
        (TestWebKitAPI::TEST_F):

2017-04-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Introduce Thread class and use RefPtr<Thread> and align Windows Threading implementation semantics to Pthread one
        https://bugs.webkit.org/show_bug.cgi?id=170502

        Reviewed by Mark Lam.

        Mechanical change. Use Thread:: APIs.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (testThreadIdentifierMap):
        * TestWebKitAPI/Tests/WTF/Condition.cpp:
        * TestWebKitAPI/Tests/WTF/Lock.cpp:
        (TestWebKitAPI::runLockTest):
        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Modernize vector adoption
        https://bugs.webkit.org/show_bug.cgi?id=170758

        Reviewed by Geoffrey Garen.

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

2017-04-11  Dean Jackson  <dino@apple.com>

        Disable outdated WritableStream API
        https://bugs.webkit.org/show_bug.cgi?id=170749
        <rdar://problem/31446233>

        Reviewed by Tim Horton.

        The API we implement is no longer accurate. Disable it until we
        are compatible with the new specification

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-04-11  David Quesada  <david_quesada@apple.com>

        Add SPI for handling geolocation authorization requests
        https://bugs.webkit.org/show_bug.cgi?id=170362
        rdar://problem/17508627

        Reviewed by Alex Christensen.

        Add API tests for the new WKUIDelegate SPI for allowing or denying websites permission
        to use geolocation. Adopt the new WKProcessPool._coreLocationProvider property to
        provide a stub object to simulate the various configurations of geolocation permissions:
        1. The app doesn't have permission to use geolocation.
        2. The app is allowed to use geolocation, but the UI delegate denies the web view permission.
        3. The app is allowed to use geolocation, and the UI delegate allows the web view permission.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Geolocation.mm: Added.
        (-[TestCoreLocationProvider setListener:]):
        (-[TestCoreLocationProvider requestGeolocationAuthorization]):
        (-[TestCoreLocationProvider start]):
        (-[TestCoreLocationProvider stop]):
        (-[TestCoreLocationProvider setEnableHighAccuracy:]):
        (expectException):
        (-[GeolocationTestUIDelegate _webView:requestGeolocationAuthorizationForURL:frame:decisionHandler:]):
        (-[GeolocationTestUIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/GeolocationGetCurrentPositionResult.html: Added.

2017-04-10  Matt Rajca  <mrajca@apple.com>

        Change autoplay state to "prevented" when media is paused due to restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=170686

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/autoplay-muted-with-controls.html: Added test.
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (TEST):

2017-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore][JSC] ResourceUsageData.{timeOfNextEdenCollection,timeOfNextFullCollection} should be MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=170725

        Reviewed by Sam Weinig.

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

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

        Revert r215217
        https://bugs.webkit.org/show_bug.cgi?id=170703

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=170703

        Reviewed by Youenn Fablet.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-04-10  Kocsen Chung  <kocsen_chung@apple.com>

        Have parseRevisionProperty use default repo name as the Buildbot key.
        https://bugs.webkit.org/show_bug.cgi?id=170696

        Reviewed by Daniel Bates.

        Previously, we needed to set a key and a fallbackKey when addressing
        Buildbot data for Internal. That is no longer necessary as we can make a safe assumption
        that the repo name maps exactly to that key for every repository other
        than WebKit.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        Set `key = repositoryName` and only use fallback keys when dealing with WebKit.

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

        Add test262 JavaScriptCore tests to dashboard
        https://bugs.webkit.org/show_bug.cgi?id=170711

        Rubber-stamped by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): Added test262 JSC tests to dashboard.

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

        REGRESSION(r195479) First main resource load in new WebProcess bypasses content extensions
        https://bugs.webkit.org/show_bug.cgi?id=170707
        <rdar://problem/27788755>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:
        (-[ContentExtensionDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
        (-[ContentBlockingWebsitePoliciesDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[ContentBlockingWebsitePoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):

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

        Add API to get available content extension identifiers in a WKContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=170093

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:
        (TEST_F):

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

        Refactor DataInteractionTests.UnresponsivePageDoesNotHangUI to not check against a fixed time interval
        https://bugs.webkit.org/show_bug.cgi?id=170658

        Reviewed by Tim Horton.

        Uses ignoreSynchronousMessagingTimeoutsForTesting to ensure that this test times out if data interaction
        preparation is synchronous, or passes if it is asynchronous.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/cocoa/TestWKWebView.h:
        * TestWebKitAPI/cocoa/TestWKWebView.mm:
        (-[TestWKWebView initWithFrame:]):
        (-[TestWKWebView initWithFrame:configuration:processPoolConfiguration:]):
        (-[TestWKWebView _setUpTestWindow:]):

2017-04-10  Brent Fulgham  <bfulgham@apple.com>

        [WK2][macOS] Block access to Apple Events before launch.
        https://bugs.webkit.org/show_bug.cgi?id=170626
        <rdar://problem/16079334>

        Reviewed by Alexey Proskuryakov.

        Add a new TestWebKitAPI test that fails if Apple Events are sent.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add new files.
        * TestWebKitAPI/Tests/WebKit2/mac/InjectedBundleAppleEvent.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mac/InjectedBundleAppleEvent_Bundle.cpp: Added.
        (TestWebKitAPI::InjectedBundleAppleEventTest::InjectedBundleAppleEventTest):
        (TestWebKitAPI::InjectedBundleAppleEventTest::didCreatePage):

2017-04-10  Guillaume Emont  <guijemont@igalia.com>

        [JSC] Do not run FTL stress tests on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=170684

        Reviewed by Carlos Alberto Lopez Perez.

        run-jsc-stress-tests does not correctly detect MIPS platforms, and its
        logic to detect if the platform supports FTL ignores that MIPS does
        not support FTL. This adds detection of MIPS (with the magic number
        determined empirically) and fixes the determination of whether we
        support FTL.

        * Scripts/run-jsc-stress-tests:

2017-04-10  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Increase estimate for processes run by iOS Simulators
        https://bugs.webkit.org/show_bug.cgi?id=170678
        <rdar://problem/31534061>

        Reviewed by Aakash Jain.

        Previously, it was estimated that each simulated iOS device would run about 100
        processes.  With newer versions of iOS, this is closer to 125.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Increase process estimate from 100 to 125.

2017-04-10  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Misplaced right click menu on web page due to deprecated gtk_menu_popup()
        https://bugs.webkit.org/show_bug.cgi?id=170553

        Reviewed by Michael Catanzaro.

        Use gtk_menu_popup_at_pointer() and gtk_menu_popup_at_rect() when
        building with GTK+ 3.22 or newer. This allows the Wayland GTK+ backend
        to properly position popup menus, and also avoids using functions
        which were deprecated starting at that GTK+ release.

        * MiniBrowser/gtk/BrowserSearchBar.c:
        (searchEntryMenuIconPressedCallback):
        Update MiniBrowser to use gtk_menu_popup_at_pointer().

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

        REGRESSION (r214403): fast/events/drag-to-navigate.html and fast/events/only-valid-drop-targets-receive-file-drop.html failing
        https://bugs.webkit.org/show_bug.cgi?id=170677
        <rdar://problem/31512633>

        Reviewed by Tim Horton.

        Fixes two drag and drop LayoutTests by introducing and enabling a TestOptions switch (enableDragDestinationActionLoad)
        to allow dropping URLs to trigger page navigation.

        * DumpRenderTree/TestOptions.h:
        * DumpRenderTree/TestOptions.mm:
        (TestOptions::TestOptions):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate resetToConsistentStateBeforeTesting:]):
        (-[UIDelegate webView:dragDestinationActionMaskForDraggingInfo:]):

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

        update-webkit-dependency should report $response->message for diagnose
        https://bugs.webkit.org/show_bug.cgi?id=170666

        Reviewed by Alex Christensen.

        * Scripts/update-webkit-dependency: Print $response->message to STDERR if an error happens.

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

        Data interaction on an image enclosed by an anchor should vend the anchor's URL
        https://bugs.webkit.org/show_bug.cgi?id=170660
        <rdar://problem/31043220>

        Reviewed by Tim Horton.

        Adds two new unit tests covering cases where data interaction is triggered from an image nested underneath an
        anchor. In one of the tests, the link has an href, and in the other, its href is missing, in which case we
        should fall back to the image URL instead. Also fixes a related unit test that was trying to check selection
        rects, but should not be.

        See WebCore ChangeLog for more details.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/image-in-link-and-input.html: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove the GDK dependency from ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=85299

        Reviewed by Žan Doberšek.

        Add a cairo only implementation of ImageDiff. We currently have 3 different implementations of ImageDiff: the
        Gdk based one used by GTK+ port, the cairo based one used by WinCairo and the CG based one. Most of the code is
        actually common in all of them, but it's duplicated. So, I've taken advantage of this patch to refactor the
        ImageDiff code to share the common implementation. This patch adds the cross-platform code, and the cairo
        implementation and enables it in the GTK+ port. In follow up patches we can move WinCairo to this implementation
        and also add CG implementation.

        * ImageDiff/CMakeLists.txt:
        * ImageDiff/Cairo.cmake: Added.
        * ImageDiff/ImageDiff.cpp: Added.
        (main):
        * ImageDiff/PlatformGTK.cmake:
        * ImageDiff/PlatformImage.cpp: Added.
        (ImageDiff::PlatformImage::isCompatible):
        (ImageDiff::PlatformImage::difference):
        * ImageDiff/PlatformImage.h: Added.
        * ImageDiff/cairo/PlatformImageCairo.cpp: Added.
        (ImageDiff::PlatformImage::createFromStdin):
        (ImageDiff::PlatformImage::createFromDiffData):
        (ImageDiff::PlatformImage::PlatformImage):
        (ImageDiff::PlatformImage::~PlatformImage):
        (ImageDiff::PlatformImage::width):
        (ImageDiff::PlatformImage::height):
        (ImageDiff::PlatformImage::rowBytes):
        (ImageDiff::PlatformImage::hasAlpha):
        (ImageDiff::PlatformImage::pixels):
        (ImageDiff::PlatformImage::writeAsPNGToStdout):
        * ImageDiff/gtk/ImageDiff.cpp: Removed.

2017-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r214426): [GTK] Test media/video-click-dblckick-standalone.html started to fail in the bots after r214426
        https://bugs.webkit.org/show_bug.cgi?id=170667

        Reviewed by Žan Doberšek.

        In r214666 we disabled modern media controls runtime feature for the GTK+ port, but layout tests still override
        that value.

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::updatePlatformSpecificTestOptionsForTest): Disable modern media controls.

2017-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        WTR: Avoid conversion from platform image to WKImage and then to platform image again when dumping pixel results
        https://bugs.webkit.org/show_bug.cgi?id=170653

        Reviewed by Tim Horton.

        When dumping pixels from a web view snapshot, we create a platform image that is then converted to a WKImage,
        which is a ShareableBitmap, so the image is rendered into a graphics context. Then we immediately extract the
        platform image back from the WKImage to dump the pixels. We could avoid that conversion by taking the web
        snapshot from TestInvocation::dumpPixelsAndCompareWithExpected().

        * WebKitTestRunner/PlatformWebView.h: Add PlatformImage typedef and use it as return value of windowSnapshotImage().
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults): Pass the WKImage to dumpPixelsAndCompareWithExpected() only when pixel
        results were created in the web process.
        * WebKitTestRunner/TestInvocation.h: Make WKImage a default paramater of dumpPixelsAndCompareWithExpected().
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Create the cairo surface from the given WKimage in case
        of web contents snapshot, and use PlatformWebView::windowSnapshotImage() in case of web view snapshot.
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromCGImage): Changed to receive a CGImageRef and renamed.
        (WTR::createCGContextFromImage): Get the CGImageRef from the WKImage and call createCGContextFromCGImage().
        (WTR::paintRepaintRectOverlay): It receives now the image size instead of the WKImage.
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Create the CGContextRef from the WKImage in case of web
        contents snpashot, and use PlatformWebView::windowSnapshotImage() in case of web view snapshot.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Return the cairo surface instead of creating a WKImage. Also use
        RGB24 format to match what mac does (kCGWindowImageShouldBeOpaque).
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Return the CGImageRef instead of creating a WKImage.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage): Ditto.

2017-04-10  Chris Dumez  <cdumez@apple.com>

        Drop Timer::startOneShot() overload taking a double
        https://bugs.webkit.org/show_bug.cgi?id=170659

        Reviewed by Yusuke Suzuki.

        Drop Timer::startOneShot() overload taking a double as people should use Seconds type now.

        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):

2017-04-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add infrastructure to perform actions after an asynchronous position information request finishes
        https://bugs.webkit.org/show_bug.cgi?id=170658
        <rdar://problem/31431450>

        Reviewed by Tim Horton.

        Adds a new test verifying that when a web page is unresponsive, the process of preparing for data interaction
        does not also cause the UI process to spin. We assume here that the call to prepare must be asynchronous, so it
        should complete before the unresponsiveness timeout is triggered.

        See WebKit2 ChangeLog for more details.

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

2017-04-09  Chris Dumez  <cdumez@apple.com>

        Drop Timer::startRepeating() overload taking a double
        https://bugs.webkit.org/show_bug.cgi?id=170656

        Reviewed by Yusuke Suzuki.

        Drop Timer::startRepeating() overload taking a double as people should use Seconds type now.

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

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

        Resync WPT tests up to 23cd07d4685d81024b7440e042f8bbdb33e7ddec
        https://bugs.webkit.org/show_bug.cgi?id=170647

        Reviewed by Sam Weinig.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.fetch): Fetching origin remote in case there is more than one.

2017-04-08  Simon Fraser  <simon.fraser@apple.com>

        Update CSSProperties.json with correct fill-and-stroke status, and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=170643

        Reviewed by Chris Dumez.
        
        Update the CSSProperties.json style checker to allow:
            - comments in codegen_properties
            - obsolete-category and obsolete-url in specification blocks
            - renamed "done" to "supported"
            
        Fix some references to codegen_properties to be codegen-properties.

        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONCSSPropertiesChecker.validate_status_type):
        (JSONCSSPropertiesChecker.validate_property_specification):
        (JSONCSSPropertiesChecker.check_codegen_properties):

2017-04-08  Youenn Fablet  <youenn@apple.com>

        WebRTC tests gardening
        https://bugs.webkit.org/show_bug.cgi?id=170508

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-04-07  Keith Miller  <keith_miller@apple.com>

        Add a PriorityQueue class
        https://bugs.webkit.org/show_bug.cgi?id=170579

        Reviewed by Saam Barati.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/PriorityQueue.cpp: Added.
        (operator  _z ):
        (enqueue):
        (dequeue):
        (TEST):
        (compareMove):

2017-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Replace ES6SampleBench by ARES-6 in run-benchmark
        https://bugs.webkit.org/show_bug.cgi?id=170585

        Reviewed by Saam Barati.

        Updated the plan file for ES6SampleBench to run ARES-6 instead. Also increased the number of iterations
        from 4 to 8 to match teh default, and reduced the number of browser instances to use from 5 to 3.

        * Scripts/webkitpy/benchmark_runner/data/patches/ARES-6.patch: Renamed from ES6SampleBench.patch.
        * Scripts/webkitpy/benchmark_runner/data/plans/ares6.plan: Renamed from es6bench.plan.

2017-04-07  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r211382): Complex text with justification erroneously overflows containers
        https://bugs.webkit.org/show_bug.cgi?id=170399
        <rdar://problem/31442008>

        Reviewed by Simon Fraser.

        Check for the invariant that the sum of the advances is equal to m_totalWidth.

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

2017-04-07  Ryan Haddad  <ryanhaddad@apple.com>

        [ios-simulator] API test WebKit2.WKWebProcessPlugInRangeHandle timing out
        https://bugs.webkit.org/show_bug.cgi?id=167594

        Unreviewed test gardening.

        Disable this test because it is still timing out on the bots.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm:
        (TEST):

2017-04-07  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION (r214553): Allow layout-tests to be run from Xcode without re-directing stdout, stdin and stderr
        https://bugs.webkit.org/show_bug.cgi?id=170601
        <rdar://problem/31492696>

        Reviewed by Simon Fraser.

        * TestRunnerShared/IOSLayoutTestCommunication.cpp:
        (setUpIOSLayoutTestCommunication): Skip TCP setup if no port is in the environment.
        (tearDownIOSLayoutTestCommunication): Only teardown if TCP was used.

2017-04-07  Aakash Jain  <aakash_jain@apple.com>

        Add support for test262 JavaScriptCore tests
        https://bugs.webkit.org/show_bug.cgi?id=170523

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added bot433 and bot434.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunTest262Tests): Added class to run Test262 tests.
        (RunTest262Tests.start): Added.
        (RunTest262Tests.countFailures): Method to count the failures.
        (Test262Factory): Added Test262 factory class.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunTest262TestsTest): Added unit tests.
        (RunTest262TestsTest.assertResults): Helper method.
        (RunTest262TestsTest.test_no_regressions_output): Added test case.
        (test_failure_output): Same. 
        (test_failures_output): Same.

2017-04-07  Caio Lima  <ticaiolima@gmail.com>

        [JSC] Change --debug option to --debugger
        https://bugs.webkit.org/show_bug.cgi?id=170587

        Reviewed by Keith Miller.

        * Scripts/run-jsc:

        This patch is changing the new debugger flag for Tools/Scripts/run-jsc
        to --debugger to avoid shadowing --debug flag used to run JSC with
        Debug build.

2017-04-07  Brent Fulgham  <bfulgham@apple.com>

        WebKit should percent encode single quotes in query strings
        https://bugs.webkit.org/show_bug.cgi?id=170561
        <rdar://problem/7415154>

        Reviewed by Alex Christensen.

        Add a test case for single-quote in the URL query string.

        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:

2017-04-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Make FontWithFeatures test font pass OTS
        https://bugs.webkit.org/show_bug.cgi?id=169788

        Reviewed by Tim Horton.

        OTS, or the OpenType Sanitizer, is a check which tells if fonts are properly formed.
        Previously, our FontWithFeatures test font did not pass this check. This patch updates
        the font to pass the checks. Now, we can use this font on other platforms, and
        contribute the font to the W3C for testing the CSS Fonts level 3 spec.

        * FontWithFeatures/FontWithFeatures/FontCreator.cpp:
        (Generator::appendCFFTable):
        (Generator::Feature::operator<):
        (Generator::appendGSUBTable):
        (Generator::appendOS2Table):
        (Generator::appendFormat4CMAPTable):
        (Generator::appendHEADTable):
        (Generator::appendHHEATable):
        (Generator::NameRecord::operator<):
        (Generator::appendNameSubtable):
        (Generator::appendNAMETable):

2017-04-06  Alexey Proskuryakov  <ap@apple.com>

        Disable flaky WebKit2.ResizeWithHiddenContentDoesNotHang
        for https://bugs.webkit.org/show_bug.cgi?id=170195

        * TestWebKitAPI/Tests/WebKit2Cocoa/AnimatedResize.mm:

2017-04-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215046.

        This change broke internal builds.

        Reverted changeset:

        "WebRTC tests gardening"
        https://bugs.webkit.org/show_bug.cgi?id=170508
        http://trac.webkit.org/changeset/215046

2017-04-06  Youenn Fablet  <youenn@apple.com>

        WebRTC tests gardening
        https://bugs.webkit.org/show_bug.cgi?id=170508

        Reviewed by Eric Carlson.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2017-04-06  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: Simulators failing to install after launch_app times out
        <rdar://problem/31478107>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.launch_app._install_timeout): Raise RuntimeError, not Exception.

2017-04-05  Joseph Pecoraro  <pecoraro@apple.com>

        test262: module test progressions need updated expectations (@@iterator changes)
        https://bugs.webkit.org/show_bug.cgi?id=170535

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:
        Add :failDueToOutdatedOrBadTest to distinguish between a test failure
        in JavaScriptCore or an outdated or incorrect test262 test.

2017-04-05  Joseph Pecoraro  <pecoraro@apple.com>

        Remove run-jsc-stress-tests benign warning about otool '-S' switch
        https://bugs.webkit.org/show_bug.cgi?id=170527

        Reviewed by Aakash Jain.

        * Scripts/run-jsc-stress-tests:
        The switch is not necessary and produces an error.

2017-04-05  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add pid logging for simulator processes
        https://bugs.webkit.org/show_bug.cgi?id=170505

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start.handler): Add pid to exception.
        (SimulatorProcess._start): Ditto.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.launch_app): Log pid when the process fails to launch and when
        a pid is successfully returned.

2017-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214932.

        This change broke an internal build.

        Reverted changeset:

        "[ios-simulator] API test WebKit2.DataDetectionReferenceDate
        timing out"
        https://bugs.webkit.org/show_bug.cgi?id=161967
        http://trac.webkit.org/changeset/214932

2017-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214962.

        Roll r214937 back in because it wasn't at fault for the build
        breakage.

        Reverted changeset:

        "Unreviewed, rolling out r214937."
        https://bugs.webkit.org/show_bug.cgi?id=170365
        http://trac.webkit.org/changeset/214962

2017-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214937.

        This change broke an internal build.

        Reverted changeset:

        "REGRESSION (r202472): Data Detection overwrites existing
        links in detected ranges"
        https://bugs.webkit.org/show_bug.cgi?id=170365
        http://trac.webkit.org/changeset/214937

2017-04-05  Jonathan Bedard  <jbedard@apple.com>

        Increase timeouts for simulator testing
        Unreviewed infrastructure fix.

        r214895 was not sufficient, increasing timeouts again.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Increase timeout from 3 to 10 seconds.

2017-04-05  Aakash Jain  <aakash_jain@apple.com>

        Formatting fix to remove extra space.

        Unreviewed formatting fix.

        * Scripts/webkitdirs.pm:
        (isEmbeddedWebKit): Remove extra space.

2017-04-05  Aakash Jain  <aakash_jain@apple.com>

        Rename isIOSLikeWebKit to isEmbeddedWebKit.

        Rubber-stamped by Alexey Proskuryakov. 

        * Scripts/webkitdirs.pm:
        (isEmbeddedWebKit): Added
        (isIOSLikeWebKit): Deleted.

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

        Fix CMake build.

        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm:
        * TestRunnerShared/spi/CoreGraphicsSPI.h: Removed.
        * TestRunnerShared/spi/CoreGraphicsTestSPI.h: Copied from Tools/TestRunnerShared/spi/CoreGraphicsSPI.h.
        There is a CoreGraphicsSPI.h in WebCore and the CMake build was finding the wrong one.
        Since we just inherit the include paths from WebCore in the CMake build and since this SPI is only used for testing,
        I just renamed CoreGraphicsSPI.h to CoreGraphicsTestSPI.h to avoid any name collisions.
        * WebKitTestRunner/PlatformMac.cmake:
        Add some missing files.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2017-04-05  Keith Miller  <keith_miller@apple.com>

        Add debug option to run-jsc script
        https://bugs.webkit.org/show_bug.cgi?id=170503

        Reviewed by Yusuke Suzuki.

        Adds a new option to the run-jsc script so that when passed
        "--debug" it will wrap the jsc call with an lldb invocation. If
        someone wishes to use a different debugger they can set the
        DEBUGGER environment variable. Additionally, run-jsc now exits
        with the exit status of the jsc call.

        * Scripts/run-jsc:

2017-04-05  Andy Estes  <aestes@apple.com>

        REGRESSION (r202472): Data Detection overwrites existing links in detected ranges
        https://bugs.webkit.org/show_bug.cgi?id=170365
        <rdar://problem/29205721>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (expectLinkCount): Changed to only query links with the x-apple-data-detectors attribute.
        (TEST): Re-enabled the test, which now passes.

2017-04-05  Andy Estes  <aestes@apple.com>

        [ios-simulator] API test WebKit2.WKWebProcessPlugInRangeHandle timing out
        https://bugs.webkit.org/show_bug.cgi?id=167594

        Re-enabled this API test now that webkit.org/b/161967 is fixed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/BundleRangeHandle.mm:
        (TEST):

2017-04-05  Andy Estes  <aestes@apple.com>

        [ios-simulator] API test WebKit2.DataDetectionReferenceDate timing out
        https://bugs.webkit.org/show_bug.cgi?id=161967

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (TEST): Re-enabled WebKit2.DataDetectionReferenceDate.

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

        Various settings in Minibrowser are off by default, and should be on
        https://bugs.webkit.org/show_bug.cgi?id=170465
        rdar://problem/31421543

        Reviewed by Tim Horton.

        Explicitly set preferences that should be on by default to enabled, if they have not been
        set previously.

        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController init]):

2017-04-04  JF Bastien  <jfbastien@apple.com>

        Add JF Bastien as reviewer
        https://bugs.webkit.org/show_bug.cgi?id=170481

        Reviewed by Mark Lam.

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

2017-04-04  Jonathan Bedard  <jbedard@apple.com>

        Increase timeouts for simulator testing

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess._start): Increase timeout from 3 to 6 seconds.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.install_app): Increase timeout from 1 to 3 seconds.

2017-04-04  Tim Horton  <timothy_horton@apple.com>

        [Mac] -[WKWebView findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:] invokes the resultCollector with didWrap = NO even when it wraps
        https://bugs.webkit.org/show_bug.cgi?id=165801
        <rdar://problem/29649535>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:
        (TEST):
        Add some tests for wrapping finds.

2017-04-03  Joseph Pecoraro  <pecoraro@apple.com>

        Add some new patterns to filter-build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=170429

        Reviewed by Alexey Proskuryakov.

        * Scripts/filter-build-webkit:
        (setOutputFormatOption):

2017-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction should register type identifiers in order of priority
        https://bugs.webkit.org/show_bug.cgi?id=170428
        <rdar://problem/30633296>

        Reviewed by Tim Horton.

        Augments existing unit tests to check for the existence and priority of type identifiers in the UIItemProviders
        created upon starting data interaction. Also fixes a race condition in one of the unit tests and adds a new unit
        test for data interaction from a textarea to an input.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (checkTypeIdentifierPrecedesOtherTypeIdentifier):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator sourceItemProviders]):
        (-[DataInteractionSimulator _webView:showCustomSheetForElement:]):

2017-04-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][JHBuild] Update mesa repository url for tarballs
        https://bugs.webkit.org/show_bug.cgi?id=170431

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules:

2017-04-03  Joseph Pecoraro  <pecoraro@apple.com>

        TestWebKitAPI: Warning: Multiple build commands for Ahem.ttf
        https://bugs.webkit.org/show_bug.cgi?id=170430

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/mac/Ahem.ttf: Removed.
        Eliminate one of the copies of Ahem.ttf.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Once eliminated, there is now only one Ahem.ttf that is copied
        to the Resources bundle. Drive-by sort the project file.

2017-04-03  Simon Fraser  <simon.fraser@apple.com>

        Allow MiniBrowser windows to receive local file drags again
        https://bugs.webkit.org/show_bug.cgi?id=170422

        Reviewed by Wenson Hsieh.

        Adopt the new UIDelegate SPI to allow drops.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController _webView:dragDestinationActionMaskForDraggingInfo:]):

2017-04-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][JHBuild] Fetch libvpx from a release tarball instead of git
        https://bugs.webkit.org/show_bug.cgi?id=170426

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules:

2017-04-03  Nan Wang  <n_wang@apple.com>

        AX: Expose link children when doing search predication on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170424
        <rdar://problem/31413335>

        Reviewed by Chris Fleizach.

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

2017-04-03  Brian Burg  <bburg@apple.com>

        run-safari should support launching with custom language and locale
        https://bugs.webkit.org/show_bug.cgi?id=170397

        Reviewed by Alexey Proskuryakov.

        Hook up -AppleLanguages and -AppleLocale to command line options.

        * Scripts/webkitdirs.pm:
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded):
        (argumentsForRunAndDebugMacWebKitApp):

2017-04-03  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Provide option to skip install
        https://bugs.webkit.org/show_bug.cgi?id=170344

        Reviewed by Alexey Proskuryakov.

        Installing can take time for on device testing.  Provide an option to skip install
        and use whatever driver is currently installed on the device or simulator.

        * Scripts/webkitpy/port/base.py:
        (Port.check_build): Do not check driver if skipping install.
        * Scripts/webkitpy/port/factory.py:
        (platform_options): Add '--no-install' option.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.setup_test_run): Check install option before installing.

2017-04-03  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Update spec tests
        https://bugs.webkit.org/show_bug.cgi?id=170361

        Rubber-stamped by Saam Barati.

        Update the runner to know the new wasm spec test harness code.

        * Scripts/run-jsc-stress-tests:

2017-04-01  Alexey Proskuryakov  <ap@apple.com>

        Rolling back <https://trac.webkit.org/r214697>, as it made WebKit2.DataDetectionReferenceDate time out.

        Was REGRESSION (r202472): Data Detection overwrites existing links in detected ranges
        https://bugs.webkit.org/show_bug.cgi?id=170365

        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:

2017-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Mac cmake buildfix after 214586.
        https://bugs.webkit.org/show_bug.cgi?id=170381

        Unreviewed speculative buildfix.

        * WebKitTestRunner/PlatformMac.cmake:

2017-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative Mac cmake buildfix after r214586, just for fun.
        https://bugs.webkit.org/show_bug.cgi?id=161675

        * WebKitTestRunner/PlatformMac.cmake:

2017-03-31  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add target host concept
        https://bugs.webkit.org/show_bug.cgi?id=170186
        <rdar://problem/31301797>

        Reviewed by Alexey Proskuryakov.

        Adding the idea of a target host. Target hosts are objects conforming to the
        structure of the SystemHost object in Scripts/webkitpy/common/system/systemhost.py
        Target hosts are the hosts associated with a worker process.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.map_base_host_path): Convert a path from an absolute path on the base
        host to an absolute path on this host.
        (FileSystem.move_to_base_host): Move file from this host to the base host.
        (FileSystem.move_from_base_host): Move file from the base host to this host.
        (FileSystem.copy_to_base_host): Copy file from this host to the base host.
        (FileSystem.copy_from_base_host): Copy file from the base host to this host.
        * Scripts/webkitpy/common/system/filesystem_mock.py:
        (MockFileSystem.map_base_host_path): Convert a path from an absolute path on the base
        host to an absolute path on this host.
        (MockFileSystem.move_to_base_host): Move file from this host to the base host.
        (MockFileSystem.move_from_base_host): Move file from the base host to this host.
        (MockFileSystem.copy_to_base_host): Copy file from this host to the base host.
        (MockFileSystem.copy_from_base_host): Copy file from the base host to this host.
        * Scripts/webkitpy/port/base.py:
        (Port.target_host): Return host determined by worker number.
        (Port.abspath_for_test): Accept optional target_host argument to return location
        of test on a target host.
        (Port._driver_tempdir): Accept optional target_host argument to return a temporary
        directory on a target host.
        (Port.sample_process): Accept optional target_host argument to sample process on
        a target host.
        * Scripts/webkitpy/port/darwin.py:
        (DarwinPort.sample_process): Run sample process on target host.
        (DarwinPort.sample_file_path): Accept directory for file.
        (DarwinPort.spindump_file_path): Ditto.
        * Scripts/webkitpy/port/darwin_testcase.py:
        (DarwinTest.test_spindump): Check file movement.
        (DarwinTest.test_sample_process): Ditto.
        (DarwinTest.test_sample_process_exception):
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Add and set self._target_host variable.
        (Driver._start): Pass target host to _driver_tempdir().
        (Driver.stop): Call the target host's rmtree.
        (Driver._check_for_driver_timeout): Pass target host to sample_process.
        (Driver._check_for_driver_crash_or_unresponsiveness): Ditto.
        (Driver._command_from_driver_input): Pass target host to abspath_for_test and map
        layout test directory to target host.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort):
        (IOSPort.target_host): Replaced device_for_worker_number.
        (IOSPort.setup_test_run): Replace device_for_worker_number with target_host.
        (IOSPort.device_for_worker_number): Replaced with target_host.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Accept target_host instead of worker_number.
        (ServerProcess._start): Replace _host with _target_host.
        (ServerProcess._handle_timeout): Ditto.
        (ServerProcess._kill): Ditto.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.__init__): Accept target_host instead of worker_number.
        (SimulatorProcess._start): Replace _device with _target_host.
        (SimulatorProcess.stop): Ditto.
        (SimulatorProcess._kill): Deleted.

2017-03-31  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed fix after r214569
        https://bugs.webkit.org/show_bug.cgi?id=170255

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort.clean_up_test_run): Check if the device is defined before teardown.

2017-03-31  Andy Estes  <aestes@apple.com>

        REGRESSION (r202472): Data Detection overwrites existing links in detected ranges
        https://bugs.webkit.org/show_bug.cgi?id=170365
        <rdar://problem/29205721>

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm:
        (expectLinkCount): Changed to only query links with the x-apple-data-detectors attribute.
        (TEST): Re-enabled the test, which now passes.

2017-03-31  Tim Horton  <timothy_horton@apple.com>

        Mail can get stuck underneath FindController::findStringMatches after searching in a long message
        https://bugs.webkit.org/show_bug.cgi?id=170326
        <rdar://problem/30330395>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:
        (TEST):

2017-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WTR crashes in GTK+ port after r214413.

        Fixes: http/tests/ssl/upgrade-origin-usage.html
               http/tests/websocket/tests/hybi/network-process-crash-error.html
               http/tests/websocket/tests/hybi/simple-wss.html

        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformContext): Return the context.

2017-03-30  Sam Weinig  <sam@webkit.org>

        Expose the WKView SPI, _prepareForMoveToWindow:withCompletionHandler as WKWebView SPI
        https://bugs.webkit.org/show_bug.cgi?id=170315

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/PrepareForMoveToWindow.mm: Added.
        Add test showing the completion handler is called.

2017-03-30  Filip Pizlo  <fpizlo@apple.com>

        Air should support linear scan for optLevel<2
        https://bugs.webkit.org/show_bug.cgi?id=170161

        Reviewed by Saam Barati.
        
        This makes us run a bunch of JS tests at optLevel=1 to force testing of this new compiler
        pipeline.

        * Scripts/run-jsc-stress-tests:

2017-03-30  Aakash Jain  <aakash_jain@apple.com>

        Support tvOS and watchOS in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=170267

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (determineXcodeSDK): Evaluate sdk for tvos and watchos.
        (xcodeSDKPlatformName): Added support for tvos and watchos.
        (determinePortName): Same.
        (isAppleCocoaWebKit): Same.
        (willUseAppleTVDeviceSDK): Added.
        (willUseAppleTVSimulatorSDK): Added.
        (willUseWatchDeviceSDK): Added.
        (willUseWatchSimulatorSDK): Added.
        (isTVOSWebKit): Added.
        (isWATCHOSWebKit): Added.
        (isIOSLikeWebKit): Added.

2017-03-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Touches should not cancel when showing a custom action sheet while data interaction is active
        https://bugs.webkit.org/show_bug.cgi?id=170291
        <rdar://problem/31301388>

        Reviewed by Tim Horton.

        Adds support for testing how the custom action sheet presentation codepath interacts with data interaction, as
        well as a new unit test. In this case, we force data interaction to fail if touches are canceled on the
        shared UIApplication, and verify that data interaction completes successfully.

        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/ios/DataInteractionSimulator.h:
        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulatorApplication _cancelAllTouches]):
        (-[DataInteractionSimulator initWithWebView:]):
        (-[DataInteractionSimulator simulateAllTouchesCanceled:]):
        (-[DataInteractionSimulator runFrom:to:]):
        (-[DataInteractionSimulator _advanceProgress]):
        (-[DataInteractionSimulator _webView:showCustomSheetForElement:]):

2017-03-30  Per Arne Vollan  <pvollan@apple.com>

        [Win] Pass close_fds = True in Python popen call.
        https://bugs.webkit.org/show_bug.cgi?id=170172

        Reviewed by Brent Fulgham.

        This was previously not supported on Windows, but in Python 2.7.10 it is.

        * Scripts/webkitpy/common/system/executive.py:
        (Executive._should_close_fds):
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._start):

2017-03-30  Aakash Jain  <aakash_jain@apple.com>

        Change my status to be a WebKit reviewer.

        Unreviewed status update edit.

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

2017-03-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Change my status to be a WebKit reviewer.

        Unreviewed status update edit.

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

2017-03-29  Tim Horton  <timothy_horton@apple.com>

        Swipe gesture tests don't work on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=161675
        <rdar://problem/23379930>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::platformPlayBackEventStream):
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.h: Copied from Tools/DumpRenderTree/mac/UIScriptControllerMac.mm.
        * TestRunnerShared/EventSerialization/mac/EventSerializerMac.mm: Added.
        (eventIsOfType):
        (eventIsOfTypes):
        (eventIsOfGestureType):
        (eventIsOfGestureTypes):
        (+[EventSerializer dictionaryForEvent:relativeToTime:]):
        (+[EventSerializer createEventForDictionary:inWindow:relativeToTime:]):
        (+[EventSerializer playEventStream:inWindow:completionHandler:]):
        * TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.h: Copied from Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm.
        * TestRunnerShared/EventSerialization/mac/SharedEventStreamsMac.mm: Added.
        (beginSwipeBackEventStream):
        (completeSwipeBackEventStream):
        * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
        * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::playBackEventStream):
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        (WTR::UIScriptController::platformPlayBackEventStream):
        (WTR::UIScriptController::platformClearAllCallbacks): Deleted.
        * TestRunnerShared/UIScriptContext/UIScriptController.h:
        * TestRunnerShared/spi/CoreGraphicsSPI.h: Added.
        * TestRunnerShared/spi/IOKitSPI.h: Renamed from Tools/WebKitTestRunner/ios/IOKitSPI.h.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::playBackEvents):
        (WTR::UIScriptController::beginBackSwipe):
        (WTR::UIScriptController::completeBackSwipe):
        (WTR::UIScriptController::platformPlayBackEventStream):

2017-03-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Robust test clean-up
        https://bugs.webkit.org/show_bug.cgi?id=170255

        Reviewed by Alexey Proskuryakov.

        On-device testing is the motivation for this change.  Failure to run clean-up functions can
        result in zombie processes, residual NFS mounts and other undesirable remnants from a failed
        test run.  Make an effort to clean-up even if exceptions are thrown during set-up or clean-up.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Clean up test run if set-up fails.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.clean_up_test_run): Continue cleaning up devices even after an exception is thrown.

2017-03-29  Jonathan Bedard  <jbedard@apple.com>

        Simulator testing stops after the first crash
        <rdar://problem/31325362>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice):
        (SimulatedDevice.launch_app): Increase timeout when attempting to launch app.

2017-03-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Standardize web-server port definitions
        https://bugs.webkit.org/show_bug.cgi?id=170144
        <rdar://problem/31284026>

        Reviewed by Daniel Bates.

        Default web-server ports should be declared in global variables.
        Add functions to web-servers which return the ports these servers
        are using so that other tools can forward them.

        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Use shared constants in http_server_base.py.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        (TestLayoutTestApacheHttpd.test_start_cmd): Check port_to_forward for expected values.
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__): Use shared constants in http_server_base.py.
        (Lighttpd._prepare_config): Ditto.
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase): Add default port constants.
        (HttpServerBase.ports_to_forward): Add function to return ports used for http server.
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd): Check port_to_forward for expected values.
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
         (WebPlatformTestServer.ports_to_forward): Add function to return ports used for web-platform tests.
        * Scripts/webkitpy/layout_tests/servers/websocket_server.py:
        (PyWebSocket): Make default port values public.
        (PyWebSocket.__init__): Use public default port.
        (PyWebSocket.ports_to_forward): Return port used in an array.
        * Scripts/webkitpy/port/base.py:
        (Port.to.ports_to_forward): Return all ports used the various web-servers managed by the port object.
        (Port.to.start_websocket_server): Use PyWebSocket port constants.

2017-03-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Links with empty hrefs should not be drag sources
        https://bugs.webkit.org/show_bug.cgi?id=170241
        <rdar://problem/31305505>

        Reviewed by Tim Horton.

        Adds a new API test: DataInteractionTests.LinkWithEmptyHREF.

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

        Expose the current phase of the data interaction simulator for verifying behaviors in unit tests.

        * TestWebKitAPI/ios/DataInteractionSimulator.mm:
        (-[DataInteractionSimulator phase]):

2017-03-29  Jonathan Bedard  <jbedard@apple.com>

        Use TCP instead of FIFOs for Simulator/Device communication
        https://bugs.webkit.org/show_bug.cgi?id=169419
        <rdar://problem/30949615>

        Reviewed by Alexey Proskuryakov.

        Using TCP instead of FIFOs when communicating with devices allows the device being tested
        to be on a different machine then the one handling the management of the test run.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpRenderTree): Call setUp/tearDownIOSLayoutTestCommunication() instead of using FIFOs.
        * Scripts/webkitpy/port/device.py:
        (Device.__init__): Initialize the listening_socket.
        (Device.listening_port): Return port of listening socket.
        (Device.prepare_for_testing): Open listening socket on an open port, prepare platform device
        fro testing.
        (Device.finished_testing): Close listening socket associated with this device, call the
        platform device's finished_testing function if it exists.
        * Scripts/webkitpy/port/ios.py:
        (IOSPort.setup_test_run): Prepare each device for testing.
        (IOSPort.clean_up_test_run): Notify each device that testing has completed.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Work around device persistence bug.
        (IOSSimulatorPort.__init__): Ditto.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess):
        (SimulatorProcess.NonBlockingFileFromSocket): Add to work around shortcomings in
        Python 2’s makefile.
        (SimulatorProcess.NonBlockingFileFromSocket.__init__): Initialize file with socket.
        (SimulatorProcess.ReadFileSocket.close): Close file and then socket;
        (SimulatorProcess.__init__): Pass TCP port over environment, remove FIFO names.
        (SimulatorProcess.__getattr__): Expose all file attributes.
        (SimulatorProcess._accept_connection_create_file): Wait for connection from server and
        create and return a file-like object from the incoming connection.
        (SimulatorProcess._start): Use TCP connections instead of FIFOs.
        (SimulatorProcess._start.handler): Output server port in timeout exception.
        (SimulatorProcess._reset): Deleted.
        * TestRunnerShared/IOSLayoutTestCommunication.cpp: Added.
        (connectToServer): Return socket connected to the provided server address.
        (setupiOSLayoutTestCommunication): Connect stdin, stdout and stderr as socket to a
        TCP server running on localhost.
        (tearDownIOSLayoutTestCommunication): Close stdin, stdout and stderr TCP sockets.
        * TestRunnerShared/IOSLayoutTestCommunication.h: Added.
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformInitialize): Call setUpIOSLayoutTestCommunication()
        instead of using FIFOs.
        (WTR::TestController::platformDestroy): Call tearDownIOSLayoutTestCommunication().

2017-03-29  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Add IOSDevicePort and IOSPort tests
        https://bugs.webkit.org/show_bug.cgi?id=170206
        <rdar://problem/31308364>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/darwin_testcase.py: Removed unused import.
        * Scripts/webkitpy/port/ios_device_unittest.py: Added.
        (iosDeviceTest): Contains tests for the IOSDevicePort.
        (iosDeviceTest.make_port): Creates an IOSDevicePort with arguments.
        (iosDeviceTest.test_operating_system): Check for the correct operating system.
        * Scripts/webkitpy/port/ios_simulator_unittest.py: Moved from Tools/Scripts/webkitpy/port/ios_unittest.py.
        (iosSimulatorTest): Inherit from ios_testcase.
        (iosSimulatorTest.make_port): Ditto.
        (iosSimulatorTest.test_get_crash_log): Ditto.
        * Scripts/webkitpy/port/ios_testcase.py: Added.
        (iOSTest): Contains shared tests for the IOSDevicePort and IOSSimulatorPort.
        (iOSTest.test_driver_name): Tests for iOS app driver.
        (iOSTest.test_baseline_searchpath): Check that ios and ios-wk1 are in the baseline search path.
        * Scripts/webkitpy/port/ios_unittest.py: Moved to ios_simulator_unittest.py.
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase): Rename is_simulator to disable_setup to more accurately describe it's meaning.
        (PortTestCase.test_diff_image): Use disable_setup instead of is_simulator.
        (PortTestCase.test_diff_image_crashed): Ditto.

2017-03-28  Jason Marcell  <jmarcell@apple.com>

        Fix `index-expected.txt` for dashboard test results.
        https://bugs.webkit.org/show_bug.cgi?id=170214

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index-expected.txt:

2017-03-28  Alexey Proskuryakov  <ap@apple.com>

        Bot watcher's dashboard has separate settings for "mac" and "macos"
        https://bugs.webkit.org/show_bug.cgi?id=170164

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js:
        (Settings.prototype.parsePlatformFamily): Aded a special case for "macos".

2017-03-28  Alexey Proskuryakov  <ap@apple.com>

        Fix dashboard test results on the dashboard
        https://bugs.webkit.org/show_bug.cgi?id=170158

        Reviewed by Tim Horton.

        Link to result diff instead of stdio. Looking at the diff, I wonder if it can be
        further improved, as it's not super readable, but stdio is entirely useless in this context.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.dashboardTestResultsURLForIteration): Generate formatted diff link.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        Fixed a typo in step name, so that it's actually treated as productive.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype.update):
        (BuildbotTesterQueueView.prototype._presentPopoverForGenericTestFailures):
        Added special handling for dashboard test results.

2017-03-28  Aakash Jain  <aakash_jain@apple.com>

        Fix Dashboard test _presentPopoverForJavaScriptCoreTestRegressions
        https://bugs.webkit.org/show_bug.cgi?id=170193

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js:
        Fixed the order of arguments.

2017-03-28  Aakash Jain  <aakash_jain@apple.com>

        Dashboard tests fails to fetch the revision from commits
        https://bugs.webkit.org/show_bug.cgi?id=170191

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockTrac.js:
        Added recordedCommitIndicesByRevisionNumber.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js:
        (setup): Populated trac.recordedCommitIndicesByRevisionNumber since the dashboard code uses this variable.

2017-03-28  Timothy Horton  <timothy_horton@apple.com>

        Safari crashes when attempting to close tab that is displaying PDF
        https://bugs.webkit.org/show_bug.cgi?id=170201
        <rdar://problem/31242019>

        Reviewed by Wenson Hsieh.

        * TestWebKitAPI/Tests/WebKit2Cocoa/DoAfterNextPresentationUpdateAfterCrash.mm:
        (TEST):
        Add a test for doAfterNextStablePresentationUpdate just like the existing
        non-stable one.

2017-03-28  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use host pattern for devices
        https://bugs.webkit.org/show_bug.cgi?id=170121

        Reviewed by Daniel Bates.

        Devices should be treated like hosts throughout webkitpy
        so that more code can be re-used.  Add the needed properties
        and use executive over custom implemented polling/killing
        functions.

        * Scripts/webkitpy/port/device.py:
        (Device):
        (Device.executive): Add optional executive property.
        (Device.filesystem): Add optional filesystem property.
        (Device.user): Add optional user property.
        (Device.platform): Add optional platform property.
        (Device.workspace): Add optional workspace property.
        (Device.poll): Deleted.
        * Scripts/webkitpy/port/simulator_process.py:
        (SimulatorProcess.Popen.poll): Use the devices executive.
        (SimulatorProcess.stop): Ditto.
        (SimulatorProcess._kill): Ditto.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice.__init__): Add executive, filesystem, user, platform
        and workspace to the platform device.
        (SimulatedDevice.poll): Deleted.

2017-03-28  Aakash Jain  <aakash_jain@apple.com>

        Dashboard test fails with error: latestIterationGetter is not a function
        https://bugs.webkit.org/show_bug.cgi?id=170167

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js:
        (this.view._latestProductiveIteration): Configure _latestProductiveIteration in setup.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v8.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v7.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v6.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v5.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v4.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v3.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test v2.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        Another test.

2017-03-27  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/30949128>
        Update build.webkit.org to use port 16000 for PBChangeSource.
        
        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:

2017-03-27  Jason Marcell  <jmarcell@apple.com>

        Bots should run the dashboard tests
        https://bugs.webkit.org/show_bug.cgi?id=168994

        Reviewed by Daniel Bates and David Kilzer.

        We pull the `--results-directory` argument value out so that `RunDashboardTests` can override it so that we can separately run the dashboard layout tests.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests): Define a class variable called resultDirectory for the `--results-directory` argument so that subclasses can override this if needed.
        (RunWebKitTests.start): Set the `--results-directory` argument value to the value of self.resultDirectory.
        (RunDashboardTests): Subclass of RunWebKitTests in which we run the layout tests for the Bot Watcher's Dashboard.
        (RunDashboardTests.start): Override the `--layout-tests-directory` to point to the dashboard layout tests.
        (ExtractTestResults.addCustomURLs): Update the current results URL label to indicate that it links to layout tests results and add a new link to link to dashboard layout test results.
        (TestFactory.__init__): Update unit tests to account for new RunDashboardTests step.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:

2017-03-27  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Look for 'ios' test expectations for IOSPorts
        https://bugs.webkit.org/show_bug.cgi?id=169413

        Reviewed by Alexey Proskuryakov.

        Test expectations for iOS tests should include the 'ios' folder.  Modify
        default_baseline_search_path to include 'ios' folder and derivatives for
        IOSPort.

        * Scripts/webkitpy/port/ios.py:
        (IOSPort._generate_all_test_configurations): Moved from IOSSimulatorPort.
        (IOSPort.default_baseline_search_path): Add ios expectations along with port specific expectations.
        (IOSPort.test_expectations_file_position): Added for testing.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._generate_all_test_configurations): Moved to IOSPort.
        (IOSSimulatorPort.default_baseline_search_path): Moved to IOSPort.

2017-03-27  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: Reseting _device_map on each child process
        <rdar://problem/31274476>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort): Add _DEVICE_MAP class variable.
        (IOSSimulatorPort.__init__): Use shared class variable
        (IOSSimulatorPort._device_for_worker_number_map): Use _DEVICE_MAP class variable
        (IOSSimulatorPort._create_devices): Ditto.
        (IOSSimulatorPort._quit_ios_simulator): Ditto.
        (IOSSimulatorPort.clean_up_test_run): Ditto.

2017-03-27  Jonathan Bedard  <jbedard@apple.com>

        REGRESSION: Failing to iterate over Simulator.managed_devices map
        <rdar://problem/31274476>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort._create_devices): Iterate through managed_devices by worker number.

2017-03-27  Alex Christensen  <achristensen@webkit.org>

        Make WebSockets work in network process
        https://bugs.webkit.org/show_bug.cgi?id=169930

        Reviewed by Youenn Fablet.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Add terminateNetworkProcess for the new test
        http/tests/websocket/tests/hybi/network-process-crash-error.html
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAllowsAnySSLCertificate):
        (WTR::TestRunner::terminateNetworkProcess):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setAllowsAnySSLCertificate):
        (WTR::TestController::terminateNetworkProcess):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformContext):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformContext):
        (WTR::TestController::platformLibraryPathForTesting):
        Add some infrastructure for http/tests/websocket/tests/hybi/simple-wss.html
        which calls testRunner.setAllowsAnySSLCertificate.  It used to only be effective
        for the WebProcess, but SocketStreamHandleImpl::createStreams is now in the NetworkProcess,
        and we need its call to Settings::allowsAnySSLCertificate to be loosened for this test,
        which tests that wss works, but our test certificate has an invalid certificate chain.
        We want production software to not have the ability to have its security weakened, so this
        is a test code path that is only implemented in WebKitTestRunner.

2017-03-25  Jonathan Bedard  <jbedard@apple.com>

        webkitpy: Use generalized device instead of platform specific one
        https://bugs.webkit.org/show_bug.cgi?id=170078

        Reviewed by Daniel Bates.

        SimulatedDevice is re-created each time 'xcrun simctl list' is called.  Device
        should remain persistent.  Changing Device to a more explicit interface.
        SimulatedDevice no longer inherits from Device and IOSSimulator returns Devices
        wrapping SimulatedDevices.

        * Scripts/webkitpy/port/device.py: Added.
        (Device):
        (Device.__init__): Construct with platform device.
        (Device.install_app): Install app at app path on platform device.
        (Device.launch_app): Launch app with bundle ID on platform device.
        (Device.poll): Poll platform device.
        (Device.udid): Access platform device UDID.
        (Device.__nonzero__): Check if instantiated with a valid platform device.
        (Device.__eq__): Compare by udid.
        (Device.__ne__): Ditto.
        (Device.__repr__): Print out platform_device representation.
        * Scripts/webkitpy/port/ios_simulator.py:
        (IOSSimulatorPort.__init__): Initialize the _device_map to an empty dictionary.
        (IOSSimulatorPort._device_for_worker_number_map):  Return self._device_map.
        (IOSSimulatorPort._create_simulators): Call Simulator.managed_devices directly.
        (IOSSimulatorPort._create_devices): Place Simulator.managed_devices into the
        device map.
        (IOSSimulatorPort._quit_ios_simulator): Reset self._device_map.
        * Scripts/webkitpy/xcode/device.py: Removed.
        * Scripts/webkitpy/xcode/simulated_device.py:
        (SimulatedDevice):
        (SimulatedDevice.__init__): Move host, name and did to SimulatedDevice.
        (SimulatedDevice.__eq__): Compare two simulated devices.
        (SimulatedDevice.__ne__): Ditto.
        (SimulatedDevice.__repr__): Print name and udid.

2017-03-25  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] No value returned from PrintCustomWidgetTest::createWebKitPrintOperation() in TestPrinting.cpp
        https://bugs.webkit.org/show_bug.cgi?id=170059

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp: Use "void" as return type in the declaration,
        the only use of the method in this same file ignores the returned value anyway.

2017-03-24  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        webkitpy should be able to run API tests
        https://bugs.webkit.org/show_bug.cgi?id=170028

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.run_api_tests_command): Added.
        * Scripts/webkitpy/port/base.py:
        (Port.api_results_directory): Added.
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Check if we should be running API tests.
        (RunTests._run_api_tests): Generate script to run API tests with json output.
        * Scripts/webkitpy/tool/steps/steps_unittest.py: Unit tests.

2017-03-24  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add JSON results for API tests
        https://bugs.webkit.org/show_bug.cgi?id=170021

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-api-tests:
        (runTestsBySuite): Appends failures and timeouts to JSON data.
        (writeJsonDataIfApplicable): Writes JSON data to a file.

2017-03-24  Lucas Forschler  <lforschler@apple.com>

        update committer_auth.py to be python 2.7 compliant
        https://bugs.webkit.org/show_bug.cgi?id=170063
        
        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/committer_auth.py:
        (CommitterAuth.authenticate):
            convert e.message to e.args[0]

2017-03-24  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        webkitpy: Parse JSON results from run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=170062

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/net/apitestresults.py: Added.
        (APITestResults): Structure to represent API test results.
        (APITestResults.__init__):
        (APITestResults.intersection): Return the failures common to both sets of results.
        (APITestResults.results_from_string): Create an APITestResults object from a JSON results string.
        (APITestResults.equals): Return True if both results were the same.
        (APITestResults.is_subset): Return True if failing tests are a subset of the other failing tests.
        (APITestResults.all_passed): Return True if everything passed.
        (APITestResults.failing_tests): List of tests that didn't pass.
        (APITestResults.did_exceed_test_failure_limit): Always False.
        * Scripts/webkitpy/common/net/apitestresults_unittest.py: Added.
        (APITestResultsTest): Unit tests.
        * Scripts/webkitpy/tool/bot/apitestresultsreader.py: Added.
        (APITestResultsReader): Read contents of JSON results file.

2017-03-24  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: Content Blocker: Blocking "a[href*=randomString]" doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=169167

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::TEST_F):
        Test an example of a selector that was incorrectly determined to be invalid.

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

        Increase timeout for booting simulators.
        <rdar://problem/31080009>

        Unreviewed infrastructure fix.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.wait_until_device_is_booted): Increase timeout.
        (Simulator.wait_until_device_is_in_state): Increase timeout.

2017-03-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/javascript-dialogs after r214277.

        Since r214277 beforeunload events are not fired unless there's some user interaction, so we need to simulate it
        in our unit tests to work.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):

2017-03-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add MIMETypeRegistry implementation using xdgmime and remove the GTK+ one
        https://bugs.webkit.org/show_bug.cgi?id=170001

        Reviewed by Michael Catanzaro.

        Ignore style of xdgmime sources.

        * Scripts/webkitpy/tool/steps/checkstyle.py:

2017-03-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Dragging on a large image should not revert to a file icon if data interaction is enabled
        https://bugs.webkit.org/show_bug.cgi?id=170018
        <rdar://problem/31184508>

        Reviewed by Tim Horton.

        Add new tests for data interaction. LargeImageToTargetDiv verifies the change made in this patch, while
        AttachmentElementItemProviders was a test that was previously removed due to <rdar://problem/31038797>.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/large-red-square.png: Added.
        * TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
        (TestWebKitAPI::TEST):

2017-03-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        Update WinCairoRequirements.zip
        https://bugs.webkit.org/show_bug.cgi?id=169950

        Reviewed by Alex Christensen.

        * Scripts/update-webkit-wincairo-libs: Replace $winCairoLibsURL.

== Rolled over to ChangeLog-2017-03-23 ==
